From 86c2512c6222a3bc309591c684be232b3f3ec826 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Tue, 23 Mar 2021 15:18:03 +0100 Subject: [PATCH 01/67] WIP Signed-off-by: Thomas Citharel --- config/config.exs | 8 +- .../components/Activity/GroupActivityItem.vue | 4 +- .../Activity/MemberActivityItem.vue | 2 +- lib/graphql/resolvers/activity.ex | 43 +- lib/mobilizon/activities/activities.ex | 7 + lib/service/activity/activity.ex | 45 ++ lib/service/activity/comment.ex | 7 +- lib/service/activity/discussion.ex | 7 +- lib/service/activity/event.ex | 10 +- lib/service/activity/group.ex | 8 +- lib/service/activity/member.ex | 12 +- lib/service/activity/{posts.ex => post.ex} | 7 +- lib/service/activity/resource.ex | 11 +- lib/service/notifier/email.ex | 31 ++ lib/service/notifier/notifier.ex | 31 ++ lib/service/notifier/push.ex | 38 ++ lib/service/rich_media/parsers/fallback.ex | 4 + lib/service/workers/activity_builder.ex | 34 +- lib/service/workers/digest_notifier_worker.ex | 14 + lib/web/email/activity.ex | 73 +++ lib/web/mobilizon_web.ex | 1 + .../activity/_comment_activity_item.html.eex | 70 +++ .../activity/_comment_activity_item.text.eex | 30 ++ .../_discussion_activity_item.html.eex | 66 +++ .../_discussion_activity_item.text.eex | 30 ++ .../activity/_event_activity_item.html.eex | 72 +++ .../activity/_event_activity_item.text.eex | 31 ++ .../activity/_group_activity_item.html.eex | 32 ++ .../activity/_group_activity_item.text.eex | 13 + .../activity/_member_activity_item.html.eex | 69 +++ .../activity/_member_activity_item.text.eex | 49 ++ .../activity/_post_activity_item.html.eex | 40 ++ .../activity/_post_activity_item.text.eex | 18 + .../activity/_resource_activity_item.html.eex | 118 +++++ .../activity/_resource_activity_item.text.eex | 50 ++ lib/web/templates/email/email.html.eex | 11 +- .../email/email_direct_activity.html.eex | 151 ++++++ .../email/email_direct_activity.text.eex | 21 + lib/web/views/email_view.ex | 9 + mix.exs | 1 + mix.lock | 1 + priv/gettext/activity.pot | 230 ++++++++ priv/gettext/ar/LC_MESSAGES/activity.po | 239 +++++++++ priv/gettext/ar/LC_MESSAGES/default.po | 5 + priv/gettext/be/LC_MESSAGES/activity.po | 233 ++++++++ priv/gettext/be/LC_MESSAGES/default.po | 5 + priv/gettext/ca/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/ca/LC_MESSAGES/default.po | 5 + priv/gettext/cs/LC_MESSAGES/activity.po | 233 ++++++++ priv/gettext/cs/LC_MESSAGES/default.po | 5 + priv/gettext/de/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/de/LC_MESSAGES/default.po | 5 + priv/gettext/default.pot | 5 + priv/gettext/en/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/en/LC_MESSAGES/default.po | 5 + priv/gettext/es/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/es/LC_MESSAGES/default.po | 495 ++++++++--------- priv/gettext/fi/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/fi/LC_MESSAGES/default.po | 5 + priv/gettext/fr/LC_MESSAGES/activity.po | 240 +++++++++ priv/gettext/fr/LC_MESSAGES/default.po | 498 +++++++++--------- priv/gettext/gl/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/gl/LC_MESSAGES/default.po | 495 ++++++++--------- priv/gettext/hu/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/hu/LC_MESSAGES/default.po | 5 + priv/gettext/it/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/it/LC_MESSAGES/default.po | 484 ++++++++--------- priv/gettext/it/LC_MESSAGES/errors.po | 207 ++++---- priv/gettext/ja/LC_MESSAGES/activity.po | 229 ++++++++ priv/gettext/ja/LC_MESSAGES/default.po | 5 + priv/gettext/nl/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/nl/LC_MESSAGES/default.po | 5 + priv/gettext/nn/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/nn/LC_MESSAGES/default.po | 5 + priv/gettext/oc/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/oc/LC_MESSAGES/default.po | 5 + priv/gettext/pl/LC_MESSAGES/activity.po | 233 ++++++++ priv/gettext/pl/LC_MESSAGES/default.po | 5 + priv/gettext/pt/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/pt/LC_MESSAGES/default.po | 5 + priv/gettext/pt_BR/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/pt_BR/LC_MESSAGES/default.po | 5 + priv/gettext/ru/LC_MESSAGES/activity.po | 233 ++++++++ priv/gettext/ru/LC_MESSAGES/default.po | 495 ++++++++--------- priv/gettext/sv/LC_MESSAGES/activity.po | 231 ++++++++ priv/gettext/sv/LC_MESSAGES/default.po | 5 + .../service/workers/activity_builder_test.exs | 61 +++ 87 files changed, 7816 insertions(+), 1387 deletions(-) rename lib/service/activity/{posts.ex => post.ex} (90%) create mode 100644 lib/service/notifier/email.ex create mode 100644 lib/service/notifier/notifier.ex create mode 100644 lib/service/notifier/push.ex create mode 100644 lib/service/workers/digest_notifier_worker.ex create mode 100644 lib/web/email/activity.ex create mode 100644 lib/web/templates/email/activity/_comment_activity_item.html.eex create mode 100644 lib/web/templates/email/activity/_comment_activity_item.text.eex create mode 100644 lib/web/templates/email/activity/_discussion_activity_item.html.eex create mode 100644 lib/web/templates/email/activity/_discussion_activity_item.text.eex create mode 100644 lib/web/templates/email/activity/_event_activity_item.html.eex create mode 100644 lib/web/templates/email/activity/_event_activity_item.text.eex create mode 100644 lib/web/templates/email/activity/_group_activity_item.html.eex create mode 100644 lib/web/templates/email/activity/_group_activity_item.text.eex create mode 100644 lib/web/templates/email/activity/_member_activity_item.html.eex create mode 100644 lib/web/templates/email/activity/_member_activity_item.text.eex create mode 100644 lib/web/templates/email/activity/_post_activity_item.html.eex create mode 100644 lib/web/templates/email/activity/_post_activity_item.text.eex create mode 100644 lib/web/templates/email/activity/_resource_activity_item.html.eex create mode 100644 lib/web/templates/email/activity/_resource_activity_item.text.eex create mode 100644 lib/web/templates/email/email_direct_activity.html.eex create mode 100644 lib/web/templates/email/email_direct_activity.text.eex create mode 100644 priv/gettext/activity.pot create mode 100644 priv/gettext/ar/LC_MESSAGES/activity.po create mode 100644 priv/gettext/be/LC_MESSAGES/activity.po create mode 100644 priv/gettext/ca/LC_MESSAGES/activity.po create mode 100644 priv/gettext/cs/LC_MESSAGES/activity.po create mode 100644 priv/gettext/de/LC_MESSAGES/activity.po create mode 100644 priv/gettext/en/LC_MESSAGES/activity.po create mode 100644 priv/gettext/es/LC_MESSAGES/activity.po create mode 100644 priv/gettext/fi/LC_MESSAGES/activity.po create mode 100644 priv/gettext/fr/LC_MESSAGES/activity.po create mode 100644 priv/gettext/gl/LC_MESSAGES/activity.po create mode 100644 priv/gettext/hu/LC_MESSAGES/activity.po create mode 100644 priv/gettext/it/LC_MESSAGES/activity.po create mode 100644 priv/gettext/ja/LC_MESSAGES/activity.po create mode 100644 priv/gettext/nl/LC_MESSAGES/activity.po create mode 100644 priv/gettext/nn/LC_MESSAGES/activity.po create mode 100644 priv/gettext/oc/LC_MESSAGES/activity.po create mode 100644 priv/gettext/pl/LC_MESSAGES/activity.po create mode 100644 priv/gettext/pt/LC_MESSAGES/activity.po create mode 100644 priv/gettext/pt_BR/LC_MESSAGES/activity.po create mode 100644 priv/gettext/ru/LC_MESSAGES/activity.po create mode 100644 priv/gettext/sv/LC_MESSAGES/activity.po create mode 100644 test/service/workers/activity_builder_test.exs diff --git a/config/config.exs b/config/config.exs index 40685256..3f8ad345 100644 --- a/config/config.exs +++ b/config/config.exs @@ -265,7 +265,7 @@ config :mobilizon, :anonymous, config :mobilizon, Oban, repo: Mobilizon.Storage.Repo, log: false, - queues: [default: 10, search: 5, mailers: 10, background: 5, activity: 5], + queues: [default: 10, search: 5, mailers: 10, background: 5, activity: 5, notifications: 5], plugins: [ {Oban.Plugins.Cron, crontab: [ @@ -298,6 +298,12 @@ config :mobilizon, :external_resource_providers, %{ "https://docs.google.com/spreadsheets/" => :google_spreadsheets } +config :mobilizon, Mobilizon.Service.Notifier, + notifiers: [ + Mobilizon.Service.Notifier.Email, + Mobilizon.Service.Notifier.Push + ] + # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{config_env()}.exs" diff --git a/js/src/components/Activity/GroupActivityItem.vue b/js/src/components/Activity/GroupActivityItem.vue index df90a869..d54bf896 100644 --- a/js/src/components/Activity/GroupActivityItem.vue +++ b/js/src/components/Activity/GroupActivityItem.vue @@ -8,7 +8,9 @@ slot="group" :to="{ name: RouteName.GROUP, - params: { preferredUsername: usernameWithDomain(activity.object) }, + params: { + preferredUsername: subjectParams.group_federated_username, + }, }" >{{ subjectParams.group_name }} diff --git a/js/src/components/Activity/MemberActivityItem.vue b/js/src/components/Activity/MemberActivityItem.vue index 1916a2ff..b81f0bfd 100644 --- a/js/src/components/Activity/MemberActivityItem.vue +++ b/js/src/components/Activity/MemberActivityItem.vue @@ -18,7 +18,7 @@ > {{ - subjectParams.member_preferred_username + subjectParams.member_actor_federated_username }} activity |> Map.update(:subject_params, %{}, &transform_params/1) - |> Map.put(:object, get_object(activity)) + |> Map.put(:object, ActivityService.object(activity)) end) {:ok, %Page{total: total, elements: elements}} @@ -45,43 +45,6 @@ defmodule Mobilizon.GraphQL.Resolvers.Activity do {:error, :unauthenticated} end - defp get_object(%Activity{object_type: object_type, object_id: object_id}) do - get_object(object_type, object_id) - end - - defp get_object(_, nil), do: nil - - defp get_object(:event, event_id) do - case Events.get_event(event_id) do - {:ok, %Event{} = event} -> event - _ -> nil - end - end - - defp get_object(:post, post_id) do - Posts.get_post(post_id) - end - - defp get_object(:member, member_id) do - Actors.get_member(member_id) - end - - defp get_object(:resource, resource_id) do - Resources.get_resource(resource_id) - end - - defp get_object(:discussion, discussion_id) do - Discussions.get_discussion(discussion_id) - end - - defp get_object(:group, group_id) do - Actors.get_actor(group_id) - end - - defp get_object(:comment, comment_id) do - Discussions.get_comment(comment_id) - end - @spec transform_params(map()) :: list() defp transform_params(params) do Enum.map(params, fn {key, value} -> %{key: key, value: transform_value(value)} end) diff --git a/lib/mobilizon/activities/activities.ex b/lib/mobilizon/activities/activities.ex index 491a2f10..e38fbc15 100644 --- a/lib/mobilizon/activities/activities.ex +++ b/lib/mobilizon/activities/activities.ex @@ -59,6 +59,8 @@ defmodule Mobilizon.Activities do defenum(Subject, @subjects) defenum(ObjectType, @object_type) + @activity_preloads [:author, :group] + @doc """ Returns the list of activities. @@ -153,6 +155,11 @@ defmodule Mobilizon.Activities do |> Repo.insert() end + @spec preload_activity(Activity.t()) :: Activity.t() + def preload_activity(%Activity{} = activity) do + Repo.preload(activity, @activity_preloads) + end + def object_types, do: @object_type def subjects, do: @subjects diff --git a/lib/service/activity/activity.ex b/lib/service/activity/activity.ex index 2632a01d..e62facd3 100644 --- a/lib/service/activity/activity.ex +++ b/lib/service/activity/activity.ex @@ -3,5 +3,50 @@ defmodule Mobilizon.Service.Activity do Behavior for Activity creators """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Service.Activity.{Comment, Discussion, Event, Group, Member, Post, Resource} + @callback insert_activity(entity :: struct(), options :: map()) :: {:ok, Oban.Job.t()} + + @callback get_object(object_id :: String.t() | integer()) :: struct() + + @spec object(Activity.t()) :: struct() | nil + def object(%Activity{object_type: object_type, object_id: object_id}) do + do_get_object(object_type, object_id) + end + + @spec has_object?(Activity.t()) :: boolean() + def has_object?(%Activity{} = activity) do + !is_nil(object(activity)) + end + + defp do_get_object(_, nil), do: nil + + defp do_get_object(:event, event_id) do + Event.get_object(event_id) + end + + defp do_get_object(:post, post_id) do + Post.get_object(post_id) + end + + defp do_get_object(:member, member_id) do + Member.get_object(member_id) + end + + defp do_get_object(:resource, resource_id) do + Resource.get_object(resource_id) + end + + defp do_get_object(:discussion, discussion_id) do + Discussion.get_object(discussion_id) + end + + defp do_get_object(:group, group_id) do + Group.get_object(group_id) + end + + defp do_get_object(:comment, comment_id) do + Comment.get_object(comment_id) + end end diff --git a/lib/service/activity/comment.ex b/lib/service/activity/comment.ex index 0b3ebcd3..85c7a596 100644 --- a/lib/service/activity/comment.ex +++ b/lib/service/activity/comment.ex @@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Comment do @moduledoc """ Insert a comment activity """ - alias Mobilizon.{Actors, Events} + alias Mobilizon.{Actors, Discussions, Events} alias Mobilizon.Actors.Actor alias Mobilizon.Discussions.Comment alias Mobilizon.Events.Event @@ -48,4 +48,9 @@ defmodule Mobilizon.Service.Activity.Comment do end def insert_activity(_, _), do: {:ok, nil} + + @impl Activity + def get_object(comment_id) do + Discussions.get_comment(comment_id) + end end diff --git a/lib/service/activity/discussion.ex b/lib/service/activity/discussion.ex index 3b2c993c..12de6bbd 100644 --- a/lib/service/activity/discussion.ex +++ b/lib/service/activity/discussion.ex @@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Discussion do @moduledoc """ Insert a discussion activity """ - alias Mobilizon.Actors + alias Mobilizon.{Actors, Discussions} alias Mobilizon.Discussions.Discussion alias Mobilizon.Service.Activity alias Mobilizon.Service.Workers.ActivityBuilder @@ -38,6 +38,11 @@ defmodule Mobilizon.Service.Activity.Discussion do def insert_activity(_, _), do: {:ok, nil} + @impl Activity + def get_object(discussion_id) do + Discussions.get_discussion(discussion_id) + end + @spec subject_params(Discussion.t(), String.t() | nil, Discussion.t() | nil) :: map() defp subject_params(%Discussion{} = discussion, "discussion_renamed", old_discussion) do discussion diff --git a/lib/service/activity/event.ex b/lib/service/activity/event.ex index 55b63d38..3b9492de 100644 --- a/lib/service/activity/event.ex +++ b/lib/service/activity/event.ex @@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Event do @moduledoc """ Insert an event activity """ - alias Mobilizon.Actors + alias Mobilizon.{Actors, Events} alias Mobilizon.Events.Event alias Mobilizon.Service.Activity alias Mobilizon.Service.Workers.ActivityBuilder @@ -36,4 +36,12 @@ defmodule Mobilizon.Service.Activity.Event do @impl Activity def insert_activity(_, _), do: {:ok, nil} + + @impl Activity + def get_object(event_id) do + case Events.get_event(event_id) do + {:ok, %Event{} = event} -> event + _ -> nil + end + end end diff --git a/lib/service/activity/group.ex b/lib/service/activity/group.ex index 3adfb191..5a18a7c8 100644 --- a/lib/service/activity/group.ex +++ b/lib/service/activity/group.ex @@ -40,6 +40,11 @@ defmodule Mobilizon.Service.Activity.Group do def insert_activity(_, _), do: {:ok, nil} + @impl Activity + def get_object(group_id) do + Actors.get_actor(group_id) + end + @spec subject_params(Actor.t(), String.t() | nil, Actor.t() | nil) :: map() defp subject_params(%Actor{} = group, "group_updated", %Actor{} = old_group) do group @@ -67,7 +72,7 @@ defmodule Mobilizon.Service.Activity.Group do end defp subject_params( - %Actor{preferred_username: preferred_username, domain: domain, name: name}, + %Actor{preferred_username: preferred_username, domain: domain, name: name} = actor, _, _ ) do @@ -75,6 +80,7 @@ defmodule Mobilizon.Service.Activity.Group do group_preferred_username: preferred_username, group_name: name, group_domain: domain, + group_federated_username: Actor.preferred_username_and_domain(actor), group_changes: [] } end diff --git a/lib/service/activity/member.ex b/lib/service/activity/member.ex index 22255792..b0e7d997 100644 --- a/lib/service/activity/member.ex +++ b/lib/service/activity/member.ex @@ -35,6 +35,11 @@ defmodule Mobilizon.Service.Activity.Member do def insert_activity(_, _), do: {:ok, nil} + @impl Activity + def get_object(member_id) do + Actors.get_member(member_id) + end + @spec get_author(Member.t(), Member.t() | nil) :: String.t() | integer() defp get_author(%Member{actor_id: actor_id}, options) do moderator = Keyword.get(options, :moderator) @@ -72,11 +77,12 @@ defmodule Mobilizon.Service.Activity.Member do if(is_nil(actor), do: subject_params, else: - Map.put( - subject_params, - :member_preferred_username, + subject_params + |> Map.put( + :member_actor_federated_username, Actor.preferred_username_and_domain(actor) ) + |> Map.put(:member_actor_name, actor.name) ) subject_params = diff --git a/lib/service/activity/posts.ex b/lib/service/activity/post.ex similarity index 90% rename from lib/service/activity/posts.ex rename to lib/service/activity/post.ex index bd8a4553..f6211314 100644 --- a/lib/service/activity/posts.ex +++ b/lib/service/activity/post.ex @@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Post do @moduledoc """ Insert an post activity """ - alias Mobilizon.Actors + alias Mobilizon.{Actors, Posts} alias Mobilizon.Posts.Post alias Mobilizon.Service.Activity alias Mobilizon.Service.Workers.ActivityBuilder @@ -34,4 +34,9 @@ defmodule Mobilizon.Service.Activity.Post do end def insert_activity(_, _), do: {:ok, nil} + + @impl Activity + def get_object(post_id) do + Posts.get_post(post_id) + end end diff --git a/lib/service/activity/resource.ex b/lib/service/activity/resource.ex index 4eec72eb..f308b2ee 100644 --- a/lib/service/activity/resource.ex +++ b/lib/service/activity/resource.ex @@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Resource do @moduledoc """ Insert an resource activity """ - alias Mobilizon.Actors + alias Mobilizon.{Actors, Resources} alias Mobilizon.Resources.Resource alias Mobilizon.Service.Activity alias Mobilizon.Service.Workers.ActivityBuilder @@ -37,6 +37,11 @@ defmodule Mobilizon.Service.Activity.Resource do @impl Activity def insert_activity(_, _), do: {:ok, nil} + @impl Activity + def get_object(resource_id) do + Resources.get_resource(resource_id) + end + @spec subject_params(Resource.t(), String.t() | nil, Resource.t() | nil) :: map() defp subject_params(%Resource{} = resource, "resource_renamed", old_resource) do resource @@ -44,7 +49,7 @@ defmodule Mobilizon.Service.Activity.Resource do |> Map.put(:old_resource_title, old_resource.title) end - defp subject_params(%Resource{path: path, title: title}, _, _) do - %{resource_path: path, resource_title: title} + defp subject_params(%Resource{path: path, title: title, type: type, id: id}, _, _) do + %{resource_path: path, resource_title: title, is_folder: type == :folder, resource_uuid: id} end end diff --git a/lib/service/notifier/email.ex b/lib/service/notifier/email.ex new file mode 100644 index 00000000..a1f01a6f --- /dev/null +++ b/lib/service/notifier/email.ex @@ -0,0 +1,31 @@ +defmodule Mobilizon.Service.Notifier.Email do + @moduledoc """ + Email notifier + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Config + alias Mobilizon.Service.Notifier + alias Mobilizon.Service.Notifier.Email + alias Mobilizon.Users.User + alias Mobilizon.Web.Email.Activity, as: EmailActivity + alias Mobilizon.Web.Email.Mailer + + @behaviour Notifier + + @impl Notifier + def ready? do + Config.get(__MODULE__, :enabled) + end + + @impl Notifier + def send(%User{} = user, %Activity{} = activity) do + Email.send(user, [activity]) + end + + @impl Notifier + def send(%User{email: email, locale: locale}, activities) when is_list(activities) do + email + |> EmailActivity.direct_activity(activities, locale) + |> Mailer.send_email() + end +end diff --git a/lib/service/notifier/notifier.ex b/lib/service/notifier/notifier.ex new file mode 100644 index 00000000..56b57d17 --- /dev/null +++ b/lib/service/notifier/notifier.ex @@ -0,0 +1,31 @@ +defmodule Mobilizon.Service.Notifier do + @moduledoc """ + Behaviour for notifiers + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Config + alias Mobilizon.Users.User + + @doc """ + Whether the notifier is enabled and configured + """ + @callback ready?() :: boolean() + + @doc """ + Sends one or multiple notifications from an activity + """ + @callback send(User.t(), Activity.t()) :: {:ok, any()} | {:error, String.t()} + + @callback send(User.t(), list(Activity.t())) :: {:ok, any()} | {:error, String.t()} + + def notify(%User{} = user, %Activity{} = activity, opts \\ []) do + Enum.each(providers(opts), & &1.send(user, activity)) + end + + @spec providers(Keyword.t()) :: list() + defp providers(opts) do + opts + |> Keyword.get(:notifiers, Config.get([__MODULE__, :notifiers])) + |> Enum.filter(& &1.ready?()) + end +end diff --git a/lib/service/notifier/push.ex b/lib/service/notifier/push.ex new file mode 100644 index 00000000..532aa402 --- /dev/null +++ b/lib/service/notifier/push.ex @@ -0,0 +1,38 @@ +defmodule Mobilizon.Service.Notifier.Push do + @moduledoc """ + WebPush notifier + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Config + alias Mobilizon.Service.Notifier + alias Mobilizon.Service.Notifier.Push + alias Mobilizon.Users.User + + @behaviour Notifier + + @impl Notifier + def ready? do + Config.get(__MODULE__, :enabled) + end + + @impl Notifier + def send(%User{} = _user, %Activity{} = activity) do + # Get user's subscriptions + activity + |> payload() + + # |> WebPushEncryption.send_web_push() + end + + @impl Notifier + def send(%User{} = user, activities) when is_list(activities) do + Enum.each(activities, &Push.send(user, &1)) + end + + defp payload(%Activity{subject: subject}) do + %{ + title: subject + } + |> Jason.encode!() + end +end diff --git a/lib/service/rich_media/parsers/fallback.ex b/lib/service/rich_media/parsers/fallback.ex index 2a92113f..252d1620 100644 --- a/lib/service/rich_media/parsers/fallback.ex +++ b/lib/service/rich_media/parsers/fallback.ex @@ -7,8 +7,12 @@ defmodule Mobilizon.Service.RichMedia.Parsers.Fallback do @moduledoc """ Module to parse fallback data in HTML pages (plain old title and meta description) """ + require Logger + @spec parse(String.t(), map()) :: {:ok, map()} | {:error, String.t()} def parse(html, data) do + Logger.debug("Running Fallback parser") + data = data |> maybe_put(html, :title) diff --git a/lib/service/workers/activity_builder.ex b/lib/service/workers/activity_builder.ex index 87049a83..cf8a4d1a 100644 --- a/lib/service/workers/activity_builder.ex +++ b/lib/service/workers/activity_builder.ex @@ -3,15 +3,20 @@ defmodule Mobilizon.Service.Workers.ActivityBuilder do Worker to insert activity items in users feeds """ - alias Mobilizon.Activities + alias Mobilizon.{Activities, Actors, Users} alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Notifier + alias Mobilizon.Users.User use Mobilizon.Service.Workers.Helper, queue: "activity" @impl Oban.Worker def perform(%Job{args: args}) do - with {"build_activity", args} <- Map.pop(args, "op") do - build_activity(args) + with {"build_activity", args} <- Map.pop(args, "op"), + {:ok, %Activity{} = activity} <- build_activity(args), + preloaded_activity <- Activities.preload_activity(activity) do + notify_activity(preloaded_activity) end end @@ -19,4 +24,27 @@ defmodule Mobilizon.Service.Workers.ActivityBuilder do def build_activity(args) do Activities.create_activity(args) end + + @spec notify_activity(Activity.t()) :: :ok + def notify_activity(%Activity{} = activity) do + activity + |> users_to_notify() + |> Enum.each(&Notifier.notify(&1, activity)) + end + + @spec users_to_notify(Activity.t()) :: list(User.t()) + defp users_to_notify(%Activity{group: %Actor{} = group, author_id: author_id}) do + group + |> Actors.list_internal_actors_members_for_group([ + :creator, + :administrator, + :moderator, + :member + ]) + |> Enum.filter(&(&1.id != author_id)) + |> Enum.map(& &1.user_id) + |> Enum.filter(& &1) + |> Enum.uniq() + |> Enum.map(&Users.get_user!/1) + end end diff --git a/lib/service/workers/digest_notifier_worker.ex b/lib/service/workers/digest_notifier_worker.ex new file mode 100644 index 00000000..8a7d5ca9 --- /dev/null +++ b/lib/service/workers/digest_notifier_worker.ex @@ -0,0 +1,14 @@ +defmodule Mobilizon.Service.Workers.DigestNotifierWorker do + @moduledoc """ + Worker to send notifications + """ + + use Mobilizon.Service.Workers.Helper, queue: "notifications" + + @impl Oban.Worker + def perform(%Job{}) do + # Get last time activities were send + # List activities to send + # Send activites + end +end diff --git a/lib/web/email/activity.ex b/lib/web/email/activity.ex new file mode 100644 index 00000000..01ed0c02 --- /dev/null +++ b/lib/web/email/activity.ex @@ -0,0 +1,73 @@ +defmodule Mobilizon.Web.Email.Activity do + @moduledoc """ + Handles emails sent about activity notifications. + """ + use Bamboo.Phoenix, view: Mobilizon.Web.EmailView + + import Bamboo.Phoenix + import Mobilizon.Web.Gettext + + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Config + alias Mobilizon.Web.{Email, Gettext} + + @spec direct_activity(String.t(), list(), String.t()) :: + Bamboo.Email.t() + def direct_activity( + email, + activities, + locale \\ "en" + ) do + Gettext.put_locale(locale) + + subject = + gettext( + "Activity notification for %{instance}", + instance: Config.instance_name() + ) + + chunked_activities = chunk_activities(activities) + + Email.base_email(to: email, subject: subject) + |> assign(:locale, locale) + |> assign(:subject, subject) + |> assign(:activities, chunked_activities) + |> assign(:total_number_activities, length(activities)) + |> render(:email_direct_activity) + end + + @spec chunk_activities(list()) :: map() + defp chunk_activities(activities) do + activities + |> Enum.reduce(%{}, fn %Activity{group: %Actor{id: group_id}} = activity, acc -> + Map.update(acc, group_id, [activity], fn activities -> activities ++ [activity] end) + end) + |> Enum.map(fn {key, value} -> + {key, Enum.sort(value, &(&1.inserted_at <= &2.inserted_at))} + end) + |> Enum.map(fn {key, value} -> {key, filter_duplicates(value)} end) + |> Enum.into(%{}) + end + + # We filter duplicates when subject_params are being the same + # so it will probably not catch much things + @spec filter_duplicates(list()) :: list() + defp filter_duplicates(activities) do + Enum.uniq_by(activities, fn %Activity{ + author: %Actor{id: author_id}, + group: %Actor{id: group_id}, + type: type, + subject: subject, + subject_params: subject_params + } -> + %{ + author_id: author_id, + group_id: group_id, + type: type, + subject: subject, + subject_params: subject_params + } + end) + end +end diff --git a/lib/web/mobilizon_web.ex b/lib/web/mobilizon_web.ex index e962bad2..fa691357 100644 --- a/lib/web/mobilizon_web.ex +++ b/lib/web/mobilizon_web.ex @@ -30,6 +30,7 @@ defmodule Mobilizon.Web do quote do use Phoenix.View, root: "lib/web/templates", + pattern: "**/*", namespace: Mobilizon.Web # Import convenience functions from controllers diff --git a/lib/web/templates/email/activity/_comment_activity_item.html.eex b/lib/web/templates/email/activity/_comment_activity_item.html.eex new file mode 100644 index 00000000..9b779ea4 --- /dev/null +++ b/lib/web/templates/email/activity/_comment_activity_item.html.eex @@ -0,0 +1,70 @@ +<%= case @activity.subject do %> + <% :discussion_created -> %> + <%= + dgettext("activity", "%{profile} created the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: " URI.decode()}\"> + #{@activity.subject_params["discussion_title"]} + " + } + ) |> raw %> + <% :discussion_replied -> %> + <%= + dgettext("activity", "%{profile} replied to the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: " URI.decode()}\"> + #{@activity.subject_params["discussion_title"]} + " + } + ) |> raw %> + <% :discussion_renamed -> %> + <%= + dgettext("activity", "%{profile} renamed the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: " URI.decode()}\"> + #{@activity.subject_params["discussion_title"]} + " + } + ) |> raw %> + <% :discussion_archived -> %> + <%= + dgettext("activity", "%{profile} archived the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: " URI.decode()}\"> + #{@activity.subject_params["discussion_title"]} + " + } + ) |> raw %> + <% :discussion_deleted -> %> + <%= + dgettext("activity", "%{profile} deleted the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: "#{@activity.subject_params["discussion_title"]}" + } + ) |> raw %> +<% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_comment_activity_item.text.eex b/lib/web/templates/email/activity/_comment_activity_item.text.eex new file mode 100644 index 00000000..463fbde4 --- /dev/null +++ b/lib/web/templates/email/activity/_comment_activity_item.text.eex @@ -0,0 +1,30 @@ +<%= case @activity.subject do %><% :discussion_created -> %><%= dgettext("activity", "%{profile} created the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_replied -> %><%= dgettext("activity", "%{profile} replied to the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_renamed -> %><%= dgettext("activity", "%{profile} renamed the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_archived -> %><%= dgettext("activity", "%{profile} archived the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_deleted -> %><%= dgettext("activity", "%{profile} deleted the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %><% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_discussion_activity_item.html.eex b/lib/web/templates/email/activity/_discussion_activity_item.html.eex new file mode 100644 index 00000000..b678ae5a --- /dev/null +++ b/lib/web/templates/email/activity/_discussion_activity_item.html.eex @@ -0,0 +1,66 @@ +<%= case @activity.subject do %> + <% :discussion_created -> %> + <%= + dgettext("activity", "%{profile} created the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: " URI.decode()}\"> + #{@activity.subject_params["discussion_title"]}" + } + ) |> raw %> + <% :discussion_replied -> %> + <%= + dgettext("activity", "%{profile} replied to the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: " URI.decode()}\"> + #{@activity.subject_params["discussion_title"]}" + } + ) |> raw %> + <% :discussion_renamed -> %> + <%= + dgettext("activity", "%{profile} renamed the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: " URI.decode()}\"> + #{@activity.subject_params["discussion_title"]}" + } + ) |> raw %> + <% :discussion_archived -> %> + <%= + dgettext("activity", "%{profile} archived the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: " URI.decode()}\"> + #{@activity.subject_params["discussion_title"]}" + } + ) |> raw %> + <% :discussion_deleted -> %> + <%= + dgettext("activity", "%{profile} deleted the discussion %{discussion}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + discussion: "#{@activity.subject_params["discussion_title"]}" + } + ) |> raw %> +<% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_discussion_activity_item.text.eex b/lib/web/templates/email/activity/_discussion_activity_item.text.eex new file mode 100644 index 00000000..463fbde4 --- /dev/null +++ b/lib/web/templates/email/activity/_discussion_activity_item.text.eex @@ -0,0 +1,30 @@ +<%= case @activity.subject do %><% :discussion_created -> %><%= dgettext("activity", "%{profile} created the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_replied -> %><%= dgettext("activity", "%{profile} replied to the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_renamed -> %><%= dgettext("activity", "%{profile} renamed the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_archived -> %><%= dgettext("activity", "%{profile} archived the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :discussion_deleted -> %><%= dgettext("activity", "%{profile} deleted the discussion %{discussion}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + discussion: @activity.subject_params["discussion_title"] + } +) %><% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_event_activity_item.html.eex b/lib/web/templates/email/activity/_event_activity_item.html.eex new file mode 100644 index 00000000..074e9c4a --- /dev/null +++ b/lib/web/templates/email/activity/_event_activity_item.html.eex @@ -0,0 +1,72 @@ +<%= case @activity.subject do %> + <% :event_created -> %> + <%= + dgettext("activity", "The event %{event} was created by %{profile}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + event: " URI.decode()}\"> + #{@activity.subject_params["event_title"]} + " + } + ) |> raw %> + <% :event_updated -> %> + <%= + dgettext("activity", "The event %{event} was updated by %{profile}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + event: " URI.decode()}\"> + #{@activity.subject_params["event_title"]} + " + } + ) |> raw %> + <% :event_deleted -> %> + <%= + dgettext("activity", "The event %{event} was deleted by %{profile}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + event: "#{@activity.subject_params["event_title"]}" + } + ) |> raw %> + <% :comment_posted -> %> + <%= if @activity.subject_params["comment_reply_to"] do %> + <%= + dgettext("activity", "%{profile} replied to a comment on the event %{event}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + event: " URI.decode()}\"> + #{@activity.subject_params["event_title"]} + " + } + ) |> raw %> + <% else %> + <%= + dgettext("activity", "%{profile} posted a comment on the event %{event}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + event: " URI.decode()}\"> + #{@activity.subject_params["event_title"]} + " + } + ) |> raw %> + <% end %> +<% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_event_activity_item.text.eex b/lib/web/templates/email/activity/_event_activity_item.text.eex new file mode 100644 index 00000000..80e1b1e5 --- /dev/null +++ b/lib/web/templates/email/activity/_event_activity_item.text.eex @@ -0,0 +1,31 @@ +<%= case @activity.subject do %><% :event_created -> %><%= dgettext("activity", "The event %{event} was created by %{profile}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + event: @activity.subject_params["event_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :event, @activity.subject_params["event_uuid"]) |> URI.decode() %><% :event_updated -> %><%= dgettext("activity", "The event %{event} was updated by %{profile}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + event: @activity.subject_params["event_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :event, @activity.subject_params["event_uuid"]) |> URI.decode() %><% :event_deleted -> %><%= dgettext("activity", "The event %{event} was deleted by %{profile}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + event: @activity.subject_params["event_title"] + } +) %> +<% :comment_posted -> %><%= if @activity.subject_params["comment_reply_to"] do %><%= dgettext("activity", "%{profile} replied to a comment on the event %{event}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + event: @activity.subject_params["event_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :event, @activity.subject_params["event_uuid"]) |> URI.decode() %><% else %><%= dgettext("activity", "%{profile} posted a comment on the event %{event}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + event: @activity.subject_params["event_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :event, @activity.subject_params["event_uuid"]) |> URI.decode() %><% end %><% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_group_activity_item.html.eex b/lib/web/templates/email/activity/_group_activity_item.html.eex new file mode 100644 index 00000000..a17c7956 --- /dev/null +++ b/lib/web/templates/email/activity/_group_activity_item.html.eex @@ -0,0 +1,32 @@ +<%= case @activity.subject do %> + <% :group_created -> %> + <%= + dgettext("activity", "%{profile} created the group %{group}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + group: " URI.decode()}\"> + #{@activity.subject_params["group_name"]} + " + } + ) |> raw %> + <% :group_updated -> %> + <%= + dgettext("activity", "%{profile} updated the group %{group}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + group: " URI.decode()}\"> + #{@activity.subject_params["group_name"]} + " + } + ) |> raw %> +<% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_group_activity_item.text.eex b/lib/web/templates/email/activity/_group_activity_item.text.eex new file mode 100644 index 00000000..8dd2d884 --- /dev/null +++ b/lib/web/templates/email/activity/_group_activity_item.text.eex @@ -0,0 +1,13 @@ +<%= case @activity.subject do %><% :group_created -> %><%= dgettext("activity", "%{profile} created the group %{group}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + group: @activity.subject_params["group_name"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :actor, @activity.subject_params["group_federated_username"]) |> URI.decode() %><% :group_updated -> %><%= dgettext("activity", "%{profile} updated the group %{group}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + group: @activity.subject_params["group_name"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :actor, @activity.subject_params["group_federated_username"]) |> URI.decode() %><% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_member_activity_item.html.eex b/lib/web/templates/email/activity/_member_activity_item.html.eex new file mode 100644 index 00000000..c8641b19 --- /dev/null +++ b/lib/web/templates/email/activity/_member_activity_item.html.eex @@ -0,0 +1,69 @@ +<%= case @activity.subject do %> + <% :member_request -> %> + <%= + dgettext("activity", "%{member} requested to join the group.", + %{ + member: "#{@activity.subject_params["member_actor_name"]}", + } + ) |> raw %> + <% :member_invited -> %> + <%= + dgettext("activity", "%{member} was invited by %{profile}.", + %{ + member: "#{@activity.subject_params["member_actor_name"]}", + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + } + ) |> raw %> + <% :member_accepted_invitation -> %> + <%= + dgettext("activity", "%{member} accepted the invitation to join the group.", + %{ + member: "#{@activity.subject_params["member_actor_name"]}", + } + ) |> raw %> + <% :member_rejected_invitation -> %> + <%= + dgettext("activity", "%{member} rejected the invitation to join the group.", + %{ + member: "#{@activity.subject_params["member_actor_name"]}", + } + ) |> raw %> + <% :member_joined -> %> + <%= + dgettext("activity", "%{member} joined the group.", + %{ + member: "#{@activity.subject_params["member_actor_name"]}", + } + ) |> raw %> + <% :member_added -> %> + <%= + dgettext("activity", "%{profile} added the member %{member}.", + %{ + member: "#{@activity.subject_params["member_actor_name"]}", + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + } + ) |> raw %> + <% :member_updated -> %> + <%= + dgettext("activity", "%{profile} updated the member %{member}.", + %{ + member: "#{@activity.subject_params["member_actor_name"]}", + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + } + ) |> raw %> + <% :member_removed -> %> + <%= + dgettext("activity", "%{profile} excluded member %{member}.", + %{ + member: "#{@activity.subject_params["member_actor_name"]}", + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + } + ) |> raw %> + <% :member_quit -> %> + <%= + dgettext("activity", "%{profile} quit the group.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + } + ) |> raw %> +<% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_member_activity_item.text.eex b/lib/web/templates/email/activity/_member_activity_item.text.eex new file mode 100644 index 00000000..985b2122 --- /dev/null +++ b/lib/web/templates/email/activity/_member_activity_item.text.eex @@ -0,0 +1,49 @@ +<%= case @activity.subject do %><% :member_request -> %><%= dgettext("activity", "%{member} requested to join the group.", + %{ + member: @activity.subject_params["member_actor_name"], + } +) %> +<% :member_invited -> %><%= dgettext("activity", "%{member} was invited by %{profile}.", + %{ + member: @activity.subject_params["member_actor_name"], + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + } +) %> +<% :member_accepted_invitation -> %><%= dgettext("activity", "%{member} accepted the invitation to join the group.", + %{ + member: @activity.subject_params["member_actor_name"], + } +) %> +<% :member_rejected_invitation -> %><%= dgettext("activity", "%{member} rejected the invitation to join the group.", + %{ + member: @activity.subject_params["member_actor_name"], + } +) %> +<% :member_joined -> %><%= dgettext("activity", "%{member} joined the group.", + %{ + member: @activity.subject_params["member_actor_name"], + } +) %> +<% :member_added -> %><%= dgettext("activity", "%{profile} added the member %{member}.", + %{ + member: @activity.subject_params["member_actor_name"], + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + } +) %> +<% :member_updated -> %><%= dgettext("activity", "%{profile} updated the member %{member}.", + %{ + member: @activity.subject_params["member_actor_name"], + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + } +) %> +<% :member_removed -> %><%= dgettext("activity", "%{profile} excluded member %{member}.", + %{ + member: @activity.subject_params["member_actor_name"], + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + } +) %> +<% :member_quit -> %><%= dgettext("activity", "%{profile} quit the group.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + } +) %><% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_post_activity_item.html.eex b/lib/web/templates/email/activity/_post_activity_item.html.eex new file mode 100644 index 00000000..856056be --- /dev/null +++ b/lib/web/templates/email/activity/_post_activity_item.html.eex @@ -0,0 +1,40 @@ +<%= case @activity.subject do %> + <% :post_created -> %> + <%= + dgettext("activity", "The post %{post} was created by %{profile}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + post: " URI.decode()}\"> + #{@activity.subject_params["post_title"]} + " + } + ) |> raw %> + <% :post_updated -> %> + <%= + dgettext("activity", "The post %{post} was updated by %{profile}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + post: " URI.decode()}\"> + #{@activity.subject_params["post_title"]} + " + } + ) |> raw %> + <% :post_deleted -> %> + <%= + dgettext("activity", "The post %{post} was deleted by %{profile}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + post: "#{@activity.subject_params["post_title"]}" + } + ) |> raw %> +<% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_post_activity_item.text.eex b/lib/web/templates/email/activity/_post_activity_item.text.eex new file mode 100644 index 00000000..2fc6143c --- /dev/null +++ b/lib/web/templates/email/activity/_post_activity_item.text.eex @@ -0,0 +1,18 @@ +<%= case @activity.subject do %><% :post_created -> %><%= dgettext("activity", "The post %{post} was created by %{profile}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + post: @activity.subject_params["post_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :post, @activity.subject_params["post_slug"]) |> URI.decode() %><% :post_updated -> %><%= dgettext("activity", "The post %{post} was updated by %{profile}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + post: @activity.subject_params["post_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :post, @activity.subject_params["post_slug"]) |> URI.decode() %><% :post_deleted -> %><%= dgettext("activity", "The post %{post} was deleted by %{profile}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + post: @activity.subject_params["post_title"] + } +) %><% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_resource_activity_item.html.eex b/lib/web/templates/email/activity/_resource_activity_item.html.eex new file mode 100644 index 00000000..ad5b42d5 --- /dev/null +++ b/lib/web/templates/email/activity/_resource_activity_item.html.eex @@ -0,0 +1,118 @@ +<%= case @activity.subject do %> + <% :resource_created -> %> + <%= if @activity.subject_params["is_folder"] do %> + <%= + dgettext("activity", "%{profile} created the folder %{resource}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + resource: " URI.decode()}\"> + #{@activity.subject_params["resource_title"]} + " + } + ) |> raw %> + <% else %> + <%= + dgettext("activity", "%{profile} created the resource %{resource}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + resource: " URI.decode()}\"> + #{@activity.subject_params["resource_title"]} + " + } + ) |> raw %> + <% end %> + <% :resource_renamed -> %> + <%= if @activity.subject_params["is_folder"] do %> + <%= + dgettext("activity", "%{profile} renamed the folder from %{old_resource_title} to %{resource}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + resource: " URI.decode()}\"> + #{@activity.subject_params["resource_title"]} + ", + old_resource_title: "#{@activity.subject_params["old_resource_title"]}" + } + ) |> raw %> + <% else %> + <%= + dgettext("activity", "%{profile} renamed the resource from %{old_resource_title} to %{resource}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + resource: " URI.decode()}\"> + #{@activity.subject_params["resource_title"]} + ", + old_resource_title: "#{@activity.subject_params["old_resource_title"]}" + } + ) |> raw %> + <% end %> + <% :resource_moved -> %> + <%= if @activity.subject_params["is_folder"] do %> + <%= + dgettext("activity", "%{profile} moved the folder %{resource}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + resource: " URI.decode()}\"> + #{@activity.subject_params["resource_title"]} + " + } + ) |> raw %> + <% else %> + <%= + dgettext("activity", "%{profile} moved the resource %{resource}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + resource: " URI.decode()}\"> + #{@activity.subject_params["resource_title"]} + " + } + ) |> raw %> + <% end %> + <% :resource_deleted -> %> + <%= if @activity.subject_params["is_folder"] do %> + <%= + dgettext("activity", "%{profile} deleted the folder %{resource}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + resource: "#{@activity.subject_params["resource_title"]}" + } + ) |> raw %> + <% else %> + <%= + dgettext("activity", "%{profile} deleted the resource %{resource}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + resource: "#{@activity.subject_params["resource_title"]}" + } + ) |> raw %> + <% end %> +<% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_resource_activity_item.text.eex b/lib/web/templates/email/activity/_resource_activity_item.text.eex new file mode 100644 index 00000000..f54268ba --- /dev/null +++ b/lib/web/templates/email/activity/_resource_activity_item.text.eex @@ -0,0 +1,50 @@ +<%= case @activity.subject do %> +<% :resource_created -> %><%= if @activity.subject_params["is_folder"] do %><%= dgettext("activity", "%{profile} created the folder %{resource}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + resource: @activity.subject_params["resource_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :resource, @activity.subject_params["resource_uuid"]) |> URI.decode() %><% else %><%= dgettext("activity", "%{profile} created the resource %{resource}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + resource: @activity.subject_params["resource_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :resource, @activity.subject_params["resource_uuid"]) |> URI.decode() %><% end %><% :resource_renamed -> %><%= if @activity.subject_params["is_folder"] do %><%= dgettext("activity", "%{profile} renamed the folder from %{old_resource_title} to %{resource}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + resource: @activity.subject_params["resource_title"], + old_resource_title: @activity.subject_params["old_resource_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :resource, @activity.subject_params["resource_uuid"]) |> URI.decode() %><% else %><%= dgettext("activity", "%{profile} renamed the resource from %{old_resource_title} to %{resource}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + resource: @activity.subject_params["resource_title"], + old_resource_title: @activity.subject_params["old_resource_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :resource, @activity.subject_params["resource_uuid"]) |> URI.decode() %><% end %><% :resource_moved -> %><%= if @activity.subject_params["is_folder"] do %><%= dgettext("activity", "%{profile} moved the folder %{resource}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + resource: @activity.subject_params["resource_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :resource, @activity.subject_params["resource_uuid"]) |> URI.decode() %><% else %><%= dgettext("activity", "%{profile} moved the resource %{resource}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + resource: @activity.subject_params["resource_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :resource, @activity.subject_params["resource_uuid"]) |> URI.decode() %><% end %><% :resource_deleted -> %><%= if @activity.subject_params["is_folder"] do %><%= dgettext("activity", "%{profile} deleted the folder %{resource}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + resource: @activity.subject_params["resource_title"] + } +) %><% else %><%= dgettext("activity", "%{profile} deleted the resource %{resource}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + resource: @activity.subject_params["resource_title"] + } +) %><% end %><% end %> \ No newline at end of file diff --git a/lib/web/templates/email/email.html.eex b/lib/web/templates/email/email.html.eex index 47fa4b19..fdb95260 100644 --- a/lib/web/templates/email/email.html.eex +++ b/lib/web/templates/email/email.html.eex @@ -10,14 +10,15 @@ - + diff --git a/lib/web/templates/email/email_direct_activity.html.eex b/lib/web/templates/email/email_direct_activity.html.eex new file mode 100644 index 00000000..14928748 --- /dev/null +++ b/lib/web/templates/email/email_direct_activity.html.eex @@ -0,0 +1,151 @@ + + + + + + + + diff --git a/lib/web/templates/email/email_direct_activity.text.eex b/lib/web/templates/email/email_direct_activity.text.eex new file mode 100644 index 00000000..e52c5ed2 --- /dev/null +++ b/lib/web/templates/email/email_direct_activity.text.eex @@ -0,0 +1,21 @@ +<%= @subject %> + +== +<%= dngettext("activity", "There has been an activity!", "There has been some activity!", @total_number_activities) %> + +<%= for {_, group_activities} <- @activities do %> + +== +<%= hd(group_activities).group.name || "@#{Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)}" %> + +<%= for activity <- Enum.take(group_activities, 5) do %> +* <%= case activity.type do %><% :discussion -> %><%= render("activity/_discussion_activity_item.text", activity: activity) %><% :event -> %><%= render("activity/_event_activity_item.text", activity: activity) %><% :group -> %><%= render("activity/_group_activity_item.text", activity: activity) %> +<% :member -> %><%= render("activity/_member_activity_item.text", activity: activity) %><% :post -> %><%= render("activity/_post_activity_item.text", activity: activity) %><% :resource -> %><%= render("activity/_resource_activity_item.text", activity: activity) %><% :comment -> %><%= render("activity/_comment_activity_item.text", activity: activity) %><% end %> +<%= datetime_relative(activity.inserted_at, @locale) %> +<% end %> +<%= if length(group_activities) > 5 do %> +<%= dngettext "activity", "View one more activity", "View %{count} more activities", length(group_activities) - 5, %{count: length(group_activities) - 5} %> +<%= page_url(Mobilizon.Web.Endpoint, :actor, Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)) |> URI.decode() %>/timeline +<% end %> +<% end %> +<%= dgettext("activity", "Don't want to receive activity notifications? You may change frequency or disable them in your settings.") %> \ No newline at end of file diff --git a/lib/web/views/email_view.ex b/lib/web/views/email_view.ex index fb3d6141..ed3a15dc 100644 --- a/lib/web/views/email_view.ex +++ b/lib/web/views/email_view.ex @@ -1,6 +1,7 @@ defmodule Mobilizon.Web.EmailView do use Mobilizon.Web, :view + alias Cldr.DateTime.Relative import Mobilizon.Web.Gettext def datetime_to_string(%DateTime{} = datetime, locale \\ "en", format \\ :medium) do @@ -27,4 +28,12 @@ defmodule Mobilizon.Web.EmailView do datetime end end + + @spec datetime_relative(DateTime.t(), String.t()) :: String.t() + def datetime_relative(%DateTime{} = datetime, locale \\ "en") do + Relative.to_string!(datetime, Mobilizon.Cldr, + relative_to: DateTime.utc_now(), + locale: locale + ) + end end diff --git a/mix.exs b/mix.exs index 7e56ef2d..e02168c6 100644 --- a/mix.exs +++ b/mix.exs @@ -163,6 +163,7 @@ defmodule Mobilizon.Mixfile do {:sentry, "~> 8.0"}, {:html_entities, "~> 0.5"}, {:sweet_xml, "~> 0.6.6"}, + {:web_push_encryption, "~> 0.3"}, # Dev and test dependencies {:phoenix_live_reload, "~> 1.2", only: [:dev, :e2e]}, {:ex_machina, "~> 2.3", only: [:dev, :test]}, diff --git a/mix.lock b/mix.lock index 6e2c0344..0716e785 100644 --- a/mix.lock +++ b/mix.lock @@ -138,5 +138,6 @@ "ueberauth_twitter": {:hex, :ueberauth_twitter, "0.4.0", "4b98620341bc91bac90459093bba093c650823b6e2df35b70255c493c17e9227", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:oauther, "~> 1.1", [hex: :oauther, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.6", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "fb29c9047ca263038c0c61f5a0ec8597e8564aba3f2b4cb02704b60205fd4468"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, + "web_push_encryption": {:hex, :web_push_encryption, "0.3.0", "598b5135e696fd1404dc8d0d7c0fa2c027244a4e5d5e5a98ba267f14fdeaabc8", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "f10bdd1afe527ede694749fb77a2f22f146a51b054c7fa541c9fd920fba7c875"}, "xml_builder": {:hex, :xml_builder, "2.1.4", "e60e21c0a39b9dd8dec1db5a2525c713f7fe4e85ed247caedf22a9bcdd2d5069", [:mix], [], "hexpm", "48188a4df8b9168ceb8318d128299bce064d272e18967349b2592347c434e677"}, } diff --git a/priv/gettext/activity.pot b/priv/gettext/activity.pot new file mode 100644 index 00000000..bbfd28fc --- /dev/null +++ b/priv/gettext/activity.pot @@ -0,0 +1,230 @@ +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here as no +## effect: edit them in PO (.po) files instead. +msgid "" +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/ar/LC_MESSAGES/activity.po b/priv/gettext/ar/LC_MESSAGES/activity.po new file mode 100644 index 00000000..35b2eb9e --- /dev/null +++ b/priv/gettext/ar/LC_MESSAGES/activity.po @@ -0,0 +1,239 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: ar\n" +"Plural-Forms: nplurals=6\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" diff --git a/priv/gettext/ar/LC_MESSAGES/default.po b/priv/gettext/ar/LC_MESSAGES/default.po index 276f1862..b3ecfb3e 100644 --- a/priv/gettext/ar/LC_MESSAGES/default.po +++ b/priv/gettext/ar/LC_MESSAGES/default.po @@ -1435,3 +1435,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/activity.po b/priv/gettext/be/LC_MESSAGES/activity.po new file mode 100644 index 00000000..50607f40 --- /dev/null +++ b/priv/gettext/be/LC_MESSAGES/activity.po @@ -0,0 +1,233 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: be\n" +"Plural-Forms: nplurals=3\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" diff --git a/priv/gettext/be/LC_MESSAGES/default.po b/priv/gettext/be/LC_MESSAGES/default.po index 32160bf8..7fbe8896 100644 --- a/priv/gettext/be/LC_MESSAGES/default.po +++ b/priv/gettext/be/LC_MESSAGES/default.po @@ -1411,3 +1411,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/activity.po b/priv/gettext/ca/LC_MESSAGES/activity.po new file mode 100644 index 00000000..2dc7bf60 --- /dev/null +++ b/priv/gettext/ca/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: ca\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/ca/LC_MESSAGES/default.po b/priv/gettext/ca/LC_MESSAGES/default.po index bc7947db..18a7a9d9 100644 --- a/priv/gettext/ca/LC_MESSAGES/default.po +++ b/priv/gettext/ca/LC_MESSAGES/default.po @@ -1660,3 +1660,8 @@ msgstr "Sembla ser que el servidor de Mobilizon està temporalment inaccessible. #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/activity.po b/priv/gettext/cs/LC_MESSAGES/activity.po new file mode 100644 index 00000000..c1c41302 --- /dev/null +++ b/priv/gettext/cs/LC_MESSAGES/activity.po @@ -0,0 +1,233 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: cs\n" +"Plural-Forms: nplurals=3\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" diff --git a/priv/gettext/cs/LC_MESSAGES/default.po b/priv/gettext/cs/LC_MESSAGES/default.po index a6d7d033..be19692f 100644 --- a/priv/gettext/cs/LC_MESSAGES/default.po +++ b/priv/gettext/cs/LC_MESSAGES/default.po @@ -1411,3 +1411,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/activity.po b/priv/gettext/de/LC_MESSAGES/activity.po new file mode 100644 index 00000000..83419e27 --- /dev/null +++ b/priv/gettext/de/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: de\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index f16635ce..78ae91b9 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -1775,3 +1775,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 25056224..9f2091da 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -1390,3 +1390,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/activity.po b/priv/gettext/en/LC_MESSAGES/activity.po new file mode 100644 index 00000000..55bd8a9b --- /dev/null +++ b/priv/gettext/en/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: en\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index 1f9fda35..c4cd0226 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -1443,3 +1443,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/activity.po b/priv/gettext/es/LC_MESSAGES/activity.po new file mode 100644 index 00000000..3f423fc8 --- /dev/null +++ b/priv/gettext/es/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: es\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po index 58210c71..c9fe5ec2 100644 --- a/priv/gettext/es/LC_MESSAGES/default.po +++ b/priv/gettext/es/LC_MESSAGES/default.po @@ -14,267 +14,267 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.6\n" -#: lib/web/templates/email/password_reset.html.eex:48 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:48 msgid "If you didn't request this, please ignore this email. Your password won't change until you access the link below and create a new one." msgstr "" "Si no solicitaste este correo, simplemente ignóralo. Su contraseña no " "cambiará al menos que use el siguiente enlace para crear una nueva." -#: lib/web/templates/email/report.html.eex:74 #, elixir-format +#: lib/web/templates/email/report.html.eex:74 msgid "%{title} by %{creator}" msgstr "%{title} por %{creator}" -#: lib/web/templates/email/registration_confirmation.html.eex:58 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:58 msgid "Activate my account" msgstr "Activar mi cuenta" +#, elixir-format #: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:9 -#, elixir-format msgid "Ask the community on Framacolibri" msgstr "Preguntar a la comunidad en framacolibri" -#: lib/web/templates/email/report.text.eex:15 #, elixir-format +#: lib/web/templates/email/report.text.eex:15 msgid "Comments" msgstr "Comentarios" +#, elixir-format #: lib/web/templates/email/report.html.eex:72 #: lib/web/templates/email/report.text.eex:11 -#, elixir-format msgid "Event" msgstr "Evento" -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Instrucciones para restablecer su contraseña en %{instance}" -#: lib/web/templates/email/report.text.eex:21 #, elixir-format +#: lib/web/templates/email/report.text.eex:21 msgid "Reason" msgstr "Razón" -#: lib/web/templates/email/password_reset.html.eex:61 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:61 msgid "Reset Password" msgstr "Restablecer la contraseña" -#: lib/web/templates/email/password_reset.html.eex:41 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:41 msgid "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." msgstr "" "Restablecer tu contraseña es fácil. Simplemente presione el botón y siga las " "instrucciones. Te tendremos en funcionamiento en poco tiempo." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Instrucciones para confirmar su cuenta Mobilizon en %{instance}" -#: lib/web/email/admin.ex:24 #, elixir-format +#: lib/web/email/admin.ex:24 msgid "New report on Mobilizon instance %{instance}" msgstr "Nuevo informe sobre la instancia Mobilizon %{instance}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:51 #: lib/web/templates/email/before_event_notification.text.eex:4 -#, elixir-format msgid "Go to event page" msgstr "Ir a la página del evento" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Nuevo informe de %{reporter} en %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Participación aprobada" +#, elixir-format #: lib/web/templates/email/password_reset.html.eex:13 #: lib/web/templates/email/password_reset.text.eex:1 -#, elixir-format msgid "Password reset" msgstr "Restablecer la contraseña" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "" "Restablecer tu contraseña es fácil. Simplemente haga clic en el enlace a " "continuación y siga las instrucciones. Estarás operacional en muy poco " "tiempo." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "" "Has creado una cuenta en %{host} con esta dirección de correo electrónico. " "Estás a un clic de activarlo. Si no eras tú, ignora este correo electrónico." -#: lib/web/email/participation.ex:112 #, elixir-format +#: lib/web/email/participation.ex:112 msgid "Your participation to event %{title} has been approved" msgstr "Su participación en el evento %{title} ha sido aprobada" -#: lib/web/email/participation.ex:70 #, elixir-format +#: lib/web/email/participation.ex:70 msgid "Your participation to event %{title} has been rejected" msgstr "Su participación en el evento %{title} ha sido rechazada" -#: lib/web/email/event.ex:37 #, elixir-format +#: lib/web/email/event.ex:37 msgid "Event %{title} has been updated" msgstr "El evento %{title} ha sido actualizado" -#: lib/web/templates/email/event_updated.text.eex:15 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:15 msgid "New title: %{title}" msgstr "Nuevo título: %{title}" -#: lib/web/templates/email/password_reset.text.eex:5 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:5 msgid "You requested a new password for your account on %{instance}." msgstr "Solicitó una nueva contraseña para su cuenta en %{instancia}." -#: lib/web/templates/email/email.html.eex:85 #, elixir-format +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Advertencia" -#: lib/web/email/participation.ex:135 #, elixir-format +#: lib/web/email/participation.ex:135 msgid "Confirm your participation to event %{title}" msgstr "Confirme su participación en el evento %{title}" -#: lib/web/templates/api/privacy.html.eex:75 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:75 msgctxt "terms" msgid "An internal ID for your current selected identity" msgstr "Un ID interno para su identidad seleccionada actualmente" -#: lib/web/templates/api/privacy.html.eex:74 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:74 msgctxt "terms" msgid "An internal user ID" msgstr "Un ID de usuario interna" -#: lib/web/templates/api/privacy.html.eex:37 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:37 msgctxt "terms" msgid "Any of the information we collect from you may be used in the following ways:" msgstr "" "Cualquier información que recopilemos sobre usted puede usarse de las " "siguientes maneras:" -#: lib/web/templates/api/privacy.html.eex:9 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:9 msgctxt "terms" msgid "Basic account information" msgstr "Información básica de la cuenta" -#: lib/web/templates/api/privacy.html.eex:25 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:25 msgctxt "terms" msgid "Do not share any dangerous information over Mobilizon." msgstr "No comparta ninguna información peligrosa a través de Mobilizon." -#: lib/web/templates/api/privacy.html.eex:90 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:90 msgctxt "terms" msgid "Do we disclose any information to outside parties?" msgstr "¿Divulgamos alguna información a terceros?" -#: lib/web/templates/api/privacy.html.eex:68 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:68 msgctxt "terms" msgid "Do we use cookies?" msgstr "¿Usamos cookies?" -#: lib/web/templates/api/privacy.html.eex:51 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:51 msgctxt "terms" msgid "How do we protect your information?" msgstr "¿Cómo protegemos tu información?" -#: lib/web/templates/api/privacy.html.eex:29 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:29 msgctxt "terms" msgid "IPs and other metadata" msgstr "dirección IP y otros metadatos" -#: lib/web/templates/api/privacy.html.eex:17 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:17 msgctxt "terms" msgid "Published events and comments" msgstr "Eventos publicados y comentarios" -#: lib/web/templates/api/privacy.html.eex:64 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:64 msgctxt "terms" msgid "Retain the IP addresses associated with registered users no more than 12 months." msgstr "" "Conserva las direcciones IP asociadas con usuarios registrados no más de 12 " "meses." -#: lib/web/templates/api/privacy.html.eex:76 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:76 msgctxt "terms" msgid "Tokens to authenticate you" msgstr "Fichas para \"autenticarte\"" -#: lib/web/templates/api/privacy.html.eex:31 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:31 msgctxt "terms" msgid "We also may retain server logs which include the IP address of every request to our server." msgstr "" "También podemos conservar los registros del servidor que incluyen la " "dirección IP de cada solicitud a nuestro servidor." -#: lib/web/templates/api/privacy.html.eex:70 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:70 msgctxt "terms" msgid "We store the following information on your device when you connect:" msgstr "" "Almacenamos la siguiente información en tu dispositivo cuando te conectas:" -#: lib/web/templates/api/privacy.html.eex:58 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:58 msgctxt "terms" msgid "We will make a good faith effort to:" msgstr "Haremos un esfuerzo de buena fe para:" -#: lib/web/templates/api/privacy.html.eex:35 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:35 msgctxt "terms" msgid "What do we use your information for?" msgstr "¿Para qué utilizamos tu información?" -#: lib/web/templates/api/privacy.html.eex:57 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:57 msgctxt "terms" msgid "What is our data retention policy?" msgstr "¿Cuál es nuestra política de retención de datos?" -#: lib/web/templates/api/privacy.html.eex:67 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:67 msgctxt "terms" msgid "You may irreversibly delete your account at any time." msgstr "Puede eliminar irreversiblemente su cuenta en cualquier momento." -#: lib/web/templates/api/privacy.html.eex:115 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:115 msgctxt "terms" msgid "Changes to our Privacy Policy" msgstr "Cambios a nuestra política de privacidad" -#: lib/web/templates/api/privacy.html.eex:106 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:106 msgctxt "terms" msgid "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site." msgstr "" @@ -284,8 +284,8 @@ msgstr "" "https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\"> " "Reglamento general de protección de datos ) no utilice este sitio ." -#: lib/web/templates/api/privacy.html.eex:109 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:109 msgctxt "terms" msgid "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site." msgstr "" @@ -296,30 +296,30 @@ msgstr "" "Ley de protección de la privacidad en línea para niños ) no utilice este " "sitio." -#: lib/web/templates/api/privacy.html.eex:117 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:117 msgctxt "terms" msgid "If we decide to change our privacy policy, we will post those changes on this page." msgstr "" "Si decidimos cambiar nuestra política de privacidad, publicaremos esos " "cambios en esta página." -#: lib/web/templates/api/privacy.html.eex:112 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:112 msgctxt "terms" msgid "Law requirements can be different if this server is in another jurisdiction." msgstr "" "Los requisitos legales pueden ser diferentes si este servidor se encuentra " "en otra jurisdicción." -#: lib/web/templates/api/privacy.html.eex:103 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:103 msgctxt "terms" msgid "Site usage by children" msgstr "Uso del sitio por niños" -#: lib/web/templates/api/privacy.html.eex:47 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:47 msgctxt "terms" msgid "The email address you provide may be used to send you information, updates and notifications about other people\n interacting with your content or sending you messages and to respond to inquiries, and/or other requests or\n questions." msgstr "" @@ -330,8 +330,8 @@ msgstr "" "consultas y / u otras solicitudes o\n" " preguntas." -#: lib/web/templates/api/privacy.html.eex:45 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:45 msgctxt "terms" msgid "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban\n evasion or other violations." msgstr "" @@ -339,8 +339,8 @@ msgstr "" "dirección IP con otras conocidas para determinar la prohibición,\n" " evasión u otras violaciones." -#: lib/web/templates/api/privacy.html.eex:43 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:43 msgctxt "terms" msgid "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to\n interact with other people's content and post your own content if you are logged in." msgstr "" @@ -349,89 +349,89 @@ msgstr "" " interactuar con el contenido de otras personas y publicar tu propio " "contenido si ha iniciado sesión." -#: lib/web/templates/api/privacy.html.eex:6 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:6 msgctxt "terms" msgid "What information do we collect?" msgstr "¿Qué información recopilamos?" -#: lib/web/email/user.ex:176 #, elixir-format +#: lib/web/email/user.ex:176 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon en %{instance}: confirma tu dirección de correo electrónico" -#: lib/web/email/user.ex:152 #, elixir-format +#: lib/web/email/user.ex:152 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon en %{instance}: correo electrónico modificado" -#: lib/web/email/notification.ex:47 #, elixir-format +#: lib/web/email/notification.ex:47 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Un evento programado para hoy" msgstr[1] "%{nb_events} eventos planeados hoy" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "Tienes un evento hoy:" msgstr[1] "Tienes %{total} eventos hoy:" -#: lib/web/templates/email/group_invite.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_invite.text.eex:3 msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} te acaba de invitar a unirte a su grupo %{group}" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "¡ Únete a nosotros !" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "No olvides ir a %{title}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Prepárate para %{title}" -#: lib/web/templates/email/group_invite.html.eex:59 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:59 msgid "See my groups" msgstr "Ver mis grupos" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:45 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Para aceptar esta invitación, dirígete a tus grupos." -#: lib/web/templates/email/before_event_notification.text.eex:5 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:5 msgid "View the event on: %{link}" msgstr "Ver el evento actualizado en: %{link}" -#: lib/web/email/group.ex:33 #, elixir-format +#: lib/web/email/group.ex:33 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{Inviter} te ha invitado a unirte al grupo %{group}" -#: lib/web/email/notification.ex:71 #, elixir-format +#: lib/web/email/notification.ex:71 msgid "One event planned this week" msgid_plural "%{nb_events} events planned this week" msgstr[0] "Un evento programado para hoy" msgstr[1] "%{nb_events} eventos planeados hoy" -#: lib/web/email/notification.ex:93 #, elixir-format +#: lib/web/email/notification.ex:93 msgid "One participation request for event %{title} to process" msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" msgstr[0] "Una solicitud para participar en el evento %{title} a procesar" @@ -439,21 +439,21 @@ msgstr[1] "" "%{number_participation_requests} solicitudes para participar en el evento " "%{title} a procesar" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:38 #: lib/web/templates/email/notification_each_week.text.eex:3 -#, elixir-format msgid "You have one event this week:" msgid_plural "You have %{total} events this week:" msgstr[0] "Tienes un evento hoy:" msgstr[1] "Tienes %{total} eventos hoy:" -#: lib/service/metadata/utils.ex:52 #, elixir-format +#: lib/service/metadata/utils.ex:52 msgid "The event organizer didn't add any description." msgstr "El organizador del evento no agregó ninguna descripción." -#: lib/web/templates/api/privacy.html.eex:54 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:54 msgctxt "terms" msgid "We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way algorithm." msgstr "" @@ -463,8 +463,8 @@ msgstr "" "el tráfico entre tus aplicaciones y la API, están protegidas con SSL /TLS, y " "su contraseña se codifica con un fuerte algoritmo unidireccional." -#: lib/web/templates/api/privacy.html.eex:94 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:94 msgctxt "terms" msgid "No. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety." msgstr "" @@ -477,20 +477,20 @@ msgstr "" "de nuestro sitio o proteger los derechos, nuestros o de otros, propiedades o " "seguridad." -#: lib/web/templates/api/terms.html.eex:23 #, elixir-format +#: lib/web/templates/api/terms.html.eex:23 msgctxt "terms" msgid "Accepting these Terms" msgstr "Aceptar estos Términos" -#: lib/web/templates/api/terms.html.eex:27 #, elixir-format +#: lib/web/templates/api/terms.html.eex:27 msgctxt "terms" msgid "Changes to these Terms" msgstr "Cambios a estos Términos de uso" -#: lib/web/templates/api/terms.html.eex:85 #, elixir-format +#: lib/web/templates/api/terms.html.eex:85 msgctxt "terms" msgid "A lot of the content on the Service is from you and others, and we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content." msgstr "" @@ -502,16 +502,16 @@ msgstr "" "responsable y asume todos los riesgos derivados de su uso o su confianza en " "cualquier contenido." -#: lib/web/templates/api/terms.html.eex:60 #, elixir-format +#: lib/web/templates/api/terms.html.eex:60 msgctxt "terms" msgid "Also, you agree that you will not do any of the following in connection with the Service or other users:" msgstr "" "Además, acepta que no hará nada de lo siguiente en relación con el Servicio " "u otros usuarios:" -#: lib/web/templates/api/terms.html.eex:65 #, elixir-format +#: lib/web/templates/api/terms.html.eex:65 msgctxt "terms" msgid "Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties." msgstr "" @@ -519,23 +519,23 @@ msgstr "" "velocidad u otras características diseñadas para proteger el Servicio, los " "usuarios del Servicio o terceros." -#: lib/web/templates/api/terms.html.eex:64 #, elixir-format +#: lib/web/templates/api/terms.html.eex:64 msgctxt "terms" msgid "Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service;" msgstr "" "Recopilar información personal sobre otros usuarios, o intimidar, amenazar, " "acosar o acosar a otros usuarios del Servicio;" -#: lib/web/templates/api/terms.html.eex:55 #, elixir-format +#: lib/web/templates/api/terms.html.eex:55 msgctxt "terms" msgid "Content that is illegal or unlawful, that would otherwise create liability;" msgstr "" "Contenido que es ilegal o ilegal, que de otro modo crearía responsabilidad;" -#: lib/web/templates/api/terms.html.eex:56 #, elixir-format +#: lib/web/templates/api/terms.html.eex:56 msgctxt "terms" msgid "Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party;" msgstr "" @@ -543,48 +543,48 @@ msgstr "" "secreto comercial, derecho de autor, derecho de privacidad, derecho de " "publicidad u otro derecho intelectual u otro derecho de cualquier parte;" -#: lib/web/templates/api/terms.html.eex:42 #, elixir-format +#: lib/web/templates/api/terms.html.eex:42 msgctxt "terms" msgid "Creating Accounts" msgstr "Crear cuentas" -#: lib/web/templates/api/terms.html.eex:89 #, elixir-format +#: lib/web/templates/api/terms.html.eex:89 msgctxt "terms" msgid "Entire Agreement" msgstr "Acuerdo completo" -#: lib/web/templates/api/terms.html.eex:92 #, elixir-format +#: lib/web/templates/api/terms.html.eex:92 msgctxt "terms" msgid "Feedback" msgstr "Comentarios" -#: lib/web/templates/api/terms.html.eex:83 #, elixir-format +#: lib/web/templates/api/terms.html.eex:83 msgctxt "terms" msgid "Hyperlinks and Third Party Content" msgstr "Hipervínculos y contenido de terceros" -#: lib/web/templates/api/terms.html.eex:88 #, elixir-format +#: lib/web/templates/api/terms.html.eex:88 msgctxt "terms" msgid "If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service." msgstr "" "Si incumple alguno de estos Términos, tenemos el derecho de suspender o " "deshabilitar su acceso o uso del Servicio." -#: lib/web/templates/api/terms.html.eex:63 #, elixir-format +#: lib/web/templates/api/terms.html.eex:63 msgctxt "terms" msgid "Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity;" msgstr "" "Suplantar o publicar en nombre de cualquier persona o entidad o tergiversar " "su afiliación con una persona o entidad;" -#: lib/web/templates/api/terms.html.eex:48 #, elixir-format +#: lib/web/templates/api/terms.html.eex:48 msgctxt "terms" msgid "Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness." msgstr "" @@ -592,26 +592,26 @@ msgstr "" "poner a disposición contenido. Usted es responsable del contenido que pone a " "disposición del Servicio, incluida su legalidad, confiabilidad y adecuación." -#: lib/web/templates/api/terms.html.eex:39 #, elixir-format +#: lib/web/templates/api/terms.html.eex:39 msgctxt "terms" msgid "Privacy Policy" msgstr "Política de privacidad" -#: lib/web/templates/api/terms.html.eex:95 #, elixir-format +#: lib/web/templates/api/terms.html.eex:95 msgctxt "terms" msgid "Questions & Contact Information" msgstr "Preguntas e información de contacto" -#: lib/web/templates/api/terms.html.eex:87 #, elixir-format +#: lib/web/templates/api/terms.html.eex:87 msgctxt "terms" msgid "Termination" msgstr "Terminación" -#: lib/web/templates/api/terms.html.eex:62 #, elixir-format +#: lib/web/templates/api/terms.html.eex:62 msgctxt "terms" msgid "Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service;" msgstr "" @@ -620,14 +620,14 @@ msgstr "" "Servicio o que pueda dañar, deshabilitar, sobrecargar o perjudicar el " "funcionamiento del Servicio;" -#: lib/web/templates/api/terms.html.eex:47 #, elixir-format +#: lib/web/templates/api/terms.html.eex:47 msgctxt "terms" msgid "Your Content & Conduct" msgstr "Su contenido y conducta" -#: lib/web/templates/api/terms.html.eex:84 #, elixir-format +#: lib/web/templates/api/terms.html.eex:84 msgctxt "terms" msgid "%{instance_name} makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by %{instance_name} of the site. Use of any such linked website is at the user's own risk." msgstr "" @@ -639,8 +639,8 @@ msgstr "" "no implica la aprobación por % {instance_name} del sitio. El uso de " "cualquier sitio web vinculado es bajo el propio riesgo del usuario." -#: lib/web/templates/api/terms.html.eex:68 #, elixir-format +#: lib/web/templates/api/terms.html.eex:68 msgctxt "terms" msgid "Finally, your use of the Service is also subject to acceptance of the instance's own specific rules regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended." msgstr "" @@ -649,16 +649,16 @@ msgstr "" "código de conducta y las reglas de moderación. Romper esas reglas también " "puede resultar en que su cuenta sea deshabilitada o suspendida." -#: lib/web/templates/api/terms.html.eex:81 #, elixir-format +#: lib/web/templates/api/terms.html.eex:81 msgctxt "terms" msgid "For full details about the Mobilizon software see here." msgstr "" "Para obtener detalles completos sobre el software Mobilizon ver aquí ." -#: lib/web/templates/api/terms.html.eex:18 #, elixir-format +#: lib/web/templates/api/terms.html.eex:18 msgctxt "terms" msgid "Here are the important things you need to know about accessing and using the %{instance_name} (%{instance_url}) website and service (collectively, \"Service\"). These are our terms of service (\"Terms\"). Please read them carefully." msgstr "" @@ -668,8 +668,8 @@ msgstr "" "Estos son nuestros términos de servicio (\"Términos\"). Por favor, léalos " "atentamente." -#: lib/web/templates/api/terms.html.eex:33 #, elixir-format +#: lib/web/templates/api/terms.html.eex:33 msgctxt "terms" msgid "If we make major changes, we will notify our users in a clear and prominent manner. Minor changes may only be highlighted in the footer of our website. It is your responsibility to check the website regularly for changes to these Terms." msgstr "" @@ -678,8 +678,8 @@ msgstr "" "página de nuestro sitio web. Es su responsabilidad revisar el sitio web " "regularmente para ver los cambios a estos Términos." -#: lib/web/templates/api/terms.html.eex:53 #, elixir-format +#: lib/web/templates/api/terms.html.eex:53 msgctxt "terms" msgid "In order to make %{instance_name} a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:" msgstr "" @@ -687,8 +687,8 @@ msgstr "" "publique, enlace ni ponga a disposición en el Servicio ni a través de él " "ninguno de los siguientes:" -#: lib/web/templates/api/terms.html.eex:57 #, elixir-format +#: lib/web/templates/api/terms.html.eex:57 msgctxt "terms" msgid "Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and" msgstr "" @@ -696,8 +696,8 @@ msgstr "" "de teléfono, direcciones de correo electrónico, números de Seguro Social y " "números de tarjetas de crédito); y" -#: lib/web/templates/api/terms.html.eex:52 #, elixir-format +#: lib/web/templates/api/terms.html.eex:52 msgctxt "terms" msgid "Since Mobilizon is a distributed network, it is possible, depending on the visibility rules set to your content, that your content has been distributed to other Mobilizon instances. When you delete your content, we will request those other instances to also delete the content. Our responsibility on the content being deleted from those other instances ends here. If for some reason, some other instance does not delete the content, we cannot be held responsible." msgstr "" @@ -709,8 +709,8 @@ msgstr "" "instancias termina aquí. Si por alguna razón, alguna otra instancia no " "elimina el contenido, no podemos ser responsables." -#: lib/web/templates/api/terms.html.eex:90 #, elixir-format +#: lib/web/templates/api/terms.html.eex:90 msgctxt "terms" msgid "These Terms constitute the entire agreement between you and %{instance_name} regarding the use of the Service, superseding any prior agreements between you and %{instance_name} relating to your use of the Service." msgstr "" @@ -719,8 +719,8 @@ msgstr "" "cualquier acuerdo previo entre usted y %{instance_name} relacionado " "con su uso de el servicio." -#: lib/web/templates/api/terms.html.eex:80 #, elixir-format +#: lib/web/templates/api/terms.html.eex:80 msgctxt "terms" msgid "This Service runs on a Mobilizon instance. This source code is licensed under an AGPLv3 license which means you are allowed to and even encouraged to take the source code, modify it and use it." msgstr "" @@ -730,16 +730,16 @@ msgstr "" "significa que están autorizados e incluso alentados a tomar el código " "fuente, modificarlo y usarlo." -#: lib/web/templates/api/terms.html.eex:58 #, elixir-format +#: lib/web/templates/api/terms.html.eex:58 msgctxt "terms" msgid "Viruses, corrupted data or other harmful, disruptive or destructive files or code." msgstr "" "Virus, datos corruptos u otros archivos o códigos dañinos, perjudiciales o " "destructivos." -#: lib/web/templates/api/terms.html.eex:51 #, elixir-format +#: lib/web/templates/api/terms.html.eex:51 msgctxt "terms" msgid "You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. Web server access logs might also be stored for some time in the system." msgstr "" @@ -749,29 +749,29 @@ msgstr "" "un período de tiempo. Los registros de acceso al servidor web también pueden " "almacenarse durante algún tiempo en el sistema." -#: lib/web/templates/api/terms.html.eex:96 #, elixir-format +#: lib/web/templates/api/terms.html.eex:96 msgctxt "terms" msgid "Questions or comments about the Service may be directed to us at %{contact}" msgstr "" "Las preguntas o comentarios sobre el Servicio pueden dirigirse a% {contact}" -#: lib/web/templates/api/terms.html.eex:79 #, elixir-format +#: lib/web/templates/api/terms.html.eex:79 msgctxt "terms" msgid "Source code" msgstr "Código fuente" -#: lib/web/templates/api/terms.html.eex:93 #, elixir-format +#: lib/web/templates/api/terms.html.eex:93 msgctxt "terms" msgid "We love feedback. Please let us know what you think of the Service, these Terms and, in general, %{instance_name}." msgstr "" "Nos encantan los comentarios. Háganos saber lo que piensa del Servicio, " "estos Términos y, en general, %{instance_name} ." -#: lib/web/templates/api/terms.html.eex:74 #, elixir-format +#: lib/web/templates/api/terms.html.eex:74 msgctxt "terms" msgid "Instance administrators (and community moderators, given the relevant access) are responsible for monitoring and acting on flagged content and other user reports, and have the right and responsibility to remove or edit content that is not aligned to this Instance set of rules, or to suspend, block or ban (temporarily or permanently) any account, community, or instance for breaking these terms, or for other behaviours that they deem inappropriate, threatening, offensive, or harmful." msgstr "" @@ -784,16 +784,16 @@ msgstr "" "incumplir estos términos o por otros comportamientos que consideren " "inapropiados, amenazantes, ofensivos o dañinos." -#: lib/web/templates/api/terms.html.eex:6 #, elixir-format +#: lib/web/templates/api/terms.html.eex:6 msgctxt "terms" msgid "%{instance_name} will not use or transmit or resell your personal data" msgstr "" " %{instance_name} no usará ni transmitirá ni revenderá sus datos " "personales" -#: lib/web/templates/api/terms.html.eex:44 #, elixir-format +#: lib/web/templates/api/terms.html.eex:44 msgctxt "terms" msgid "If you discover or suspect any Service security breaches, please let us know as soon as possible. For security holes in the Mobilizon software itself, please contact its contributors directly." msgstr "" @@ -802,8 +802,8 @@ msgstr "" "de Mobilizon, comuníquese directamente con sus colaboradores ." -#: lib/web/templates/api/terms.html.eex:77 #, elixir-format +#: lib/web/templates/api/terms.html.eex:77 msgctxt "terms" msgid "Instance administrators should ensure that every community hosted on the instance is properly moderated according to the defined rules." msgstr "" @@ -811,8 +811,8 @@ msgstr "" "alojada en la instancia esté moderada adecuadamente de acuerdo con las " "reglas definidas." -#: lib/web/templates/api/terms.html.eex:98 #, elixir-format +#: lib/web/templates/api/terms.html.eex:98 msgctxt "terms" msgid "Originally adapted from the Diaspora* and App.net privacy policies, also licensed under CC BY-SA." msgstr "" @@ -821,8 +821,8 @@ msgstr "" ">App.net privacy policies, also licensed under CC BY-SA." -#: lib/web/templates/api/privacy.html.eex:119 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:119 msgctxt "terms" msgid "Originally adapted from the Mastodon and Discourse privacy policies, also licensed under CC BY-SA." msgstr "" @@ -831,22 +831,22 @@ msgstr "" "políticas de privacidad, también bajo licencia CC BY-SA." -#: lib/web/templates/api/terms.html.eex:3 #, elixir-format +#: lib/web/templates/api/terms.html.eex:3 msgctxt "terms" msgid "Short version" msgstr "Version corta" -#: lib/web/templates/api/terms.html.eex:9 #, elixir-format +#: lib/web/templates/api/terms.html.eex:9 msgctxt "terms" msgid "The service is provided without warranties and these terms may change in the future" msgstr "" "El servicio se brinda sin garantías y estos términos pueden cambiar en el " "futuro" -#: lib/web/templates/api/privacy.html.eex:118 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:118 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 18, 2020." msgstr "" @@ -854,8 +854,8 @@ msgstr "" "licenses/by-sa/4.0/\"> CC BY-SA . Se actualizó por última vez el 18 de " "junio de 2020." -#: lib/web/templates/api/terms.html.eex:97 #, elixir-format +#: lib/web/templates/api/terms.html.eex:97 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 22, 2020." msgstr "" @@ -863,85 +863,85 @@ msgstr "" "licenses/by-sa/4.0/\"> CC BY-SA . Se actualizó por última vez el 22 de " "junio de 2020." -#: lib/web/templates/api/terms.html.eex:8 #, elixir-format +#: lib/web/templates/api/terms.html.eex:8 msgctxt "terms" msgid "You must respect other people and %{instance_name}'s rules when using the service" msgstr "" "Debe respetar las reglas de otras personas y %{instance_name} al " "usar el servicio" -#: lib/web/templates/api/terms.html.eex:7 #, elixir-format +#: lib/web/templates/api/terms.html.eex:7 msgctxt "terms" msgid "You must respect the law when using %{instance_name}" msgstr "Debe respetar la ley cuando use %{instance_name} " -#: lib/web/templates/api/terms.html.eex:5 #, elixir-format +#: lib/web/templates/api/terms.html.eex:5 msgctxt "terms" msgid "Your content is yours" msgstr "Tu contenido es tuyo" -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 msgid "Confirm my e-mail address" msgstr "Confirmar mi dirección de correo electrónico" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Confirm your e-mail" msgstr "Confirme su email" -#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "¡Hola! Te acabas de registrar para unirte a este evento: «%{title}». " "Confirme la dirección de correo electrónico que proporcionó:" +#, elixir-format #: lib/web/templates/email/email.html.eex:114 #: lib/web/templates/email/email.text.eex:8 -#, elixir-format msgid "Need help? Is something not working as expected?" msgstr "¿Necesita ayuda? ¿Algo no está funcionando correctamente?" -#: lib/web/templates/email/registration_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:38 msgid "You created an account on %{host} with this email address. You are one click away from activating it." msgstr "" "Creó una cuenta en %{host} con esta dirección de correo electrónico. " "Estás a un clic de activarlo." -#: lib/web/templates/email/report.html.eex:13 #, elixir-format +#: lib/web/templates/email/report.html.eex:13 msgid "New report on %{instance}" msgstr "Nuevo informe sobre %{instance} " -#: lib/web/templates/email/email_changed_old.html.eex:38 #, elixir-format +#: lib/web/templates/email/email_changed_old.html.eex:38 msgid "The email address for your account on %{host} is being changed to:" msgstr "" "La dirección de correo electrónico de su cuenta en %{host} se " "cambiará a:" -#: lib/web/templates/email/password_reset.html.eex:38 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:38 msgid "You requested a new password for your account on %{instance}." msgstr "Solicitó una nueva contraseña para su cuenta en %{instance} ." -#: lib/web/templates/email/email.text.eex:5 #, elixir-format +#: lib/web/templates/email/email.text.eex:5 msgid "Please do not use it for real purposes." msgstr "Por favor no lo use de ninguna manera real." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:63 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:6 lib/web/templates/email/event_updated.html.eex:133 #: lib/web/templates/email/event_updated.text.eex:24 lib/web/templates/email/notification_each_week.html.eex:70 #: lib/web/templates/email/notification_each_week.text.eex:11 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 -#, elixir-format msgid "Would you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button." msgstr[0] "" @@ -951,9 +951,9 @@ msgstr[1] "" "Si desea cancelar su participación en uno o varios eventos, visite las " "páginas de los eventos a través de los enlaces de arriba y presiona el botón." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:38 #: lib/web/templates/email/pending_participation_notification.text.eex:4 -#, elixir-format msgid "You have one pending attendance request to process:" msgid_plural "You have %{number_participation_requests} attendance requests to process:" msgstr[0] "Tiene una solicitud de participación pendiente de procesar:" @@ -961,66 +961,66 @@ msgstr[1] "" "Tienes %{number_participation_requests} solicitudes de participación " "pendientes de procesar:" -#: lib/web/templates/email/email.text.eex:11 #, elixir-format +#: lib/web/templates/email/email.text.eex:11 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es un servidor de Mobilizon." -#: lib/web/templates/email/email.html.eex:142 #, elixir-format +#: lib/web/templates/email/email.html.eex:142 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es una instancia de Mobilizon." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:13 #: lib/web/templates/email/pending_participation_notification.text.eex:1 -#, elixir-format msgid "A request is pending!" msgstr "¡Hay una solicitud pendiente!" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "An event is upcoming!" msgstr "¡Se acerca un evento!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:13 #: lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Confirm new email" msgstr "Confirme su email" -#: lib/web/templates/email/event_updated.html.eex:84 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:84 msgid "End" msgstr "Final" -#: lib/web/templates/email/event_updated.text.eex:21 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:21 msgid "End %{ends_on}" msgstr "Final %{ends_on}" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event update!" msgstr "¡Evento actualizado!" -#: lib/web/templates/email/report.html.eex:88 #, elixir-format +#: lib/web/templates/email/report.html.eex:88 msgid "Flagged comments" msgstr "Comentarios marcados" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "Good news: one of the event organizers just approved your request. Update your calendar, because you're on the guest list now!" msgstr "" "Buenas noticias: uno de los organizadores del evento acaba de aprobar su " "solicitud. Actualice su calendario, ¡porque ya está en la lista de invitados!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:38 #: lib/web/templates/email/email_changed_new.text.eex:3 -#, elixir-format msgid "Hi there! It seems like you wanted to change the email address linked to your account on %{instance}. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address." msgstr "" "¡Hola! Parece que desea cambiar la dirección de correo electrónico vinculada " @@ -1028,16 +1028,16 @@ msgstr "" "botón de abajo para confirmar el cambio. Luego podrá iniciar sesión en% " "{instance} con esta nueva dirección de correo electrónico." -#: lib/web/templates/email/email_changed_old.text.eex:3 #, elixir-format +#: lib/web/templates/email/email_changed_old.text.eex:3 msgid "Hi there! Just a quick note to confirm that the email address linked to your account on %{host} has been changed from this one to:" msgstr "" "¡Hola! Solo una nota rápida para confirmar que la dirección de correo " "electrónico vinculada a su cuenta en %{host} se ha cambiado de esta a:" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:62 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "If you did not trigger this change yourself, it is likely that someone has gained access to your %{host} account. Please log in and change your password immediately. If you cannot login, contact the admin on %{host}." msgstr "" "Si no activó este cambio usted mismo, es probable que alguien haya obtenido " @@ -1045,174 +1045,174 @@ msgstr "" "inmediatamente. Si no puede iniciar sesión, comuníquese con el administrador " "en %{host}." -#: lib/web/templates/email/password_reset.text.eex:12 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:12 msgid "If you didn't trigger the change yourself, please ignore this message. Your password won't be changed until you click the link above." msgstr "" "Si no activó el cambio usted mismo, ignore este mensaje. Su contraseña no se " "cambiará hasta que haga clic en el enlace de arriba." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:70 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:4 lib/web/templates/email/registration_confirmation.html.eex:45 -#, elixir-format msgid "If you didn't trigger this email, you may safely ignore it." msgstr "Si no activó esta alerta, puede ignorarla con seguridad." +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:63 #: lib/web/templates/email/before_event_notification.text.eex:6 -#, elixir-format msgid "If you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgstr "" "Si necesitas cancelar su participación, sólo accede a la página del evento " "mediante el enlace debajo y presiona el botón." +#, elixir-format #: lib/web/templates/email/email.html.eex:143 #: lib/web/templates/email/email.text.eex:11 -#, elixir-format msgid "Learn more about Mobilizon here!" msgstr "¡Aprenda más sobre Mobilizon aquí!" -#: lib/web/templates/email/event_updated.html.eex:94 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:94 msgid "Location" msgstr "Ubicación" -#: lib/web/templates/email/event_updated.html.eex:104 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:104 msgid "Location address was removed" msgstr "Dirección física fue eliminada" +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:51 #: lib/web/templates/email/pending_participation_notification.text.eex:6 -#, elixir-format msgid "Manage pending requests" msgstr "Gestionar solicitudes de participación pendientes" +#, elixir-format #: lib/web/templates/email/registration_confirmation.html.eex:13 #: lib/web/templates/email/registration_confirmation.text.eex:1 -#, elixir-format msgid "Nearly there!" msgstr "¡Ya casi estas!" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email confirmation" msgstr "Nueva confirmación de correo electrónico" -#: lib/web/templates/email/report.html.eex:106 #, elixir-format +#: lib/web/templates/email/report.html.eex:106 msgid "Reasons for report" msgstr "Razones para informar" -#: lib/web/templates/email/report.html.eex:39 #, elixir-format +#: lib/web/templates/email/report.html.eex:39 msgid "Someone on %{instance} reported the following content for you to analyze:" msgstr "Alguien en %{instance} informó el siguiente contenido:" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:13 #: lib/web/templates/email/event_participation_rejected.text.eex:1 -#, elixir-format msgid "Sorry! You're not going." msgstr "¡Lo siento! No vas." -#: lib/web/templates/email/event_updated.html.eex:74 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:74 msgid "Start" msgstr "Inicio" -#: lib/web/templates/email/event_updated.text.eex:18 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:18 msgid "Start %{begins_on}" msgstr "Inicio %{begins_on}" -#: lib/web/templates/email/event_updated.text.eex:3 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:3 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "Ha habido cambios para %{title}, así que pensamos en avisarle." +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:55 #: lib/web/templates/email/event_updated.text.eex:11 -#, elixir-format msgid "This event has been cancelled by its organizers. Sorry!" msgstr "Este evento ha sido cancelado por sus organizadores. ¡Lo siento!" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:51 #: lib/web/templates/email/event_updated.text.eex:7 -#, elixir-format msgid "This event has been confirmed" msgstr "El evento ha sido confirmado" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:53 #: lib/web/templates/email/event_updated.text.eex:9 -#, elixir-format msgid "This event has yet to be confirmed: organizers will let you know if they do confirm it." msgstr "" "Este evento aún no se ha confirmado: los organizadores te avisarán si lo " "confirman." +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your request." msgstr "" "Lamentablemente, los organizadores rechazaron tu solicitud de participación." -#: lib/web/templates/email/email_changed_new.html.eex:51 #, elixir-format +#: lib/web/templates/email/email_changed_new.html.eex:51 msgid "Verify your email address" msgstr "Verifica tu dirección de correo electrónico" -#: lib/web/templates/email/report.html.eex:126 #, elixir-format +#: lib/web/templates/email/report.html.eex:126 msgid "View report" msgstr "Ver el informe" -#: lib/web/templates/email/report.text.eex:24 #, elixir-format +#: lib/web/templates/email/report.text.eex:24 msgid "View report:" msgstr "Ver el informe:" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:58 #: lib/web/templates/email/event_participation_confirmed.html.eex:58 -#, elixir-format msgid "Visit event page" msgstr "Visita la página del evento" -#: lib/web/templates/email/event_updated.html.eex:121 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:121 msgid "Visit the updated event page" msgstr "Visita la página del evento actualizada" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "Visit the updated event page: %{link}" msgstr "Ver el evento actualizado en: %{link}" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:13 #: lib/web/templates/email/notification_each_week.text.eex:1 -#, elixir-format msgid "What's up this week?" msgstr "¿Qué pasa esta semana?" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "What's up today?" msgstr "Qué pasa hoy?" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:70 #: lib/web/templates/email/event_participation_approved.text.eex:11 lib/web/templates/email/event_participation_confirmed.html.eex:70 #: lib/web/templates/email/event_participation_confirmed.text.eex:6 -#, elixir-format msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button." msgstr "" "Si desea actualizar o cancelar su asistencia, simplemente acceda a la página " "del evento a través del enlace de arriba y haga clic en el botón Asistir." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:64 #: lib/web/templates/email/pending_participation_notification.text.eex:8 -#, elixir-format msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »." msgstr "" "Recibió este correo electrónico porque eligió recibir notificaciones de " @@ -1220,130 +1220,130 @@ msgstr "" "cambiar la configuración de notificaciones en la configuración de su cuenta " "de usuario en «Notificaciones»." -#: lib/web/templates/email/event_participation_rejected.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:5 msgid "You issued a request to attend %{title}." msgstr "Envió una solicitud para asistir a %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.text.eex:5 #: lib/web/templates/email/event_participation_confirmed.text.eex:3 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Solicitaste participar en el evento %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:13 #: lib/web/templates/email/event_participation_confirmed.html.eex:13 lib/web/templates/email/event_participation_confirmed.text.eex:1 -#, elixir-format msgid "You're going!" msgstr "¡Vas!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:64 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Si no activó el cambio usted mismo, ignore este mensaje." -#: lib/web/templates/email/email.html.eex:89 #, elixir-format +#: lib/web/templates/email/email.html.eex:89 msgid "Please do not use it for real purposes." msgstr "Por favor no lo use de ninguna manera real." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:45 #: lib/web/templates/email/group_member_removal.text.eex:5 -#, elixir-format msgid "If you feel this is an error, you may contact the group's administrators so that they can add you back." msgstr "" "Si cree que esto es un error, puede comunicarse con los administradores del " "grupo para que lo puedan integrar de nuevo." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:13 #: lib/web/templates/email/group_member_removal.text.eex:1 -#, elixir-format msgid "So long, and thanks for the fish!" msgstr "¡Hasta luego y gracias por el pescado!" -#: lib/web/email/group.ex:63 #, elixir-format +#: lib/web/email/group.ex:63 msgid "You have been removed from group %{group}" msgstr "Ha sido eliminado del grupo %{group}" -#: lib/web/templates/email/group_member_removal.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_member_removal.text.eex:3 msgid "You have been removed from group %{group}. You will not be able to access this group's private content anymore." msgstr "" "Se le ha eliminado del grupo %{group}. Ya no podrá acceder al contenido " "privado de este grupo." -#: lib/web/templates/email/group_invite.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:38 msgid "%{inviter} just invited you to join their group %{link_start}%{group}%{link_end}" msgstr "" "%{inviter} le acaba de invitar a unirse a su grupo% {link_start} " "%{group %{link_end}" -#: lib/web/templates/email/group_member_removal.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_member_removal.html.eex:38 msgid "You have been removed from group %{link_start}%{group}%{link_end}. You will not be able to access this group's private content anymore." msgstr "" "Ha sido eliminado del grupo% {link_start} %{group} % {link_end}. Ya " "no podrá acceder al contenido privado de este grupo." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:54 #: lib/web/templates/email/group_suspension.text.eex:7 -#, elixir-format msgid "As this group was located on another instance, it will continue to work for other instances than this one." msgstr "" "Como este grupo estaba ubicado en otra instancia, seguirá funcionando para " "otras instancias además de esta." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:46 #: lib/web/templates/email/group_suspension.text.eex:5 -#, elixir-format msgid "As this group was located on this instance, all of it's data has been irretrievably deleted." msgstr "" "Como este grupo estaba ubicado en esta instancia, todos sus datos se han " "eliminado de forma irremediable." +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:38 #: lib/web/templates/email/group_deletion.text.eex:3 -#, elixir-format msgid "The administrator %{author} deleted group %{group}. All of the group's events, discussions, posts and todos have been deleted." msgstr "" "El administrador %{author} ha eliminado el grupo %{group}. Todos los " "eventos, discusiones, publicaciones y tareas del grupo se han eliminado ." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:13 #: lib/web/templates/email/group_suspension.text.eex:1 -#, elixir-format msgid "The group %{group} has been suspended on %{instance}!" msgstr "¡El grupo %{group} ha sido suspendido en %{instance}!" +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:13 #: lib/web/templates/email/group_deletion.text.eex:1 -#, elixir-format msgid "The group %{group} was deleted on %{instance}!" msgstr "¡El grupo %{group} fue eliminado en %{instance}!" +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:38 #: lib/web/templates/email/group_suspension.text.eex:3 -#, elixir-format msgid "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group." msgstr "" "El equipo de moderación de su instancia ha decidido suspender a %{group_name}" " (%{group_address}). Ya no eres miembro de este grupo." -#: lib/web/email/group.ex:136 #, elixir-format +#: lib/web/email/group.ex:136 msgid "The group %{group} has been deleted on %{instance}" msgstr "El grupo %{group} se eliminó en %{instance}" -#: lib/web/email/group.ex:97 #, elixir-format +#: lib/web/email/group.ex:97 msgid "The group %{group} has been suspended on %{instance}" msgstr "El grupo %{group} ha sido suspendido en %{instance}" -#: lib/web/templates/api/terms.html.eex:24 #, elixir-format +#: lib/web/templates/api/terms.html.eex:24 msgctxt "terms" msgid "By accessing or using the Service, this means you agree to be bound by all the terms below. If these terms are in any way unclear, please let us know by contacting %{contact}." msgstr "" @@ -1351,8 +1351,8 @@ msgstr "" "todos los términos a continuación. Si estos términos no son claros de alguna " "manera, háganoslo saber poniéndose en contacto con %{contact}." -#: lib/web/templates/api/terms.html.eex:40 #, elixir-format +#: lib/web/templates/api/terms.html.eex:40 msgctxt "terms" msgid "For information about how we collect and use information about users of the Service, please check our privacy policy." msgstr "" @@ -1360,22 +1360,22 @@ msgstr "" "sobre los usuarios del Servicio, consulte nuestra " "política de privacidad ." -#: lib/web/templates/api/terms.html.eex:36 #, elixir-format +#: lib/web/templates/api/terms.html.eex:36 msgctxt "terms" msgid "If you continue to use the Service after the revised Terms go into effect, you accept the revised Terms." msgstr "" "Si continúa utilizando el Servicio después de que los Términos revisados " "entren en vigencia, entonces ha aceptado los Términos revisados." -#: lib/web/templates/api/privacy.html.eex:78 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:78 msgctxt "terms" msgid "If you delete this information, you need to login again." msgstr "Si eliminas esta información, deberás iniciar sesión nuevamente." -#: lib/web/templates/api/privacy.html.eex:80 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:80 msgctxt "terms" msgid "If you're not connected, we don't store any information on your device, unless you participate in an event anonymously. In this specific case we store the hash of an unique identifier for the event and participation status in your browser so that we may display participation status. Deleting this information will only stop displaying participation status in your browser." msgstr "" @@ -1386,22 +1386,22 @@ msgstr "" "información solo dejará de mostrar el estado de participación en tu " "navegador." -#: lib/web/templates/api/privacy.html.eex:87 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:87 msgctxt "terms" msgid "Note: This information is stored in your localStorage and not your cookies." msgstr "" "Nota: Estas informaciones se almacenan en tu almacenamiento local y no en " "tus cookies." -#: lib/web/templates/api/terms.html.eex:71 #, elixir-format +#: lib/web/templates/api/terms.html.eex:71 msgctxt "terms" msgid "Our responsibility" msgstr "Nuestra responsabilidad" -#: lib/web/templates/api/privacy.html.eex:61 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:61 msgctxt "terms" msgid "Retain server logs containing the IP address of all requests to this server, insofar as such logs are kept, no more than 90 days." msgstr "" @@ -1409,9 +1409,9 @@ msgstr "" "las solicitudes a este servidor, en la medida en que dichos registros se " "mantengan, no más de 90 días." +#, elixir-format #: lib/web/templates/api/privacy.html.eex:3 #: lib/web/templates/api/terms.html.eex:15 -#, elixir-format msgctxt "terms" msgid "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We have provided a glossary to help you understand them better." msgstr "" @@ -1420,8 +1420,8 @@ msgstr "" "Proporcionamos un glosario para ayudarlo a " "comprenderlos mejor." -#: lib/web/templates/api/terms.html.eex:45 #, elixir-format +#: lib/web/templates/api/terms.html.eex:45 msgctxt "terms" msgid "We are not liable for any loss you may incur as a result of someone else using your email or password, either with or without your knowledge." msgstr "" @@ -1429,8 +1429,8 @@ msgstr "" "resultado de que otra persona use su correo electrónico o contraseña, ya sea " "con o sin su conocimiento." -#: lib/web/templates/api/terms.html.eex:50 #, elixir-format +#: lib/web/templates/api/terms.html.eex:50 msgctxt "terms" msgid "We cannot be held responsible should a programming or administrative error make your content visible to a larger audience than intended. Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service." msgstr "" @@ -1440,8 +1440,8 @@ msgstr "" "todos sus derechos sobre el contenido que publica, vincula y de lo contrario " "pone a disposición en oa través del Servicio." -#: lib/web/templates/api/privacy.html.eex:10 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:10 msgctxt "terms" msgid "We collect information from you when you register on this instance and gather data when you participate in the platform by reading, writing, and interacting with content shared here. If you register on this instance, you will be asked to enter an email address, a password (hashed) and at least an username. Your email address will be verified by an email containing a unique link. Once the link is activated, we know you control that email address. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly. You may however visit this instance without registering." msgstr "" @@ -1459,8 +1459,8 @@ msgstr "" "imagen del encabezado siempre se listan públicamente. Sin " "embargo, también puedes visitar este servidor sin registrarse." -#: lib/web/templates/api/terms.html.eex:30 #, elixir-format +#: lib/web/templates/api/terms.html.eex:30 msgctxt "terms" msgid "We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature." msgstr "" @@ -1468,8 +1468,8 @@ msgstr "" "Por ejemplo, es posible que necesitemos cambiar estos Términos si " "presentamos una nueva función o por alguna otra razón." -#: lib/web/templates/api/terms.html.eex:20 #, elixir-format +#: lib/web/templates/api/terms.html.eex:20 msgctxt "terms" msgid "When we say “we”, “our”, or “us” in this document, we are referring to the owners, operators and administrators of this Mobilizon instance. The Mobilizon software is provided by the team of Mobilizon contributors, supported by Framasoft, a French not-for-profit organization advocating for Free/Libre Software. Unless explicitly stated, this Mobilizon instance is an independent service using Mobilizon's source code. You may find more information about this instance on the \"About this instance\" page." msgstr "" @@ -1484,8 +1484,8 @@ msgstr "" "información sobre esta instancia en la página " "\"Acerca de esta instancia\" ." -#: lib/web/templates/api/terms.html.eex:43 #, elixir-format +#: lib/web/templates/api/terms.html.eex:43 msgctxt "terms" msgid "When you create an account you agree to maintain the security and confidentiality of your password and accept all risks of unauthorized access to your account data and any other information you provide to %{instance_name}." msgstr "" @@ -1494,8 +1494,8 @@ msgstr "" "autorizado a los datos de su cuenta y cualquier otra información que " "proporcione a %{instance_name}." -#: lib/web/templates/api/terms.html.eex:49 #, elixir-format +#: lib/web/templates/api/terms.html.eex:49 msgctxt "terms" msgid "When you post, link or otherwise make available content to the Service, you grant us the right and license to display and distribute your content on or through the Service (including via applications). We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. The displaying and distribution of your content happens only according to the visibility rules you have set for the content. We will not modify the visibility of the content you have set." msgstr "" @@ -1508,8 +1508,8 @@ msgstr "" "visibilidad que ha establecido para el contenido. No modificaremos la " "visibilidad del contenido que ha establecido." -#: lib/web/templates/api/privacy.html.eex:19 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:19 msgctxt "terms" msgid "Your events and comments are delivered to other instances that follow your own, meaning they are delivered to different instances and copies are stored there. When you delete events or comments, this is likewise delivered to these other instances. All interactions related to event features - such as joining an event - or group features - such as managing resources - are federated as well. Please keep in mind that the operators of the instance and any receiving instances may view such messages and information, and that recipients may screenshot, copy or otherwise re-share them." msgstr "" @@ -1521,8 +1521,8 @@ msgstr "" "servidor y cualquier servidor receptor puede ver dichos mensajes, y los " "destinatarios pueden capturar, copiar o de incluso volver a compartirlos." -#: lib/web/templates/api/privacy.html.eex:99 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:99 msgctxt "terms" msgid "Your content may be downloaded by other instances in the network. Your public events and comments are delivered to the instances following your own instance. Content created through a group is forwarded to all the instances of all the members of the group, insofar as these members reside on a different instance than this one." msgstr "" @@ -1531,203 +1531,208 @@ msgstr "" "mensajes directos se entregan a los servidores de los destinatarios, en la " "medida en que estos destinatarios residen en un servidor diferente a este." -#: lib/web/templates/email/event_participation_confirmed.text.eex:4 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.text.eex:4 msgid "You have confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Ha confirmado su participación. Actualice su calendario, ¡porque ya está en " "la lista de invitados!" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:38 #: lib/web/templates/email/event_participation_confirmed.html.eex:38 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Solicitaste participar en el evento%{title}." -#: lib/web/email/participation.ex:91 #, elixir-format +#: lib/web/email/participation.ex:91 msgid "Your participation to event %{title} has been confirmed" msgstr "Su participación en el evento %{title} ha sido aprobada" -#: lib/web/templates/email/report.html.eex:41 #, elixir-format +#: lib/web/templates/email/report.html.eex:41 msgid "%{reporter} reported the following content." msgstr "%{reporter} informó el siguiente contenido." -#: lib/web/templates/email/report.text.eex:5 #, elixir-format +#: lib/web/templates/email/report.text.eex:5 msgid "Group %{group} was reported" msgstr "Se informó el grupo %{group}" -#: lib/web/templates/email/report.html.eex:51 #, elixir-format +#: lib/web/templates/email/report.html.eex:51 msgid "Group reported" msgstr "Grupo informado" -#: lib/web/templates/email/report.text.eex:7 #, elixir-format +#: lib/web/templates/email/report.text.eex:7 msgid "Profile %{profile} was reported" msgstr "Se informó el perfil %{profile}" -#: lib/web/templates/email/report.html.eex:56 #, elixir-format +#: lib/web/templates/email/report.html.eex:56 msgid "Profile reported" msgstr "Perfil informado" -#: lib/web/templates/email/event_participation_confirmed.html.eex:45 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.html.eex:45 msgid "You have now confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Ahora ha confirmado su participación. Actualice su calendario, ¡porque ya " "está en la lista de invitados!" -#: lib/mobilizon/posts/post.ex:94 #, elixir-format +#: lib/mobilizon/posts/post.ex:94 msgid "A text is required for the post" msgstr "Se requiere un texto para la publicación" -#: lib/mobilizon/posts/post.ex:93 #, elixir-format +#: lib/mobilizon/posts/post.ex:93 msgid "A title is required for the post" msgstr "Se requiere un título para la publicación" -#: lib/web/templates/email/instance_follow.text.eex:3 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:3 msgid "%{name} (%{domain}) just requested to follow your instance." msgstr "%{name} (%{domain}) sólo solicitó seguir su instancia." -#: lib/web/email/follow.ex:54 #, elixir-format +#: lib/web/email/follow.ex:54 msgid "%{name} requests to follow your instance" msgstr "%{name} solicita seguir tu instancia" -#: lib/web/templates/email/instance_follow.html.eex:38 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:38 msgid "%{name} (%{domain}) just requested to follow your instance. If you accept, this instance will receive all of your instance's public events." msgstr "" "%{name} (%{domain}) solo pedí seguir tu instancia. Si acepta, su " "instancia recibirá todos los eventos públicos para su instancia." -#: lib/web/templates/email/instance_follow.text.eex:4 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:4 msgid "If you accept, this instance will receive all of your public events." msgstr "Si acepta, esta instancia recibirá todos sus eventos públicos." -#: lib/web/email/follow.ex:48 #, elixir-format +#: lib/web/email/follow.ex:48 msgid "Instance %{name} (%{domain}) requests to follow your instance" msgstr "La instancia %{name} (%{domain}) solicita seguir tu instancia" -#: lib/web/templates/email/instance_follow.html.eex:66 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:66 msgid "See the federation settings" msgstr "Ver la configuración de la federación" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:52 #: lib/web/templates/email/instance_follow.text.eex:6 -#, elixir-format msgid "To accept this invitation, head over to the instance's admin settings." msgstr "Para aceptar esta invitación, dirígete a tus grupos." +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:13 #: lib/web/templates/email/instance_follow.text.eex:1 -#, elixir-format msgid "Want to connect?" msgstr "¿Quieres conectarte?" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:45 #: lib/web/templates/email/instance_follow.text.eex:5 -#, elixir-format msgid "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." msgstr "" "Nota: el hecho que %{name} (%{domain} te siga, no implica necesariamente que " "sigas esta instancia, pero puedes solicitar seguirla también." -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "¡Hola! Te acabas de registrar para unirte a este evento: «%{title}». " "Confirme la dirección de correo electrónico que proporcionó:" -#: lib/web/templates/email/event_participation_rejected.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.html.eex:38 msgid "You issued a request to attend %{title}." msgstr "Envió una solicitud para asistir a %{title}." -#: lib/web/templates/email/event_updated.html.eex:64 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Título del evento" -#: lib/web/templates/email/event_updated.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "Ha habido cambios para%{title}, así que pensamos en avisarle." -#: lib/web/templates/error/500_page.html.eex:7 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 msgid "This page is not correct" msgstr "Esta página no es correcta" -#: lib/web/templates/error/500_page.html.eex:50 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:50 msgid "We're sorry, but something went wrong on our end." msgstr "Lo sentimos, pero algo salió mal por nuestra parte." +#, elixir-format #: lib/web/templates/email/email.html.eex:88 #: lib/web/templates/email/email.text.eex:4 -#, elixir-format msgid "This is a demonstration site to test Mobilizon." msgstr "Este es un sitio de demostración para probar Mobilizon." +#, elixir-format #: lib/service/metadata/actor.ex:53 lib/service/metadata/actor.ex:60 #: lib/service/metadata/instance.ex:54 lib/service/metadata/instance.ex:60 -#, elixir-format msgid "%{name}'s feed" msgstr "Flujo de %{name}" -#: lib/service/export/feed.ex:120 #, elixir-format +#: lib/service/export/feed.ex:120 msgid "%{actor}'s private events feed on %{instance}" msgstr "Flujo de eventos privados de %{actor} a %{instance}" -#: lib/service/export/feed.ex:115 #, elixir-format +#: lib/service/export/feed.ex:115 msgid "%{actor}'s public events feed on %{instance}" msgstr "Flujo público de eventos de %{actor} a %{instance}" -#: lib/service/export/feed.ex:220 #, elixir-format +#: lib/service/export/feed.ex:220 msgid "Feed for %{email} on %{instance}" msgstr "Flujo para %{email} en %{instance}" -#: lib/web/templates/error/500_page.html.eex:57 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:57 msgid "If the issue persists, you may contact the server administrator at %{contact}." msgstr "" "Si el problema persiste, puede comunicarse con el administrador del servidor " "en %{contact}." -#: lib/web/templates/error/500_page.html.eex:55 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:55 msgid "If the issue persists, you may try to contact the server administrator." msgstr "" "Si el problema persiste, puede intentar comunicarse con el administrador del " "servidor." -#: lib/web/templates/error/500_page.html.eex:68 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:68 msgid "Technical details" msgstr "Detalles técnicos" -#: lib/web/templates/error/500_page.html.eex:52 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:52 msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" "El servidor de Mobilizon %{instance} parece estar temporalmente inactivo." -#: lib/service/export/feed.ex:73 #, elixir-format +#: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "Flujo público para %{instance}" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/fi/LC_MESSAGES/activity.po b/priv/gettext/fi/LC_MESSAGES/activity.po new file mode 100644 index 00000000..435aa72d --- /dev/null +++ b/priv/gettext/fi/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: fi\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/fi/LC_MESSAGES/default.po b/priv/gettext/fi/LC_MESSAGES/default.po index 0746805e..59051489 100644 --- a/priv/gettext/fi/LC_MESSAGES/default.po +++ b/priv/gettext/fi/LC_MESSAGES/default.po @@ -1701,3 +1701,8 @@ msgstr "Mobilizon-palvelin näyttää olevan väliakaisesti alhaalla." #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/activity.po b/priv/gettext/fr/LC_MESSAGES/activity.po new file mode 100644 index 00000000..36413eb3 --- /dev/null +++ b/priv/gettext/fr/LC_MESSAGES/activity.po @@ -0,0 +1,240 @@ +# # "msgid"s in this file come from POT (.pot) files. +# # +# # Do not add, change, or remove "msgid"s manually here as +# # they're tied to the ones in the corresponding POT file +# # (with the same domain). +# # +# # Use "mix gettext.extract --merge" or "mix gettext.merge" +# # to merge POT files into PO files. +msgid "" +msgstr "" +"Language: fr\n" +"Plural-Forms: nplurals=2;\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "%{member} a accepté l'invitation à rejoindre le groupe." + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "%{member} a refusé l'invitation à rejoindre le groupe." + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "%{member} a demandé à rejoindre le groupe." + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "%{member} a été invité⋅e par %{profile}." + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "%{profile} a ajouté le ou la membre %{membre}." + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "%{profile} a archivé la discussion %{discussion}." + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "%{profile} a créé la discussion %{discussion}." + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "%{profile} a créé le dossier %{resource}." + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "%{profile} a créé le groupe %{group}." + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "%{profile} a créé la resource %{resource}." + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "%{profile} a créé la discussion %{discussion}." + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "%{profile} a supprimé le dossier %{resource}." + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "%{profile} a supprimé la resource %{resource}." + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "%{profile} a exclu le ou la membre %{membre}." + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "%{profile} a déplacé le dossier %{resource}." + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "%{profile} a déplacé la ressource %{resource}." + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "%{profile} a quitté le groupe." + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "%{profile} a renommé la discussion %{discussion}." + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "%{profile} a renommé le dossier %{old_resource_title} en %{resource}." + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "%{profile} a renommé la resource %{old_resource_title} en %{resource}." + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "%{profile} a répondu à la discussion %{discussion}." + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "%{profile} a mis à jour le groupe %{group}." + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "%{profile} a mis à jour le membre %{member}." + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "L'événement %{event} a été créé par %{profile}." + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "L'événement %{event} a été supprimé par %{profile}." + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "L'événement %{event} a été mis à jour par %{profile}." + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "Le billet %{post} a été créé par %{profile}." + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "Le billet %{post} a été supprimé par %{profile}." + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "Le billet %{post} a été mis à jour par %{profile}." + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "%{member} a rejoint le groupe." + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "%{profile} a posté un commentaire sur l'événement %{event}." + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "%{profile} a répondu à un commentaire sur l'événement %{event}." + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "Vous ne voulez pas recevoir de notifications d'activité ? Vous pouvez changer leur fréquence ou les désactiver dans vos préférences." + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "Voir une activité de plus" +msgstr[1] "Voir %{count} activités de plus" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "Il y a eu une activité !" +msgstr[1] "Il y a eu de l'activité !" diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po index 513b808b..998b12c1 100644 --- a/priv/gettext/fr/LC_MESSAGES/default.po +++ b/priv/gettext/fr/LC_MESSAGES/default.po @@ -12,8 +12,7 @@ msgstr "" "POT-Creation-Date: \n" "PO-Revision-Date: 2021-05-01 10:59+0000\n" "Last-Translator: Thomas Citharel \n" -"Language-Team: French \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,281 +20,281 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.6\n" -#: lib/web/templates/email/password_reset.html.eex:48 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:48 msgid "If you didn't request this, please ignore this email. Your password won't change until you access the link below and create a new one." msgstr "Si vous n'avez pas demandé ceci, vous pouvez ignorer cet email. Votre mot de passe ne changera pas tant que vous n'en créerez pas un nouveau en cliquant sur le lien ci-dessous." -#: lib/web/templates/email/report.html.eex:74 #, elixir-format +#: lib/web/templates/email/report.html.eex:74 msgid "%{title} by %{creator}" msgstr "%{title} par %{creator}" -#: lib/web/templates/email/registration_confirmation.html.eex:58 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:58 msgid "Activate my account" msgstr "Activer mon compte" +#, elixir-format #: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:9 -#, elixir-format msgid "Ask the community on Framacolibri" msgstr "Demander à la communauté sur Framacolibri" -#: lib/web/templates/email/report.text.eex:15 #, elixir-format +#: lib/web/templates/email/report.text.eex:15 msgid "Comments" msgstr "Commentaires" +#, elixir-format #: lib/web/templates/email/report.html.eex:72 #: lib/web/templates/email/report.text.eex:11 -#, elixir-format msgid "Event" msgstr "Événement" -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Instructions pour réinitialiser votre mot de passe sur %{instance}" -#: lib/web/templates/email/report.text.eex:21 #, elixir-format +#: lib/web/templates/email/report.text.eex:21 msgid "Reason" msgstr "Raison" -#: lib/web/templates/email/password_reset.html.eex:61 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:61 msgid "Reset Password" msgstr "Réinitialiser mon mot de passe" -#: lib/web/templates/email/password_reset.html.eex:41 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:41 msgid "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." msgstr "Réinitialiser votre mot de passe est facile. Cliquez simplement sur le bouton et suivez les inscriptions. Vous serez opérationnel en un rien de temps." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Instructions pour confirmer votre compte Mobilizon sur %{instance}" -#: lib/web/email/admin.ex:24 #, elixir-format +#: lib/web/email/admin.ex:24 msgid "New report on Mobilizon instance %{instance}" msgstr "Nouveau signalement sur l'instance Mobilizon %{instance}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:51 #: lib/web/templates/email/before_event_notification.text.eex:4 -#, elixir-format msgid "Go to event page" msgstr "Aller à la page de l'événement" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Nouveau signalement sur %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Participation approuvée" +#, elixir-format #: lib/web/templates/email/password_reset.html.eex:13 #: lib/web/templates/email/password_reset.text.eex:1 -#, elixir-format msgid "Password reset" msgstr "Réinitialisation du mot de passe" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "Réinitialiser votre mot de passe est facile. Cliquez simplement sur le bouton et suivez les instructions. Vous serez opérationnel en un rien de temps." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "Vous avez créé un compte sur %{host} avec cette adresse email. Vous êtes à un clic de l'activer." -#: lib/web/email/participation.ex:112 #, elixir-format +#: lib/web/email/participation.ex:112 msgid "Your participation to event %{title} has been approved" msgstr "Votre participation à l'événement %{title} a été approuvée" -#: lib/web/email/participation.ex:70 #, elixir-format +#: lib/web/email/participation.ex:70 msgid "Your participation to event %{title} has been rejected" msgstr "Votre participation à l'événement %{title} a été rejetée" -#: lib/web/email/event.ex:37 #, elixir-format +#: lib/web/email/event.ex:37 msgid "Event %{title} has been updated" msgstr "L'événement %{title} a été mis à jour" -#: lib/web/templates/email/event_updated.text.eex:15 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:15 msgid "New title: %{title}" msgstr "Nouveau titre : %{title}" -#: lib/web/templates/email/password_reset.text.eex:5 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:5 msgid "You requested a new password for your account on %{instance}." msgstr "Vous avez demandé un nouveau mot de passe pour votre compte sur %{instance}." -#: lib/web/templates/email/email.html.eex:85 #, elixir-format +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Attention" -#: lib/web/email/participation.ex:135 #, elixir-format +#: lib/web/email/participation.ex:135 msgid "Confirm your participation to event %{title}" msgstr "Confirmer ma participation à l'événement %{title}" -#: lib/web/templates/api/privacy.html.eex:75 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:75 msgctxt "terms" msgid "An internal ID for your current selected identity" msgstr "Une identité interne pour l'identité sélectionnée actuellement" -#: lib/web/templates/api/privacy.html.eex:74 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:74 msgctxt "terms" msgid "An internal user ID" msgstr "Une identité utilisateur·ice interne" -#: lib/web/templates/api/privacy.html.eex:37 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:37 msgctxt "terms" msgid "Any of the information we collect from you may be used in the following ways:" msgstr "Les informations que nous vous nous fournissez pourront être utilisées ainsi :" -#: lib/web/templates/api/privacy.html.eex:9 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:9 msgctxt "terms" msgid "Basic account information" msgstr "Informations basiques du compte" -#: lib/web/templates/api/privacy.html.eex:25 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:25 msgctxt "terms" msgid "Do not share any dangerous information over Mobilizon." msgstr "Ne partagez aucune information sensible à l'aide de Mobilizon." -#: lib/web/templates/api/privacy.html.eex:90 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:90 msgctxt "terms" msgid "Do we disclose any information to outside parties?" msgstr "Partageons-nous des informations à des tiers ?" -#: lib/web/templates/api/privacy.html.eex:68 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:68 msgctxt "terms" msgid "Do we use cookies?" msgstr "Utilisons-nous des cookies ?" -#: lib/web/templates/api/privacy.html.eex:51 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:51 msgctxt "terms" msgid "How do we protect your information?" msgstr "Comment protégeons-nous vos informations ?" -#: lib/web/templates/api/privacy.html.eex:29 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:29 msgctxt "terms" msgid "IPs and other metadata" msgstr "Adresses IP et autres métadonnées" -#: lib/web/templates/api/privacy.html.eex:17 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:17 msgctxt "terms" msgid "Published events and comments" msgstr "Événements publiés et commentaires" -#: lib/web/templates/api/privacy.html.eex:64 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:64 msgctxt "terms" msgid "Retain the IP addresses associated with registered users no more than 12 months." msgstr "Ne pas conserver les adresses IP associées aux utilisateur·ices enregistrés pas plus de 12 mois." -#: lib/web/templates/api/privacy.html.eex:76 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:76 msgctxt "terms" msgid "Tokens to authenticate you" msgstr "Jetons pour vous identifier" -#: lib/web/templates/api/privacy.html.eex:31 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:31 msgctxt "terms" msgid "We also may retain server logs which include the IP address of every request to our server." msgstr "Nous pouvons également conserver les données d'authentification y compris les adresses IP de toutes les requêtes de notre serveur." -#: lib/web/templates/api/privacy.html.eex:70 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:70 msgctxt "terms" msgid "We store the following information on your device when you connect:" msgstr "Nous conservons les informations suivantes sur votre appareil lorsque vous vous connectez :" -#: lib/web/templates/api/privacy.html.eex:58 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:58 msgctxt "terms" msgid "We will make a good faith effort to:" msgstr "Nous mettrons tout en possible pour :" -#: lib/web/templates/api/privacy.html.eex:35 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:35 msgctxt "terms" msgid "What do we use your information for?" msgstr "Comment utilisons-nous vos informations ?" -#: lib/web/templates/api/privacy.html.eex:57 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:57 msgctxt "terms" msgid "What is our data retention policy?" msgstr "Quelle est notre politique de conservation des données ?" -#: lib/web/templates/api/privacy.html.eex:67 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:67 msgctxt "terms" msgid "You may irreversibly delete your account at any time." msgstr "Vous pouvez supprimer votre compte à tout moment de façon irréversible." -#: lib/web/templates/api/privacy.html.eex:115 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:115 msgctxt "terms" msgid "Changes to our Privacy Policy" msgstr "Modifications de notre politique de confidentialité" -#: lib/web/templates/api/privacy.html.eex:106 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:106 msgctxt "terms" msgid "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site." msgstr "Si ce serveur est dans l'Union Européenne ou dans l'Espace Economique Européen : nos sites, produits et services sont tous destinés aux personnes âgées de plus de 16 ans. Si vous avez moins de 16 ans, suivant le RGPD (Règlement général sur la protection des données), n'utilisez pas ce site." -#: lib/web/templates/api/privacy.html.eex:109 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:109 msgctxt "terms" msgid "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site." msgstr "Si le serveur est situé aux Etats-Unis : Notre site, nos produits et services sont tous à destination de personnes agées d'au moins 13 ans. Si vous avez moins de 13 ans, d'après les recommandations de COOPA (Children's Online Privacy Protection Act) n'utilisez pas ce site." -#: lib/web/templates/api/privacy.html.eex:117 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:117 msgctxt "terms" msgid "If we decide to change our privacy policy, we will post those changes on this page." msgstr "Si nous décidons de changer notre politique de confidentialité, nous présenterons ces changements sur cette page." -#: lib/web/templates/api/privacy.html.eex:112 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:112 msgctxt "terms" msgid "Law requirements can be different if this server is in another jurisdiction." msgstr "Les conditions juridiques peuvent différer si le serveur est sous une autre juridiction." -#: lib/web/templates/api/privacy.html.eex:103 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:103 msgctxt "terms" msgid "Site usage by children" msgstr "Utilisation du site par des mineurs" -#: lib/web/templates/api/privacy.html.eex:47 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:47 msgctxt "terms" msgid "The email address you provide may be used to send you information, updates and notifications about other people\n interacting with your content or sending you messages and to respond to inquiries, and/or other requests or\n questions." msgstr "" @@ -306,8 +305,8 @@ msgstr "" "répondre à des demandes,\n" "et/ou à d'autres requêtes ou questions." -#: lib/web/templates/api/privacy.html.eex:45 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:45 msgctxt "terms" msgid "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban\n evasion or other violations." msgstr "" @@ -316,8 +315,8 @@ msgstr "" "dans le but de détecter des tentatives de contournement d'un bannissement ou " "d'autres violations." -#: lib/web/templates/api/privacy.html.eex:43 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:43 msgctxt "terms" msgid "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to\n interact with other people's content and post your own content if you are logged in." msgstr "" @@ -326,1106 +325,1111 @@ msgstr "" "avec le contenu d'autres personnes et publier votre propre contenu que si " "vous êtes connecté." -#: lib/web/templates/api/privacy.html.eex:6 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:6 msgctxt "terms" msgid "What information do we collect?" msgstr "Quelles informations collectons-nous ?" -#: lib/web/email/user.ex:176 #, elixir-format +#: lib/web/email/user.ex:176 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon sur %{instance} : confirmez votre adresse email" -#: lib/web/email/user.ex:152 #, elixir-format +#: lib/web/email/user.ex:152 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon sur %{instance} : adresse email modifiée" -#: lib/web/email/notification.ex:47 #, elixir-format +#: lib/web/email/notification.ex:47 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Un événement prévu aujourd'hui" msgstr[1] "%{nb_events} événements prévus aujourd'hui" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "Vous avez un événement aujourd'hui :" msgstr[1] "Vous avez %{total} événements aujourd'hui :" -#: lib/web/templates/email/group_invite.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_invite.text.eex:3 msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} vient de vous inviter à rejoindre son groupe %{group}" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "Rejoignez-nous !" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "N'oubliez pas de vous rendre à %{title}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Préparez vous pour %{title}" -#: lib/web/templates/email/group_invite.html.eex:59 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:59 msgid "See my groups" msgstr "Voir mes groupes" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:45 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Pour accepter cette invitation, rendez-vous dans vos groupes." -#: lib/web/templates/email/before_event_notification.text.eex:5 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:5 msgid "View the event on: %{link}" msgstr "Voir l'événement mis à jour sur : %{link}" -#: lib/web/email/group.ex:33 #, elixir-format +#: lib/web/email/group.ex:33 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "Vous avez été invité par %{inviter} à rejoindre le groupe %{group}" -#: lib/web/email/notification.ex:71 #, elixir-format +#: lib/web/email/notification.ex:71 msgid "One event planned this week" msgid_plural "%{nb_events} events planned this week" msgstr[0] "Un événement prévu cette semaine" msgstr[1] "%{nb_events} événements prévus cette semaine" -#: lib/web/email/notification.ex:93 #, elixir-format +#: lib/web/email/notification.ex:93 msgid "One participation request for event %{title} to process" msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" msgstr[0] "Une demande de participation à l'événement %{title} à traiter" msgstr[1] "%{number_participation_requests} demandes de participation à l'événement %{title} à traiter" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:38 #: lib/web/templates/email/notification_each_week.text.eex:3 -#, elixir-format msgid "You have one event this week:" msgid_plural "You have %{total} events this week:" msgstr[0] "Vous avez un événement aujourd'hui :" msgstr[1] "Vous avez %{total} événements aujourd'hui :" -#: lib/service/metadata/utils.ex:52 #, elixir-format +#: lib/service/metadata/utils.ex:52 msgid "The event organizer didn't add any description." msgstr "L'organisateur·ice de l'événement n'a pas ajouté de description." -#: lib/web/templates/api/privacy.html.eex:54 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:54 msgctxt "terms" msgid "We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way algorithm." msgstr "Nous utilisons plusieurs mesures de sécurité pour assurer la confidentialité de vos informations personnelles lorsque vous soumettez ou accédez à vos informations. Entre autres, votre session de navigateur et la connexion entre vos applications et l'API sont sécurisés par SSL/TLS, et votre mot de passe est haché avec un algorithme fort à sens unique." -#: lib/web/templates/api/privacy.html.eex:94 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:94 msgctxt "terms" msgid "No. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety." msgstr "Non. Nous ne vendons, n’échangeons ou ne transférons d’une quelque manière que soit des informations permettant de vous identifier personnellement. Cela n’inclut pas les tierces parties de confiance qui nous aident à opérer ce site, à conduire nos activités commerciales ou à vous servir, tant qu’elles acceptent de garder ces informations confidentielles. Nous sommes également susceptibles de partager vos informations quand nous pensons que c’est nécessaire pour nous conformer à la loi, pour appliquer les politiques de notre site ainsi que pour défendre nos droits, notre propriété, notre sécurité et celles et ceux d’autres personnes." -#: lib/web/templates/api/terms.html.eex:23 #, elixir-format +#: lib/web/templates/api/terms.html.eex:23 msgctxt "terms" msgid "Accepting these Terms" msgstr "Acceptation de ces Conditions" -#: lib/web/templates/api/terms.html.eex:27 #, elixir-format +#: lib/web/templates/api/terms.html.eex:27 msgctxt "terms" msgid "Changes to these Terms" msgstr "Modifications de ces Conditions d'Utilisation" -#: lib/web/templates/api/terms.html.eex:85 #, elixir-format +#: lib/web/templates/api/terms.html.eex:85 msgctxt "terms" msgid "A lot of the content on the Service is from you and others, and we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content." msgstr "Une grande partie du contenu du Service provient de vous et d'autres personnes, et nous ne l'examinons, ne le vérifions ni ne l'authentifions, et il peut contenir des inexactitudes ou de fausses informations. Nous ne faisons aucune déclaration, garantie ou assurance concernant la qualité, la pertinence, la véracité, l'exactitude ou l'exhaustivité de tout contenu du Service. Vous reconnaissez être seul responsable et assumez tous les risques découlant de votre utilisation ou de votre confiance dans tout contenu." -#: lib/web/templates/api/terms.html.eex:60 #, elixir-format +#: lib/web/templates/api/terms.html.eex:60 msgctxt "terms" msgid "Also, you agree that you will not do any of the following in connection with the Service or other users:" msgstr "De plus, vous acceptez de ne pas faire ce qui suit en relation avec le Service ou les autres utilisateur·ices :" -#: lib/web/templates/api/terms.html.eex:65 #, elixir-format +#: lib/web/templates/api/terms.html.eex:65 msgctxt "terms" msgid "Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties." msgstr "Contourner ou tenter de contourner tout filtrage, mesures de sécurité, limites d'accès ou autres caractéristiques destinées à protéger le Service, les utilisateur·ices du Service ou des tiers." -#: lib/web/templates/api/terms.html.eex:64 #, elixir-format +#: lib/web/templates/api/terms.html.eex:64 msgctxt "terms" msgid "Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service;" msgstr "Recueillir des informations personnelles sur les autres utilisateur·ices, ou intimider, menacer, traquer ou harceler de toute autre manière les autres utilisateurs du Service ;" -#: lib/web/templates/api/terms.html.eex:55 #, elixir-format +#: lib/web/templates/api/terms.html.eex:55 msgctxt "terms" msgid "Content that is illegal or unlawful, that would otherwise create liability;" msgstr "Du contenu qui est illégal ou illicite, qui autrement entraînerait une responsabilité ;" -#: lib/web/templates/api/terms.html.eex:56 #, elixir-format +#: lib/web/templates/api/terms.html.eex:56 msgctxt "terms" msgid "Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party;" msgstr "Du contenu susceptible d'enfreindre ou de violer un brevet, une marque de commerce, un secret commercial, un droit d'auteur, un droit à la vie privée, un droit de publicité ou tout autre droit intellectuel ou autre de toute partie ;" -#: lib/web/templates/api/terms.html.eex:42 #, elixir-format +#: lib/web/templates/api/terms.html.eex:42 msgctxt "terms" msgid "Creating Accounts" msgstr "Création de compte" -#: lib/web/templates/api/terms.html.eex:89 #, elixir-format +#: lib/web/templates/api/terms.html.eex:89 msgctxt "terms" msgid "Entire Agreement" msgstr "Accord complet" -#: lib/web/templates/api/terms.html.eex:92 #, elixir-format +#: lib/web/templates/api/terms.html.eex:92 msgctxt "terms" msgid "Feedback" msgstr "Commentaires" -#: lib/web/templates/api/terms.html.eex:83 #, elixir-format +#: lib/web/templates/api/terms.html.eex:83 msgctxt "terms" msgid "Hyperlinks and Third Party Content" msgstr "Liens hypertexte et contenu tiers" -#: lib/web/templates/api/terms.html.eex:88 #, elixir-format +#: lib/web/templates/api/terms.html.eex:88 msgctxt "terms" msgid "If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service." msgstr "Si vous enfreignez l'une de ces Conditions, nous avons le droit de suspendre ou de désactiver votre accès ou votre utilisation du Service." -#: lib/web/templates/api/terms.html.eex:63 #, elixir-format +#: lib/web/templates/api/terms.html.eex:63 msgctxt "terms" msgid "Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity;" msgstr "Usurper l'identité d'une personne ou d'une entité ou afficher au nom d'une personne ou d'une entité, ou encore présenter de manière inexacte votre affiliation à une personne ou une entité ;" -#: lib/web/templates/api/terms.html.eex:48 #, elixir-format +#: lib/web/templates/api/terms.html.eex:48 msgctxt "terms" msgid "Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness." msgstr "Notre Service vous permet, ainsi qu'à d'autres utilisateur·ices, de publier, d'établir des liens et de mettre à disposition du contenu. Vous êtes responsable du contenu que vous mettez à la disposition du service, y compris de sa légalité, de sa fiabilité et de sa pertinence." -#: lib/web/templates/api/terms.html.eex:39 #, elixir-format +#: lib/web/templates/api/terms.html.eex:39 msgctxt "terms" msgid "Privacy Policy" msgstr "Politique de confidentialité" -#: lib/web/templates/api/terms.html.eex:95 #, elixir-format +#: lib/web/templates/api/terms.html.eex:95 msgctxt "terms" msgid "Questions & Contact Information" msgstr "Questions et coordonnées" -#: lib/web/templates/api/terms.html.eex:87 #, elixir-format +#: lib/web/templates/api/terms.html.eex:87 msgctxt "terms" msgid "Termination" msgstr "Résiliation" -#: lib/web/templates/api/terms.html.eex:62 #, elixir-format +#: lib/web/templates/api/terms.html.eex:62 msgctxt "terms" msgid "Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service;" msgstr "Utiliser le Service de toute manière qui pourrait interférer, perturber, affecter négativement ou empêcher d'autres utilisateur·ices de profiter pleinement du Service ou qui pourrait endommager, désactiver, surcharger ou altérer le fonctionnement du Service ;" -#: lib/web/templates/api/terms.html.eex:47 #, elixir-format +#: lib/web/templates/api/terms.html.eex:47 msgctxt "terms" msgid "Your Content & Conduct" msgstr "Votre contenu et votre conduite" -#: lib/web/templates/api/terms.html.eex:84 #, elixir-format +#: lib/web/templates/api/terms.html.eex:84 msgctxt "terms" msgid "%{instance_name} makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by %{instance_name} of the site. Use of any such linked website is at the user's own risk." msgstr "%{instance_name} ne fait aucune revendication et n'accepte aucune responsabilité concernant les sites web de tiers accessibles par lien hypertexte depuis le Service ou les sites web liés au Service. Lorsque vous quittez le Service, vous devez savoir que les présentes Conditions et nos politiques de confidentialité ne sont plus applicables. L'inclusion d'un lien n'implique pas l'approbation par %{instance_name} du site. L'utilisation de tout site web lié est aux risques et périls de l'utilisateur·ice." -#: lib/web/templates/api/terms.html.eex:68 #, elixir-format +#: lib/web/templates/api/terms.html.eex:68 msgctxt "terms" msgid "Finally, your use of the Service is also subject to acceptance of the instance's own specific rules regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended." msgstr "Enfin, votre utilisation du Service est également soumise à l'acceptation des règles spécifiques de l'instance concernant le code de conduite et les règles de modération. Le non-respect de ces règles peut également entraîner la désactivation ou la suspension de votre compte." -#: lib/web/templates/api/terms.html.eex:81 #, elixir-format +#: lib/web/templates/api/terms.html.eex:81 msgctxt "terms" msgid "For full details about the Mobilizon software see here." msgstr "Pour plus de détails sur le logiciel Mobilizon voir ici." -#: lib/web/templates/api/terms.html.eex:18 #, elixir-format +#: lib/web/templates/api/terms.html.eex:18 msgctxt "terms" msgid "Here are the important things you need to know about accessing and using the %{instance_name} (%{instance_url}) website and service (collectively, \"Service\"). These are our terms of service (\"Terms\"). Please read them carefully." msgstr "Voici les points importants que vous devez savoir sur l'accès et l'utilisation du site web et du Service %{instance_name} (%{instance_url}) (conjointement, \"Service\"). Ce sont nos conditions de service (\"Conditions\"). Veuillez les lire attentivement." -#: lib/web/templates/api/terms.html.eex:33 #, elixir-format +#: lib/web/templates/api/terms.html.eex:33 msgctxt "terms" msgid "If we make major changes, we will notify our users in a clear and prominent manner. Minor changes may only be highlighted in the footer of our website. It is your responsibility to check the website regularly for changes to these Terms." msgstr "Si nous apportons des changements majeurs, nous en informerons nos utilisateur·ices de manière claire et visible. Il est possible que les changements mineurs ne soient mis en évidence que dans le pied de page de cette page. Il est de votre responsabilité de vérifier régulièrement sur le site web si des modifications ont été apportées aux présentes Conditions." -#: lib/web/templates/api/terms.html.eex:53 #, elixir-format +#: lib/web/templates/api/terms.html.eex:53 msgctxt "terms" msgid "In order to make %{instance_name} a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:" msgstr "Afin de faire de %{instance_name} un endroit idéal pour nous toutes et tous, nous vous prions de ne pas publier, relier ou rendre disponible sur ou par le biais du Service l'un des éléments suivants :" -#: lib/web/templates/api/terms.html.eex:57 #, elixir-format +#: lib/web/templates/api/terms.html.eex:57 msgctxt "terms" msgid "Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and" msgstr "Les informations privées de toute personne tierce (par exemple, les adresses, les numéros de téléphone, les adresses électroniques, les numéros de sécurité sociale et les numéros de carte de crédit) ; et" -#: lib/web/templates/api/terms.html.eex:52 #, elixir-format +#: lib/web/templates/api/terms.html.eex:52 msgctxt "terms" msgid "Since Mobilizon is a distributed network, it is possible, depending on the visibility rules set to your content, that your content has been distributed to other Mobilizon instances. When you delete your content, we will request those other instances to also delete the content. Our responsibility on the content being deleted from those other instances ends here. If for some reason, some other instance does not delete the content, we cannot be held responsible." msgstr "Mobilizon étant un réseau distribué, il est possible, en fonction des règles de visibilité définies pour votre contenu, que celui-ci ait été distribué à d'autres instances de Mobilizon. Lorsque vous supprimez votre contenu, nous demandons à ces autres instances de supprimer également le contenu. Notre responsabilité quant au contenu supprimé de ces autres instances s'arrête ici. Si, pour une raison quelconque, une autre instance ne supprime pas le contenu, nous ne pouvons être tenus responsables." -#: lib/web/templates/api/terms.html.eex:90 #, elixir-format +#: lib/web/templates/api/terms.html.eex:90 msgctxt "terms" msgid "These Terms constitute the entire agreement between you and %{instance_name} regarding the use of the Service, superseding any prior agreements between you and %{instance_name} relating to your use of the Service." msgstr "Les présentes Conditions constituent l'intégralité de l'accord entre vous et %{instance_name} concernant l'utilisation du Service, remplaçant tout accord préalable entre vous et %{instance_name} relatif à votre utilisation du Service." -#: lib/web/templates/api/terms.html.eex:80 #, elixir-format +#: lib/web/templates/api/terms.html.eex:80 msgctxt "terms" msgid "This Service runs on a Mobilizon instance. This source code is licensed under an AGPLv3 license which means you are allowed to and even encouraged to take the source code, modify it and use it." msgstr "Ce Service fonctionne sur une instance de Mobilizon. Ce code source est sous licence AGPLv3 ce qui signifie que vous êtes autorisé et même encouragé à prendre le code source, le modifier et l'utiliser." -#: lib/web/templates/api/terms.html.eex:58 #, elixir-format +#: lib/web/templates/api/terms.html.eex:58 msgctxt "terms" msgid "Viruses, corrupted data or other harmful, disruptive or destructive files or code." msgstr "Virus, données corrompues ou autres fichiers ou codes nuisibles, perturbateurs ou destructeurs." -#: lib/web/templates/api/terms.html.eex:51 #, elixir-format +#: lib/web/templates/api/terms.html.eex:51 msgctxt "terms" msgid "You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. Web server access logs might also be stored for some time in the system." msgstr "Vous pouvez supprimer le contenu que vous avez publié en le supprimant. Une fois que vous avez supprimé votre contenu, il n'apparaîtra plus sur le Service, mais des copies de votre contenu supprimé peuvent rester dans notre système ou des sauvegardes pendant un certain temps. Les journaux d'accès au serveur web peuvent également être stockés pendant un certain temps dans le système." -#: lib/web/templates/api/terms.html.eex:96 #, elixir-format +#: lib/web/templates/api/terms.html.eex:96 msgctxt "terms" msgid "Questions or comments about the Service may be directed to us at %{contact}" msgstr "Les questions ou commentaires concernant le Service peuvent nous être adressés à %{contact}" -#: lib/web/templates/api/terms.html.eex:79 #, elixir-format +#: lib/web/templates/api/terms.html.eex:79 msgctxt "terms" msgid "Source code" msgstr "Code source" -#: lib/web/templates/api/terms.html.eex:93 #, elixir-format +#: lib/web/templates/api/terms.html.eex:93 msgctxt "terms" msgid "We love feedback. Please let us know what you think of the Service, these Terms and, in general, %{instance_name}." msgstr "Nous aimons les retours d'information. N'hésitez pas à nous faire savoir ce que vous pensez du Service, des présentes Conditions et, en général, de %{instance_name}." -#: lib/web/templates/api/terms.html.eex:74 #, elixir-format +#: lib/web/templates/api/terms.html.eex:74 msgctxt "terms" msgid "Instance administrators (and community moderators, given the relevant access) are responsible for monitoring and acting on flagged content and other user reports, and have the right and responsibility to remove or edit content that is not aligned to this Instance set of rules, or to suspend, block or ban (temporarily or permanently) any account, community, or instance for breaking these terms, or for other behaviours that they deem inappropriate, threatening, offensive, or harmful." msgstr "Les administrateurs d'instance (et les modérateurs de la communauté, sous réserve d'un accès approprié) sont chargés de surveiller et d'agir sur les contenus signalés et autres rapports d'utilisateur·ices, et ont le droit et la responsabilité de supprimer ou de modifier les contenus qui ne sont pas conformes aux règles de cette d'instance, ou de suspendre, bloquer ou interdire (temporairement ou définitivement) tout compte, communauté ou instance pour violation de ces conditions, ou pour d'autres comportements qu'ils jugent inappropriés, menaçants, offensants ou nuisibles." -#: lib/web/templates/api/terms.html.eex:6 #, elixir-format +#: lib/web/templates/api/terms.html.eex:6 msgctxt "terms" msgid "%{instance_name} will not use or transmit or resell your personal data" msgstr "%{instance_name} n'utilisera pas ni ne transmettra ou revendra vos données" -#: lib/web/templates/api/terms.html.eex:44 #, elixir-format +#: lib/web/templates/api/terms.html.eex:44 msgctxt "terms" msgid "If you discover or suspect any Service security breaches, please let us know as soon as possible. For security holes in the Mobilizon software itself, please contact its contributors directly." msgstr "Si vous découvrez ou soupçonnez des failles de sécurité du Service, veuillez nous en informer dès que possible. Pour les failles de sécurité dans le logiciel Mobilizon lui-même, veuillez contacter directement ses contributeur·ices." -#: lib/web/templates/api/terms.html.eex:77 #, elixir-format +#: lib/web/templates/api/terms.html.eex:77 msgctxt "terms" msgid "Instance administrators should ensure that every community hosted on the instance is properly moderated according to the defined rules." msgstr "Les administrateur·ices d'instance doivent s'assurer que chaque communauté hébergée sur l'instance est correctement modérée conformément aux règles définies." -#: lib/web/templates/api/terms.html.eex:98 #, elixir-format +#: lib/web/templates/api/terms.html.eex:98 msgctxt "terms" msgid "Originally adapted from the Diaspora* and App.net privacy policies, also licensed under CC BY-SA." msgstr "Adaptée à l'origine des politiques de confidentialité de Diaspora* et App.net, aussi sous licence CC BY-SA." -#: lib/web/templates/api/privacy.html.eex:119 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:119 msgctxt "terms" msgid "Originally adapted from the Mastodon and Discourse privacy policies, also licensed under CC BY-SA." msgstr "Adaptée à l'origine des politiques de confidentialité de Mastodon et Discourse, aussi sous licence CC BY-SA." -#: lib/web/templates/api/terms.html.eex:3 #, elixir-format +#: lib/web/templates/api/terms.html.eex:3 msgctxt "terms" msgid "Short version" msgstr "Version courte" -#: lib/web/templates/api/terms.html.eex:9 #, elixir-format +#: lib/web/templates/api/terms.html.eex:9 msgctxt "terms" msgid "The service is provided without warranties and these terms may change in the future" msgstr "Le service est fourni sans garanties et ces conditions peuvent changer dans le futur" -#: lib/web/templates/api/privacy.html.eex:118 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:118 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 18, 2020." msgstr "Ce document est sous licence CC BY-SA. La dernière mise à jour date du 18 juin 2020." -#: lib/web/templates/api/terms.html.eex:97 #, elixir-format +#: lib/web/templates/api/terms.html.eex:97 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 22, 2020." msgstr "Ce document est sous licence CC BY-SA. La dernière mise à jour date du 22 juin 2020." -#: lib/web/templates/api/terms.html.eex:8 #, elixir-format +#: lib/web/templates/api/terms.html.eex:8 msgctxt "terms" msgid "You must respect other people and %{instance_name}'s rules when using the service" msgstr "Vous devez respecter les autres et les règles de %{instance_name} lorsque vous utilisez le service" -#: lib/web/templates/api/terms.html.eex:7 #, elixir-format +#: lib/web/templates/api/terms.html.eex:7 msgctxt "terms" msgid "You must respect the law when using %{instance_name}" msgstr "Vous devez respecter la loi lorsque vous utilisez %{instance_name}" -#: lib/web/templates/api/terms.html.eex:5 #, elixir-format +#: lib/web/templates/api/terms.html.eex:5 msgctxt "terms" msgid "Your content is yours" msgstr "Votre contenu vous appartient" -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 msgid "Confirm my e-mail address" msgstr "Confirmer mon adresse email" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Confirm your e-mail" msgstr "Confirmez votre adresse email" -#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "Salut ! Vous venez de vous enregistrer pour rejoindre cet événement : « %{title} ». Merci de confirmer l'adresse email que vous avez fournie :" +#, elixir-format #: lib/web/templates/email/email.html.eex:114 #: lib/web/templates/email/email.text.eex:8 -#, elixir-format msgid "Need help? Is something not working as expected?" msgstr "Besoin d'aide ? Quelque chose ne fonctionne pas correctement ?" -#: lib/web/templates/email/registration_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:38 msgid "You created an account on %{host} with this email address. You are one click away from activating it." msgstr "Vous avez créé un compte sur %{host} avec cette adresse email. Vous êtes à un clic de l'activer." -#: lib/web/templates/email/report.html.eex:13 #, elixir-format +#: lib/web/templates/email/report.html.eex:13 msgid "New report on %{instance}" msgstr "Nouveau signalement sur %{instance}" -#: lib/web/templates/email/email_changed_old.html.eex:38 #, elixir-format +#: lib/web/templates/email/email_changed_old.html.eex:38 msgid "The email address for your account on %{host} is being changed to:" msgstr "L'adresse email pour votre compte sur %{host} est en train d'être changée pour :" -#: lib/web/templates/email/password_reset.html.eex:38 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:38 msgid "You requested a new password for your account on %{instance}." msgstr "Vous avez demandé un nouveau mot de passe pour votre compte sur %{instance}." -#: lib/web/templates/email/email.text.eex:5 #, elixir-format +#: lib/web/templates/email/email.text.eex:5 msgid "Please do not use it for real purposes." msgstr "Veuillez ne pas l'utiliser pour un cas réel." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:63 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:6 lib/web/templates/email/event_updated.html.eex:133 #: lib/web/templates/email/event_updated.text.eex:24 lib/web/templates/email/notification_each_week.html.eex:70 #: lib/web/templates/email/notification_each_week.text.eex:11 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 -#, elixir-format msgid "Would you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button." msgstr[0] "Si vous avez besoin d'annuler votre participation, il suffit d'accéder à la page de l'événement à partir du lien ci-dessus et de cliquer sur le bouton « Je participe »." msgstr[1] "Si vous avez besoin d'annuler votre participation à un ou plusieurs événements, il suffit d'accéder aux pages des événement grâce aux liens ci-dessus et de cliquer sur le bouton « Je participe »." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:38 #: lib/web/templates/email/pending_participation_notification.text.eex:4 -#, elixir-format msgid "You have one pending attendance request to process:" msgid_plural "You have %{number_participation_requests} attendance requests to process:" msgstr[0] "Vous avez une demande de participation en attente à traiter :" msgstr[1] "Vous avez %{number_participation_requests} demandes de participation en attente à traiter :" -#: lib/web/templates/email/email.text.eex:11 #, elixir-format +#: lib/web/templates/email/email.text.eex:11 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} est une instance Mobilizon." -#: lib/web/templates/email/email.html.eex:142 #, elixir-format +#: lib/web/templates/email/email.html.eex:142 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} est une instance Mobilizon." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:13 #: lib/web/templates/email/pending_participation_notification.text.eex:1 -#, elixir-format msgid "A request is pending!" msgstr "Une requête est en attente !" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "An event is upcoming!" msgstr "Un événement est à venir !" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:13 #: lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Confirm new email" msgstr "Confirmez votre adresse email" -#: lib/web/templates/email/event_updated.html.eex:84 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:84 msgid "End" msgstr "Fin" -#: lib/web/templates/email/event_updated.text.eex:21 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:21 msgid "End %{ends_on}" msgstr "Fin %{ends_on}" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event update!" msgstr "Événement mis à jour !" -#: lib/web/templates/email/report.html.eex:88 #, elixir-format +#: lib/web/templates/email/report.html.eex:88 msgid "Flagged comments" msgstr "Commentaires signalés" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "Good news: one of the event organizers just approved your request. Update your calendar, because you're on the guest list now!" msgstr "Bonne nouvelle : un·e des organisateur·ices de l'événement vient d'approuver votre demande. Mettez à jour votre agenda, car vous êtes maintenant un·e participant·e !" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:38 #: lib/web/templates/email/email_changed_new.text.eex:3 -#, elixir-format msgid "Hi there! It seems like you wanted to change the email address linked to your account on %{instance}. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address." msgstr "Salut ! Il semblerait que vous avez demandé la modification de l'adresse e-mail liée à votre compte sur %{instance}. Si vous voulez toujours effectuer ce changement, merci de cliquer sur le bouton ci-dessous pour confirmer la modification. Vous pourrez alors vous connecter à %{instance} avec cette nouvelle adresse." -#: lib/web/templates/email/email_changed_old.text.eex:3 #, elixir-format +#: lib/web/templates/email/email_changed_old.text.eex:3 msgid "Hi there! Just a quick note to confirm that the email address linked to your account on %{host} has been changed from this one to:" msgstr "Salut ! Juste un petite note pour confirmer que l'adresse e-mail liée à votre compte sur %{host} a été changée depuis celle-ci à :" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:62 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "If you did not trigger this change yourself, it is likely that someone has gained access to your %{host} account. Please log in and change your password immediately. If you cannot login, contact the admin on %{host}." msgstr "Si vous n'avez pas effectué cette modification vous-même, il est probable que quelqu'un ait eu accès à votre compte %{host}. Veuillez vous connecter et changer immédiatement votre mot de passe. Si vous ne pouvez pas vous connecter, contactez l'administrateur·ice sur %{host}." -#: lib/web/templates/email/password_reset.text.eex:12 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:12 msgid "If you didn't trigger the change yourself, please ignore this message. Your password won't be changed until you click the link above." msgstr "Si vous n'êtes pas à l'origine de cette modification, merci d'ignorer ce message. Votre mot de passe ne sera pas modifié tant que vous ne cliquerez pas le lien ci-dessus." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:70 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:4 lib/web/templates/email/registration_confirmation.html.eex:45 -#, elixir-format msgid "If you didn't trigger this email, you may safely ignore it." msgstr "Si vous n'avez pas déclenché cette alerte, vous pouvez ignorer cet e-mail sans souci." +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:63 #: lib/web/templates/email/before_event_notification.text.eex:6 -#, elixir-format msgid "If you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgstr "Si vous avez besoin d'annuler votre participation, il suffit d'accéder à la page de l'événement à partir du lien ci-dessus et de cliquer sur le bouton « Je participe »." +#, elixir-format #: lib/web/templates/email/email.html.eex:143 #: lib/web/templates/email/email.text.eex:11 -#, elixir-format msgid "Learn more about Mobilizon here!" msgstr "En apprendre plus à propos de Mobilizon ici !" -#: lib/web/templates/email/event_updated.html.eex:94 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:94 msgid "Location" msgstr "Localisation" -#: lib/web/templates/email/event_updated.html.eex:104 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:104 msgid "Location address was removed" msgstr "L'adresse physique a été enlevée" +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:51 #: lib/web/templates/email/pending_participation_notification.text.eex:6 -#, elixir-format msgid "Manage pending requests" msgstr "Gérer les demandes de participation en attente" +#, elixir-format #: lib/web/templates/email/registration_confirmation.html.eex:13 #: lib/web/templates/email/registration_confirmation.text.eex:1 -#, elixir-format msgid "Nearly there!" msgstr "Vous y êtes presque !" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email confirmation" msgstr "Confirmation de nouvel e-mail" -#: lib/web/templates/email/report.html.eex:106 #, elixir-format +#: lib/web/templates/email/report.html.eex:106 msgid "Reasons for report" msgstr "Raisons du signalement" -#: lib/web/templates/email/report.html.eex:39 #, elixir-format +#: lib/web/templates/email/report.html.eex:39 msgid "Someone on %{instance} reported the following content for you to analyze:" msgstr "Une personne de %{instance} a signalé le contenu suivant :" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:13 #: lib/web/templates/email/event_participation_rejected.text.eex:1 -#, elixir-format msgid "Sorry! You're not going." msgstr "Désolé ! Vous n'y allez pas." -#: lib/web/templates/email/event_updated.html.eex:74 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:74 msgid "Start" msgstr "Début" -#: lib/web/templates/email/event_updated.text.eex:18 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:18 msgid "Start %{begins_on}" msgstr "Début %{begins_on}" -#: lib/web/templates/email/event_updated.text.eex:3 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:3 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "Il y a eu des changements pour %{title} donc nous avons pensé que nous vous le ferions savoir." +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:55 #: lib/web/templates/email/event_updated.text.eex:11 -#, elixir-format msgid "This event has been cancelled by its organizers. Sorry!" msgstr "Cet événement a été annulé par ses organisateur·ices. Désolé !" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:51 #: lib/web/templates/email/event_updated.text.eex:7 -#, elixir-format msgid "This event has been confirmed" msgstr "L'événement a été confirmé" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:53 #: lib/web/templates/email/event_updated.text.eex:9 -#, elixir-format msgid "This event has yet to be confirmed: organizers will let you know if they do confirm it." msgstr "Cet événement doit encore être confirmé : les organisateur·ices vous feront savoir si l'événement est confirmé." +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your request." msgstr "Malheureusement, les organisateur⋅ices ont rejeté votre demande de participation." -#: lib/web/templates/email/email_changed_new.html.eex:51 #, elixir-format +#: lib/web/templates/email/email_changed_new.html.eex:51 msgid "Verify your email address" msgstr "Vérifier l'adresse email" -#: lib/web/templates/email/report.html.eex:126 #, elixir-format +#: lib/web/templates/email/report.html.eex:126 msgid "View report" msgstr "Voir le signalement" -#: lib/web/templates/email/report.text.eex:24 #, elixir-format +#: lib/web/templates/email/report.text.eex:24 msgid "View report:" msgstr "Voir le signalement :" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:58 #: lib/web/templates/email/event_participation_confirmed.html.eex:58 -#, elixir-format msgid "Visit event page" msgstr "Voir la page de l'événement" -#: lib/web/templates/email/event_updated.html.eex:121 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:121 msgid "Visit the updated event page" msgstr "Voir la page de l'événement mis à jour" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "Visit the updated event page: %{link}" msgstr "Voir l'événement mis à jour sur : %{link}" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:13 #: lib/web/templates/email/notification_each_week.text.eex:1 -#, elixir-format msgid "What's up this week?" msgstr "Quoi de neuf cette semaine ?" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "What's up today?" msgstr "Quoi de neuf aujourd'hui ?" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:70 #: lib/web/templates/email/event_participation_approved.text.eex:11 lib/web/templates/email/event_participation_confirmed.html.eex:70 #: lib/web/templates/email/event_participation_confirmed.text.eex:6 -#, elixir-format msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button." msgstr "Si vous souhaitez mettre à jour ou annuler votre participation, il vous suffit d'accéder à la page de l'événement par le lien ci-dessus et de cliquer sur le bouton Participer." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:64 #: lib/web/templates/email/pending_participation_notification.text.eex:8 -#, elixir-format msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »." msgstr "Vous recevez ce courriel parce que vous avez choisi de recevoir des notifications pour les demandes de participation en attente à vos événements. Vous pouvez désactiver ou modifier vos paramètres de notification dans les paramètres de votre compte utilisateur dans « Notifications »." -#: lib/web/templates/email/event_participation_rejected.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:5 msgid "You issued a request to attend %{title}." msgstr "Vous avez effectué une demande de participation à %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.text.eex:5 #: lib/web/templates/email/event_participation_confirmed.text.eex:3 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Vous avez demandé à participer à l'événement %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:13 #: lib/web/templates/email/event_participation_confirmed.html.eex:13 lib/web/templates/email/event_participation_confirmed.text.eex:1 -#, elixir-format msgid "You're going!" msgstr "Vous y allez !" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:64 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Si vous n'êtes pas à l'origine de cette modification, merci d'ignorer ce message." -#: lib/web/templates/email/email.html.eex:89 #, elixir-format +#: lib/web/templates/email/email.html.eex:89 msgid "Please do not use it for real purposes." msgstr "Veuillez ne pas l'utiliser pour un cas réel." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:45 #: lib/web/templates/email/group_member_removal.text.eex:5 -#, elixir-format msgid "If you feel this is an error, you may contact the group's administrators so that they can add you back." msgstr "Si vous pensez qu'il s'agit d'une erreur, vous pouvez contacter les administrateurs du groupe afin qu'ils vous réintègrent." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:13 #: lib/web/templates/email/group_member_removal.text.eex:1 -#, elixir-format msgid "So long, and thanks for the fish!" msgstr "Salut, et encore merci pour le poisson !" -#: lib/web/email/group.ex:63 #, elixir-format +#: lib/web/email/group.ex:63 msgid "You have been removed from group %{group}" msgstr "Vous avez été enlevé du groupe %{group}" -#: lib/web/templates/email/group_member_removal.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_member_removal.text.eex:3 msgid "You have been removed from group %{group}. You will not be able to access this group's private content anymore." msgstr "Vous avez été enlevé du groupe %{group}. Vous ne serez plus en mesure d'accéder au contenu privé du groupe." -#: lib/web/templates/email/group_invite.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:38 msgid "%{inviter} just invited you to join their group %{link_start}%{group}%{link_end}" msgstr "%{inviter} vient de vous inviter à rejoindre son groupe %{link_start}%{group}%{link_end}" -#: lib/web/templates/email/group_member_removal.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_member_removal.html.eex:38 msgid "You have been removed from group %{link_start}%{group}%{link_end}. You will not be able to access this group's private content anymore." msgstr "Vous avez été enlevé du groupe %{link_start}%{group}%{link_end}. Vous ne serez plus en mesure d'accéder au contenu privé du groupe." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:54 #: lib/web/templates/email/group_suspension.text.eex:7 -#, elixir-format msgid "As this group was located on another instance, it will continue to work for other instances than this one." msgstr "Comme ce groupe était originaire d'une autre instance, il continuera à fonctionner pour d'autres instances que celle-ci." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:46 #: lib/web/templates/email/group_suspension.text.eex:5 -#, elixir-format msgid "As this group was located on this instance, all of it's data has been irretrievably deleted." msgstr "Comme ce groupe était originaire de cette instance, toutes ses données ont été irrémédiablement détruites." +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:38 #: lib/web/templates/email/group_deletion.text.eex:3 -#, elixir-format msgid "The administrator %{author} deleted group %{group}. All of the group's events, discussions, posts and todos have been deleted." msgstr "L'administrateur·ice %{author} a supprimé le groupe %{group}. Tous les événements, discussions, billets et todos du groupe ont été supprimés." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:13 #: lib/web/templates/email/group_suspension.text.eex:1 -#, elixir-format msgid "The group %{group} has been suspended on %{instance}!" msgstr "Le groupe %{group} a été suspendu sur %{instance} !" +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:13 #: lib/web/templates/email/group_deletion.text.eex:1 -#, elixir-format msgid "The group %{group} was deleted on %{instance}!" msgstr "Le groupe %{group} a été supprimé sur %{instance} !" +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:38 #: lib/web/templates/email/group_suspension.text.eex:3 -#, elixir-format msgid "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group." msgstr "L'équipe de modération de votre instance a décidé de suspendre %{group_name} (%{group_address}). Vous n'êtes désormais plus membre de ce groupe." -#: lib/web/email/group.ex:136 #, elixir-format +#: lib/web/email/group.ex:136 msgid "The group %{group} has been deleted on %{instance}" msgstr "Le groupe %{group} a été supprimé sur %{instance}" -#: lib/web/email/group.ex:97 #, elixir-format +#: lib/web/email/group.ex:97 msgid "The group %{group} has been suspended on %{instance}" msgstr "Le groupe %{group} a été suspendu sur %{instance}" -#: lib/web/templates/api/terms.html.eex:24 #, elixir-format +#: lib/web/templates/api/terms.html.eex:24 msgctxt "terms" msgid "By accessing or using the Service, this means you agree to be bound by all the terms below. If these terms are in any way unclear, please let us know by contacting %{contact}." msgstr "Si vous accédez au Service ou utilisez le Service, cela signifie que vous acceptez d'être lié·e par toutes les Conditions ci-dessous. Si une condition n'a pas de sens pour vous, veuillez nous le faire savoir en contactant %{contact}." -#: lib/web/templates/api/terms.html.eex:40 #, elixir-format +#: lib/web/templates/api/terms.html.eex:40 msgctxt "terms" msgid "For information about how we collect and use information about users of the Service, please check our privacy policy." msgstr "Pour savoir comment nous recueillons et utilisons les informations sur les utilisateur·ice·s du Service, veuillez consulter notre politique de confidentialité." -#: lib/web/templates/api/terms.html.eex:36 #, elixir-format +#: lib/web/templates/api/terms.html.eex:36 msgctxt "terms" msgid "If you continue to use the Service after the revised Terms go into effect, you accept the revised Terms." msgstr "Si vous continuez à utiliser le Service après l'entrée en vigueur des Conditions révisées, vous acceptez les conditions révisées." -#: lib/web/templates/api/privacy.html.eex:78 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:78 msgctxt "terms" msgid "If you delete this information, you need to login again." msgstr "Si vous supprimez ces informations, vous devrez vous connecter de nouveau." -#: lib/web/templates/api/privacy.html.eex:80 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:80 msgctxt "terms" msgid "If you're not connected, we don't store any information on your device, unless you participate in an event anonymously. In this specific case we store the hash of an unique identifier for the event and participation status in your browser so that we may display participation status. Deleting this information will only stop displaying participation status in your browser." msgstr "Si vous n'êtes pas connecté·e, nous ne conserverons aucune information sur votre appareil, sauf si vous participez anonymement à un événement. Dans ce cas spécifique nous conservons le hash d'un identifiant unique pour l'événement et les statuts de participation dans votre navigateur pour pouvoir les afficher. Supprimer ces informations aura pour seule conséquence que votre participation ne sera plus affichée dans votre navigateur." -#: lib/web/templates/api/privacy.html.eex:87 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:87 msgctxt "terms" msgid "Note: This information is stored in your localStorage and not your cookies." msgstr "Attention : Ces informations sont conservées dans votre stockage local et non vos cookies." -#: lib/web/templates/api/terms.html.eex:71 #, elixir-format +#: lib/web/templates/api/terms.html.eex:71 msgctxt "terms" msgid "Our responsibility" msgstr "Notre responsabilité" -#: lib/web/templates/api/privacy.html.eex:61 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:61 msgctxt "terms" msgid "Retain server logs containing the IP address of all requests to this server, insofar as such logs are kept, no more than 90 days." msgstr "Conserver les journaux du serveur contenant l'adresse IP de toutes les demandes adressées à ce serveur, dans la mesure où ces journaux sont conservés, pas plus de 90 jours." +#, elixir-format #: lib/web/templates/api/privacy.html.eex:3 #: lib/web/templates/api/terms.html.eex:15 -#, elixir-format msgctxt "terms" msgid "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We have provided a glossary to help you understand them better." msgstr "Certains termes, techniques ou non, utilisés dans le texte ci-dessous peuvent recouvrir des concepts difficiles à appréhender. Nous vous proposons un glossaire qui pourra vous aider à mieux les comprendre." -#: lib/web/templates/api/terms.html.eex:45 #, elixir-format +#: lib/web/templates/api/terms.html.eex:45 msgctxt "terms" msgid "We are not liable for any loss you may incur as a result of someone else using your email or password, either with or without your knowledge." msgstr "Nous ne sommes pas responsables des pertes que vous pourriez subir si quelqu'un d'autre utilise votre adresse électronique ou votre mot de passe, à votre insu ou non." -#: lib/web/templates/api/terms.html.eex:50 #, elixir-format +#: lib/web/templates/api/terms.html.eex:50 msgctxt "terms" msgid "We cannot be held responsible should a programming or administrative error make your content visible to a larger audience than intended. Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service." msgstr "Nous ne pouvons être tenus responsables si une erreur de programmation ou d'administration rend votre contenu visible à un public plus large que celui que vous aviez prévu. Outre notre droit limité sur votre contenu, vous conservez tous vos droits sur le contenu que vous publiez, mettez en lien et rendez disponible sur ou via le Service." -#: lib/web/templates/api/privacy.html.eex:10 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:10 msgctxt "terms" msgid "We collect information from you when you register on this instance and gather data when you participate in the platform by reading, writing, and interacting with content shared here. If you register on this instance, you will be asked to enter an email address, a password (hashed) and at least an username. Your email address will be verified by an email containing a unique link. Once the link is activated, we know you control that email address. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly. You may however visit this instance without registering." msgstr "" "Nous collectons des informations sur vous lorsque vous vous inscrivez sur cette instance et récupérons des données lorsque vous utilisez la plateforme en lisant, écrivant, et en interagissant avec les contenus partagés. Si vous vous inscrivez sur cette instance, nous vous demanderons une adresse courriel, un mot de passe (haché) et au moins un nom d'utilisateur.ice. Votre adresse courriel sera vérifiée par l'envoi d'un courriel de confirmation contenant un lien unique. Si ce lien est activé, nous saurons que vous contrôlez cette adresse courriel. Vous pouvez également entrer des informations supplémentaires au profil, comme un pseudonyme, une biographie, une image de profil et une image d'en-tête. Le nom d'utilisateur, le pseudonyme affiché, la " "biographie, les images de profil et d'en-tête sont toujours publiques. Vous pouvez toutefois utiliser ce serveur sans vous inscrire." -#: lib/web/templates/api/terms.html.eex:30 #, elixir-format +#: lib/web/templates/api/terms.html.eex:30 msgctxt "terms" msgid "We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature." msgstr "Nous nous réservons le droit de modifier ces Conditions à tout moment. Par exemple, nous pouvons être amenés à modifier ces Conditions si nous proposons une nouvelle fonctionnalité." -#: lib/web/templates/api/terms.html.eex:20 #, elixir-format +#: lib/web/templates/api/terms.html.eex:20 msgctxt "terms" msgid "When we say “we”, “our”, or “us” in this document, we are referring to the owners, operators and administrators of this Mobilizon instance. The Mobilizon software is provided by the team of Mobilizon contributors, supported by Framasoft, a French not-for-profit organization advocating for Free/Libre Software. Unless explicitly stated, this Mobilizon instance is an independent service using Mobilizon's source code. You may find more information about this instance on the \"About this instance\" page." msgstr "Lorsque nous disons « nous », « notre » ou « nos » dans ce document, nous faisons référence aux propriétaires, opérateur·ices et administrateur·ices de cette instance de Mobilizon. Le logiciel Mobilizon est fourni par l'équipe des contributeur·ices de Mobilizon, soutenue par Framasoft, une organisation française d'éducation populaire à but non lucratif qui défend les logiciels libres. Sauf mention explicite, cette instance de Mobilizon est un service indépendant utilisant le code source de Mobilizon. Vous pouvez trouver plus d'informations sur cette instance sur la page « A propos de cette instance »." -#: lib/web/templates/api/terms.html.eex:43 #, elixir-format +#: lib/web/templates/api/terms.html.eex:43 msgctxt "terms" msgid "When you create an account you agree to maintain the security and confidentiality of your password and accept all risks of unauthorized access to your account data and any other information you provide to %{instance_name}." msgstr "Lorsque vous créez un compte, vous acceptez également de maintenir la sécurité et la confidentialité de votre mot de passe et vous acceptez tous les risques d'accès non autorisé aux données de votre compte et à toute autre information que vous fournissez à %{instance_name}." -#: lib/web/templates/api/terms.html.eex:49 #, elixir-format +#: lib/web/templates/api/terms.html.eex:49 msgctxt "terms" msgid "When you post, link or otherwise make available content to the Service, you grant us the right and license to display and distribute your content on or through the Service (including via applications). We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. The displaying and distribution of your content happens only according to the visibility rules you have set for the content. We will not modify the visibility of the content you have set." msgstr "Lorsque vous publiez, liez ou mettez à disposition un contenu sur le Service, vous nous accordez le droit et la licence d'afficher et de distribuer votre contenu sur ou via le Service (y compris via des applications). Nous pouvons formater votre contenu pour l'afficher dans le Service, mais nous ne modifierons pas ou ne réviserons pas la substance de votre contenu lui-même. L'affichage et la distribution de votre contenu se fait strictement selon les règles de visibilité que vous avez définies pour le contenu. Nous ne modifierons pas la visibilité du contenu que vous avez défini." -#: lib/web/templates/api/privacy.html.eex:19 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:19 msgctxt "terms" msgid "Your events and comments are delivered to other instances that follow your own, meaning they are delivered to different instances and copies are stored there. When you delete events or comments, this is likewise delivered to these other instances. All interactions related to event features - such as joining an event - or group features - such as managing resources - are federated as well. Please keep in mind that the operators of the instance and any receiving instances may view such messages and information, and that recipients may screenshot, copy or otherwise re-share them." msgstr "Vos événements et commentaires sont transmis aux instances qui suivent la vôtre, ce qui signifie que d'autres instances posséderont des copies de ces contenus. Lorsque vous supprimez un événement ou un commentaire, ceci est transmis de la même façon aux autres instances. Toutes les interactions liées aux fonctionnalités des événements - comme rejoindre un événement - ou bien aux fonctionnalités de groupes - comme gérer ses ressources - sont également fédérées. Veuillez noter que les administrateur·ices de cette instance et de toutes les instances fédérées peuvent voir ces messages, et que les destinataires peuvent les copier, en faire des captures d'écran et les repartager de différentes façons." -#: lib/web/templates/api/privacy.html.eex:99 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:99 msgctxt "terms" msgid "Your content may be downloaded by other instances in the network. Your public events and comments are delivered to the instances following your own instance. Content created through a group is forwarded to all the instances of all the members of the group, insofar as these members reside on a different instance than this one." msgstr "Votre contenu peut être téléchargé par d'autres instances du réseau. Vos événements publics et commentaires sont transmis aux instances abonnées à votre instance. Le contenu créé à travers un groupe est transmis à toutes les instances de tous les membres du groupe, si celleux-ci sont inscrit·e·s sur une autre instance que la vôtre." -#: lib/web/templates/email/event_participation_confirmed.text.eex:4 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.text.eex:4 msgid "You have confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "Vous avez confirmé votre participation. Mettez à jour votre agenda, car vous êtes maintenant sur la liste des invités !" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:38 #: lib/web/templates/email/event_participation_confirmed.html.eex:38 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Vous avez demandé à participer à l'événement %{title}." -#: lib/web/email/participation.ex:91 #, elixir-format +#: lib/web/email/participation.ex:91 msgid "Your participation to event %{title} has been confirmed" msgstr "Votre participation à l'événement %{title} a été approuvée" -#: lib/web/templates/email/report.html.eex:41 #, elixir-format +#: lib/web/templates/email/report.html.eex:41 msgid "%{reporter} reported the following content." msgstr "%{reporter} a signalé le contenu suivant." -#: lib/web/templates/email/report.text.eex:5 #, elixir-format +#: lib/web/templates/email/report.text.eex:5 msgid "Group %{group} was reported" msgstr "Le groupe %{group} a été signalé" -#: lib/web/templates/email/report.html.eex:51 #, elixir-format +#: lib/web/templates/email/report.html.eex:51 msgid "Group reported" msgstr "Groupe signalé" -#: lib/web/templates/email/report.text.eex:7 #, elixir-format +#: lib/web/templates/email/report.text.eex:7 msgid "Profile %{profile} was reported" msgstr "Le profil %{profile} a été signalé" -#: lib/web/templates/email/report.html.eex:56 #, elixir-format +#: lib/web/templates/email/report.html.eex:56 msgid "Profile reported" msgstr "Profil signalé" -#: lib/web/templates/email/event_participation_confirmed.html.eex:45 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.html.eex:45 msgid "You have now confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "Vous avez maintenant confirmé votre participation. Mettez à jour votre agenda, car vous êtes maintenant sur la liste des invités !" -#: lib/mobilizon/posts/post.ex:94 #, elixir-format +#: lib/mobilizon/posts/post.ex:94 msgid "A text is required for the post" msgstr "Un texte est requis pour le billet" -#: lib/mobilizon/posts/post.ex:93 #, elixir-format +#: lib/mobilizon/posts/post.ex:93 msgid "A title is required for the post" msgstr "Un titre est requis pour le billet" -#: lib/web/templates/email/instance_follow.text.eex:3 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:3 msgid "%{name} (%{domain}) just requested to follow your instance." msgstr "%{name} (%{domain}) vient de demander à suivre votre instance." -#: lib/web/email/follow.ex:54 #, elixir-format +#: lib/web/email/follow.ex:54 msgid "%{name} requests to follow your instance" msgstr "%{name} demande à suivre votre instance" -#: lib/web/templates/email/instance_follow.html.eex:38 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:38 msgid "%{name} (%{domain}) just requested to follow your instance. If you accept, this instance will receive all of your instance's public events." msgstr "%{name} (%{domain}) vient de demander à suivre votre instance. Si vous acceptez, leur instance recevra tous les événements publics de votre instance." -#: lib/web/templates/email/instance_follow.text.eex:4 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:4 msgid "If you accept, this instance will receive all of your public events." msgstr "Si vous acceptez, leur instance recevra tous les événements publics de votre instance." -#: lib/web/email/follow.ex:48 #, elixir-format +#: lib/web/email/follow.ex:48 msgid "Instance %{name} (%{domain}) requests to follow your instance" msgstr "L'instance %{name} (%{domain}) demande à suivre votre instance" -#: lib/web/templates/email/instance_follow.html.eex:66 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:66 msgid "See the federation settings" msgstr "Voir les paramètres de fédération" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:52 #: lib/web/templates/email/instance_follow.text.eex:6 -#, elixir-format msgid "To accept this invitation, head over to the instance's admin settings." msgstr "Pour accepter cette invitation, rendez-vous dans vos groupes." +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:13 #: lib/web/templates/email/instance_follow.text.eex:1 -#, elixir-format msgid "Want to connect?" msgstr "Voulez-vous vous connecter ?" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:45 #: lib/web/templates/email/instance_follow.text.eex:5 -#, elixir-format msgid "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." msgstr "Note : le fait que %{name} (%{domain}) vous suive n'implique pas nécessairement que vous suivez cette instance, mais vous pouvez demander à les suivre également." -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "Salut ! Vous venez de vous enregistrer pour rejoindre cet événement : « %{title} ». Merci de confirmer l'adresse email que vous avez fournie :" -#: lib/web/templates/email/event_participation_rejected.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.html.eex:38 msgid "You issued a request to attend %{title}." msgstr "Vous avez effectué une demande de participation à %{title}." -#: lib/web/templates/email/event_updated.html.eex:64 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Titre de l'événement" -#: lib/web/templates/email/event_updated.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "Il y a eu des changements pour %{title} donc nous avons pensé que nous vous le ferions savoir." -#: lib/web/templates/error/500_page.html.eex:7 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 msgid "This page is not correct" msgstr "Cette page n’est pas correcte" -#: lib/web/templates/error/500_page.html.eex:50 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:50 msgid "We're sorry, but something went wrong on our end." msgstr "Nous sommes désolé·e·s, mais quelque chose s’est mal passé de notre côté." +#, elixir-format #: lib/web/templates/email/email.html.eex:88 #: lib/web/templates/email/email.text.eex:4 -#, elixir-format msgid "This is a demonstration site to test Mobilizon." msgstr "Ceci est un site de démonstration permettant de tester Mobilizon." +#, elixir-format #: lib/service/metadata/actor.ex:53 lib/service/metadata/actor.ex:60 #: lib/service/metadata/instance.ex:54 lib/service/metadata/instance.ex:60 -#, elixir-format msgid "%{name}'s feed" msgstr "Flux de %{name}" -#: lib/service/export/feed.ex:120 #, elixir-format +#: lib/service/export/feed.ex:120 msgid "%{actor}'s private events feed on %{instance}" msgstr "Flux privé des événements de %{actor} sur %{instance}" -#: lib/service/export/feed.ex:115 #, elixir-format +#: lib/service/export/feed.ex:115 msgid "%{actor}'s public events feed on %{instance}" msgstr "Flux public des événements de %{actor} sur %{instance}" -#: lib/service/export/feed.ex:220 #, elixir-format +#: lib/service/export/feed.ex:220 msgid "Feed for %{email} on %{instance}" msgstr "Flux pour %{email} sur %{instance}" -#: lib/web/templates/error/500_page.html.eex:57 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:57 msgid "If the issue persists, you may contact the server administrator at %{contact}." msgstr "Si le problème persiste, vous pouvez contacter l'administrateur⋅ice du serveur à %{contact}." -#: lib/web/templates/error/500_page.html.eex:55 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:55 msgid "If the issue persists, you may try to contact the server administrator." msgstr "Si le problème persiste, vous pouvez essayer de contacter l'administrateur⋅ice du serveur." -#: lib/web/templates/error/500_page.html.eex:68 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:68 msgid "Technical details" msgstr "Détails techniques" -#: lib/web/templates/error/500_page.html.eex:52 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:52 msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Le serveur Mobilizon %{instance} semble être temporairement hors-service." -#: lib/service/export/feed.ex:73 #, elixir-format +#: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "Flux public pour %{instance}" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "Notification d'activité sur %{instance}" diff --git a/priv/gettext/gl/LC_MESSAGES/activity.po b/priv/gettext/gl/LC_MESSAGES/activity.po new file mode 100644 index 00000000..7087b827 --- /dev/null +++ b/priv/gettext/gl/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: gl\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/gl/LC_MESSAGES/default.po b/priv/gettext/gl/LC_MESSAGES/default.po index 951735a1..5e128063 100644 --- a/priv/gettext/gl/LC_MESSAGES/default.po +++ b/priv/gettext/gl/LC_MESSAGES/default.po @@ -14,265 +14,265 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.6\n" -#: lib/web/templates/email/password_reset.html.eex:48 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:48 msgid "If you didn't request this, please ignore this email. Your password won't change until you access the link below and create a new one." msgstr "" "Se non solicitaches isto, ignora este email. O teu constrasinal non cambiará " "ata que accedas á ligazón inferior e cres un novo." -#: lib/web/templates/email/report.html.eex:74 #, elixir-format +#: lib/web/templates/email/report.html.eex:74 msgid "%{title} by %{creator}" msgstr "%{title} por %{creator}" -#: lib/web/templates/email/registration_confirmation.html.eex:58 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:58 msgid "Activate my account" msgstr "Activar a miña conta" +#, elixir-format #: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:9 -#, elixir-format msgid "Ask the community on Framacolibri" msgstr "Pregunta á comunidade en Framacolibri" -#: lib/web/templates/email/report.text.eex:15 #, elixir-format +#: lib/web/templates/email/report.text.eex:15 msgid "Comments" msgstr "Comentarios" +#, elixir-format #: lib/web/templates/email/report.html.eex:72 #: lib/web/templates/email/report.text.eex:11 -#, elixir-format msgid "Event" msgstr "Evento" -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Instruccións para restablecer o contrasinal en %{instance}" -#: lib/web/templates/email/report.text.eex:21 #, elixir-format +#: lib/web/templates/email/report.text.eex:21 msgid "Reason" msgstr "Razón" -#: lib/web/templates/email/password_reset.html.eex:61 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:61 msgid "Reset Password" msgstr "Restablecer Contrasinal" -#: lib/web/templates/email/password_reset.html.eex:41 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:41 msgid "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." msgstr "" "Restablecer o contrasinal é doado. Preme no botón inferior e segue as " "instrucción. Volverás a poder conectarte nuns intres." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Instruccións para confirmar a túa conta Mobilizon en %{instance}" -#: lib/web/email/admin.ex:24 #, elixir-format +#: lib/web/email/admin.ex:24 msgid "New report on Mobilizon instance %{instance}" msgstr "Nova denuncia sobre a instancia Mobilizon %{instance}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:51 #: lib/web/templates/email/before_event_notification.text.eex:4 -#, elixir-format msgid "Go to event page" msgstr "Ir á páxina do evento" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Nova denuncia de %{reporter} sobre %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Participación aprobada" +#, elixir-format #: lib/web/templates/email/password_reset.html.eex:13 #: lib/web/templates/email/password_reset.text.eex:1 -#, elixir-format msgid "Password reset" msgstr "Restablece o contrasinal" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "" "Restablecer o contrasinal é doado. Preme na ligazón inferior e segue as " "instruccións. Moi pronto poderás volver e conectarte." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "" "Creaches unha conta en %{host} con este enderezo de email. Só precisas " "activalo. Se non foches ti, por favor ignora este email." -#: lib/web/email/participation.ex:112 #, elixir-format +#: lib/web/email/participation.ex:112 msgid "Your participation to event %{title} has been approved" msgstr "Foi aprobada a túa participación no evento %{title}" -#: lib/web/email/participation.ex:70 #, elixir-format +#: lib/web/email/participation.ex:70 msgid "Your participation to event %{title} has been rejected" msgstr "Foi rexeitada a túa participación no evento %{title}" -#: lib/web/email/event.ex:37 #, elixir-format +#: lib/web/email/event.ex:37 msgid "Event %{title} has been updated" msgstr "Actualizouse o evento %{title}" -#: lib/web/templates/email/event_updated.text.eex:15 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:15 msgid "New title: %{title}" msgstr "Novo título: %{title}" -#: lib/web/templates/email/password_reset.text.eex:5 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:5 msgid "You requested a new password for your account on %{instance}." msgstr "" "Solicitaches un novo contrasinal para a túa conta na instancia %{instance]." -#: lib/web/templates/email/email.html.eex:85 #, elixir-format +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Aviso" -#: lib/web/email/participation.ex:135 #, elixir-format +#: lib/web/email/participation.ex:135 msgid "Confirm your participation to event %{title}" msgstr "Confirma a túa participación no evento %{title}" -#: lib/web/templates/api/privacy.html.eex:75 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:75 msgctxt "terms" msgid "An internal ID for your current selected identity" msgstr "ID interno para a túa identidade seleccionada" -#: lib/web/templates/api/privacy.html.eex:74 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:74 msgctxt "terms" msgid "An internal user ID" msgstr "ID de usuaria interno" -#: lib/web/templates/api/privacy.html.eex:37 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:37 msgctxt "terms" msgid "Any of the information we collect from you may be used in the following ways:" msgstr "" "Calquera información que obtemos de ti podería usarse dos seguintes xeitos:" -#: lib/web/templates/api/privacy.html.eex:9 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:9 msgctxt "terms" msgid "Basic account information" msgstr "Información básica da conta" -#: lib/web/templates/api/privacy.html.eex:25 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:25 msgctxt "terms" msgid "Do not share any dangerous information over Mobilizon." msgstr "Non compartas informacións perigosas en Mobilizon." -#: lib/web/templates/api/privacy.html.eex:90 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:90 msgctxt "terms" msgid "Do we disclose any information to outside parties?" msgstr "Enviamos información a terceiras partes alleas?" -#: lib/web/templates/api/privacy.html.eex:68 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:68 msgctxt "terms" msgid "Do we use cookies?" msgstr "Usamos cookies?" -#: lib/web/templates/api/privacy.html.eex:51 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:51 msgctxt "terms" msgid "How do we protect your information?" msgstr "Como protexemos a túa información?" -#: lib/web/templates/api/privacy.html.eex:29 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:29 msgctxt "terms" msgid "IPs and other metadata" msgstr "IPs e outros metadatos" -#: lib/web/templates/api/privacy.html.eex:17 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:17 msgctxt "terms" msgid "Published events and comments" msgstr "Eventos publicados e comentarios" -#: lib/web/templates/api/privacy.html.eex:64 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:64 msgctxt "terms" msgid "Retain the IP addresses associated with registered users no more than 12 months." msgstr "" "Retención de enderezos IP asociados con usuarias rexistradas durante non " "máis de 12 meses." -#: lib/web/templates/api/privacy.html.eex:76 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:76 msgctxt "terms" msgid "Tokens to authenticate you" msgstr "Tokens para autenticarte" -#: lib/web/templates/api/privacy.html.eex:31 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:31 msgctxt "terms" msgid "We also may retain server logs which include the IP address of every request to our server." msgstr "" "Tamén retemos rexistros do servidor que inclúen enderezos IP de cada " "solicitude ó noso servidor." -#: lib/web/templates/api/privacy.html.eex:70 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:70 msgctxt "terms" msgid "We store the following information on your device when you connect:" msgstr "Gardamos información no teu dispositivo cando te conectas:" -#: lib/web/templates/api/privacy.html.eex:58 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:58 msgctxt "terms" msgid "We will make a good faith effort to:" msgstr "Esforzarémonos de boa fe para:" -#: lib/web/templates/api/privacy.html.eex:35 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:35 msgctxt "terms" msgid "What do we use your information for?" msgstr "Para que usamos a túa información?" -#: lib/web/templates/api/privacy.html.eex:57 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:57 msgctxt "terms" msgid "What is our data retention policy?" msgstr "Cal é a nosa política de retención de datos?" -#: lib/web/templates/api/privacy.html.eex:67 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:67 msgctxt "terms" msgid "You may irreversibly delete your account at any time." msgstr "Podes eliminar de xeito definitivo a túa conta cando queiras." -#: lib/web/templates/api/privacy.html.eex:115 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:115 msgctxt "terms" msgid "Changes to our Privacy Policy" msgstr "Cambios na nosa Política de Privacidade" -#: lib/web/templates/api/privacy.html.eex:106 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:106 msgctxt "terms" msgid "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site." msgstr "" @@ -282,8 +282,8 @@ msgstr "" "General_Data_Protection_Regulation\">Regulación Xeral de Protección de " "Datos)) non uses esta web." -#: lib/web/templates/api/privacy.html.eex:109 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:109 msgctxt "terms" msgid "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site." msgstr "" @@ -293,30 +293,30 @@ msgstr "" "27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection " "Act) non utilices esta web." -#: lib/web/templates/api/privacy.html.eex:117 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:117 msgctxt "terms" msgid "If we decide to change our privacy policy, we will post those changes on this page." msgstr "" "Se decidimos cambiar a nosa política de privacidade, publicaremos aquí os " "cambios." -#: lib/web/templates/api/privacy.html.eex:112 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:112 msgctxt "terms" msgid "Law requirements can be different if this server is in another jurisdiction." msgstr "" "Os requerimentos legais poderían ser diferentes se o servidor está noutra " "xurisdición." -#: lib/web/templates/api/privacy.html.eex:103 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:103 msgctxt "terms" msgid "Site usage by children" msgstr "Utilización da web por menores" -#: lib/web/templates/api/privacy.html.eex:47 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:47 msgctxt "terms" msgid "The email address you provide may be used to send you information, updates and notifications about other people\n interacting with your content or sending you messages and to respond to inquiries, and/or other requests or\n questions." msgstr "" @@ -326,8 +326,8 @@ msgstr "" "así como para responder a preguntas, e/ou outras solicitudes\n" "ou cuestións." -#: lib/web/templates/api/privacy.html.eex:45 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:45 msgctxt "terms" msgid "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban\n evasion or other violations." msgstr "" @@ -335,8 +335,8 @@ msgstr "" "con outro coñecidos para evitar o salto\n" "de bloqueos ou outros infrinximentos." -#: lib/web/templates/api/privacy.html.eex:43 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:43 msgctxt "terms" msgid "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to\n interact with other people's content and post your own content if you are logged in." msgstr "" @@ -345,89 +345,89 @@ msgstr "" "estar conectada para así poder interactuar co contido doutras usuarias e " "publicar o teu contido." -#: lib/web/templates/api/privacy.html.eex:6 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:6 msgctxt "terms" msgid "What information do we collect?" msgstr "Que información recollemos?" -#: lib/web/email/user.ex:176 #, elixir-format +#: lib/web/email/user.ex:176 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon en %{instance}: confirma o enderezo de email" -#: lib/web/email/user.ex:152 #, elixir-format +#: lib/web/email/user.ex:152 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon en %{instance}: email cambiado" -#: lib/web/email/notification.ex:47 #, elixir-format +#: lib/web/email/notification.ex:47 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Un evento previsto para hoxe" msgstr[1] "%{nb_events} eventos previstos hoxe" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "Hoxe tes un evento:" msgstr[1] "Tes %{total} eventos hoxe:" -#: lib/web/templates/email/group_invite.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_invite.text.eex:3 msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} convidoute a unirte ó seu grupo %{group}" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "Imos!" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "Non esquezas ir a %{title}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Prepárate para %{title}" -#: lib/web/templates/email/group_invite.html.eex:59 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:59 msgid "See my groups" msgstr "Ver os meus grupos" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:45 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Para aceptar o convite, vaite ós teus grupos." -#: lib/web/templates/email/before_event_notification.text.eex:5 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:5 msgid "View the event on: %{link}" msgstr "Ver o evento en: %{link}" -#: lib/web/email/group.ex:33 #, elixir-format +#: lib/web/email/group.ex:33 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{inviter} convidoute a unirte ó grupo %{group}" -#: lib/web/email/notification.ex:71 #, elixir-format +#: lib/web/email/notification.ex:71 msgid "One event planned this week" msgid_plural "%{nb_events} events planned this week" msgstr[0] "Un evento previsto nesta semana" msgstr[1] "%{nb_events} eventos previstos nesta semana" -#: lib/web/email/notification.ex:93 #, elixir-format +#: lib/web/email/notification.ex:93 msgid "One participation request for event %{title} to process" msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" msgstr[0] "Hai unha solicitude de participación para o evento %{title} que atender" @@ -435,21 +435,21 @@ msgstr[1] "" "Hai %{number_participation_requests} solicitudes de participación no evento " "%{title} que atender" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:38 #: lib/web/templates/email/notification_each_week.text.eex:3 -#, elixir-format msgid "You have one event this week:" msgid_plural "You have %{total} events this week:" msgstr[0] "Tes un evento esta semana:" msgstr[1] "Tes %{total} eventos esta semana:" -#: lib/service/metadata/utils.ex:52 #, elixir-format +#: lib/service/metadata/utils.ex:52 msgid "The event organizer didn't add any description." msgstr "A organización do evento non proporcionou unha descrición." -#: lib/web/templates/api/privacy.html.eex:54 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:54 msgctxt "terms" msgid "We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way algorithm." msgstr "" @@ -459,8 +459,8 @@ msgstr "" "e a API, están protexidas con SSL/TLS, e o contrasinal protexido cun " "algoritmo forte." -#: lib/web/templates/api/privacy.html.eex:94 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:94 msgctxt "terms" msgid "No. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety." msgstr "" @@ -472,20 +472,20 @@ msgstr "" "facelo é apropiado para cumprir coa lei, facer cumprir as políticas desta " "web, ou protexer os dereitos ou a seguridade doutras persoas ou os nosos." -#: lib/web/templates/api/terms.html.eex:23 #, elixir-format +#: lib/web/templates/api/terms.html.eex:23 msgctxt "terms" msgid "Accepting these Terms" msgstr "Aceptando estos Termos" -#: lib/web/templates/api/terms.html.eex:27 #, elixir-format +#: lib/web/templates/api/terms.html.eex:27 msgctxt "terms" msgid "Changes to these Terms" msgstr "Cambios nos Termos" -#: lib/web/templates/api/terms.html.eex:85 #, elixir-format +#: lib/web/templates/api/terms.html.eex:85 msgctxt "terms" msgid "A lot of the content on the Service is from you and others, and we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content." msgstr "" @@ -496,16 +496,16 @@ msgstr "" "presente no Servizo. É responsabilidade túa asumir o risco procedente de " "utilizar ou confiar en calquera contido." -#: lib/web/templates/api/terms.html.eex:60 #, elixir-format +#: lib/web/templates/api/terms.html.eex:60 msgctxt "terms" msgid "Also, you agree that you will not do any of the following in connection with the Service or other users:" msgstr "" "Tamén, aceptas que non vas facer nada do seguinte en conexión co Servizo ou " "outras usuarias:" -#: lib/web/templates/api/terms.html.eex:65 #, elixir-format +#: lib/web/templates/api/terms.html.eex:65 msgctxt "terms" msgid "Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties." msgstr "" @@ -513,22 +513,22 @@ msgstr "" "uso ou outras características deseñadas para protexer o Servizo, usuarias do " "Servizo, ou terceiras partes." -#: lib/web/templates/api/terms.html.eex:64 #, elixir-format +#: lib/web/templates/api/terms.html.eex:64 msgctxt "terms" msgid "Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service;" msgstr "" "Recoller información personal acerca doutras usuarias, ou intimidar, " "ameazar, presionar ou molestar doutros xeitos ás usuarias do Servizo;" -#: lib/web/templates/api/terms.html.eex:55 #, elixir-format +#: lib/web/templates/api/terms.html.eex:55 msgctxt "terms" msgid "Content that is illegal or unlawful, that would otherwise create liability;" msgstr "Contido que é ilegal ou alegal, que podería ser comprometido;" -#: lib/web/templates/api/terms.html.eex:56 #, elixir-format +#: lib/web/templates/api/terms.html.eex:56 msgctxt "terms" msgid "Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party;" msgstr "" @@ -536,48 +536,48 @@ msgstr "" "comerciais, copyright, dereitos de privacidade, dereitos de publicidade ou " "outros dereitos intelectuais de calquera tipo;" -#: lib/web/templates/api/terms.html.eex:42 #, elixir-format +#: lib/web/templates/api/terms.html.eex:42 msgctxt "terms" msgid "Creating Accounts" msgstr "Creando Contas" -#: lib/web/templates/api/terms.html.eex:89 #, elixir-format +#: lib/web/templates/api/terms.html.eex:89 msgctxt "terms" msgid "Entire Agreement" msgstr "Acordo completo" -#: lib/web/templates/api/terms.html.eex:92 #, elixir-format +#: lib/web/templates/api/terms.html.eex:92 msgctxt "terms" msgid "Feedback" msgstr "Opinión" -#: lib/web/templates/api/terms.html.eex:83 #, elixir-format +#: lib/web/templates/api/terms.html.eex:83 msgctxt "terms" msgid "Hyperlinks and Third Party Content" msgstr "Ligazóns e Contido de Terceiras Partes" -#: lib/web/templates/api/terms.html.eex:88 #, elixir-format +#: lib/web/templates/api/terms.html.eex:88 msgctxt "terms" msgid "If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service." msgstr "" "Se vulneras algún destos Termos, temos dereito a suspender ou desactivar o " "acceso á conta ou a usar o Servizo." -#: lib/web/templates/api/terms.html.eex:63 #, elixir-format +#: lib/web/templates/api/terms.html.eex:63 msgctxt "terms" msgid "Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity;" msgstr "" "Suplantar ou publicar en nome doutra persoa ou entidade oy confundir doutro " "xeito sobre a túa relación con esa persoa ou entidade;" -#: lib/web/templates/api/terms.html.eex:48 #, elixir-format +#: lib/web/templates/api/terms.html.eex:48 msgctxt "terms" msgid "Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness." msgstr "" @@ -585,26 +585,26 @@ msgstr "" "accesible os contidos. Es responsable do contido que publicas no Servizo, " "tanto da súa legalidade, fiabilidade e corrección." -#: lib/web/templates/api/terms.html.eex:39 #, elixir-format +#: lib/web/templates/api/terms.html.eex:39 msgctxt "terms" msgid "Privacy Policy" msgstr "Política de Privacidade" -#: lib/web/templates/api/terms.html.eex:95 #, elixir-format +#: lib/web/templates/api/terms.html.eex:95 msgctxt "terms" msgid "Questions & Contact Information" msgstr "Preguntas e Información de Contacto" -#: lib/web/templates/api/terms.html.eex:87 #, elixir-format +#: lib/web/templates/api/terms.html.eex:87 msgctxt "terms" msgid "Termination" msgstr "Finalización" -#: lib/web/templates/api/terms.html.eex:62 #, elixir-format +#: lib/web/templates/api/terms.html.eex:62 msgctxt "terms" msgid "Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service;" msgstr "" @@ -612,14 +612,14 @@ msgstr "" "negativo ou facer que outras non desfruten do Servizo ou puidese danar, " "desactivar, sobrecargar ou impedir o funcionamento do Servizo;" -#: lib/web/templates/api/terms.html.eex:47 #, elixir-format +#: lib/web/templates/api/terms.html.eex:47 msgctxt "terms" msgid "Your Content & Conduct" msgstr "O teu Contido e Conduta" -#: lib/web/templates/api/terms.html.eex:84 #, elixir-format +#: lib/web/templates/api/terms.html.eex:84 msgctxt "terms" msgid "%{instance_name} makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by %{instance_name} of the site. Use of any such linked website is at the user's own risk." msgstr "" @@ -630,8 +630,8 @@ msgstr "" "implica o apoio de %{instance_name} a esa web. O uso de tales sitios " "web farase baixo responsabilidade propia da usuaria." -#: lib/web/templates/api/terms.html.eex:68 #, elixir-format +#: lib/web/templates/api/terms.html.eex:68 msgctxt "terms" msgid "Finally, your use of the Service is also subject to acceptance of the instance's own specific rules regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended." msgstr "" @@ -640,16 +640,16 @@ msgstr "" "regras de moderación. Romper esas regras podería resultar na cancelación ou " "suspensión da túa conta." -#: lib/web/templates/api/terms.html.eex:81 #, elixir-format +#: lib/web/templates/api/terms.html.eex:81 msgctxt "terms" msgid "For full details about the Mobilizon software see here." msgstr "" "Para coñecer máis sobre o software Mobilizon visita esta web." -#: lib/web/templates/api/terms.html.eex:18 #, elixir-format +#: lib/web/templates/api/terms.html.eex:18 msgctxt "terms" msgid "Here are the important things you need to know about accessing and using the %{instance_name} (%{instance_url}) website and service (collectively, \"Service\"). These are our terms of service (\"Terms\"). Please read them carefully." msgstr "" @@ -658,8 +658,8 @@ msgstr "" ">%{instance_url}) e o servizo (colectivamente, o \"Servizo\"). Estos son " "os nosos termos do servizo (\"Termos\"). Le con atención." -#: lib/web/templates/api/terms.html.eex:33 #, elixir-format +#: lib/web/templates/api/terms.html.eex:33 msgctxt "terms" msgid "If we make major changes, we will notify our users in a clear and prominent manner. Minor changes may only be highlighted in the footer of our website. It is your responsibility to check the website regularly for changes to these Terms." msgstr "" @@ -667,8 +667,8 @@ msgstr "" "evidente. Os cambios menores poderían aparecer simplemente no pé do sitio " "web. É responsabilidade túa estar atenta a estos cambios nos Termos." -#: lib/web/templates/api/terms.html.eex:53 #, elixir-format +#: lib/web/templates/api/terms.html.eex:53 msgctxt "terms" msgid "In order to make %{instance_name} a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:" msgstr "" @@ -676,16 +676,16 @@ msgstr "" "publiques, ligues ou poñas a disposición a través do Servizo calquera do " "seguinte:" -#: lib/web/templates/api/terms.html.eex:57 #, elixir-format +#: lib/web/templates/api/terms.html.eex:57 msgctxt "terms" msgid "Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and" msgstr "" "Información privada sobre terceiras partes (ex., enderzos, números de " "teléfono, email, número da Seguridade Social, cartón de crédito), e" -#: lib/web/templates/api/terms.html.eex:52 #, elixir-format +#: lib/web/templates/api/terms.html.eex:52 msgctxt "terms" msgid "Since Mobilizon is a distributed network, it is possible, depending on the visibility rules set to your content, that your content has been distributed to other Mobilizon instances. When you delete your content, we will request those other instances to also delete the content. Our responsibility on the content being deleted from those other instances ends here. If for some reason, some other instance does not delete the content, we cannot be held responsible." msgstr "" @@ -696,8 +696,8 @@ msgstr "" "do contido nesas outras instancias remata aquí. Se por algunha razón esas " "outras instancias non eliminan o contido non seremos responsables." -#: lib/web/templates/api/terms.html.eex:90 #, elixir-format +#: lib/web/templates/api/terms.html.eex:90 msgctxt "terms" msgid "These Terms constitute the entire agreement between you and %{instance_name} regarding the use of the Service, superseding any prior agreements between you and %{instance_name} relating to your use of the Service." msgstr "" @@ -705,8 +705,8 @@ msgstr "" "respecto do uso do Servizo, deixando sen efecto calquera acordo anterior " "entre ti e %{instance_name} respecto da utilización do Servizo." -#: lib/web/templates/api/terms.html.eex:80 #, elixir-format +#: lib/web/templates/api/terms.html.eex:80 msgctxt "terms" msgid "This Service runs on a Mobilizon instance. This source code is licensed under an AGPLv3 license which means you are allowed to and even encouraged to take the source code, modify it and use it." msgstr "" @@ -715,14 +715,14 @@ msgstr "" "license-v3-(agpl-3.0)\">AGPLv3 que che permite e anima a coñecer, " "modificar e usar o código." -#: lib/web/templates/api/terms.html.eex:58 #, elixir-format +#: lib/web/templates/api/terms.html.eex:58 msgctxt "terms" msgid "Viruses, corrupted data or other harmful, disruptive or destructive files or code." msgstr "Viruses, datos corruptos e ficheiros ou código malicioso ou destrutivo." -#: lib/web/templates/api/terms.html.eex:51 #, elixir-format +#: lib/web/templates/api/terms.html.eex:51 msgctxt "terms" msgid "You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. Web server access logs might also be stored for some time in the system." msgstr "" @@ -732,30 +732,30 @@ msgstr "" "tempo. Os rexistros de acceso ó servidor tamén poderían permanecer algún " "tempo no sistema." -#: lib/web/templates/api/terms.html.eex:96 #, elixir-format +#: lib/web/templates/api/terms.html.eex:96 msgctxt "terms" msgid "Questions or comments about the Service may be directed to us at %{contact}" msgstr "" "Preguntas e comentarios sobre o Servizo poderían sernos enviados hacia " "%{contact}" -#: lib/web/templates/api/terms.html.eex:79 #, elixir-format +#: lib/web/templates/api/terms.html.eex:79 msgctxt "terms" msgid "Source code" msgstr "Código fonte" -#: lib/web/templates/api/terms.html.eex:93 #, elixir-format +#: lib/web/templates/api/terms.html.eex:93 msgctxt "terms" msgid "We love feedback. Please let us know what you think of the Service, these Terms and, in general, %{instance_name}." msgstr "" "Apreciamos a túa opinión. Dinos o que pensas sobre o Servizo, estos Termos " "e, en xeral, sobre %{instance_name}." -#: lib/web/templates/api/terms.html.eex:74 #, elixir-format +#: lib/web/templates/api/terms.html.eex:74 msgctxt "terms" msgid "Instance administrators (and community moderators, given the relevant access) are responsible for monitoring and acting on flagged content and other user reports, and have the right and responsibility to remove or edit content that is not aligned to this Instance set of rules, or to suspend, block or ban (temporarily or permanently) any account, community, or instance for breaking these terms, or for other behaviours that they deem inappropriate, threatening, offensive, or harmful." msgstr "" @@ -767,16 +767,16 @@ msgstr "" "comunidade, ou instancia por non acatar os termos ou por outros " "comportamentos que estimen inapropiados, ameazantes, ofensivos ou daninos." -#: lib/web/templates/api/terms.html.eex:6 #, elixir-format +#: lib/web/templates/api/terms.html.eex:6 msgctxt "terms" msgid "%{instance_name} will not use or transmit or resell your personal data" msgstr "" "%{instance_name} non utilizará, transmitirá ou comerciará cos teus " "datos personais" -#: lib/web/templates/api/terms.html.eex:44 #, elixir-format +#: lib/web/templates/api/terms.html.eex:44 msgctxt "terms" msgid "If you discover or suspect any Service security breaches, please let us know as soon as possible. For security holes in the Mobilizon software itself, please contact its contributors directly." msgstr "" @@ -785,16 +785,16 @@ msgstr "" "contacta directamente coas súas programadoras." -#: lib/web/templates/api/terms.html.eex:77 #, elixir-format +#: lib/web/templates/api/terms.html.eex:77 msgctxt "terms" msgid "Instance administrators should ensure that every community hosted on the instance is properly moderated according to the defined rules." msgstr "" "A administración da instancia debe asegurar que toda comunidade hospedada na " "instancia está moderada de xeito correcto acorde coas regras definidas." -#: lib/web/templates/api/terms.html.eex:98 #, elixir-format +#: lib/web/templates/api/terms.html.eex:98 msgctxt "terms" msgid "Originally adapted from the Diaspora* and App.net privacy policies, also licensed under CC BY-SA." msgstr "" @@ -803,8 +803,8 @@ msgstr "" "appdotnet/terms-of-service\">App.net, tamén con licenza CC BY-SA." -#: lib/web/templates/api/privacy.html.eex:119 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:119 msgctxt "terms" msgid "Originally adapted from the Mastodon and Discourse privacy policies, also licensed under CC BY-SA." msgstr "" @@ -813,113 +813,113 @@ msgstr "" ">Discourse, tamén con licenza CC BY-SA." -#: lib/web/templates/api/terms.html.eex:3 #, elixir-format +#: lib/web/templates/api/terms.html.eex:3 msgctxt "terms" msgid "Short version" msgstr "Versión curta" -#: lib/web/templates/api/terms.html.eex:9 #, elixir-format +#: lib/web/templates/api/terms.html.eex:9 msgctxt "terms" msgid "The service is provided without warranties and these terms may change in the future" msgstr "" "O servizo proporciónase sen garantía e estos termos poderían mudar no futuro" -#: lib/web/templates/api/privacy.html.eex:118 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:118 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 18, 2020." msgstr "" "Este documento publícase baixo licenza CC BY-SA. Actualizado o 18 de Xuño de 2020." -#: lib/web/templates/api/terms.html.eex:97 #, elixir-format +#: lib/web/templates/api/terms.html.eex:97 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 22, 2020." msgstr "" "Este documento publícase baixo licenza CC BY-SA. Actualizado o 22 de Xuño de 2020." -#: lib/web/templates/api/terms.html.eex:8 #, elixir-format +#: lib/web/templates/api/terms.html.eex:8 msgctxt "terms" msgid "You must respect other people and %{instance_name}'s rules when using the service" msgstr "" "Debes respectar a outras persoas e ás regras de %{instance_name} ó " "utilizar o servizo" -#: lib/web/templates/api/terms.html.eex:7 #, elixir-format +#: lib/web/templates/api/terms.html.eex:7 msgctxt "terms" msgid "You must respect the law when using %{instance_name}" msgstr "Debes respectar a lei ó utilizar %{instance_name}" -#: lib/web/templates/api/terms.html.eex:5 #, elixir-format +#: lib/web/templates/api/terms.html.eex:5 msgctxt "terms" msgid "Your content is yours" msgstr "O teu contido é teu" -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 msgid "Confirm my e-mail address" msgstr "Confirma o enderezo de email" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Confirm your e-mail" msgstr "Confirma o teu email" -#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "Vaites! Rexistrácheste para participar neste evento: « %{title} ». Por favor " "confirma o email proporcionado:" +#, elixir-format #: lib/web/templates/email/email.html.eex:114 #: lib/web/templates/email/email.text.eex:8 -#, elixir-format msgid "Need help? Is something not working as expected?" msgstr "Precisas axuda? Algo non funciona como agardabas?" -#: lib/web/templates/email/registration_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:38 msgid "You created an account on %{host} with this email address. You are one click away from activating it." msgstr "" "Creaches unha conta en %{host} con este enderezo de email. Estás a un " "click de activalo." -#: lib/web/templates/email/report.html.eex:13 #, elixir-format +#: lib/web/templates/email/report.html.eex:13 msgid "New report on %{instance}" msgstr "Nova denuncia sobre %{instance}" -#: lib/web/templates/email/email_changed_old.html.eex:38 #, elixir-format +#: lib/web/templates/email/email_changed_old.html.eex:38 msgid "The email address for your account on %{host} is being changed to:" msgstr "O enderezo de email da túa conta en %{host} vaise cambiar a:" -#: lib/web/templates/email/password_reset.html.eex:38 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:38 msgid "You requested a new password for your account on %{instance}." msgstr "" "Solicitaches un novo contrasinal para a túa conta en %{instance}." -#: lib/web/templates/email/email.text.eex:5 #, elixir-format +#: lib/web/templates/email/email.text.eex:5 msgid "Please do not use it for real purposes." msgstr "Por favor, non o utilices nun entorno de produción." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:63 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:6 lib/web/templates/email/event_updated.html.eex:133 #: lib/web/templates/email/event_updated.text.eex:24 lib/web/templates/email/notification_each_week.html.eex:70 #: lib/web/templates/email/notification_each_week.text.eex:11 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 -#, elixir-format msgid "Would you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button." msgstr[0] "" @@ -929,9 +929,9 @@ msgstr[1] "" "Desexas cancelar a túa participación nun ou en varios eventos, visita as " "páxinas a través das ligazóns superiores e preme no botón « Attending »." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:38 #: lib/web/templates/email/pending_participation_notification.text.eex:4 -#, elixir-format msgid "You have one pending attendance request to process:" msgid_plural "You have %{number_participation_requests} attendance requests to process:" msgstr[0] "Tes unha solicitude de participación pendente de atender:" @@ -939,66 +939,66 @@ msgstr[1] "" "Tes %{number_participation_requests} solicitudes de participación pendentes " "de atender:" -#: lib/web/templates/email/email.text.eex:11 #, elixir-format +#: lib/web/templates/email/email.text.eex:11 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} funciona grazas a Mobilizon." -#: lib/web/templates/email/email.html.eex:142 #, elixir-format +#: lib/web/templates/email/email.html.eex:142 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} funciona grazas a Mobilizon." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:13 #: lib/web/templates/email/pending_participation_notification.text.eex:1 -#, elixir-format msgid "A request is pending!" msgstr "Hai unha solicitude pendente!" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "An event is upcoming!" msgstr "Un evento está próximo!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:13 #: lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Confirm new email" msgstr "Confirma o novo email" -#: lib/web/templates/email/event_updated.html.eex:84 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:84 msgid "End" msgstr "Fin" -#: lib/web/templates/email/event_updated.text.eex:21 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:21 msgid "End %{ends_on}" msgstr "Remata o %{ends_on}" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event update!" msgstr "Actualización do evento!" -#: lib/web/templates/email/report.html.eex:88 #, elixir-format +#: lib/web/templates/email/report.html.eex:88 msgid "Flagged comments" msgstr "Comentarios marcados" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "Good news: one of the event organizers just approved your request. Update your calendar, because you're on the guest list now!" msgstr "" "Boa nova: a organización aprobou a túa solicitude. Actualiza o calendario, " "xa que agora estás na lista de convidadas!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:38 #: lib/web/templates/email/email_changed_new.text.eex:3 -#, elixir-format msgid "Hi there! It seems like you wanted to change the email address linked to your account on %{instance}. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address." msgstr "" "Ola! Semella que queres cambiar o enderezo de email asociado á túa conta en " @@ -1006,16 +1006,16 @@ msgstr "" "o cambio. Despois poderás conectarte a %{instance} utilizando este novo " "enderezo de email." -#: lib/web/templates/email/email_changed_old.text.eex:3 #, elixir-format +#: lib/web/templates/email/email_changed_old.text.eex:3 msgid "Hi there! Just a quick note to confirm that the email address linked to your account on %{host} has been changed from this one to:" msgstr "" "Ola! Aquí un aviso para confirmar que o enderezo de email asociado á túa " "conta en %{host} cambiouse a:" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:62 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "If you did not trigger this change yourself, it is likely that someone has gained access to your %{host} account. Please log in and change your password immediately. If you cannot login, contact the admin on %{host}." msgstr "" "Se non fixeches este cambio ti mesma, é probable que alguén obtivese acceso " @@ -1023,305 +1023,305 @@ msgstr "" "inmediatamente. Se non podes conectar, contacta coa administración de " "%{host}." -#: lib/web/templates/email/password_reset.text.eex:12 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:12 msgid "If you didn't trigger the change yourself, please ignore this message. Your password won't be changed until you click the link above." msgstr "" "Se non solicitaches ti mesma o cambio, ignora esta mensaxe. O contrasinal " "non cambiará ata que premas na ligazón superior." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:70 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:4 lib/web/templates/email/registration_confirmation.html.eex:45 -#, elixir-format msgid "If you didn't trigger this email, you may safely ignore it." msgstr "Se non solicitaches este email, podes ignoralo con seguridade." +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:63 #: lib/web/templates/email/before_event_notification.text.eex:6 -#, elixir-format msgid "If you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgstr "" "Se queres cancelar a túa participación, visita a páxina do evento a través " "da ligazón superior e preme no botón « Participar »." +#, elixir-format #: lib/web/templates/email/email.html.eex:143 #: lib/web/templates/email/email.text.eex:11 -#, elixir-format msgid "Learn more about Mobilizon here!" msgstr "Coñece máis acerca de Mobilizon!" -#: lib/web/templates/email/event_updated.html.eex:94 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:94 msgid "Location" msgstr "Localización" -#: lib/web/templates/email/event_updated.html.eex:104 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:104 msgid "Location address was removed" msgstr "Eliminouse o enderezo da localización" +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:51 #: lib/web/templates/email/pending_participation_notification.text.eex:6 -#, elixir-format msgid "Manage pending requests" msgstr "Xestionar solicitudes pendentes" +#, elixir-format #: lib/web/templates/email/registration_confirmation.html.eex:13 #: lib/web/templates/email/registration_confirmation.text.eex:1 -#, elixir-format msgid "Nearly there!" msgstr "Case rematamos!" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email confirmation" msgstr "Novo email de confirmación" -#: lib/web/templates/email/report.html.eex:106 #, elixir-format +#: lib/web/templates/email/report.html.eex:106 msgid "Reasons for report" msgstr "Razóns para denunciar" -#: lib/web/templates/email/report.html.eex:39 #, elixir-format +#: lib/web/templates/email/report.html.eex:39 msgid "Someone on %{instance} reported the following content for you to analyze:" msgstr "" "Alguén na %{instancia} denunciou o seguinte contido para que o " "analices:" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:13 #: lib/web/templates/email/event_participation_rejected.text.eex:1 -#, elixir-format msgid "Sorry! You're not going." msgstr "Lamentámos que non participes." -#: lib/web/templates/email/event_updated.html.eex:74 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:74 msgid "Start" msgstr "Inicio" -#: lib/web/templates/email/event_updated.text.eex:18 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:18 msgid "Start %{begins_on}" msgstr "Comeza en %{begins_on}" -#: lib/web/templates/email/event_updated.text.eex:3 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:3 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "Houbo cambios no título para %{title} e cremos que é do teu interese." +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:55 #: lib/web/templates/email/event_updated.text.eex:11 -#, elixir-format msgid "This event has been cancelled by its organizers. Sorry!" msgstr "Evento cancelado pola organización. Lamentámolo!" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:51 #: lib/web/templates/email/event_updated.text.eex:7 -#, elixir-format msgid "This event has been confirmed" msgstr "Este evento foi confirmado" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:53 #: lib/web/templates/email/event_updated.text.eex:9 -#, elixir-format msgid "This event has yet to be confirmed: organizers will let you know if they do confirm it." msgstr "" "Este evento aínda ten que ser confirmado: a organización farache saber se o " "confirman." +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your request." msgstr "É unha mágoa, pero a organización rexeitou a túa solicitude." -#: lib/web/templates/email/email_changed_new.html.eex:51 #, elixir-format +#: lib/web/templates/email/email_changed_new.html.eex:51 msgid "Verify your email address" msgstr "Verifica o teu enderezo de email" -#: lib/web/templates/email/report.html.eex:126 #, elixir-format +#: lib/web/templates/email/report.html.eex:126 msgid "View report" msgstr "Ver denuncia" -#: lib/web/templates/email/report.text.eex:24 #, elixir-format +#: lib/web/templates/email/report.text.eex:24 msgid "View report:" msgstr "Ver denuncia:" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:58 #: lib/web/templates/email/event_participation_confirmed.html.eex:58 -#, elixir-format msgid "Visit event page" msgstr "Visitar páxina do evento" -#: lib/web/templates/email/event_updated.html.eex:121 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:121 msgid "Visit the updated event page" msgstr "Visita a páxina do evento actualizada" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "Visit the updated event page: %{link}" msgstr "Visita a páxina do evento actualizada: %{link}" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:13 #: lib/web/templates/email/notification_each_week.text.eex:1 -#, elixir-format msgid "What's up this week?" msgstr "Que acontece nesta semana?" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "What's up today?" msgstr "Que temos para hoxe?" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:70 #: lib/web/templates/email/event_participation_approved.text.eex:11 lib/web/templates/email/event_participation_confirmed.html.eex:70 #: lib/web/templates/email/event_participation_confirmed.text.eex:6 -#, elixir-format msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button." msgstr "" "Desexas actualizar ou cancelar a túa participación, simplemente accede á " "páxina do evento na ligazón superior e preme no botón Participar." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:64 #: lib/web/templates/email/pending_participation_notification.text.eex:8 -#, elixir-format msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »." msgstr "" "Recibes este email porque escolleches ser notificada sobre as solicitudes " "pendentes nos teus eventos. Podes desactivar ou cambiar os axustes das " "notificación nos axustes da conta baixo « Notificacións »." -#: lib/web/templates/email/event_participation_rejected.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:5 msgid "You issued a request to attend %{title}." msgstr "Solicitaches participar en %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.text.eex:5 #: lib/web/templates/email/event_participation_confirmed.text.eex:3 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Recentemente solicitaches participar en %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:13 #: lib/web/templates/email/event_participation_confirmed.html.eex:13 lib/web/templates/email/event_participation_confirmed.text.eex:1 -#, elixir-format msgid "You're going!" msgstr "Vas ir!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:64 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Se non propiciaches ti o cambio, por favor ignora esta mensaxe." -#: lib/web/templates/email/email.html.eex:89 #, elixir-format +#: lib/web/templates/email/email.html.eex:89 msgid "Please do not use it for real purposes." msgstr "Por favor, non o uses para eventos reais." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:45 #: lib/web/templates/email/group_member_removal.text.eex:5 -#, elixir-format msgid "If you feel this is an error, you may contact the group's administrators so that they can add you back." msgstr "" "Se cres que é un erro, podes contactar co grupo de administradoras para que " "poidan volver a engadirte." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:13 #: lib/web/templates/email/group_member_removal.text.eex:1 -#, elixir-format msgid "So long, and thanks for the fish!" msgstr "Ata aquí, e grazas pola atención!" -#: lib/web/email/group.ex:63 #, elixir-format +#: lib/web/email/group.ex:63 msgid "You have been removed from group %{group}" msgstr "Foches eliminada do grupo %{group}" -#: lib/web/templates/email/group_member_removal.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_member_removal.text.eex:3 msgid "You have been removed from group %{group}. You will not be able to access this group's private content anymore." msgstr "" "Foches eliminada do grupo %{group}. Agora non poderás acceder ós contidos " "privados do grupo." -#: lib/web/templates/email/group_invite.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:38 msgid "%{inviter} just invited you to join their group %{link_start}%{group}%{link_end}" msgstr "" "%{inviter} convidoute a unirte ó seu grupo " "%{link_start}%{group}%{link_end}" -#: lib/web/templates/email/group_member_removal.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_member_removal.html.eex:38 msgid "You have been removed from group %{link_start}%{group}%{link_end}. You will not be able to access this group's private content anymore." msgstr "" "Foches eliminada do grupo %{link_start}%{group}%{link_end}. Agora non " "poderás acceder ós contidos privados deste grupo." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:54 #: lib/web/templates/email/group_suspension.text.eex:7 -#, elixir-format msgid "As this group was located on another instance, it will continue to work for other instances than this one." msgstr "" "Este grupo estaba localizado noutra instancia, seguirá funcionando para " "outras instancias pero non nesta." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:46 #: lib/web/templates/email/group_suspension.text.eex:5 -#, elixir-format msgid "As this group was located on this instance, all of it's data has been irretrievably deleted." msgstr "" "Como este grupo estaba noutra instancia, todos os seus datos serán " "irreversiblemente eliminados." +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:38 #: lib/web/templates/email/group_deletion.text.eex:3 -#, elixir-format msgid "The administrator %{author} deleted group %{group}. All of the group's events, discussions, posts and todos have been deleted." msgstr "" "A administradora %{author} eliminou o grupo %{group}. Todos os eventos do " "grupo, debates, publicacións e tarefas foron elminados." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:13 #: lib/web/templates/email/group_suspension.text.eex:1 -#, elixir-format msgid "The group %{group} has been suspended on %{instance}!" msgstr "O grupo %{group} foi suspendido en %{instance}!" +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:13 #: lib/web/templates/email/group_deletion.text.eex:1 -#, elixir-format msgid "The group %{group} was deleted on %{instance}!" msgstr "O grupo %{group} foi eliminado de %{instance}!" +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:38 #: lib/web/templates/email/group_suspension.text.eex:3 -#, elixir-format msgid "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group." msgstr "" "Os moderadores da túa instancia decidiron suspender %{group_name} " "(%{group_address}). Xa non pertences a este grupo." -#: lib/web/email/group.ex:136 #, elixir-format +#: lib/web/email/group.ex:136 msgid "The group %{group} has been deleted on %{instance}" msgstr "O grupo %{group} foi eliminado de %{instance}" -#: lib/web/email/group.ex:97 #, elixir-format +#: lib/web/email/group.ex:97 msgid "The group %{group} has been suspended on %{instance}" msgstr "O grupo %{group} foi suspendido en %{instance}" -#: lib/web/templates/api/terms.html.eex:24 #, elixir-format +#: lib/web/templates/api/terms.html.eex:24 msgctxt "terms" msgid "By accessing or using the Service, this means you agree to be bound by all the terms below. If these terms are in any way unclear, please let us know by contacting %{contact}." msgstr "" @@ -1329,8 +1329,8 @@ msgstr "" "Se estos termos dalgún xeito non están claros, por favor fainolo saber " "contactando con %{contact}." -#: lib/web/templates/api/terms.html.eex:40 #, elixir-format +#: lib/web/templates/api/terms.html.eex:40 msgctxt "terms" msgid "For information about how we collect and use information about users of the Service, please check our privacy policy." msgstr "" @@ -1338,22 +1338,22 @@ msgstr "" "usuarias do Servizo, mira a nosa política de " "privacidade." -#: lib/web/templates/api/terms.html.eex:36 #, elixir-format +#: lib/web/templates/api/terms.html.eex:36 msgctxt "terms" msgid "If you continue to use the Service after the revised Terms go into effect, you accept the revised Terms." msgstr "" "Se continúas a usar o Servizo tras estar vixentes os Termos revisados, " "aceptas os Termos revisados." -#: lib/web/templates/api/privacy.html.eex:78 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:78 msgctxt "terms" msgid "If you delete this information, you need to login again." msgstr "Se eliminas esta información deberás conectarte de volta." -#: lib/web/templates/api/privacy.html.eex:80 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:80 msgctxt "terms" msgid "If you're not connected, we don't store any information on your device, unless you participate in an event anonymously. In this specific case we store the hash of an unique identifier for the event and participation status in your browser so that we may display participation status. Deleting this information will only stop displaying participation status in your browser." msgstr "" @@ -1364,29 +1364,29 @@ msgstr "" "Eliminando esta información só fará que deixes de ver o estado da " "participación no teu navegador." -#: lib/web/templates/api/privacy.html.eex:87 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:87 msgctxt "terms" msgid "Note: This information is stored in your localStorage and not your cookies." msgstr "Nota: esta información gárdase no localStorage e non nas cookies." -#: lib/web/templates/api/terms.html.eex:71 #, elixir-format +#: lib/web/templates/api/terms.html.eex:71 msgctxt "terms" msgid "Our responsibility" msgstr "A nosa responsabilidade" -#: lib/web/templates/api/privacy.html.eex:61 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:61 msgctxt "terms" msgid "Retain server logs containing the IP address of all requests to this server, insofar as such logs are kept, no more than 90 days." msgstr "" "Gardar rexistros do servidor que conteñen enderezos IP de todas as peticións " "ó servidor, de tal xeito que non será durante máis de 90 días." +#, elixir-format #: lib/web/templates/api/privacy.html.eex:3 #: lib/web/templates/api/terms.html.eex:15 -#, elixir-format msgctxt "terms" msgid "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We have provided a glossary to help you understand them better." msgstr "" @@ -1394,16 +1394,16 @@ msgstr "" "poderían referir conceptos difíciles de comprender. Aquí tes un glosario para axudarche a comprendelos mellor." -#: lib/web/templates/api/terms.html.eex:45 #, elixir-format +#: lib/web/templates/api/terms.html.eex:45 msgctxt "terms" msgid "We are not liable for any loss you may incur as a result of someone else using your email or password, either with or without your knowledge." msgstr "" "Non somos responsables de calquera perda que puideses sufrir se alguén " "utiliza o teu email ou contrasinal, con ou sen o teu consentimento." -#: lib/web/templates/api/terms.html.eex:50 #, elixir-format +#: lib/web/templates/api/terms.html.eex:50 msgctxt "terms" msgid "We cannot be held responsible should a programming or administrative error make your content visible to a larger audience than intended. Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service." msgstr "" @@ -1413,8 +1413,8 @@ msgstr "" "dereitos do contido que publicas, ligas ou doutro xeito pos a disposición a " "través do Servizo." -#: lib/web/templates/api/privacy.html.eex:10 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:10 msgctxt "terms" msgid "We collect information from you when you register on this instance and gather data when you participate in the platform by reading, writing, and interacting with content shared here. If you register on this instance, you will be asked to enter an email address, a password (hashed) and at least an username. Your email address will be verified by an email containing a unique link. Once the link is activated, we know you control that email address. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly. You may however visit this instance without registering." msgstr "" @@ -1430,16 +1430,16 @@ msgstr "" "público. Porén, sempre podes visitar a instancia sen precisar " "rexistrarte." -#: lib/web/templates/api/terms.html.eex:30 #, elixir-format +#: lib/web/templates/api/terms.html.eex:30 msgctxt "terms" msgid "We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature." msgstr "" "Reservamos o dereito a modificar estos Termos en calquera momento. Por " "exemplo, poderiamos cambiar os Termos se introducimos novas funcións." -#: lib/web/templates/api/terms.html.eex:20 #, elixir-format +#: lib/web/templates/api/terms.html.eex:20 msgctxt "terms" msgid "When we say “we”, “our”, or “us” in this document, we are referring to the owners, operators and administrators of this Mobilizon instance. The Mobilizon software is provided by the team of Mobilizon contributors, supported by Framasoft, a French not-for-profit organization advocating for Free/Libre Software. Unless explicitly stated, this Mobilizon instance is an independent service using Mobilizon's source code. You may find more information about this instance on the \"About this instance\" page." msgstr "" @@ -1453,8 +1453,8 @@ msgstr "" "información sobre esta instancia na páxina Acerca desta instancia." -#: lib/web/templates/api/terms.html.eex:43 #, elixir-format +#: lib/web/templates/api/terms.html.eex:43 msgctxt "terms" msgid "When you create an account you agree to maintain the security and confidentiality of your password and accept all risks of unauthorized access to your account data and any other information you provide to %{instance_name}." msgstr "" @@ -1462,8 +1462,8 @@ msgstr "" "contrasinal e aceptas os riscos dun acceso non autorizado á túa conta e a " "calquera outra información que proporciones a %{instance_name}." -#: lib/web/templates/api/terms.html.eex:49 #, elixir-format +#: lib/web/templates/api/terms.html.eex:49 msgctxt "terms" msgid "When you post, link or otherwise make available content to the Service, you grant us the right and license to display and distribute your content on or through the Service (including via applications). We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. The displaying and distribution of your content happens only according to the visibility rules you have set for the content. We will not modify the visibility of the content you have set." msgstr "" @@ -1475,8 +1475,8 @@ msgstr "" "de acordo ás regras de visibilidade que establezas para o contido. Non " "modificaremos a visibilidade que ti estableceches para o contido." -#: lib/web/templates/api/privacy.html.eex:19 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:19 msgctxt "terms" msgid "Your events and comments are delivered to other instances that follow your own, meaning they are delivered to different instances and copies are stored there. When you delete events or comments, this is likewise delivered to these other instances. All interactions related to event features - such as joining an event - or group features - such as managing resources - are federated as well. Please keep in mind that the operators of the instance and any receiving instances may view such messages and information, and that recipients may screenshot, copy or otherwise re-share them." msgstr "" @@ -1489,8 +1489,8 @@ msgstr "" "ver esas mensaxes e información, e as correspondentes poden facer capturas " "de pantalla, copiar e volver a compartir de múltiples xeitos esa información." -#: lib/web/templates/api/privacy.html.eex:99 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:99 msgctxt "terms" msgid "Your content may be downloaded by other instances in the network. Your public events and comments are delivered to the instances following your own instance. Content created through a group is forwarded to all the instances of all the members of the group, insofar as these members reside on a different instance than this one." msgstr "" @@ -1500,202 +1500,207 @@ msgstr "" "membros do grupo, sempre que esos membros do grupo residan en diferentes " "instancias desta." -#: lib/web/templates/email/event_participation_confirmed.text.eex:4 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.text.eex:4 msgid "You have confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Confirmaches a participación. Actualiza o calendario, xa que agora estás na " "lista de convidadas!" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:38 #: lib/web/templates/email/event_participation_confirmed.html.eex:38 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Recentemente solicitaches participar en %{title}." -#: lib/web/email/participation.ex:91 #, elixir-format +#: lib/web/email/participation.ex:91 msgid "Your participation to event %{title} has been confirmed" msgstr "Confirmouse a túa participación no evento %{title}" -#: lib/web/templates/email/report.html.eex:41 #, elixir-format +#: lib/web/templates/email/report.html.eex:41 msgid "%{reporter} reported the following content." msgstr "%{reporter} denunciou o seguinte contido." -#: lib/web/templates/email/report.text.eex:5 #, elixir-format +#: lib/web/templates/email/report.text.eex:5 msgid "Group %{group} was reported" msgstr "O grupo %{group} foi denunciado" -#: lib/web/templates/email/report.html.eex:51 #, elixir-format +#: lib/web/templates/email/report.html.eex:51 msgid "Group reported" msgstr "Grupo denunciado" -#: lib/web/templates/email/report.text.eex:7 #, elixir-format +#: lib/web/templates/email/report.text.eex:7 msgid "Profile %{profile} was reported" msgstr "O perfil %{profile} foi denunciado" -#: lib/web/templates/email/report.html.eex:56 #, elixir-format +#: lib/web/templates/email/report.html.eex:56 msgid "Profile reported" msgstr "Perfil denunciado" -#: lib/web/templates/email/event_participation_confirmed.html.eex:45 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.html.eex:45 msgid "You have now confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Confirmaches a túa participación. Actualiza o calendario, agora estás na " "lista de convidadas!" -#: lib/mobilizon/posts/post.ex:94 #, elixir-format +#: lib/mobilizon/posts/post.ex:94 msgid "A text is required for the post" msgstr "Requírese un texto para a publicación" -#: lib/mobilizon/posts/post.ex:93 #, elixir-format +#: lib/mobilizon/posts/post.ex:93 msgid "A title is required for the post" msgstr "Requírese un título para a publicación" -#: lib/web/templates/email/instance_follow.text.eex:3 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:3 msgid "%{name} (%{domain}) just requested to follow your instance." msgstr "%{name} (%{domain}) solicitou seguir a túa instancia." -#: lib/web/email/follow.ex:54 #, elixir-format +#: lib/web/email/follow.ex:54 msgid "%{name} requests to follow your instance" msgstr "%{name} solicita seguir a túa instancia" -#: lib/web/templates/email/instance_follow.html.eex:38 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:38 msgid "%{name} (%{domain}) just requested to follow your instance. If you accept, this instance will receive all of your instance's public events." msgstr "" "%{name} (%{domain}) solicitou pedir a túa instancia. Se aceptas, esta " "instancia recibirá todos os eventos públicos da túa instancia." -#: lib/web/templates/email/instance_follow.text.eex:4 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:4 msgid "If you accept, this instance will receive all of your public events." msgstr "Se aceptas, esta instancia recibirá todos os teus eventos públicos." -#: lib/web/email/follow.ex:48 #, elixir-format +#: lib/web/email/follow.ex:48 msgid "Instance %{name} (%{domain}) requests to follow your instance" msgstr "A instancia %{name} (%{domain}) solicita seguir a túa instancia" -#: lib/web/templates/email/instance_follow.html.eex:66 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:66 msgid "See the federation settings" msgstr "Ver axustes de federación" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:52 #: lib/web/templates/email/instance_follow.text.eex:6 -#, elixir-format msgid "To accept this invitation, head over to the instance's admin settings." msgstr "" "Para aceptar o convite, vaite ós axustes de administración da instancia." +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:13 #: lib/web/templates/email/instance_follow.text.eex:1 -#, elixir-format msgid "Want to connect?" msgstr "Desexas conectarte?" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:45 #: lib/web/templates/email/instance_follow.text.eex:5 -#, elixir-format msgid "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." msgstr "" "Nota: que %{name} (%{domain}) te siga non implica que sigas a esta " "instancia, pero podes tamén solicitar seguilos a eles." -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "Ola! Rexistrácheste para unirte a este evento: « %{title} ». Confirma " "o enderezo de email proporcionado:" -#: lib/web/templates/email/event_participation_rejected.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.html.eex:38 msgid "You issued a request to attend %{title}." msgstr "Fixeches unha solicitude para participar en %{title}." -#: lib/web/templates/email/event_updated.html.eex:64 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Título do evento" -#: lib/web/templates/email/event_updated.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "Houbo cambios en %{title} e cremos que debes sabelo." -#: lib/web/templates/error/500_page.html.eex:7 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 msgid "This page is not correct" msgstr "Esta páxina non é correcta" -#: lib/web/templates/error/500_page.html.eex:50 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:50 msgid "We're sorry, but something went wrong on our end." msgstr "Lamentámolo, pero algo está a fallar pola nosa parte." +#, elixir-format #: lib/web/templates/email/email.html.eex:88 #: lib/web/templates/email/email.text.eex:4 -#, elixir-format msgid "This is a demonstration site to test Mobilizon." msgstr "Este é un sitio web de exemplo para probar Mobilizon." +#, elixir-format #: lib/service/metadata/actor.ex:53 lib/service/metadata/actor.ex:60 #: lib/service/metadata/instance.ex:54 lib/service/metadata/instance.ex:60 -#, elixir-format msgid "%{name}'s feed" msgstr "fonte de %{name}" -#: lib/service/export/feed.ex:120 #, elixir-format +#: lib/service/export/feed.ex:120 msgid "%{actor}'s private events feed on %{instance}" msgstr "fonte dos eventos privados de %{actor} en %{instance}" -#: lib/service/export/feed.ex:115 #, elixir-format +#: lib/service/export/feed.ex:115 msgid "%{actor}'s public events feed on %{instance}" msgstr "fonte dos eventos públicos de %{actor} en %{instance}" -#: lib/service/export/feed.ex:220 #, elixir-format +#: lib/service/export/feed.ex:220 msgid "Feed for %{email} on %{instance}" msgstr "Fonte para %{email} en %{instance}" -#: lib/web/templates/error/500_page.html.eex:57 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:57 msgid "If the issue persists, you may contact the server administrator at %{contact}." msgstr "" "Se o problema persiste, contacta coa administración do servidor en " "%{contact}." -#: lib/web/templates/error/500_page.html.eex:55 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:55 msgid "If the issue persists, you may try to contact the server administrator." msgstr "Se o problema persiste, contacta coa administración do servidor." -#: lib/web/templates/error/500_page.html.eex:68 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:68 msgid "Technical details" msgstr "Detalles técnicos" -#: lib/web/templates/error/500_page.html.eex:52 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:52 msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" "O servidor Mobilizon %{instance} semella estar temporalmente fóra de servizo." -#: lib/service/export/feed.ex:73 #, elixir-format +#: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "Fonte pública de %{instance}" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/hu/LC_MESSAGES/activity.po b/priv/gettext/hu/LC_MESSAGES/activity.po new file mode 100644 index 00000000..26ec6810 --- /dev/null +++ b/priv/gettext/hu/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: hu\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/hu/LC_MESSAGES/default.po b/priv/gettext/hu/LC_MESSAGES/default.po index bcd9cdf3..61eaebfc 100644 --- a/priv/gettext/hu/LC_MESSAGES/default.po +++ b/priv/gettext/hu/LC_MESSAGES/default.po @@ -1456,3 +1456,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/it/LC_MESSAGES/activity.po b/priv/gettext/it/LC_MESSAGES/activity.po new file mode 100644 index 00000000..3fb8c46a --- /dev/null +++ b/priv/gettext/it/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: it\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/it/LC_MESSAGES/default.po b/priv/gettext/it/LC_MESSAGES/default.po index e7dda38d..a3ae0489 100644 --- a/priv/gettext/it/LC_MESSAGES/default.po +++ b/priv/gettext/it/LC_MESSAGES/default.po @@ -14,266 +14,266 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.6.2\n" -#: lib/web/templates/email/password_reset.html.eex:48 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:48 msgid "If you didn't request this, please ignore this email. Your password won't change until you access the link below and create a new one." msgstr "" "Se non l'hai richiesta tu, ignora questa mail. La tua password non sarà " "cambiata fino a che non accederai al link sotto per crearne una nuova." -#: lib/web/templates/email/report.html.eex:74 #, elixir-format +#: lib/web/templates/email/report.html.eex:74 msgid "%{title} by %{creator}" msgstr "%{title} di %{creator}" -#: lib/web/templates/email/registration_confirmation.html.eex:58 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:58 msgid "Activate my account" msgstr "Attiva il mio account" +#, elixir-format #: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:9 -#, elixir-format msgid "Ask the community on Framacolibri" msgstr "Chiedi alla comunità su Framacolibri" -#: lib/web/templates/email/report.text.eex:15 #, elixir-format +#: lib/web/templates/email/report.text.eex:15 msgid "Comments" msgstr "Commenti" +#, elixir-format #: lib/web/templates/email/report.html.eex:72 #: lib/web/templates/email/report.text.eex:11 -#, elixir-format msgid "Event" msgstr "Evento" -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Istruzioni per reimpostare la tua password su %{instance}" -#: lib/web/templates/email/report.text.eex:21 #, elixir-format +#: lib/web/templates/email/report.text.eex:21 msgid "Reason" msgstr "Spiegazione" -#: lib/web/templates/email/password_reset.html.eex:61 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:61 msgid "Reset Password" msgstr "Resetta la password" -#: lib/web/templates/email/password_reset.html.eex:41 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:41 msgid "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." msgstr "" "Resettare la tua password è semplice. Premi il pulsante sotto e segui le " "istruzioni. Potrai riutilizzare Mobilizon in pochissimo tempo." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Istruzioni per confermare il tuo account Mobilizon su %{instance}" -#: lib/web/email/admin.ex:24 #, elixir-format +#: lib/web/email/admin.ex:24 msgid "New report on Mobilizon instance %{instance}" msgstr "Nuovo rapporto sull'istanza di Mobilizion %{instance}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:51 #: lib/web/templates/email/before_event_notification.text.eex:4 -#, elixir-format msgid "Go to event page" msgstr "Vai alla pagina dell'evento" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Nuovo rapporto da %{reporter} su %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Partecipazione approvata" +#, elixir-format #: lib/web/templates/email/password_reset.html.eex:13 #: lib/web/templates/email/password_reset.text.eex:1 -#, elixir-format msgid "Password reset" msgstr "Resettare la password" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "" "Resettare la tua password è semplice. Seleziona il link sotto e segui le " "istruzioni. Potrai riutilizzare Mobilizon in pochissimo tempo." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "" "Hai creato un account su %{host} con questa email. Sei ad un click " "dall'attivarlo. Se non sei tu ignora questo messaggio." -#: lib/web/email/participation.ex:112 #, elixir-format +#: lib/web/email/participation.ex:112 msgid "Your participation to event %{title} has been approved" msgstr "La tua partecipazione all'evento %{title} è stata approvata" -#: lib/web/email/participation.ex:70 #, elixir-format +#: lib/web/email/participation.ex:70 msgid "Your participation to event %{title} has been rejected" msgstr "La tua partecipazione all'evento %{title} è stata rifiutata" -#: lib/web/email/event.ex:37 #, elixir-format +#: lib/web/email/event.ex:37 msgid "Event %{title} has been updated" msgstr "L'evento %{title} è stato aggiornato" -#: lib/web/templates/email/event_updated.text.eex:15 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:15 msgid "New title: %{title}" msgstr "Nuovo titolo: %{title}" -#: lib/web/templates/email/password_reset.text.eex:5 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:5 msgid "You requested a new password for your account on %{instance}." msgstr "Hai richiesto una nuova password per il tuo account su %{instance}." -#: lib/web/templates/email/email.html.eex:85 #, elixir-format +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Avviso" -#: lib/web/email/participation.ex:135 #, elixir-format +#: lib/web/email/participation.ex:135 msgid "Confirm your participation to event %{title}" msgstr "Conferma la tua partecipazione all'evento %{title}" -#: lib/web/templates/api/privacy.html.eex:75 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:75 msgctxt "terms" msgid "An internal ID for your current selected identity" msgstr "Un ID interno per l'identità attualmente selezionata" -#: lib/web/templates/api/privacy.html.eex:74 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:74 msgctxt "terms" msgid "An internal user ID" msgstr "Un ID utente interno" -#: lib/web/templates/api/privacy.html.eex:37 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:37 msgctxt "terms" msgid "Any of the information we collect from you may be used in the following ways:" msgstr "" "Qualsiasi informazione che raccogliamo da te può essere utilizzata nel " "seguenti modi:" -#: lib/web/templates/api/privacy.html.eex:9 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:9 msgctxt "terms" msgid "Basic account information" msgstr "Informazioni di base sull'account" -#: lib/web/templates/api/privacy.html.eex:25 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:25 msgctxt "terms" msgid "Do not share any dangerous information over Mobilizon." msgstr "Non condividere informazioni pericolose su Mobilizon." -#: lib/web/templates/api/privacy.html.eex:90 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:90 msgctxt "terms" msgid "Do we disclose any information to outside parties?" msgstr "Divulghiamo informazioni a terzi?" -#: lib/web/templates/api/privacy.html.eex:68 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:68 msgctxt "terms" msgid "Do we use cookies?" msgstr "Usiamo i cookies?" -#: lib/web/templates/api/privacy.html.eex:51 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:51 msgctxt "terms" msgid "How do we protect your information?" msgstr "Come proteggiamo le tue informazioni?" -#: lib/web/templates/api/privacy.html.eex:29 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:29 msgctxt "terms" msgid "IPs and other metadata" msgstr "IPs e altri metadati" -#: lib/web/templates/api/privacy.html.eex:17 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:17 msgctxt "terms" msgid "Published events and comments" msgstr "Eventi e commenti pubblicati" -#: lib/web/templates/api/privacy.html.eex:64 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:64 msgctxt "terms" msgid "Retain the IP addresses associated with registered users no more than 12 months." msgstr "" "Conserva gli indirizzi IP associati agli utenti registrati per non più di 12 " "mesi." -#: lib/web/templates/api/privacy.html.eex:76 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:76 msgctxt "terms" msgid "Tokens to authenticate you" msgstr "Tokens per autenticarti" -#: lib/web/templates/api/privacy.html.eex:31 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:31 msgctxt "terms" msgid "We also may retain server logs which include the IP address of every request to our server." msgstr "" "Possiamo anche conservare i registri del server che includono l'indirizzo IP " "di ogni richiesta al nostro server." -#: lib/web/templates/api/privacy.html.eex:70 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:70 msgctxt "terms" msgid "We store the following information on your device when you connect:" msgstr "" "Memorizziamo le seguenti informazioni sul tuo dispositivo quando ti connetti:" -#: lib/web/templates/api/privacy.html.eex:58 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:58 msgctxt "terms" msgid "We will make a good faith effort to:" msgstr "Facciamo tutto il possibile per:" -#: lib/web/templates/api/privacy.html.eex:35 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:35 msgctxt "terms" msgid "What do we use your information for?" msgstr "Per cosa usiamo le tue informazioni?" -#: lib/web/templates/api/privacy.html.eex:57 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:57 msgctxt "terms" msgid "What is our data retention policy?" msgstr "Qual'è la nostra politica di conservazione dei dati?" -#: lib/web/templates/api/privacy.html.eex:67 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:67 msgctxt "terms" msgid "You may irreversibly delete your account at any time." msgstr "Puoi eliminare irreversibilmente il tuo account in qualsiasi momento." -#: lib/web/templates/api/privacy.html.eex:115 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:115 msgctxt "terms" msgid "Changes to our Privacy Policy" msgstr "Modifiche alla nostra politica sulla privacy" -#: lib/web/templates/api/privacy.html.eex:106 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:106 msgctxt "terms" msgid "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site." msgstr "" @@ -283,8 +283,8 @@ msgstr "" "General_Data_Protection_Regulation\">General Data Protection Regulation) " "non usare questo sito." -#: lib/web/templates/api/privacy.html.eex:109 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:109 msgctxt "terms" msgid "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site." msgstr "" @@ -294,30 +294,30 @@ msgstr "" "27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection " "Act) non usare questo sito." -#: lib/web/templates/api/privacy.html.eex:117 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:117 msgctxt "terms" msgid "If we decide to change our privacy policy, we will post those changes on this page." msgstr "" "Se decidiamo di modificare la politica sulla privacy, pubblicheremo i " "cambiamenti su questa pagina." -#: lib/web/templates/api/privacy.html.eex:112 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:112 msgctxt "terms" msgid "Law requirements can be different if this server is in another jurisdiction." msgstr "" "I requisiti di legge possono essere diversi se questo server si trova in " "un'altra giurisdizione." -#: lib/web/templates/api/privacy.html.eex:103 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:103 msgctxt "terms" msgid "Site usage by children" msgstr "Utilizzo del sito da parte dei bambini" -#: lib/web/templates/api/privacy.html.eex:47 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:47 msgctxt "terms" msgid "The email address you provide may be used to send you information, updates and notifications about other people\n interacting with your content or sending you messages and to respond to inquiries, and/or other requests or\n questions." msgstr "" @@ -327,8 +327,8 @@ msgstr "" "rispondere a indagini, e/o altre richieste o\n" "…domande." -#: lib/web/templates/api/privacy.html.eex:45 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:45 msgctxt "terms" msgid "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban\n evasion or other violations." msgstr "" @@ -336,8 +336,8 @@ msgstr "" "indirizzo IP con altri noti per determinare \n" "…l'evasione del divieto o altre violazioni." -#: lib/web/templates/api/privacy.html.eex:43 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:43 msgctxt "terms" msgid "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to\n interact with other people's content and post your own content if you are logged in." msgstr "" @@ -346,89 +346,89 @@ msgstr "" "…interagire con i contenuti di altre persone e pubblicare i tuoi contenuti " "solo se hai effettuato l'accesso." -#: lib/web/templates/api/privacy.html.eex:6 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:6 msgctxt "terms" msgid "What information do we collect?" msgstr "Quali informazioni raccogliamo?" -#: lib/web/email/user.ex:176 #, elixir-format +#: lib/web/email/user.ex:176 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon su %{instance}: conferma il tuo indirizzo email" -#: lib/web/email/user.ex:152 #, elixir-format +#: lib/web/email/user.ex:152 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon su %{instance}: email modificata" -#: lib/web/email/notification.ex:47 #, elixir-format +#: lib/web/email/notification.ex:47 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Un evento programmato oggi" msgstr[1] "%{nb_events} eventi programmati oggi" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "Hai un evento oggi:" msgstr[1] "Hai %{total} eventi oggi:" -#: lib/web/templates/email/group_invite.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_invite.text.eex:3 msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} ti ha appena invitato a unirti al suo gruppo %{group}" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "Sbrigati!" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "Non dimenticare di andare a %{title}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Tenersi pronti per %{title}" -#: lib/web/templates/email/group_invite.html.eex:59 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:59 msgid "See my groups" msgstr "Visualizza i miei gruppi" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:45 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Per accettare questo invito, vai ai tuoi gruppi." -#: lib/web/templates/email/before_event_notification.text.eex:5 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:5 msgid "View the event on: %{link}" msgstr "Visualizza l'evento su: %{link}" -#: lib/web/email/group.ex:33 #, elixir-format +#: lib/web/email/group.ex:33 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "Sei stato invitato da %{inviter} per partecipare al gruppo %{group}" -#: lib/web/email/notification.ex:71 #, elixir-format +#: lib/web/email/notification.ex:71 msgid "One event planned this week" msgid_plural "%{nb_events} events planned this week" msgstr[0] "Un evento in programma questa settimana" msgstr[1] "%{nb_events} eventi in programma questa settimana" -#: lib/web/email/notification.ex:93 #, elixir-format +#: lib/web/email/notification.ex:93 msgid "One participation request for event %{title} to process" msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" msgstr[0] "Una richiesta di partecipazione per l'evento %{title} da elaborare" @@ -436,21 +436,21 @@ msgstr[1] "" "%{number_participation_requests} richieste di partecipazione per l'evento " "%{title} da elaborare" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:38 #: lib/web/templates/email/notification_each_week.text.eex:3 -#, elixir-format msgid "You have one event this week:" msgid_plural "You have %{total} events this week:" msgstr[0] "Hai un evento questa settimana:" msgstr[1] "Hai %{total} eventi questa settimana:" -#: lib/service/metadata/utils.ex:52 #, elixir-format +#: lib/service/metadata/utils.ex:52 msgid "The event organizer didn't add any description." msgstr "L'organizzatore dell'evento non ha aggiunto alcuna descrizione." -#: lib/web/templates/api/privacy.html.eex:54 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:54 msgctxt "terms" msgid "We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way algorithm." msgstr "" @@ -461,8 +461,8 @@ msgstr "" "la password viene sottoposta ad hashing utilizzando un potente algoritmo " "unidirezionale." -#: lib/web/templates/api/privacy.html.eex:94 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:94 msgctxt "terms" msgid "No. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety." msgstr "" @@ -475,20 +475,20 @@ msgstr "" "appropriato per rispettare la legge, far rispettare le politiche del nostro " "sito o proteggere i nostri o altri diritti, proprietà o sicurezza." -#: lib/web/templates/api/terms.html.eex:23 #, elixir-format +#: lib/web/templates/api/terms.html.eex:23 msgctxt "terms" msgid "Accepting these Terms" msgstr "Accettazione di queste Condizioni" -#: lib/web/templates/api/terms.html.eex:27 #, elixir-format +#: lib/web/templates/api/terms.html.eex:27 msgctxt "terms" msgid "Changes to these Terms" msgstr "Modifiche a queste Condizioni d'Utilizzo" -#: lib/web/templates/api/terms.html.eex:85 #, elixir-format +#: lib/web/templates/api/terms.html.eex:85 msgctxt "terms" msgid "A lot of the content on the Service is from you and others, and we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content." msgstr "" @@ -501,16 +501,16 @@ msgstr "" "assumere tutti i rischi sull'uso che ne fai e sulla fiducia che attribuisci " "ad essi." -#: lib/web/templates/api/terms.html.eex:60 #, elixir-format +#: lib/web/templates/api/terms.html.eex:60 msgctxt "terms" msgid "Also, you agree that you will not do any of the following in connection with the Service or other users:" msgstr "" "inoltre accetti di non essere in nessun modo relazionato col Servizio o con " "altri utenti se farai una delle seguenti azioni:" -#: lib/web/templates/api/terms.html.eex:65 #, elixir-format +#: lib/web/templates/api/terms.html.eex:65 msgctxt "terms" msgid "Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties." msgstr "" @@ -518,24 +518,24 @@ msgstr "" "o altre funzionalità progettate per proteggere il Servizio, gli utenti del " "Servizio o terze parti." -#: lib/web/templates/api/terms.html.eex:64 #, elixir-format +#: lib/web/templates/api/terms.html.eex:64 msgctxt "terms" msgid "Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service;" msgstr "" "Raccogliere informazioni personali su altri utenti o intimidire, minacciare, " "perseguitare o molestare in altro modo altri utenti del Servizio;" -#: lib/web/templates/api/terms.html.eex:55 #, elixir-format +#: lib/web/templates/api/terms.html.eex:55 msgctxt "terms" msgid "Content that is illegal or unlawful, that would otherwise create liability;" msgstr "" "Creare contenuti che sono illegali o illeciti o che possono dare luogo a " "responsabilità penali;" -#: lib/web/templates/api/terms.html.eex:56 #, elixir-format +#: lib/web/templates/api/terms.html.eex:56 msgctxt "terms" msgid "Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party;" msgstr "" @@ -543,48 +543,48 @@ msgstr "" "commerciali, copyright, diritti alla privacy, diritti di pubblicità o altri " "diritti intellettuali o di altro tipo di qualsiasi parte;" -#: lib/web/templates/api/terms.html.eex:42 #, elixir-format +#: lib/web/templates/api/terms.html.eex:42 msgctxt "terms" msgid "Creating Accounts" msgstr "Creazione degli Accounts" -#: lib/web/templates/api/terms.html.eex:89 #, elixir-format +#: lib/web/templates/api/terms.html.eex:89 msgctxt "terms" msgid "Entire Agreement" msgstr "Intero Accordo" -#: lib/web/templates/api/terms.html.eex:92 #, elixir-format +#: lib/web/templates/api/terms.html.eex:92 msgctxt "terms" msgid "Feedback" msgstr "Opinione" -#: lib/web/templates/api/terms.html.eex:83 #, elixir-format +#: lib/web/templates/api/terms.html.eex:83 msgctxt "terms" msgid "Hyperlinks and Third Party Content" msgstr "Collegamenti ipertestuali e contenuti di terze parti" -#: lib/web/templates/api/terms.html.eex:88 #, elixir-format +#: lib/web/templates/api/terms.html.eex:88 msgctxt "terms" msgid "If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service." msgstr "" "Se infrangete uno di questi Termini avete il diritto di sospendere o " "disabilitare l'accesso al Servizio o il suo uso." -#: lib/web/templates/api/terms.html.eex:63 #, elixir-format +#: lib/web/templates/api/terms.html.eex:63 msgctxt "terms" msgid "Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity;" msgstr "" "Impersonare o pubblicare per conto di qualsiasi persona o entità o " "altrimenti travisare la propria affiliazione con una persona o entità;" -#: lib/web/templates/api/terms.html.eex:48 #, elixir-format +#: lib/web/templates/api/terms.html.eex:48 msgctxt "terms" msgid "Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness." msgstr "" @@ -593,26 +593,26 @@ msgstr "" "che metti a disposizione del Servizio, inclusa la sua legalità, affidabilità " "e adeguatezza." -#: lib/web/templates/api/terms.html.eex:39 #, elixir-format +#: lib/web/templates/api/terms.html.eex:39 msgctxt "terms" msgid "Privacy Policy" msgstr "Politica sulla Privacy" -#: lib/web/templates/api/terms.html.eex:95 #, elixir-format +#: lib/web/templates/api/terms.html.eex:95 msgctxt "terms" msgid "Questions & Contact Information" msgstr "Domande e Informazioni di Contatto" -#: lib/web/templates/api/terms.html.eex:87 #, elixir-format +#: lib/web/templates/api/terms.html.eex:87 msgctxt "terms" msgid "Termination" msgstr "Termine" -#: lib/web/templates/api/terms.html.eex:62 #, elixir-format +#: lib/web/templates/api/terms.html.eex:62 msgctxt "terms" msgid "Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service;" msgstr "" @@ -621,14 +621,14 @@ msgstr "" "appieno del Servizio o che potrebbe danneggiare, disabilitare, " "sovraccaricare o compromettere il funzionamento del Servizio;" -#: lib/web/templates/api/terms.html.eex:47 #, elixir-format +#: lib/web/templates/api/terms.html.eex:47 msgctxt "terms" msgid "Your Content & Conduct" msgstr "I tuoi Contenuti e la tua Condotta" -#: lib/web/templates/api/terms.html.eex:84 #, elixir-format +#: lib/web/templates/api/terms.html.eex:84 msgctxt "terms" msgid "%{instance_name} makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by %{instance_name} of the site. Use of any such linked website is at the user's own risk." msgstr "" @@ -641,8 +641,8 @@ msgstr "" "di % {instance_name} del sito. L'utilizzo di tali siti Web collegati " "è a rischio dell'utente." -#: lib/web/templates/api/terms.html.eex:68 #, elixir-format +#: lib/web/templates/api/terms.html.eex:68 msgctxt "terms" msgid "Finally, your use of the Service is also subject to acceptance of the instance's own specific rules regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended." msgstr "" @@ -651,16 +651,16 @@ msgstr "" "condotta e alle regole di moderazione. La violazione di queste regole può " "anche comportare la disattivazione o la sospensione del tuo account." -#: lib/web/templates/api/terms.html.eex:81 #, elixir-format +#: lib/web/templates/api/terms.html.eex:81 msgctxt "terms" msgid "For full details about the Mobilizon software see here." msgstr "" "Per i dettagli completi sul software Mobilizon vedi qui ." -#: lib/web/templates/api/terms.html.eex:18 #, elixir-format +#: lib/web/templates/api/terms.html.eex:18 msgctxt "terms" msgid "Here are the important things you need to know about accessing and using the %{instance_name} (%{instance_url}) website and service (collectively, \"Service\"). These are our terms of service (\"Terms\"). Please read them carefully." msgstr "" @@ -669,8 +669,8 @@ msgstr "" ") sito web e servizio (collettivamente, \"Servizio\"). Questi sono i " "nostri termini di servizio (\"Termini\"). Si prega di leggerli attentamente." -#: lib/web/templates/api/terms.html.eex:33 #, elixir-format +#: lib/web/templates/api/terms.html.eex:33 msgctxt "terms" msgid "If we make major changes, we will notify our users in a clear and prominent manner. Minor changes may only be highlighted in the footer of our website. It is your responsibility to check the website regularly for changes to these Terms." msgstr "" @@ -679,8 +679,8 @@ msgstr "" "piè di pagina del nostro sito web. È tua responsabilità controllare " "regolarmente il sito web per eventuali modifiche ai presenti Termini." -#: lib/web/templates/api/terms.html.eex:53 #, elixir-format +#: lib/web/templates/api/terms.html.eex:53 msgctxt "terms" msgid "In order to make %{instance_name} a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:" msgstr "" @@ -688,8 +688,8 @@ msgstr "" "preghiamo di non pubblicare, linkare, o rendere disponibile sul nostro " "Servizio o attraverso esso uno dei seguenti elementi:" -#: lib/web/templates/api/terms.html.eex:57 #, elixir-format +#: lib/web/templates/api/terms.html.eex:57 msgctxt "terms" msgid "Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and" msgstr "" @@ -697,8 +697,8 @@ msgstr "" "indirizzi e-mail, numeri di previdenza sociale e numeri di carte di credito);" " e" -#: lib/web/templates/api/terms.html.eex:52 #, elixir-format +#: lib/web/templates/api/terms.html.eex:52 msgctxt "terms" msgid "Since Mobilizon is a distributed network, it is possible, depending on the visibility rules set to your content, that your content has been distributed to other Mobilizon instances. When you delete your content, we will request those other instances to also delete the content. Our responsibility on the content being deleted from those other instances ends here. If for some reason, some other instance does not delete the content, we cannot be held responsible." msgstr "" @@ -710,8 +710,8 @@ msgstr "" "quelle altre istanze termina qui. Se per qualche motivo, qualche altra " "istanza non elimina il contenuto, non possiamo essere ritenuti responsabili." -#: lib/web/templates/api/terms.html.eex:90 #, elixir-format +#: lib/web/templates/api/terms.html.eex:90 msgctxt "terms" msgid "These Terms constitute the entire agreement between you and %{instance_name} regarding the use of the Service, superseding any prior agreements between you and %{instance_name} relating to your use of the Service." msgstr "" @@ -720,8 +720,8 @@ msgstr "" "sostituendo qualsiasi accordo precedente tra te e % {instance_name} " "relativo al tuo utilizzo di il servizio." -#: lib/web/templates/api/terms.html.eex:80 #, elixir-format +#: lib/web/templates/api/terms.html.eex:80 msgctxt "terms" msgid "This Service runs on a Mobilizon instance. This source code is licensed under an AGPLv3 license which means you are allowed to and even encouraged to take the source code, modify it and use it." msgstr "" @@ -731,16 +731,16 @@ msgstr "" "significa che sei autorizzato e persino incoraggiato a prendere il codice " "sorgente, modificarlo e usarlo." -#: lib/web/templates/api/terms.html.eex:58 #, elixir-format +#: lib/web/templates/api/terms.html.eex:58 msgctxt "terms" msgid "Viruses, corrupted data or other harmful, disruptive or destructive files or code." msgstr "" "Virus, dati corrotti o altri file o codice dannosi, disturbanti o " "distruttivi." -#: lib/web/templates/api/terms.html.eex:51 #, elixir-format +#: lib/web/templates/api/terms.html.eex:51 msgctxt "terms" msgid "You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. Web server access logs might also be stored for some time in the system." msgstr "" @@ -750,30 +750,30 @@ msgstr "" "un certo periodo di tempo. I registri di accesso al server Web potrebbero " "anche essere archiviati per qualche tempo nel sistema." -#: lib/web/templates/api/terms.html.eex:96 #, elixir-format +#: lib/web/templates/api/terms.html.eex:96 msgctxt "terms" msgid "Questions or comments about the Service may be directed to us at %{contact}" msgstr "" "Domande o commenti sul Servizio possono essere indirizzati a noi " "all'indirizzo %{contact}" -#: lib/web/templates/api/terms.html.eex:79 #, elixir-format +#: lib/web/templates/api/terms.html.eex:79 msgctxt "terms" msgid "Source code" msgstr "Codice sorgente" -#: lib/web/templates/api/terms.html.eex:93 #, elixir-format +#: lib/web/templates/api/terms.html.eex:93 msgctxt "terms" msgid "We love feedback. Please let us know what you think of the Service, these Terms and, in general, %{instance_name}." msgstr "" "Adoriamo i feedback. Fateci sapere cosa ne pensate del Servizio, dei " "presenti Termini e, in generale,%{instance_name}." -#: lib/web/templates/api/terms.html.eex:74 #, elixir-format +#: lib/web/templates/api/terms.html.eex:74 msgctxt "terms" msgid "Instance administrators (and community moderators, given the relevant access) are responsible for monitoring and acting on flagged content and other user reports, and have the right and responsibility to remove or edit content that is not aligned to this Instance set of rules, or to suspend, block or ban (temporarily or permanently) any account, community, or instance for breaking these terms, or for other behaviours that they deem inappropriate, threatening, offensive, or harmful." msgstr "" @@ -786,16 +786,16 @@ msgstr "" "violazione dei presenti termini o per altri comportamenti che ritengono " "inappropriati, minacciosi, offensivi o dannosi." -#: lib/web/templates/api/terms.html.eex:6 #, elixir-format +#: lib/web/templates/api/terms.html.eex:6 msgctxt "terms" msgid "%{instance_name} will not use or transmit or resell your personal data" msgstr "" "%{instance_name} non utilizzerà, trasmetterà o rivenderà i tuoi dati " "personali" -#: lib/web/templates/api/terms.html.eex:44 #, elixir-format +#: lib/web/templates/api/terms.html.eex:44 msgctxt "terms" msgid "If you discover or suspect any Service security breaches, please let us know as soon as possible. For security holes in the Mobilizon software itself, please contact its contributors directly." msgstr "" @@ -804,8 +804,8 @@ msgstr "" "contatta direttamente " "i suoi contributori ." -#: lib/web/templates/api/terms.html.eex:77 #, elixir-format +#: lib/web/templates/api/terms.html.eex:77 msgctxt "terms" msgid "Instance administrators should ensure that every community hosted on the instance is properly moderated according to the defined rules." msgstr "" @@ -813,8 +813,8 @@ msgstr "" "ospitata sull'istanza sia adeguatamente moderata in base alle regole " "definite." -#: lib/web/templates/api/terms.html.eex:98 #, elixir-format +#: lib/web/templates/api/terms.html.eex:98 msgctxt "terms" msgid "Originally adapted from the Diaspora* and App.net privacy policies, also licensed under CC BY-SA." msgstr "" @@ -823,8 +823,8 @@ msgstr "" "appdotnet/terms-of-service\"> App .net , anch'esse concesse in licenza " " CC BY-SA ." -#: lib/web/templates/api/privacy.html.eex:119 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:119 msgctxt "terms" msgid "Originally adapted from the Mastodon and Discourse privacy policies, also licensed under CC BY-SA." msgstr "" @@ -833,22 +833,22 @@ msgstr "" "discourse/discourse\"> Discourse , anch'esse concesse in licenza CC BY-SA ." -#: lib/web/templates/api/terms.html.eex:3 #, elixir-format +#: lib/web/templates/api/terms.html.eex:3 msgctxt "terms" msgid "Short version" msgstr "Versione breve" -#: lib/web/templates/api/terms.html.eex:9 #, elixir-format +#: lib/web/templates/api/terms.html.eex:9 msgctxt "terms" msgid "The service is provided without warranties and these terms may change in the future" msgstr "" "Il servizio è fornito senza garanzie e questi termini possono cambiare in " "futuro" -#: lib/web/templates/api/privacy.html.eex:118 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:118 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 18, 2020." msgstr "" @@ -856,8 +856,8 @@ msgstr "" "licenses/by-sa/4.0/\">CC BY-SA. È stato aggiornato l'ultima volta il 18 " "giugno 2020." -#: lib/web/templates/api/terms.html.eex:97 #, elixir-format +#: lib/web/templates/api/terms.html.eex:97 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 22, 2020." msgstr "" @@ -865,85 +865,85 @@ msgstr "" "licenses/by-sa/4.0/\"> CC BY-SA . È stato aggiornato l'ultima volta il " "22 giugno 2020." -#: lib/web/templates/api/terms.html.eex:8 #, elixir-format +#: lib/web/templates/api/terms.html.eex:8 msgctxt "terms" msgid "You must respect other people and %{instance_name}'s rules when using the service" msgstr "" "Devi rispettare le altre persone e le regole di % {instance_name} " "quando utilizzi il servizio" -#: lib/web/templates/api/terms.html.eex:7 #, elixir-format +#: lib/web/templates/api/terms.html.eex:7 msgctxt "terms" msgid "You must respect the law when using %{instance_name}" msgstr "Devi rispettare la legge quando utilizzi % {instance_name} " -#: lib/web/templates/api/terms.html.eex:5 #, elixir-format +#: lib/web/templates/api/terms.html.eex:5 msgctxt "terms" msgid "Your content is yours" msgstr "I tuoi dati ti appartengono" -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 msgid "Confirm my e-mail address" msgstr "Conferma il mio indirizzo e-mail" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Confirm your e-mail" msgstr "Conferma il tuo indirizzo e-mail" -#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "Ciao! Ti sei appena registrato per partecipare a questo evento: «% {title}». " "Conferma l'indirizzo e-mail che hai fornito:" +#, elixir-format #: lib/web/templates/email/email.html.eex:114 #: lib/web/templates/email/email.text.eex:8 -#, elixir-format msgid "Need help? Is something not working as expected?" msgstr "Bisogno di aiuto? Qualcosa non funziona correttamente?" -#: lib/web/templates/email/registration_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:38 msgid "You created an account on %{host} with this email address. You are one click away from activating it." msgstr "" "Hai creato un account su % {host} con questo indirizzo email. Sei a " "un clic di distanza dall'attivarlo." -#: lib/web/templates/email/report.html.eex:13 #, elixir-format +#: lib/web/templates/email/report.html.eex:13 msgid "New report on %{instance}" msgstr "Nuova segnalazione sull'istanza %{instance}" -#: lib/web/templates/email/email_changed_old.html.eex:38 #, elixir-format +#: lib/web/templates/email/email_changed_old.html.eex:38 msgid "The email address for your account on %{host} is being changed to:" msgstr "" "L'indirizzo email del tuo account su % {host} verrà modificato in:" -#: lib/web/templates/email/password_reset.html.eex:38 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:38 msgid "You requested a new password for your account on %{instance}." msgstr "" "Hai richiesto una nuova password per il tuo account su % {instance} ." -#: lib/web/templates/email/email.text.eex:5 #, elixir-format +#: lib/web/templates/email/email.text.eex:5 msgid "Please do not use it for real purposes." msgstr "Si prega di non usarlo per scopi reali." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:63 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:6 lib/web/templates/email/event_updated.html.eex:133 #: lib/web/templates/email/event_updated.text.eex:24 lib/web/templates/email/notification_each_week.html.eex:70 #: lib/web/templates/email/notification_each_week.text.eex:11 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 -#, elixir-format msgid "Would you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button." msgstr[0] "" @@ -954,9 +954,9 @@ msgstr[1] "" "pagine dell'evento attraverso il links sotto e seleziona il pulsante " "'Partecipo'." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:38 #: lib/web/templates/email/pending_participation_notification.text.eex:4 -#, elixir-format msgid "You have one pending attendance request to process:" msgid_plural "You have %{number_participation_requests} attendance requests to process:" msgstr[0] "Hai una richiesta di partecipazione in sospeso da esaminare:" @@ -964,67 +964,67 @@ msgstr[1] "" "Hai %{number_participation_requests} richieste di partecipazione in sospeso " "da esaminare:" -#: lib/web/templates/email/email.text.eex:11 #, elixir-format +#: lib/web/templates/email/email.text.eex:11 msgid "%{instance} is powered by Mobilizon." msgstr "% {instance} è alimentata da Mobilizon." -#: lib/web/templates/email/email.html.eex:142 #, elixir-format +#: lib/web/templates/email/email.html.eex:142 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} è alimentata da Mobilizon." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:13 #: lib/web/templates/email/pending_participation_notification.text.eex:1 -#, elixir-format msgid "A request is pending!" msgstr "Una richiesta in sospeso!" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "An event is upcoming!" msgstr "Un evento è in arrivo!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:13 #: lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Confirm new email" msgstr "Conferma il nuovo indirizzo e-mail" -#: lib/web/templates/email/event_updated.html.eex:84 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:84 msgid "End" msgstr "Fine" -#: lib/web/templates/email/event_updated.text.eex:21 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:21 msgid "End %{ends_on}" msgstr "Fine %{ends_on}" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event update!" msgstr "Evento aggiornato!" -#: lib/web/templates/email/report.html.eex:88 #, elixir-format +#: lib/web/templates/email/report.html.eex:88 msgid "Flagged comments" msgstr "Commenti contrassegnati" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "Good news: one of the event organizers just approved your request. Update your calendar, because you're on the guest list now!" msgstr "" "Buone notizie: uno degli organizzatori dell'evento ha appena approvato la " "tua richiesta. Aggiorna il tuo calendario, perché ora sei nella lista degli " "invitati!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:38 #: lib/web/templates/email/email_changed_new.text.eex:3 -#, elixir-format msgid "Hi there! It seems like you wanted to change the email address linked to your account on %{instance}. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address." msgstr "" "Ciao! Sembra che tu volessi modificare l'indirizzo email collegato al tuo " @@ -1032,8 +1032,8 @@ msgstr "" "pulsante in basso per confermare la modifica. Potrai quindi accedere a% " "{instance} con questo nuovo indirizzo email." -#: lib/web/templates/email/email_changed_old.text.eex:3 #, elixir-format +#: lib/web/templates/email/email_changed_old.text.eex:3 msgid "Hi there! Just a quick note to confirm that the email address linked to your account on %{host} has been changed from this one to:" msgstr "" "Ciao! Solo una breve nota per confermare che l'indirizzo email collegato al " @@ -1049,179 +1049,179 @@ msgstr "" "modifica immediatamente la password. Se non riesci ad accedere, contatta " "l'amministratore su% {host}." -#: lib/web/templates/email/password_reset.text.eex:12 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:12 msgid "If you didn't trigger the change yourself, please ignore this message. Your password won't be changed until you click the link above." msgstr "" "Se non hai attivato tu stesso la modifica, ignora questo messaggio. La tua " "password non verrà modificata finché non fai clic sul collegamento sopra." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:70 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:4 lib/web/templates/email/registration_confirmation.html.eex:45 -#, elixir-format msgid "If you didn't trigger this email, you may safely ignore it." msgstr "Se non hai attivato questa email, puoi tranquillamente ignorarla." +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:63 #: lib/web/templates/email/before_event_notification.text.eex:6 -#, elixir-format msgid "If you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgstr "" "Se desideri annullare la tua partecipazione, visita la pagina dell'evento " "tramite il link in alto e fai clic sul pulsante «Partecipanti»." +#, elixir-format #: lib/web/templates/email/email.html.eex:143 #: lib/web/templates/email/email.text.eex:11 -#, elixir-format msgid "Learn more about Mobilizon here!" msgstr "Scopri di più su Mobilizon qui!" -#: lib/web/templates/email/event_updated.html.eex:94 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:94 msgid "Location" msgstr "Posizione" -#: lib/web/templates/email/event_updated.html.eex:104 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:104 msgid "Location address was removed" msgstr "L'indirizzo del luogo è stato rimosso" +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:51 #: lib/web/templates/email/pending_participation_notification.text.eex:6 -#, elixir-format msgid "Manage pending requests" msgstr "Gestisci le richieste in sospeso" +#, elixir-format #: lib/web/templates/email/registration_confirmation.html.eex:13 #: lib/web/templates/email/registration_confirmation.text.eex:1 -#, elixir-format msgid "Nearly there!" msgstr "Ci sei quasi!" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email confirmation" msgstr "Conferma del nuovo indirizzo e-mail" -#: lib/web/templates/email/report.html.eex:106 #, elixir-format +#: lib/web/templates/email/report.html.eex:106 msgid "Reasons for report" msgstr "Ragioni della segnalazione" -#: lib/web/templates/email/report.html.eex:39 #, elixir-format +#: lib/web/templates/email/report.html.eex:39 msgid "Someone on %{instance} reported the following content for you to analyze:" msgstr "" "Qualcuno su % {instance} ha segnalato i seguenti contenuti da " "analizzare:" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:13 #: lib/web/templates/email/event_participation_rejected.text.eex:1 -#, elixir-format msgid "Sorry! You're not going." msgstr "Peccato! Non ci sei andato." -#: lib/web/templates/email/event_updated.html.eex:74 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:74 msgid "Start" msgstr "Inizio" -#: lib/web/templates/email/event_updated.text.eex:18 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:18 msgid "Start %{begins_on}" msgstr "Inizio %{begins_on}" -#: lib/web/templates/email/event_updated.text.eex:3 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:3 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "" "Ci sono stati cambiamenti in %{title}, così abbiamo pensato di fartelo " "sapere." +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:55 #: lib/web/templates/email/event_updated.text.eex:11 -#, elixir-format msgid "This event has been cancelled by its organizers. Sorry!" msgstr "Questo evento è stato annullato dai suoi organizzatori. Spiacente!" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:51 #: lib/web/templates/email/event_updated.text.eex:7 -#, elixir-format msgid "This event has been confirmed" msgstr "L'evento è stato confermato" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:53 #: lib/web/templates/email/event_updated.text.eex:9 -#, elixir-format msgid "This event has yet to be confirmed: organizers will let you know if they do confirm it." msgstr "" "Questo evento deve ancora essere confermato: gli organizzatori ti faranno " "sapere se lo confermano." +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your request." msgstr "" "Purtroppo gli organizzatori hanno rifiutato la tua domanda di partecipazione." -#: lib/web/templates/email/email_changed_new.html.eex:51 #, elixir-format +#: lib/web/templates/email/email_changed_new.html.eex:51 msgid "Verify your email address" msgstr "Verifica il tuo indirizzo e-mail" -#: lib/web/templates/email/report.html.eex:126 #, elixir-format +#: lib/web/templates/email/report.html.eex:126 msgid "View report" msgstr "Visualizza la segnalazione" -#: lib/web/templates/email/report.text.eex:24 #, elixir-format +#: lib/web/templates/email/report.text.eex:24 msgid "View report:" msgstr "Visualizza la segnalazione:" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:58 #: lib/web/templates/email/event_participation_confirmed.html.eex:58 -#, elixir-format msgid "Visit event page" msgstr "Visualizza la pagina dell'evento" -#: lib/web/templates/email/event_updated.html.eex:121 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:121 msgid "Visit the updated event page" msgstr "Visita la pagina dell'evento aggiornata" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "Visit the updated event page: %{link}" msgstr "Visita la pagina dell'evento aggiornata:% {link}" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:13 #: lib/web/templates/email/notification_each_week.text.eex:1 -#, elixir-format msgid "What's up this week?" msgstr "Che succede questa settimana?" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "What's up today?" msgstr "Cosa succede oggi?" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:70 #: lib/web/templates/email/event_participation_approved.text.eex:11 lib/web/templates/email/event_participation_confirmed.html.eex:70 #: lib/web/templates/email/event_participation_confirmed.text.eex:6 -#, elixir-format msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button." msgstr "" "Desideri aggiornare o annullare la tua partecipazione, è sufficiente " "accedere alla pagina dell'evento tramite il link in alto e fare clic sul " "pulsante Partecipanti." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:64 #: lib/web/templates/email/pending_participation_notification.text.eex:8 -#, elixir-format msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »." msgstr "" "Hai ricevuto questa email perché hai scelto di ricevere notifiche per " @@ -1229,130 +1229,130 @@ msgstr "" "disabilitare o modificare le impostazioni di notifica nelle impostazioni " "dell'account utente in «Notifiche»." -#: lib/web/templates/email/event_participation_rejected.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:5 msgid "You issued a request to attend %{title}." msgstr "Hai effettuato una domanda di partecipazione a %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.text.eex:5 #: lib/web/templates/email/event_participation_confirmed.text.eex:3 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Di recente hai richiesto di partecipare a %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:13 #: lib/web/templates/email/event_participation_confirmed.html.eex:13 lib/web/templates/email/event_participation_confirmed.text.eex:1 -#, elixir-format msgid "You're going!" msgstr "Ce l'hai fatta!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:64 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Se non hai attivato tu stesso la modifica, ignora questo messaggio." -#: lib/web/templates/email/email.html.eex:89 #, elixir-format +#: lib/web/templates/email/email.html.eex:89 msgid "Please do not use it for real purposes." msgstr " Si prega di non utilizzarlo per scopi reali. " +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:45 #: lib/web/templates/email/group_member_removal.text.eex:5 -#, elixir-format msgid "If you feel this is an error, you may contact the group's administrators so that they can add you back." msgstr "" "Se ritieni che si tratti di un errore, puoi contattare gli amministratori " "del gruppo in modo che possano aggiungerti di nuovo." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:13 #: lib/web/templates/email/group_member_removal.text.eex:1 -#, elixir-format msgid "So long, and thanks for the fish!" msgstr "Addio, e grazie per il pesce!" -#: lib/web/email/group.ex:63 #, elixir-format +#: lib/web/email/group.ex:63 msgid "You have been removed from group %{group}" msgstr "Sei stato rimosso dal gruppo %{group}" -#: lib/web/templates/email/group_member_removal.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_member_removal.text.eex:3 msgid "You have been removed from group %{group}. You will not be able to access this group's private content anymore." msgstr "" "Sei stato rimosso dal gruppo %{group}. Non potrai più accedere al contenuto " "privato di questo gruppo." -#: lib/web/templates/email/group_invite.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:38 msgid "%{inviter} just invited you to join their group %{link_start}%{group}%{link_end}" msgstr "" "%{inviter} ti ha appena invitato a partecipare al suo gruppo " "%{link_start}%{group}%{link_end}" -#: lib/web/templates/email/group_member_removal.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_member_removal.html.eex:38 msgid "You have been removed from group %{link_start}%{group}%{link_end}. You will not be able to access this group's private content anymore." msgstr "" "Sei stato rimosso dal gruppo %{link_start}%{group}%{link_end}. Non " "potrai più accedere al contenuto privato di questo gruppo." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:54 #: lib/web/templates/email/group_suspension.text.eex:7 -#, elixir-format msgid "As this group was located on another instance, it will continue to work for other instances than this one." msgstr "" "Poiché questo gruppo era posizionato su un'altra istanza, continuerà a " "funzionare per altre istanze tranne questa." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:46 #: lib/web/templates/email/group_suspension.text.eex:5 -#, elixir-format msgid "As this group was located on this instance, all of it's data has been irretrievably deleted." msgstr "" "Poiché questo gruppo si trovava su questa istanza, tutti i suoi dati sono " "stati irrimediabilmente cancellati." +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:38 #: lib/web/templates/email/group_deletion.text.eex:3 -#, elixir-format msgid "The administrator %{author} deleted group %{group}. All of the group's events, discussions, posts and todos have been deleted." msgstr "" "L'amministratore %{author} ha eliminato il gruppo %{group}. Tutti gli " "eventi, le discussioni, i post e gli impegni del gruppo sono stati eliminati." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:13 #: lib/web/templates/email/group_suspension.text.eex:1 -#, elixir-format msgid "The group %{group} has been suspended on %{instance}!" msgstr "Il gruppo %{group} è stato sospeso su %{instance}!" +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:13 #: lib/web/templates/email/group_deletion.text.eex:1 -#, elixir-format msgid "The group %{group} was deleted on %{instance}!" msgstr "Il gruppo %{group} è stato eliminato su %{instance}!" +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:38 #: lib/web/templates/email/group_suspension.text.eex:3 -#, elixir-format msgid "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group." msgstr "" "Il team di moderazione della tua istanza ha deciso di sospendere " "%{group_name} (%{group_address}). Non sei più un membro di questo gruppo." -#: lib/web/email/group.ex:136 #, elixir-format +#: lib/web/email/group.ex:136 msgid "The group %{group} has been deleted on %{instance}" msgstr "Il gruppo %{group} è stato eliminato su %{instance}" -#: lib/web/email/group.ex:97 #, elixir-format +#: lib/web/email/group.ex:97 msgid "The group %{group} has been suspended on %{instance}" msgstr "Il gruppo %{group} è stato sospeso su %{instance}" -#: lib/web/templates/api/terms.html.eex:24 #, elixir-format +#: lib/web/templates/api/terms.html.eex:24 msgctxt "terms" msgid "By accessing or using the Service, this means you agree to be bound by all the terms below. If these terms are in any way unclear, please let us know by contacting %{contact}." msgstr "" @@ -1360,8 +1360,8 @@ msgstr "" "termini sotto. Se questi non ti sono chiari a sufficienza, per favore " "faccelo sapere contattando %{contact}." -#: lib/web/templates/api/terms.html.eex:40 #, elixir-format +#: lib/web/templates/api/terms.html.eex:40 msgctxt "terms" msgid "For information about how we collect and use information about users of the Service, please check our privacy policy." msgstr "" @@ -1369,22 +1369,22 @@ msgstr "" "utenti del Servizio, consultare la nostra politica " "sulla privacy." -#: lib/web/templates/api/terms.html.eex:36 #, elixir-format +#: lib/web/templates/api/terms.html.eex:36 msgctxt "terms" msgid "If you continue to use the Service after the revised Terms go into effect, you accept the revised Terms." msgstr "" "Se continui a utilizzare il Servizio dopo l'entrata in vigore dei Termini " "modificati, accetti i Termini modificati." -#: lib/web/templates/api/privacy.html.eex:78 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:78 msgctxt "terms" msgid "If you delete this information, you need to login again." msgstr "Se elimini queste informazioni, devi accedere di nuovo." -#: lib/web/templates/api/privacy.html.eex:80 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:80 msgctxt "terms" msgid "If you're not connected, we don't store any information on your device, unless you participate in an event anonymously. In this specific case we store the hash of an unique identifier for the event and participation status in your browser so that we may display participation status. Deleting this information will only stop displaying participation status in your browser." msgstr "" @@ -1396,22 +1396,22 @@ msgstr "" "informazioni interromperà solo la visualizzazione dello stato di " "partecipazione nel tuo browser." -#: lib/web/templates/api/privacy.html.eex:87 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:87 msgctxt "terms" msgid "Note: This information is stored in your localStorage and not your cookies." msgstr "" "Nota: queste informazioni sono memorizzate nel tuo localStorage e non nei " "tuoi cookie." -#: lib/web/templates/api/terms.html.eex:71 #, elixir-format +#: lib/web/templates/api/terms.html.eex:71 msgctxt "terms" msgid "Our responsibility" msgstr "La nostra responsabilità" -#: lib/web/templates/api/privacy.html.eex:61 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:61 msgctxt "terms" msgid "Retain server logs containing the IP address of all requests to this server, insofar as such logs are kept, no more than 90 days." msgstr "" @@ -1419,9 +1419,9 @@ msgstr "" "richieste a questo server, nella misura in cui tali registri vengono " "conservati, per non più di 90 giorni." +#, elixir-format #: lib/web/templates/api/privacy.html.eex:3 #: lib/web/templates/api/terms.html.eex:15 -#, elixir-format msgctxt "terms" msgid "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We have provided a glossary to help you understand them better." msgstr "" @@ -1429,8 +1429,8 @@ msgstr "" "possono coprire concetti difficili da comprendere. Abbiamo fornito un glossario per aiutarti a capirli meglio." -#: lib/web/templates/api/terms.html.eex:45 #, elixir-format +#: lib/web/templates/api/terms.html.eex:45 msgctxt "terms" msgid "We are not liable for any loss you may incur as a result of someone else using your email or password, either with or without your knowledge." msgstr "" @@ -1438,8 +1438,8 @@ msgstr "" "dell'utilizzo da parte di qualcun altro della tua email o password, con o " "senza la tua conoscenza." -#: lib/web/templates/api/terms.html.eex:50 #, elixir-format +#: lib/web/templates/api/terms.html.eex:50 msgctxt "terms" msgid "We cannot be held responsible should a programming or administrative error make your content visible to a larger audience than intended. Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service." msgstr "" @@ -1449,8 +1449,8 @@ msgstr "" "contenuto, mantieni tutti i tuoi diritti sul contenuto che pubblichi, " "colleghi e rendi disponibile in altro modo sul o tramite il Servizio." -#: lib/web/templates/api/privacy.html.eex:10 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:10 msgctxt "terms" msgid "We collect information from you when you register on this instance and gather data when you participate in the platform by reading, writing, and interacting with content shared here. If you register on this instance, you will be asked to enter an email address, a password (hashed) and at least an username. Your email address will be verified by an email containing a unique link. Once the link is activated, we know you control that email address. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly. You may however visit this instance without registering." msgstr "" @@ -1468,8 +1468,8 @@ msgstr "" "elencati pubblicamente. Puoi tuttavia visitare questa istanza senza " "registrarti." -#: lib/web/templates/api/terms.html.eex:30 #, elixir-format +#: lib/web/templates/api/terms.html.eex:30 msgctxt "terms" msgid "We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature." msgstr "" @@ -1477,8 +1477,8 @@ msgstr "" "momento. Ad esempio, potrebbe essere necessario modificare questi Termini se " "pubblichiamo una nuova funzionalità." -#: lib/web/templates/api/terms.html.eex:20 #, elixir-format +#: lib/web/templates/api/terms.html.eex:20 msgctxt "terms" msgid "When we say “we”, “our”, or “us” in this document, we are referring to the owners, operators and administrators of this Mobilizon instance. The Mobilizon software is provided by the team of Mobilizon contributors, supported by Framasoft, a French not-for-profit organization advocating for Free/Libre Software. Unless explicitly stated, this Mobilizon instance is an independent service using Mobilizon's source code. You may find more information about this instance on the \"About this instance\" page." msgstr "" @@ -1492,8 +1492,8 @@ msgstr "" "Mobilizon. Puoi trovare ulteriori informazioni su questa istanza nella " "pagina \"Informazioni su questa istanza\"." -#: lib/web/templates/api/terms.html.eex:43 #, elixir-format +#: lib/web/templates/api/terms.html.eex:43 msgctxt "terms" msgid "When you create an account you agree to maintain the security and confidentiality of your password and accept all risks of unauthorized access to your account data and any other information you provide to %{instance_name}." msgstr "" @@ -1502,8 +1502,8 @@ msgstr "" "dati del tuo account e a qualsiasi altra informazione che fornisci a " "%{instance_name}." -#: lib/web/templates/api/terms.html.eex:49 #, elixir-format +#: lib/web/templates/api/terms.html.eex:49 msgctxt "terms" msgid "When you post, link or otherwise make available content to the Service, you grant us the right and license to display and distribute your content on or through the Service (including via applications). We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. The displaying and distribution of your content happens only according to the visibility rules you have set for the content. We will not modify the visibility of the content you have set." msgstr "" @@ -1516,8 +1516,8 @@ msgstr "" "solo in base alle regole di visibilità che hai impostato per il contenuto. " "Non modificheremo la visibilità del contenuto che hai impostato." -#: lib/web/templates/api/privacy.html.eex:19 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:19 msgctxt "terms" msgid "Your events and comments are delivered to other instances that follow your own, meaning they are delivered to different instances and copies are stored there. When you delete events or comments, this is likewise delivered to these other instances. All interactions related to event features - such as joining an event - or group features - such as managing resources - are federated as well. Please keep in mind that the operators of the instance and any receiving instances may view such messages and information, and that recipients may screenshot, copy or otherwise re-share them." msgstr "" @@ -1531,8 +1531,8 @@ msgstr "" "istanza ricevente possono visualizzare tali messaggi e informazioni e che i " "destinatari possono fare screenshot, copiarli o ricondividerli in altro modo." -#: lib/web/templates/api/privacy.html.eex:99 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:99 msgctxt "terms" msgid "Your content may be downloaded by other instances in the network. Your public events and comments are delivered to the instances following your own instance. Content created through a group is forwarded to all the instances of all the members of the group, insofar as these members reside on a different instance than this one." msgstr "" @@ -1542,160 +1542,161 @@ msgstr "" "le istanze di tutti i membri del gruppo, nella misura in cui questi membri " "risiedono su un'istanza diversa da questa." -#: lib/web/templates/email/event_participation_confirmed.text.eex:4 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.text.eex:4 msgid "You have confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Hai confermato la tua partecipazione. Aggiorna il tuo calendario, perché ora " "sei nella lista degli invitati!" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:38 #: lib/web/templates/email/event_participation_confirmed.html.eex:38 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Recentemente hai richiesto di partecipare %{title}." -#: lib/web/email/participation.ex:91 #, elixir-format +#: lib/web/email/participation.ex:91 msgid "Your participation to event %{title} has been confirmed" msgstr "La tua partecipazione all'evento %{title} è stata confermata" -#: lib/web/templates/email/report.html.eex:41 #, elixir-format +#: lib/web/templates/email/report.html.eex:41 msgid "%{reporter} reported the following content." msgstr "%{reporter} ha segnalato il seguente contenuto." -#: lib/web/templates/email/report.text.eex:5 #, elixir-format +#: lib/web/templates/email/report.text.eex:5 msgid "Group %{group} was reported" msgstr "Il gruppo %{group} è stato segnalato" -#: lib/web/templates/email/report.html.eex:51 #, elixir-format +#: lib/web/templates/email/report.html.eex:51 msgid "Group reported" msgstr "Gruppo segnalato" -#: lib/web/templates/email/report.text.eex:7 #, elixir-format +#: lib/web/templates/email/report.text.eex:7 msgid "Profile %{profile} was reported" msgstr "Il profilo %{profile} è stato segnalato" -#: lib/web/templates/email/report.html.eex:56 #, elixir-format +#: lib/web/templates/email/report.html.eex:56 msgid "Profile reported" msgstr "Profilo segnalato" -#: lib/web/templates/email/event_participation_confirmed.html.eex:45 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.html.eex:45 msgid "You have now confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Hai ora confermato la tua partecipazione. Aggiorna il tuo calendario, perché " "ora sei nella lista degli invitati!" -#: lib/mobilizon/posts/post.ex:94 #, elixir-format +#: lib/mobilizon/posts/post.ex:94 msgid "A text is required for the post" msgstr "È richiesto un testo per il post" -#: lib/mobilizon/posts/post.ex:93 #, elixir-format +#: lib/mobilizon/posts/post.ex:93 msgid "A title is required for the post" msgstr "È richiesto un titolo per il post" -#: lib/web/templates/email/instance_follow.text.eex:3 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:3 msgid "%{name} (%{domain}) just requested to follow your instance." msgstr "%{name} (%{domain}) ha appena richiesto di seguire la tua istanza." -#: lib/web/email/follow.ex:54 #, elixir-format +#: lib/web/email/follow.ex:54 msgid "%{name} requests to follow your instance" msgstr "%{name} richiede di seguire la tua istanza" -#: lib/web/templates/email/instance_follow.html.eex:38 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:38 msgid "%{name} (%{domain}) just requested to follow your instance. If you accept, this instance will receive all of your instance's public events." msgstr "" "%{name} (%{domain}) ha appena richiesto di seguire la tua istanza. Se " "accetti, questa istanza riceverà tutti gli eventi pubblici della tua istanza." -#: lib/web/templates/email/instance_follow.text.eex:4 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:4 msgid "If you accept, this instance will receive all of your public events." msgstr "Se accetti, questa istanza riceverà tutti i tuoi eventi pubblici." -#: lib/web/email/follow.ex:48 #, elixir-format +#: lib/web/email/follow.ex:48 msgid "Instance %{name} (%{domain}) requests to follow your instance" msgstr "L'istanza %{name} (%{domain}) richiede di seguire la tua istanza" -#: lib/web/templates/email/instance_follow.html.eex:66 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:66 msgid "See the federation settings" msgstr "Vedi le impostazioni della federazione" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:52 #: lib/web/templates/email/instance_follow.text.eex:6 -#, elixir-format msgid "To accept this invitation, head over to the instance's admin settings." msgstr "" "Per accettare questo invito, vai alle impostazioni di amministrazione " "dell'istanza." +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:13 #: lib/web/templates/email/instance_follow.text.eex:1 -#, elixir-format msgid "Want to connect?" msgstr "Vuoi connetterti?" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:45 #: lib/web/templates/email/instance_follow.text.eex:5 -#, elixir-format msgid "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." msgstr "" "Nota: %{name} (%{domain}) che ti segue non implica necessariamente che segui " "questa istanza, ma puoi anche chiedere di seguirli." -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "Ciao! Ti sei appena registrato per partecipare a questo evento: « " "%{title} ». Conferma l'indirizzo e-mail che hai fornito:" -#: lib/web/templates/email/event_participation_rejected.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.html.eex:38 msgid "You issued a request to attend %{title}." msgstr "Hai chiesto di partecipare %{title}." -#: lib/web/templates/email/event_updated.html.eex:64 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Titolo dell'evento" -#: lib/web/templates/email/event_updated.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "" "Sono state apportate modifiche a %{title}, quindi abbiamo pensato di " "informarti." -#: lib/web/templates/error/500_page.html.eex:7 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 msgid "This page is not correct" msgstr "Questa pagina non è corretta" -#: lib/web/templates/error/500_page.html.eex:50 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:50 msgid "We're sorry, but something went wrong on our end." msgstr "Siamo spiacenti, ma qualcosa è andato storto da parte nostra." +#, elixir-format #: lib/web/templates/email/email.html.eex:88 #: lib/web/templates/email/email.text.eex:4 -#, elixir-format msgid "This is a demonstration site to test Mobilizon." msgstr "Questo è un sito di prova per testare Mobilizon." +#, elixir-format #: lib/service/metadata/actor.ex:53 lib/service/metadata/actor.ex:60 #: lib/service/metadata/instance.ex:54 lib/service/metadata/instance.ex:60 msgid "%{name}'s feed" @@ -1716,26 +1717,26 @@ msgstr "Flusso pubblico degli eventi di %{actor} su %{instance}" msgid "Feed for %{email} on %{instance}" msgstr "Flusso per %{email} su %{instance}" -#: lib/web/templates/error/500_page.html.eex:57 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:57 msgid "If the issue persists, you may contact the server administrator at %{contact}." msgstr "" "Se il problema persiste contatta l'amministratore del server a %{contact}." -#: lib/web/templates/error/500_page.html.eex:55 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:55 msgid "If the issue persists, you may try to contact the server administrator." msgstr "" "Se il problema persiste puoi provare a contattare l'amministratore del " "server." -#: lib/web/templates/error/500_page.html.eex:68 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:68 msgid "Technical details" msgstr "Dettagli tecnici" -#: lib/web/templates/error/500_page.html.eex:52 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:52 msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Il server Mobilizon sembra essere temporaneamente inattivo." @@ -1743,3 +1744,8 @@ msgstr "Il server Mobilizon sembra essere temporaneamente inattivo." #, elixir-format msgid "Public feed for %{instance}" msgstr "Feed pubblico per %{instance}" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/it/LC_MESSAGES/errors.po b/priv/gettext/it/LC_MESSAGES/errors.po index 80607dd9..dae83d66 100644 --- a/priv/gettext/it/LC_MESSAGES/errors.po +++ b/priv/gettext/it/LC_MESSAGES/errors.po @@ -94,8 +94,8 @@ msgstr "dev'essere maggiore o uguale di %{number}" msgid "must be equal to %{number}" msgstr "dev'essere uguale a %{number}" -#: lib/graphql/resolvers/user.ex:100 #, elixir-format +#: lib/graphql/resolvers/user.ex:100 msgid "Cannot refresh the token" msgstr "Il token non può essere aggiornato" @@ -109,8 +109,8 @@ msgstr "Il profilo corrente non è membro di questo gruppo" msgid "Current profile is not an administrator of the selected group" msgstr "Il profilo corrente non è amministratore del gruppo selezionato" -#: lib/graphql/resolvers/user.ex:501 #, elixir-format +#: lib/graphql/resolvers/user.ex:501 msgid "Error while saving user settings" msgstr "Errore nel salvare le preferenze utente" @@ -125,8 +125,8 @@ msgstr "Gruppo non trovato" msgid "Group with ID %{id} not found" msgstr "Gruppo con ID %{id} non trovato" -#: lib/graphql/resolvers/user.ex:80 #, elixir-format +#: lib/graphql/resolvers/user.ex:80 msgid "Impossible to authenticate, either your email or password are invalid." msgstr "Impossibile autenticarsi: email e/o password non validi." @@ -135,14 +135,14 @@ msgstr "Impossibile autenticarsi: email e/o password non validi." msgid "Member not found" msgstr "Membro non trovato" +#, elixir-format #: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 #: lib/graphql/resolvers/user.ex:406 -#, elixir-format msgid "No profile found for the moderator user" msgstr "Nessun profilo trovato per l'utente moderatore" -#: lib/graphql/resolvers/user.ex:193 #, elixir-format +#: lib/graphql/resolvers/user.ex:193 msgid "No user to validate with this email was found" msgstr "Nessun utente da convalidare trovato con questa email" @@ -151,6 +151,7 @@ msgstr "Nessun utente da convalidare trovato con questa email" msgid "No user with this email was found" msgstr "Nessun utente con questa email" +#, elixir-format #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 @@ -159,64 +160,64 @@ msgstr "Nessun utente con questa email" msgid "Profile is not owned by authenticated user" msgstr "L'utente autenticato non è propietario di questo profilo" -#: lib/graphql/resolvers/user.ex:123 #, elixir-format +#: lib/graphql/resolvers/user.ex:123 msgid "Registrations are not open" msgstr "Le registrazioni non sono aperte" -#: lib/graphql/resolvers/user.ex:331 #, elixir-format +#: lib/graphql/resolvers/user.ex:331 msgid "The current password is invalid" msgstr "la password corrente non è valida" -#: lib/graphql/resolvers/user.ex:376 #, elixir-format +#: lib/graphql/resolvers/user.ex:376 msgid "The new email doesn't seem to be valid" msgstr "La nuova email sembra non valida" -#: lib/graphql/resolvers/user.ex:373 #, elixir-format +#: lib/graphql/resolvers/user.ex:373 msgid "The new email must be different" msgstr "La nuova email dev'essere diversa" -#: lib/graphql/resolvers/user.ex:334 #, elixir-format +#: lib/graphql/resolvers/user.ex:334 msgid "The new password must be different" msgstr "La nuova password deve essere diversa" +#, elixir-format #: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 #: lib/graphql/resolvers/user.ex:431 -#, elixir-format msgid "The password provided is invalid" msgstr "La password assegnata non è valida" -#: lib/graphql/resolvers/user.ex:338 #, elixir-format +#: lib/graphql/resolvers/user.ex:338 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "la password scelta è troppo corta, deve avere almeno 6 caratteri." -#: lib/graphql/resolvers/user.ex:214 #, elixir-format +#: lib/graphql/resolvers/user.ex:214 msgid "This user can't reset their password" msgstr "Questo utente non può resettare la password" -#: lib/graphql/resolvers/user.ex:76 #, elixir-format +#: lib/graphql/resolvers/user.ex:76 msgid "This user has been disabled" msgstr "L'utente è stato disabilitato" -#: lib/graphql/resolvers/user.ex:177 #, elixir-format +#: lib/graphql/resolvers/user.ex:177 msgid "Unable to validate user" msgstr "Impossibile convalidare l'utente" -#: lib/graphql/resolvers/user.ex:409 #, elixir-format +#: lib/graphql/resolvers/user.ex:409 msgid "User already disabled" msgstr "Utente già disabilitato" -#: lib/graphql/resolvers/user.ex:476 #, elixir-format +#: lib/graphql/resolvers/user.ex:476 msgid "User requested is not logged-in" msgstr "L'utente richiesto non è loggato" @@ -240,13 +241,13 @@ msgstr "Non puoi unirti a questo gruppo" msgid "You may not list groups unless moderator." msgstr "Non è possibile elencare i gruppi a meno che non sia un moderatore." -#: lib/graphql/resolvers/user.ex:381 #, elixir-format +#: lib/graphql/resolvers/user.ex:381 msgid "You need to be logged-in to change your email" msgstr "È necessario effettuare il login per modificare la tua email" -#: lib/graphql/resolvers/user.ex:346 #, elixir-format +#: lib/graphql/resolvers/user.ex:346 msgid "You need to be logged-in to change your password" msgstr "È necessario effettuare il login per modificare la tua password" @@ -255,8 +256,8 @@ msgstr "È necessario effettuare il login per modificare la tua password" msgid "You need to be logged-in to delete a group" msgstr "È necessario effettuare il login per eliminare un gruppo" -#: lib/graphql/resolvers/user.ex:436 #, elixir-format +#: lib/graphql/resolvers/user.ex:436 msgid "You need to be logged-in to delete your account" msgstr "È necessario effettuare il login per eliminare il tuo account" @@ -275,65 +276,65 @@ msgstr "È necessario effettuare il login per lasciare un gruppo" msgid "You need to be logged-in to update a group" msgstr "È necessario effettuare il login per aggiornare un gruppo" -#: lib/graphql/resolvers/user.ex:105 #, elixir-format +#: lib/graphql/resolvers/user.ex:105 msgid "You need to have an existing token to get a refresh token" msgstr "" "È necessario disporre di un token esistente per ottenere un token di " "aggiornamento" -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 #, elixir-format +#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 msgid "You requested again a confirmation email too soon" msgstr "Hai richiesto di nuovo un'e-mail di conferma troppo presto" -#: lib/graphql/resolvers/user.ex:126 #, elixir-format +#: lib/graphql/resolvers/user.ex:126 msgid "Your email is not on the allowlist" msgstr "La tua mail non è nella lista delle autorizzazioni" -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 #, elixir-format +#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 msgid "Error while performing background task" msgstr "Errore nell'eseguire un processo in background" -#: lib/graphql/resolvers/actor.ex:27 #, elixir-format +#: lib/graphql/resolvers/actor.ex:27 msgid "No profile found with this ID" msgstr "Nessun profilo trovato con questo ID" -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 #, elixir-format +#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 msgid "No remote profile found with this ID" msgstr "Nessun profilo remoto trovato con questo ID" -#: lib/graphql/resolvers/actor.ex:69 #, elixir-format +#: lib/graphql/resolvers/actor.ex:69 msgid "Only moderators and administrators can suspend a profile" msgstr "Solo i moderatori e gli amministratori possono sospendere un profilo" -#: lib/graphql/resolvers/actor.ex:99 #, elixir-format +#: lib/graphql/resolvers/actor.ex:99 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Solo i moderatori e gli amministratori possono riattivare un profilo" -#: lib/graphql/resolvers/actor.ex:24 #, elixir-format +#: lib/graphql/resolvers/actor.ex:24 msgid "Only remote profiles may be refreshed" msgstr "È possibile aggiornare solo i profili remoti" -#: lib/graphql/resolvers/actor.ex:61 #, elixir-format +#: lib/graphql/resolvers/actor.ex:61 msgid "Profile already suspended" msgstr "Profilo già sospeso" -#: lib/graphql/resolvers/participant.ex:92 #, elixir-format +#: lib/graphql/resolvers/participant.ex:92 msgid "A valid email is required by your instance" msgstr "Un'email valida è richiesta dalla vostra istanza" -#: lib/graphql/resolvers/participant.ex:86 #, elixir-format +#: lib/graphql/resolvers/participant.ex:86 msgid "Anonymous participation is not enabled" msgstr "La partecipazione anonima non è abilitata" @@ -347,45 +348,45 @@ msgstr "Impossibile rimuovere l'ultimo amministratore di un gruppo" msgid "Cannot remove the last identity of a user" msgstr "Impossibile rimuovere l'ultima identità di un utente" -#: lib/graphql/resolvers/comment.ex:108 #, elixir-format +#: lib/graphql/resolvers/comment.ex:108 msgid "Comment is already deleted" msgstr "Commento già cancellato" -#: lib/graphql/error.ex:92 lib/graphql/resolvers/discussion.ex:62 #, elixir-format +#: lib/graphql/error.ex:92 lib/graphql/resolvers/discussion.ex:62 msgid "Discussion not found" msgstr "Discussione non trovata" -#: lib/graphql/resolvers/report.ex:58 lib/graphql/resolvers/report.ex:77 #, elixir-format +#: lib/graphql/resolvers/report.ex:58 lib/graphql/resolvers/report.ex:77 msgid "Error while saving report" msgstr "Errore nel salvare la segnalazione" -#: lib/graphql/resolvers/report.ex:96 #, elixir-format +#: lib/graphql/resolvers/report.ex:96 msgid "Error while updating report" msgstr "Errore durante l'aggiornamento del rapporto" -#: lib/graphql/resolvers/participant.ex:127 #, elixir-format +#: lib/graphql/resolvers/participant.ex:127 msgid "Event id not found" msgstr "ID evento non trovato" +#, elixir-format #: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 #: lib/graphql/resolvers/event.ex:325 -#, elixir-format msgid "Event not found" msgstr "Evento non trovato" +#, elixir-format #: lib/graphql/resolvers/participant.ex:83 #: lib/graphql/resolvers/participant.ex:124 lib/graphql/resolvers/participant.ex:156 -#, elixir-format msgid "Event with this ID %{id} doesn't exist" msgstr "L'evento con questo ID %{id} non esiste" -#: lib/graphql/resolvers/participant.ex:99 #, elixir-format +#: lib/graphql/resolvers/participant.ex:99 msgid "Internal Error" msgstr "Errore Interno" @@ -394,8 +395,8 @@ msgstr "Errore Interno" msgid "No discussion with ID %{id}" msgstr "Nessuna discussione con l'ID %{id}" -#: lib/graphql/resolvers/todos.ex:78 lib/graphql/resolvers/todos.ex:168 #, elixir-format +#: lib/graphql/resolvers/todos.ex:78 lib/graphql/resolvers/todos.ex:168 msgid "No profile found for user" msgstr "Nessuno profilo trovato per l'utente" @@ -404,15 +405,15 @@ msgstr "Nessuno profilo trovato per l'utente" msgid "No such feed token" msgstr "Nessun token di rifornimento corrispondente" -#: lib/graphql/resolvers/participant.ex:237 #, elixir-format +#: lib/graphql/resolvers/participant.ex:237 msgid "Participant already has role %{role}" msgstr "Il partecipante ha già il ruolo %{role}" +#, elixir-format #: lib/graphql/resolvers/participant.ex:169 #: lib/graphql/resolvers/participant.ex:198 lib/graphql/resolvers/participant.ex:230 #: lib/graphql/resolvers/participant.ex:240 -#, elixir-format msgid "Participant not found" msgstr "Partecipante non trovato" @@ -426,32 +427,32 @@ msgstr "La persona con l'ID %{id} non è stata trovata" msgid "Person with username %{username} not found" msgstr "La persona con il nome utente %{username} non è stata trovata" -#: lib/graphql/resolvers/post.ex:167 lib/graphql/resolvers/post.ex:200 #, elixir-format +#: lib/graphql/resolvers/post.ex:167 lib/graphql/resolvers/post.ex:200 msgid "Post ID is not a valid ID" msgstr "L'ID del post non è un ID valido" -#: lib/graphql/resolvers/post.ex:170 lib/graphql/resolvers/post.ex:203 #, elixir-format +#: lib/graphql/resolvers/post.ex:170 lib/graphql/resolvers/post.ex:203 msgid "Post doesn't exist" msgstr "Il post non esiste" -#: lib/graphql/resolvers/member.ex:83 #, elixir-format +#: lib/graphql/resolvers/member.ex:83 msgid "Profile invited doesn't exist" msgstr "Il profilo invitato non esiste" -#: lib/graphql/resolvers/member.ex:92 lib/graphql/resolvers/member.ex:96 #, elixir-format +#: lib/graphql/resolvers/member.ex:92 lib/graphql/resolvers/member.ex:96 msgid "Profile is already a member of this group" msgstr "Il profilo è già un membro diquesto gruppo" +#, elixir-format #: lib/graphql/resolvers/post.ex:132 lib/graphql/resolvers/post.ex:173 #: lib/graphql/resolvers/post.ex:206 lib/graphql/resolvers/resource.ex:88 lib/graphql/resolvers/resource.ex:128 #: lib/graphql/resolvers/resource.ex:157 lib/graphql/resolvers/resource.ex:186 lib/graphql/resolvers/todos.ex:57 #: lib/graphql/resolvers/todos.ex:81 lib/graphql/resolvers/todos.ex:99 lib/graphql/resolvers/todos.ex:171 #: lib/graphql/resolvers/todos.ex:194 lib/graphql/resolvers/todos.ex:222 -#, elixir-format msgid "Profile is not member of group" msgstr "Il profilo non è membro del gruppo" @@ -462,33 +463,32 @@ msgstr "Profilo non trovato" #: lib/graphql/resolvers/report.ex:36 #, elixir-format -#, elixir-format msgid "Report not found" msgstr "Segnalazione non trovata" -#: lib/graphql/resolvers/resource.ex:154 lib/graphql/resolvers/resource.ex:183 #, elixir-format +#: lib/graphql/resolvers/resource.ex:154 lib/graphql/resolvers/resource.ex:183 msgid "Resource doesn't exist" msgstr "La risorsa non esiste" -#: lib/graphql/resolvers/participant.ex:120 #, elixir-format +#: lib/graphql/resolvers/participant.ex:120 msgid "The event has already reached its maximum capacity" msgstr "L'evento ha già raggiunto la sua massima capacità" -#: lib/graphql/resolvers/participant.ex:260 #, elixir-format +#: lib/graphql/resolvers/participant.ex:260 msgid "This token is invalid" msgstr "Questo token non è valido" -#: lib/graphql/resolvers/todos.ex:165 lib/graphql/resolvers/todos.ex:219 #, elixir-format +#: lib/graphql/resolvers/todos.ex:165 lib/graphql/resolvers/todos.ex:219 msgid "Todo doesn't exist" msgstr "L'elemento to-do non esiste" +#, elixir-format #: lib/graphql/resolvers/todos.ex:75 lib/graphql/resolvers/todos.ex:191 #: lib/graphql/resolvers/todos.ex:216 -#, elixir-format msgid "Todo list doesn't exist" msgstr "la lista non esiste" @@ -512,13 +512,13 @@ msgstr "Utente non trovato" msgid "You already have a profile for this user" msgstr "Hai già un profilo per questo utente" -#: lib/graphql/resolvers/participant.ex:130 #, elixir-format +#: lib/graphql/resolvers/participant.ex:130 msgid "You are already a participant of this event" msgstr "Se già un partecipante di questo evento" -#: lib/graphql/resolvers/member.ex:86 #, elixir-format +#: lib/graphql/resolvers/member.ex:86 msgid "You are not a member of this group" msgstr "Non sei un membro di questo gruppo" @@ -527,18 +527,18 @@ msgstr "Non sei un membro di questo gruppo" msgid "You are not a moderator or admin for this group" msgstr "Non sei un moderatore o amministratore di questo gruppo" -#: lib/graphql/resolvers/comment.ex:54 #, elixir-format +#: lib/graphql/resolvers/comment.ex:54 msgid "You are not allowed to create a comment if not connected" msgstr "Non è consentito creare un commento se non si è collegati" -#: lib/graphql/resolvers/feed_token.ex:41 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:41 msgid "You are not allowed to create a feed token if not connected" msgstr "Non puoi creare un token di rifornimento senza connessione" -#: lib/graphql/resolvers/comment.ex:113 #, elixir-format +#: lib/graphql/resolvers/comment.ex:113 msgid "You are not allowed to delete a comment if not connected" msgstr "Non è consentito eliminare un commento se non si è collegati" @@ -547,14 +547,14 @@ msgstr "Non è consentito eliminare un commento se non si è collegati" msgid "You are not allowed to delete a feed token if not connected" msgstr "Non puoi eliminare un token di rifornimento senza connettersi" -#: lib/graphql/resolvers/comment.ex:76 #, elixir-format +#: lib/graphql/resolvers/comment.ex:76 msgid "You are not allowed to update a comment if not connected" msgstr "Non è consentito aggiornare un commento se non si è collegati" +#, elixir-format #: lib/graphql/resolvers/participant.ex:163 #: lib/graphql/resolvers/participant.ex:192 -#, elixir-format msgid "You can't leave event because you're the only event creator participant" msgstr "" "Non puoi lasciare l'evento perchè sei l'unico partecipante creatore di eventi" @@ -566,18 +566,18 @@ msgstr "" "Non puoi impostare te stesso per un ruolo di membro inferiore per questo " "gruppo perché sei l'unico amministratore" -#: lib/graphql/resolvers/comment.ex:104 #, elixir-format +#: lib/graphql/resolvers/comment.ex:104 msgid "You cannot delete this comment" msgstr "Non puoi eliminare questo commento" -#: lib/graphql/resolvers/event.ex:321 #, elixir-format +#: lib/graphql/resolvers/event.ex:321 msgid "You cannot delete this event" msgstr "Non puoi eliminare questo evento" -#: lib/graphql/resolvers/member.ex:89 #, elixir-format +#: lib/graphql/resolvers/member.ex:89 msgid "You cannot invite to this group" msgstr "Non puoi invitare in questo gruppo" @@ -591,18 +591,18 @@ msgstr "Non hai il permesso di cancellare questo token" msgid "You need to be logged-in and a moderator to list action logs" msgstr "Devi essere connesso e un moderatore per elencare i log delle azioni" -#: lib/graphql/resolvers/report.ex:26 #, elixir-format +#: lib/graphql/resolvers/report.ex:26 msgid "You need to be logged-in and a moderator to list reports" msgstr "Devi essere connesso e un moderatore per elencare i rapporti" -#: lib/graphql/resolvers/report.ex:101 #, elixir-format +#: lib/graphql/resolvers/report.ex:101 msgid "You need to be logged-in and a moderator to update a report" msgstr "Devi essere connesso e un moderatore per aggiornare un rapporto" -#: lib/graphql/resolvers/report.ex:41 #, elixir-format +#: lib/graphql/resolvers/report.ex:41 msgid "You need to be logged-in and a moderator to view a report" msgstr "Devi essere connesso e un moderatore per visualizzare un rapporto" @@ -632,140 +632,140 @@ msgstr "" msgid "You need to be logged-in to access discussions" msgstr "Devi essere connesso per accedere alle discussioni" -#: lib/graphql/resolvers/resource.ex:94 #, elixir-format +#: lib/graphql/resolvers/resource.ex:94 msgid "You need to be logged-in to access resources" msgstr "Devi essere connesso per accedere alle risorse" -#: lib/graphql/resolvers/event.ex:256 #, elixir-format +#: lib/graphql/resolvers/event.ex:256 msgid "You need to be logged-in to create events" msgstr "Devi essere connesso per creare eventi" -#: lib/graphql/resolvers/post.ex:140 #, elixir-format +#: lib/graphql/resolvers/post.ex:140 msgid "You need to be logged-in to create posts" msgstr "Devi essere connesso per creare dei post" -#: lib/graphql/resolvers/report.ex:74 #, elixir-format +#: lib/graphql/resolvers/report.ex:74 msgid "You need to be logged-in to create reports" msgstr "Devi essere connesso per creare rapporti" -#: lib/graphql/resolvers/resource.ex:133 #, elixir-format +#: lib/graphql/resolvers/resource.ex:133 msgid "You need to be logged-in to create resources" msgstr "Devi essere connesso per creare risorse" -#: lib/graphql/resolvers/event.ex:330 #, elixir-format +#: lib/graphql/resolvers/event.ex:330 msgid "You need to be logged-in to delete an event" msgstr "Devi essere connesso per eliminare un evento" -#: lib/graphql/resolvers/post.ex:211 #, elixir-format +#: lib/graphql/resolvers/post.ex:211 msgid "You need to be logged-in to delete posts" msgstr "Devi essere connesso per eliminare dei post" -#: lib/graphql/resolvers/resource.ex:191 #, elixir-format +#: lib/graphql/resolvers/resource.ex:191 msgid "You need to be logged-in to delete resources" msgstr "Devi essere connesso per eliminare risorse" -#: lib/graphql/resolvers/participant.ex:104 #, elixir-format +#: lib/graphql/resolvers/participant.ex:104 msgid "You need to be logged-in to join an event" msgstr "Devi essere connesso per partecipare a un evento" -#: lib/graphql/resolvers/participant.ex:203 #, elixir-format +#: lib/graphql/resolvers/participant.ex:203 msgid "You need to be logged-in to leave an event" msgstr "Devi essere connesso per lasciare un evento" -#: lib/graphql/resolvers/event.ex:295 #, elixir-format +#: lib/graphql/resolvers/event.ex:295 msgid "You need to be logged-in to update an event" msgstr "Devi essere connesso per aggiornare un evento" -#: lib/graphql/resolvers/post.ex:178 #, elixir-format +#: lib/graphql/resolvers/post.ex:178 msgid "You need to be logged-in to update posts" msgstr "Devi essere connesso per aggiornare dei post" -#: lib/graphql/resolvers/resource.ex:162 #, elixir-format +#: lib/graphql/resolvers/resource.ex:162 msgid "You need to be logged-in to update resources" msgstr "Devi essere connesso per aggiornare le risorse" -#: lib/graphql/resolvers/resource.ex:218 #, elixir-format +#: lib/graphql/resolvers/resource.ex:218 msgid "You need to be logged-in to view a resource preview" msgstr "Devi essere connesso per visualizzare l'anteprima di una risorsa" -#: lib/graphql/resolvers/resource.ex:125 #, elixir-format +#: lib/graphql/resolvers/resource.ex:125 msgid "Parent resource doesn't belong to this group" msgstr "La risorsa principale non appartiene a questo gruppo" -#: lib/mobilizon/users/user.ex:109 #, elixir-format +#: lib/mobilizon/users/user.ex:109 msgid "The chosen password is too short." msgstr "La password scelta è troppo corta." -#: lib/mobilizon/users/user.ex:138 #, elixir-format +#: lib/mobilizon/users/user.ex:138 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Il token di registrazione è già in uso, questo sembra un problema dalla " "nostra parte." -#: lib/mobilizon/users/user.ex:104 #, elixir-format +#: lib/mobilizon/users/user.ex:104 msgid "This email is already used." msgstr "Questa email è già in uso." -#: lib/graphql/error.ex:88 #, elixir-format +#: lib/graphql/error.ex:88 msgid "Post not found" msgstr "Post non trovato" -#: lib/graphql/error.ex:75 #, elixir-format +#: lib/graphql/error.ex:75 msgid "Invalid arguments passed" msgstr "Sono stati trasmessi argomenti non validi" -#: lib/graphql/error.ex:81 #, elixir-format +#: lib/graphql/error.ex:81 msgid "Invalid credentials" msgstr "Credenziali non valide" -#: lib/graphql/error.ex:79 #, elixir-format +#: lib/graphql/error.ex:79 msgid "Reset your password to login" msgstr "Reimposta la tua password per connetterti" -#: lib/graphql/error.ex:86 lib/graphql/error.ex:91 #, elixir-format +#: lib/graphql/error.ex:86 lib/graphql/error.ex:91 msgid "Resource not found" msgstr "Segnalazione non trovata" -#: lib/graphql/error.ex:93 #, elixir-format +#: lib/graphql/error.ex:93 msgid "Something went wrong" msgstr "Qualcosa è andato storto" -#: lib/graphql/error.ex:74 #, elixir-format +#: lib/graphql/error.ex:74 msgid "Unknown Resource" msgstr "Risorsa sconosciuta" -#: lib/graphql/error.ex:84 #, elixir-format +#: lib/graphql/error.ex:84 msgid "You don't have permission to do this" msgstr "Non hai il permesso di farlo" -#: lib/graphql/error.ex:76 #, elixir-format +#: lib/graphql/error.ex:76 msgid "You need to be logged in" msgstr "Devi essere connesso" @@ -779,8 +779,8 @@ msgstr "Non puoi accettare l'invito con questo profilo." msgid "You can't reject this invitation with this profile." msgstr "Non puoi rifiutare l'invito con questo profilo." -#: lib/graphql/resolvers/media.ex:62 #, elixir-format +#: lib/graphql/resolvers/media.ex:62 msgid "File doesn't have an allowed MIME type." msgstr "Il file non ha un tipo MIME consentito." @@ -789,13 +789,13 @@ msgstr "Il file non ha un tipo MIME consentito." msgid "Profile is not administrator for the group" msgstr "Il profilo non è amministratore del gruppo" -#: lib/graphql/resolvers/event.ex:284 #, elixir-format +#: lib/graphql/resolvers/event.ex:284 msgid "You can't edit this event." msgstr "Non puoi modificare questo evento." -#: lib/graphql/resolvers/event.ex:287 #, elixir-format +#: lib/graphql/resolvers/event.ex:287 msgid "You can't attribute this event to this profile." msgstr "Non puo iattribuire questo evento a questo profilo." @@ -814,8 +814,8 @@ msgstr "Questo memebro è già stato rifiutato." msgid "You don't have the right to remove this member." msgstr "Non hai il diritto di rimuovere questo membro." -#: lib/mobilizon/actors/actor.ex:351 #, elixir-format +#: lib/mobilizon/actors/actor.ex:351 msgid "This username is already taken." msgstr "Questo nome utente è già in uso." @@ -826,13 +826,13 @@ msgstr "" "Devi fornire un ID o la stringa utente (ad es. utente@mobilizon.sm) " "per accedere ad una discussione" -#: lib/graphql/resolvers/event.ex:245 #, elixir-format +#: lib/graphql/resolvers/event.ex:245 msgid "Organizer profile is not owned by the user" msgstr "Il profilo dell'organizzatore non è di proprietà dell'utente" -#: lib/graphql/resolvers/participant.ex:89 #, elixir-format +#: lib/graphql/resolvers/participant.ex:89 msgid "Profile ID provided is not the anonymous profile one" msgstr "L'ID profilo fornito non è quello del profilo anonimo" @@ -842,24 +842,23 @@ msgstr "L'ID profilo fornito non è quello del profilo anonimo" msgid "The provided picture is too heavy" msgstr "L'immagine inserita è troppo pesante" -#: lib/web/views/utils.ex:33 #, elixir-format +#: lib/web/views/utils.ex:33 msgid "Index file not found. You need to recompile the front-end." msgstr "Il file di indice non è stato trovato. Devi ricompilare il front-end." #: lib/graphql/resolvers/resource.ex:122 #, elixir-format -#, elixir-format msgid "Error while creating resource" msgstr "Errore durante la creazione della risorsa" -#: lib/graphql/resolvers/user.ex:390 #, elixir-format +#: lib/graphql/resolvers/user.ex:390 msgid "Invalid activation token" msgstr "Token di attivazione non valido" -#: lib/graphql/resolvers/resource.ex:208 #, elixir-format +#: lib/graphql/resolvers/resource.ex:208 msgid "Unable to fetch resource details from this URL." msgstr "Impossibile recuperare i dettagli della risorsa da questa URL." diff --git a/priv/gettext/ja/LC_MESSAGES/activity.po b/priv/gettext/ja/LC_MESSAGES/activity.po new file mode 100644 index 00000000..698146a2 --- /dev/null +++ b/priv/gettext/ja/LC_MESSAGES/activity.po @@ -0,0 +1,229 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: ja\n" +"Plural-Forms: nplurals=1\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" diff --git a/priv/gettext/ja/LC_MESSAGES/default.po b/priv/gettext/ja/LC_MESSAGES/default.po index 9ef615c0..37f18eb9 100644 --- a/priv/gettext/ja/LC_MESSAGES/default.po +++ b/priv/gettext/ja/LC_MESSAGES/default.po @@ -1399,3 +1399,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/activity.po b/priv/gettext/nl/LC_MESSAGES/activity.po new file mode 100644 index 00000000..53a1820c --- /dev/null +++ b/priv/gettext/nl/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: nl\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/nl/LC_MESSAGES/default.po b/priv/gettext/nl/LC_MESSAGES/default.po index 562e6e68..52563b8f 100644 --- a/priv/gettext/nl/LC_MESSAGES/default.po +++ b/priv/gettext/nl/LC_MESSAGES/default.po @@ -1424,3 +1424,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/nn/LC_MESSAGES/activity.po b/priv/gettext/nn/LC_MESSAGES/activity.po new file mode 100644 index 00000000..1e15ffde --- /dev/null +++ b/priv/gettext/nn/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: nn\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/nn/LC_MESSAGES/default.po b/priv/gettext/nn/LC_MESSAGES/default.po index 9c5c62c2..1e172c4c 100644 --- a/priv/gettext/nn/LC_MESSAGES/default.po +++ b/priv/gettext/nn/LC_MESSAGES/default.po @@ -1700,3 +1700,8 @@ msgstr "Mobilizon-tenaren ser ut til å vera nede i augeblinken." #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/activity.po b/priv/gettext/oc/LC_MESSAGES/activity.po new file mode 100644 index 00000000..d8e27493 --- /dev/null +++ b/priv/gettext/oc/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: oc\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/oc/LC_MESSAGES/default.po b/priv/gettext/oc/LC_MESSAGES/default.po index 31b13a43..17aca022 100644 --- a/priv/gettext/oc/LC_MESSAGES/default.po +++ b/priv/gettext/oc/LC_MESSAGES/default.po @@ -1509,3 +1509,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/activity.po b/priv/gettext/pl/LC_MESSAGES/activity.po new file mode 100644 index 00000000..d3a8d086 --- /dev/null +++ b/priv/gettext/pl/LC_MESSAGES/activity.po @@ -0,0 +1,233 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: pl\n" +"Plural-Forms: nplurals=3\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" diff --git a/priv/gettext/pl/LC_MESSAGES/default.po b/priv/gettext/pl/LC_MESSAGES/default.po index ca9b1186..d4e58838 100644 --- a/priv/gettext/pl/LC_MESSAGES/default.po +++ b/priv/gettext/pl/LC_MESSAGES/default.po @@ -1525,3 +1525,8 @@ msgstr "Serwer Mobilizon wydaje się tymczasowo nie działać." #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/activity.po b/priv/gettext/pt/LC_MESSAGES/activity.po new file mode 100644 index 00000000..6b6ca9c2 --- /dev/null +++ b/priv/gettext/pt/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: pt\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/pt/LC_MESSAGES/default.po b/priv/gettext/pt/LC_MESSAGES/default.po index c79a35bd..8d0196cf 100644 --- a/priv/gettext/pt/LC_MESSAGES/default.po +++ b/priv/gettext/pt/LC_MESSAGES/default.po @@ -1404,3 +1404,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/activity.po b/priv/gettext/pt_BR/LC_MESSAGES/activity.po new file mode 100644 index 00000000..104f0b40 --- /dev/null +++ b/priv/gettext/pt_BR/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/default.po b/priv/gettext/pt_BR/LC_MESSAGES/default.po index b077d9ba..ec5d2e98 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/default.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/default.po @@ -1516,3 +1516,8 @@ msgstr "" #: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/activity.po b/priv/gettext/ru/LC_MESSAGES/activity.po new file mode 100644 index 00000000..5def29e5 --- /dev/null +++ b/priv/gettext/ru/LC_MESSAGES/activity.po @@ -0,0 +1,233 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: ru\n" +"Plural-Forms: nplurals=3\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" diff --git a/priv/gettext/ru/LC_MESSAGES/default.po b/priv/gettext/ru/LC_MESSAGES/default.po index 5fe4f781..d1d915cb 100644 --- a/priv/gettext/ru/LC_MESSAGES/default.po +++ b/priv/gettext/ru/LC_MESSAGES/default.po @@ -15,267 +15,267 @@ msgstr "" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.6.2\n" -#: lib/web/templates/email/password_reset.html.eex:48 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:48 msgid "If you didn't request this, please ignore this email. Your password won't change until you access the link below and create a new one." msgstr "" "Если вы не оставляли такой запрос, проигнорируйте данное письмо. Пароль не " "изменится, если не перейти по приведённой ссылке и не указать новый." -#: lib/web/templates/email/report.html.eex:74 #, elixir-format +#: lib/web/templates/email/report.html.eex:74 msgid "%{title} by %{creator}" msgstr "%{title} от %{creator}" -#: lib/web/templates/email/registration_confirmation.html.eex:58 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:58 msgid "Activate my account" msgstr "Активировать мою учётную запись" +#, elixir-format #: lib/web/templates/email/email.html.eex:117 #: lib/web/templates/email/email.text.eex:9 -#, elixir-format msgid "Ask the community on Framacolibri" msgstr "Обратиться к сообществу на Framacolibri" -#: lib/web/templates/email/report.text.eex:15 #, elixir-format +#: lib/web/templates/email/report.text.eex:15 msgid "Comments" msgstr "Комментарии" +#, elixir-format #: lib/web/templates/email/report.html.eex:72 #: lib/web/templates/email/report.text.eex:11 -#, elixir-format msgid "Event" msgstr "Мероприятие" -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Инструкции по сбросу пароля на %{instance}" -#: lib/web/templates/email/report.text.eex:21 #, elixir-format +#: lib/web/templates/email/report.text.eex:21 msgid "Reason" msgstr "Причина" -#: lib/web/templates/email/password_reset.html.eex:61 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:61 msgid "Reset Password" msgstr "Сбросить пароль" -#: lib/web/templates/email/password_reset.html.eex:41 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:41 msgid "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." msgstr "" "Сбросить пароль легко. Просто нажмите на кнопку ниже и следуйте инструкциям. " "Это быстро." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Инструкции по подтверждению учётной записи Mobilizon на %{instance}" -#: lib/web/email/admin.ex:24 #, elixir-format +#: lib/web/email/admin.ex:24 msgid "New report on Mobilizon instance %{instance}" msgstr "Новый отчёт на Mobilizon узле %{instance}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:51 #: lib/web/templates/email/before_event_notification.text.eex:4 -#, elixir-format msgid "Go to event page" msgstr "Перейти на страницу мероприятия" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Новый отчёт от %{reporter} на %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Участие одобрено" +#, elixir-format #: lib/web/templates/email/password_reset.html.eex:13 #: lib/web/templates/email/password_reset.text.eex:1 -#, elixir-format msgid "Password reset" msgstr "Сброс пароля" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "" "Сбросить пароль легко. Просто нажмите на ссылку ниже и следуйте инструкциям. " "Это быстро." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "" "Вы создали аккаунт на% {host}, используя этот адрес электронной почты. Вы в " "одном клике от его активации. Если это сделали не вы, просто проигнорируйте " "это письмо." -#: lib/web/email/participation.ex:112 #, elixir-format +#: lib/web/email/participation.ex:112 msgid "Your participation to event %{title} has been approved" msgstr "Ваше участие в мероприятии %{title} было одобрено" -#: lib/web/email/participation.ex:70 #, elixir-format +#: lib/web/email/participation.ex:70 msgid "Your participation to event %{title} has been rejected" msgstr "Ваш запрос на участие в %{title} был отклонен" -#: lib/web/email/event.ex:37 #, elixir-format +#: lib/web/email/event.ex:37 msgid "Event %{title} has been updated" msgstr "Мероприятие %{title} было обновлено" -#: lib/web/templates/email/event_updated.text.eex:15 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:15 msgid "New title: %{title}" msgstr "Новый заголовок: %{title}" -#: lib/web/templates/email/password_reset.text.eex:5 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:5 msgid "You requested a new password for your account on %{instance}." msgstr "Вы запросили новый пароль для своей учетной записи на %{instance}." -#: lib/web/templates/email/email.html.eex:85 #, elixir-format +#: lib/web/templates/email/email.html.eex:85 msgid "Warning" msgstr "Предупреждение" -#: lib/web/email/participation.ex:135 #, elixir-format +#: lib/web/email/participation.ex:135 msgid "Confirm your participation to event %{title}" msgstr "Подтвердите свое участие в мероприятии %{title}" -#: lib/web/templates/api/privacy.html.eex:75 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:75 msgctxt "terms" msgid "An internal ID for your current selected identity" msgstr "Внутренний ID для выбранного идентификатора" -#: lib/web/templates/api/privacy.html.eex:74 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:74 msgctxt "terms" msgid "An internal user ID" msgstr "Внутренний пользовательский ID" -#: lib/web/templates/api/privacy.html.eex:37 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:37 msgctxt "terms" msgid "Any of the information we collect from you may be used in the following ways:" msgstr "" "Любая информация, которую мы собираем, может быть использована следующим " "образом:" -#: lib/web/templates/api/privacy.html.eex:9 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:9 msgctxt "terms" msgid "Basic account information" msgstr "Основная информация об аккаунте" -#: lib/web/templates/api/privacy.html.eex:25 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:25 msgctxt "terms" msgid "Do not share any dangerous information over Mobilizon." msgstr "Не передавайте через Mobilizon какую-либо небезопасную информацию." -#: lib/web/templates/api/privacy.html.eex:90 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:90 msgctxt "terms" msgid "Do we disclose any information to outside parties?" msgstr "Передаем ли мы какую-либо информацию третьим лицам?" -#: lib/web/templates/api/privacy.html.eex:68 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:68 msgctxt "terms" msgid "Do we use cookies?" msgstr "Мы используем файлы cookie?" -#: lib/web/templates/api/privacy.html.eex:51 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:51 msgctxt "terms" msgid "How do we protect your information?" msgstr "Как мы защищаем вашу информацию?" -#: lib/web/templates/api/privacy.html.eex:29 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:29 msgctxt "terms" msgid "IPs and other metadata" msgstr "IP-адреса и другие метаданные" -#: lib/web/templates/api/privacy.html.eex:17 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:17 msgctxt "terms" msgid "Published events and comments" msgstr "Опубликованные мероприятия и комментарии" -#: lib/web/templates/api/privacy.html.eex:64 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:64 msgctxt "terms" msgid "Retain the IP addresses associated with registered users no more than 12 months." msgstr "" "Не храните IP-адреса, присвоенные зарегистрированным пользователям более 12 " "месяцев." -#: lib/web/templates/api/privacy.html.eex:76 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:76 msgctxt "terms" msgid "Tokens to authenticate you" msgstr "Токены для аутентификации вас" -#: lib/web/templates/api/privacy.html.eex:31 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:31 msgctxt "terms" msgid "We also may retain server logs which include the IP address of every request to our server." msgstr "" "Мы также можем хранить логи сервера, которые включают IP-адрес каждого " "запроса к нашему серверу." -#: lib/web/templates/api/privacy.html.eex:70 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:70 msgctxt "terms" msgid "We store the following information on your device when you connect:" msgstr "" "Мы храним следующую информацию об устройстве, с которого вы подключаетесь:" -#: lib/web/templates/api/privacy.html.eex:58 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:58 msgctxt "terms" msgid "We will make a good faith effort to:" msgstr "Мы приложим все усилия, чтобы:" -#: lib/web/templates/api/privacy.html.eex:35 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:35 msgctxt "terms" msgid "What do we use your information for?" msgstr "Для чего мы используем ваши данные?" -#: lib/web/templates/api/privacy.html.eex:57 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:57 msgctxt "terms" msgid "What is our data retention policy?" msgstr "Какова наша политика хранения данных?" -#: lib/web/templates/api/privacy.html.eex:67 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:67 msgctxt "terms" msgid "You may irreversibly delete your account at any time." msgstr "Вы можете в любой момент безвозвратно удалить свою учетную запись." -#: lib/web/templates/api/privacy.html.eex:115 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:115 msgctxt "terms" msgid "Changes to our Privacy Policy" msgstr "Изменения в нашей Политике конфиденциальности" -#: lib/web/templates/api/privacy.html.eex:106 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:106 msgctxt "terms" msgid "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site." msgstr "" @@ -285,8 +285,8 @@ msgstr "" "Общий_регламент_по_защите_данных\">Общие правила защиты данных) не " "используйте этот сайт." -#: lib/web/templates/api/privacy.html.eex:109 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:109 msgctxt "terms" msgid "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site." msgstr "" @@ -296,30 +296,30 @@ msgstr "" "99s_Online_Privacy_Protection_Act\">Закон о защите конфиденциальности детей " "в Интернете) не используйте этот сайт." -#: lib/web/templates/api/privacy.html.eex:117 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:117 msgctxt "terms" msgid "If we decide to change our privacy policy, we will post those changes on this page." msgstr "" "Если мы решим изменить нашу политику конфиденциальности, то опубликуем " "изменения на этой странице." -#: lib/web/templates/api/privacy.html.eex:112 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:112 msgctxt "terms" msgid "Law requirements can be different if this server is in another jurisdiction." msgstr "" "Требования закона могут отличаться, если этот сервер находится в другой " "юрисдикции." -#: lib/web/templates/api/privacy.html.eex:103 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:103 msgctxt "terms" msgid "Site usage by children" msgstr "Использование сайта детьми" -#: lib/web/templates/api/privacy.html.eex:47 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:47 msgctxt "terms" msgid "The email address you provide may be used to send you information, updates and notifications about other people\n interacting with your content or sending you messages and to respond to inquiries, and/or other requests or\n questions." msgstr "" @@ -329,8 +329,8 @@ msgstr "" "также для ответа на запросы, просьбы или\n" " вопросы." -#: lib/web/templates/api/privacy.html.eex:45 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:45 msgctxt "terms" msgid "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban\n evasion or other violations." msgstr "" @@ -338,8 +338,8 @@ msgstr "" "адреса с другими известными, чтобы обнаружить обход бана\n" " или другие нарушения." -#: lib/web/templates/api/privacy.html.eex:43 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:43 msgctxt "terms" msgid "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to\n interact with other people's content and post your own content if you are logged in." msgstr "" @@ -348,92 +348,92 @@ msgstr "" " взаимодействовать с контентом других людей и размещать собственный " "контент, если вы вошли в систему." -#: lib/web/templates/api/privacy.html.eex:6 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:6 msgctxt "terms" msgid "What information do we collect?" msgstr "Какую информацию мы собираем?" -#: lib/web/email/user.ex:176 #, elixir-format +#: lib/web/email/user.ex:176 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon на %{instance}: подтвердите свой адрес электронной почты" -#: lib/web/email/user.ex:152 #, elixir-format +#: lib/web/email/user.ex:152 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon на %{instance}: адрес электронной почты изменен" -#: lib/web/email/notification.ex:47 #, elixir-format +#: lib/web/email/notification.ex:47 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Сегодня запланировано одно мероприятие" msgstr[1] "Сегодня запланировано %{nb_events} мероприятия" msgstr[2] "Сегодня запланировано %{nb_events} мероприятий" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "У вас сегодня одно мероприятие:" msgstr[1] "У вас сегодня %{total} мероприятия:" msgstr[2] "У вас сегодня %{total} мероприятий:" -#: lib/web/templates/email/group_invite.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_invite.text.eex:3 msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} только что пригласил вас присоединиться к их группе %{group}" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "Присоединяйтесь к нам!" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "Не забудь об участии в %{title}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Будь готов к %{title}" -#: lib/web/templates/email/group_invite.html.eex:59 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:59 msgid "See my groups" msgstr "Посмотреть мои группы" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:45 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Чтобы принять это приглашение, зайдите в свои группы." -#: lib/web/templates/email/before_event_notification.text.eex:5 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:5 msgid "View the event on: %{link}" msgstr "Посмотреть мероприятие на: %{link}" -#: lib/web/email/group.ex:33 #, elixir-format +#: lib/web/email/group.ex:33 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{Inviter} пригласил вас присоединиться к группе %{group}" -#: lib/web/email/notification.ex:71 #, elixir-format +#: lib/web/email/notification.ex:71 msgid "One event planned this week" msgid_plural "%{nb_events} events planned this week" msgstr[0] "На этой неделе запланировано одно мероприятие" msgstr[1] "На этой неделе запланировано %{nb_events} мероприятия" msgstr[2] "На этой неделе запланировано %{nb_events} мероприятий" -#: lib/web/email/notification.ex:93 #, elixir-format +#: lib/web/email/notification.ex:93 msgid "One participation request for event %{title} to process" msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" msgstr[0] "Одна заявка на участие в мероприятии %{title} ожидает одобрения" @@ -444,22 +444,22 @@ msgstr[2] "" "%{number_participation_requests} заявок на участие в мероприятии %{title} " "ожидают одобрения" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:38 #: lib/web/templates/email/notification_each_week.text.eex:3 -#, elixir-format msgid "You have one event this week:" msgid_plural "You have %{total} events this week:" msgstr[0] "У вас одно мероприятие на этой неделе:" msgstr[1] "На этой неделе у вас запланировано %{total} мероприятия:" msgstr[2] "На этой неделе у вас запланировано %{total} мероприятий:" -#: lib/service/metadata/utils.ex:52 #, elixir-format +#: lib/service/metadata/utils.ex:52 msgid "The event organizer didn't add any description." msgstr "Организатор мероприятия не добавил описания." -#: lib/web/templates/api/privacy.html.eex:54 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:54 msgctxt "terms" msgid "We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way algorithm." msgstr "" @@ -469,8 +469,8 @@ msgstr "" "между вашими приложениями и API защищены с помощью SSL/TLS, а ваш пароль " "хешируется с использованием надежного одностороннего алгоритма." -#: lib/web/templates/api/privacy.html.eex:94 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:94 msgctxt "terms" msgid "No. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety." msgstr "" @@ -482,20 +482,20 @@ msgstr "" "необходимо для соблюдения закона, обеспечения соблюдения политики нашего " "сайта или защиты наших или других прав, собственности или безопасности." -#: lib/web/templates/api/terms.html.eex:23 #, elixir-format +#: lib/web/templates/api/terms.html.eex:23 msgctxt "terms" msgid "Accepting these Terms" msgstr "Принятие настоящих Условий" -#: lib/web/templates/api/terms.html.eex:27 #, elixir-format +#: lib/web/templates/api/terms.html.eex:27 msgctxt "terms" msgid "Changes to these Terms" msgstr "Изменения в настоящих Условиях" -#: lib/web/templates/api/terms.html.eex:85 #, elixir-format +#: lib/web/templates/api/terms.html.eex:85 msgctxt "terms" msgid "A lot of the content on the Service is from you and others, and we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content." msgstr "" @@ -508,16 +508,16 @@ msgstr "" "возникающие в связи с использованием вами любого контента или вашего доверия " "к нему." -#: lib/web/templates/api/terms.html.eex:60 #, elixir-format +#: lib/web/templates/api/terms.html.eex:60 msgctxt "terms" msgid "Also, you agree that you will not do any of the following in connection with the Service or other users:" msgstr "" "Кроме того, вы соглашаетесь с тем, что не будете делать ничего из следующего " "в отношении Сервиса или других пользователей:" -#: lib/web/templates/api/terms.html.eex:65 #, elixir-format +#: lib/web/templates/api/terms.html.eex:65 msgctxt "terms" msgid "Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties." msgstr "" @@ -525,8 +525,8 @@ msgstr "" "ограничения скорости или другие функции, предназначенные для защиты Сервиса, " "пользователей Сервиса или третьих лиц." -#: lib/web/templates/api/terms.html.eex:64 #, elixir-format +#: lib/web/templates/api/terms.html.eex:64 msgctxt "terms" msgid "Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service;" msgstr "" @@ -534,16 +534,16 @@ msgstr "" "угрожать, преследовать или иным образом беспокоить других пользователей " "Сервиса;" -#: lib/web/templates/api/terms.html.eex:55 #, elixir-format +#: lib/web/templates/api/terms.html.eex:55 msgctxt "terms" msgid "Content that is illegal or unlawful, that would otherwise create liability;" msgstr "" "Контент, который является незаконным или повлечет за собой уголовную " "ответственность;" -#: lib/web/templates/api/terms.html.eex:56 #, elixir-format +#: lib/web/templates/api/terms.html.eex:56 msgctxt "terms" msgid "Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party;" msgstr "" @@ -551,40 +551,40 @@ msgstr "" "коммерческую тайну, авторское право, конфиденциальность, право на гласность " "или другие интеллектуальные и прочие права любой стороны;" -#: lib/web/templates/api/terms.html.eex:42 #, elixir-format +#: lib/web/templates/api/terms.html.eex:42 msgctxt "terms" msgid "Creating Accounts" msgstr "Создание учётных записей" -#: lib/web/templates/api/terms.html.eex:89 #, elixir-format +#: lib/web/templates/api/terms.html.eex:89 msgctxt "terms" msgid "Entire Agreement" msgstr "Полное согласие" -#: lib/web/templates/api/terms.html.eex:92 #, elixir-format +#: lib/web/templates/api/terms.html.eex:92 msgctxt "terms" msgid "Feedback" msgstr "Обратная связь" -#: lib/web/templates/api/terms.html.eex:83 #, elixir-format +#: lib/web/templates/api/terms.html.eex:83 msgctxt "terms" msgid "Hyperlinks and Third Party Content" msgstr "Гиперссылки и сторонний контент" -#: lib/web/templates/api/terms.html.eex:88 #, elixir-format +#: lib/web/templates/api/terms.html.eex:88 msgctxt "terms" msgid "If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service." msgstr "" "Если вы нарушите какое-либо из этих Условий, мы имеем право временно " "приостановить или полностью заблокировать вам доступ к Сервису." -#: lib/web/templates/api/terms.html.eex:63 #, elixir-format +#: lib/web/templates/api/terms.html.eex:63 msgctxt "terms" msgid "Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity;" msgstr "" @@ -592,8 +592,8 @@ msgstr "" "физического или юридического лица или иным образом искажать свою " "принадлежность к физическому или юридическому лицу;" -#: lib/web/templates/api/terms.html.eex:48 #, elixir-format +#: lib/web/templates/api/terms.html.eex:48 msgctxt "terms" msgid "Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness." msgstr "" @@ -602,26 +602,26 @@ msgstr "" "контент, который вы предоставляете Сервису, включая его законность, " "правдивость и адекватность." -#: lib/web/templates/api/terms.html.eex:39 #, elixir-format +#: lib/web/templates/api/terms.html.eex:39 msgctxt "terms" msgid "Privacy Policy" msgstr "Политика конфиденциальности" -#: lib/web/templates/api/terms.html.eex:95 #, elixir-format +#: lib/web/templates/api/terms.html.eex:95 msgctxt "terms" msgid "Questions & Contact Information" msgstr "Вопросы и контактная информация" -#: lib/web/templates/api/terms.html.eex:87 #, elixir-format +#: lib/web/templates/api/terms.html.eex:87 msgctxt "terms" msgid "Termination" msgstr "Завершение" -#: lib/web/templates/api/terms.html.eex:62 #, elixir-format +#: lib/web/templates/api/terms.html.eex:62 msgctxt "terms" msgid "Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service;" msgstr "" @@ -630,14 +630,14 @@ msgstr "" "Сервисом или который может повредить, вывести из строя, перегрузить или " "нарушить работу Сервиса;" -#: lib/web/templates/api/terms.html.eex:47 #, elixir-format +#: lib/web/templates/api/terms.html.eex:47 msgctxt "terms" msgid "Your Content & Conduct" msgstr "Ваш контент и ваши действия" -#: lib/web/templates/api/terms.html.eex:84 #, elixir-format +#: lib/web/templates/api/terms.html.eex:84 msgctxt "terms" msgid "%{instance_name} makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by %{instance_name} of the site. Use of any such linked website is at the user's own risk." msgstr "" @@ -649,8 +649,8 @@ msgstr "" "сайта. Ответственность за использование таких ссылок лежит на каждом " "пользователе." -#: lib/web/templates/api/terms.html.eex:68 #, elixir-format +#: lib/web/templates/api/terms.html.eex:68 msgctxt "terms" msgid "Finally, your use of the Service is also subject to acceptance of the instance's own specific rules regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended." msgstr "" @@ -659,16 +659,16 @@ msgstr "" "модерации. Нарушение этих правил также может привести к приостановке или " "блокировки вашей учетной записи." -#: lib/web/templates/api/terms.html.eex:81 #, elixir-format +#: lib/web/templates/api/terms.html.eex:81 msgctxt "terms" msgid "For full details about the Mobilizon software see here." msgstr "" "Для получения полной информации о Mobilizon смотреть тут." -#: lib/web/templates/api/terms.html.eex:18 #, elixir-format +#: lib/web/templates/api/terms.html.eex:18 msgctxt "terms" msgid "Here are the important things you need to know about accessing and using the %{instance_name} (%{instance_url}) website and service (collectively, \"Service\"). These are our terms of service (\"Terms\"). Please read them carefully." msgstr "" @@ -677,8 +677,8 @@ msgstr "" ">%{instance_url}) веб-сайта и сервиса (вместе именуемые \"Сервис\"). Это " "наши условия обслуживания (\"Условия\"). Пожалуйста, прочтите их внимательно." -#: lib/web/templates/api/terms.html.eex:33 #, elixir-format +#: lib/web/templates/api/terms.html.eex:33 msgctxt "terms" msgid "If we make major changes, we will notify our users in a clear and prominent manner. Minor changes may only be highlighted in the footer of our website. It is your responsibility to check the website regularly for changes to these Terms." msgstr "" @@ -687,8 +687,8 @@ msgstr "" "подвале нашего веб-сайта. Вы обязаны регулярно проверять веб-сайт на предмет " "изменений в настоящих Условиях." -#: lib/web/templates/api/terms.html.eex:53 #, elixir-format +#: lib/web/templates/api/terms.html.eex:53 msgctxt "terms" msgid "In order to make %{instance_name} a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:" msgstr "" @@ -696,16 +696,16 @@ msgstr "" "не публикуйте, не размещайте ссылки и не делайте доступными иным образом в " "нашем Сервисе любое из следующего:" -#: lib/web/templates/api/terms.html.eex:57 #, elixir-format +#: lib/web/templates/api/terms.html.eex:57 msgctxt "terms" msgid "Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and" msgstr "" "Личная информация третьих лиц (например, адреса, номера телефонов, адреса " "электронной почты, номера социального страхования и номера кредитных карт); и" -#: lib/web/templates/api/terms.html.eex:52 #, elixir-format +#: lib/web/templates/api/terms.html.eex:52 msgctxt "terms" msgid "Since Mobilizon is a distributed network, it is possible, depending on the visibility rules set to your content, that your content has been distributed to other Mobilizon instances. When you delete your content, we will request those other instances to also delete the content. Our responsibility on the content being deleted from those other instances ends here. If for some reason, some other instance does not delete the content, we cannot be held responsible." msgstr "" @@ -716,8 +716,8 @@ msgstr "" "контента на других узлах на этом заканчивается. Если по какой-то причине " "какой-либо другой узел не удаляет его, то мы не несем ответственности за это." -#: lib/web/templates/api/terms.html.eex:90 #, elixir-format +#: lib/web/templates/api/terms.html.eex:90 msgctxt "terms" msgid "These Terms constitute the entire agreement between you and %{instance_name} regarding the use of the Service, superseding any prior agreements between you and %{instance_name} relating to your use of the Service." msgstr "" @@ -726,8 +726,8 @@ msgstr "" "предыдущие соглашения между вами и %{instance_name}, касающиеся " "использования Сервиса." -#: lib/web/templates/api/terms.html.eex:80 #, elixir-format +#: lib/web/templates/api/terms.html.eex:80 msgctxt "terms" msgid "This Service runs on a Mobilizon instance. This source code is licensed under an AGPLv3 license which means you are allowed to and even encouraged to take the source code, modify it and use it." msgstr "" @@ -736,14 +736,14 @@ msgstr "" "license-v3-(agpl-3.0)\">AGPLv3, следовательно, вам разрешено и даже " "рекомендуется брать, изменять и использовать его." -#: lib/web/templates/api/terms.html.eex:58 #, elixir-format +#: lib/web/templates/api/terms.html.eex:58 msgctxt "terms" msgid "Viruses, corrupted data or other harmful, disruptive or destructive files or code." msgstr "Вирусы, трояны или другие вредоносные файлы или их исходный код." -#: lib/web/templates/api/terms.html.eex:51 #, elixir-format +#: lib/web/templates/api/terms.html.eex:51 msgctxt "terms" msgid "You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. Web server access logs might also be stored for some time in the system." msgstr "" @@ -752,29 +752,29 @@ msgstr "" "нашей системе или резервной копии в течение некоторого времени. Логи веб-" "сервера также могут некоторое время храниться в системе." -#: lib/web/templates/api/terms.html.eex:96 #, elixir-format +#: lib/web/templates/api/terms.html.eex:96 msgctxt "terms" msgid "Questions or comments about the Service may be directed to us at %{contact}" msgstr "" "Вопросы и отзывы о нашем Сервисе можно направлять нам по адресу %{contact}" -#: lib/web/templates/api/terms.html.eex:79 #, elixir-format +#: lib/web/templates/api/terms.html.eex:79 msgctxt "terms" msgid "Source code" msgstr "Исходный код" -#: lib/web/templates/api/terms.html.eex:93 #, elixir-format +#: lib/web/templates/api/terms.html.eex:93 msgctxt "terms" msgid "We love feedback. Please let us know what you think of the Service, these Terms and, in general, %{instance_name}." msgstr "" "Нам нравятся отзывы! Не стесняйтесь говорить, что вы думаете о Сервисе, " "настоящих Условиях и в целом о %{instance_name}." -#: lib/web/templates/api/terms.html.eex:74 #, elixir-format +#: lib/web/templates/api/terms.html.eex:74 msgctxt "terms" msgid "Instance administrators (and community moderators, given the relevant access) are responsible for monitoring and acting on flagged content and other user reports, and have the right and responsibility to remove or edit content that is not aligned to this Instance set of rules, or to suspend, block or ban (temporarily or permanently) any account, community, or instance for breaking these terms, or for other behaviours that they deem inappropriate, threatening, offensive, or harmful." msgstr "" @@ -786,16 +786,16 @@ msgstr "" "запись, сообщество или узел за нарушение этих условий или другое поведение, " "которое они считают неуместным, угрожающим, оскорбительным или вредным." -#: lib/web/templates/api/terms.html.eex:6 #, elixir-format +#: lib/web/templates/api/terms.html.eex:6 msgctxt "terms" msgid "%{instance_name} will not use or transmit or resell your personal data" msgstr "" "%{instance_name} не будет использовать, передавать или продавать ваши " "личные данные" -#: lib/web/templates/api/terms.html.eex:44 #, elixir-format +#: lib/web/templates/api/terms.html.eex:44 msgctxt "terms" msgid "If you discover or suspect any Service security breaches, please let us know as soon as possible. For security holes in the Mobilizon software itself, please contact its contributors directly." msgstr "" @@ -804,16 +804,16 @@ msgstr "" "уязвимостей в самом программном обеспечении Mobilizon обращайтесь напрямую " "к её разработчикам." -#: lib/web/templates/api/terms.html.eex:77 #, elixir-format +#: lib/web/templates/api/terms.html.eex:77 msgctxt "terms" msgid "Instance administrators should ensure that every community hosted on the instance is properly moderated according to the defined rules." msgstr "" "Администраторы узла должны убедиться, что каждое сообщество, размещенное на " "узле, адекватно модерируется в соответствии с определенными правилами." -#: lib/web/templates/api/terms.html.eex:98 #, elixir-format +#: lib/web/templates/api/terms.html.eex:98 msgctxt "terms" msgid "Originally adapted from the Diaspora* and App.net privacy policies, also licensed under CC BY-SA." msgstr "" @@ -822,8 +822,8 @@ msgstr "" "service\">App.net, которые находятся под лицензией CC BY-SA." -#: lib/web/templates/api/privacy.html.eex:119 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:119 msgctxt "terms" msgid "Originally adapted from the Mastodon and Discourse privacy policies, also licensed under CC BY-SA." msgstr "" @@ -832,115 +832,115 @@ msgstr "" "discourse\">Discourse, которые находятся под лицензией CC BY-SA." -#: lib/web/templates/api/terms.html.eex:3 #, elixir-format +#: lib/web/templates/api/terms.html.eex:3 msgctxt "terms" msgid "Short version" msgstr "Сокращённая версия" -#: lib/web/templates/api/terms.html.eex:9 #, elixir-format +#: lib/web/templates/api/terms.html.eex:9 msgctxt "terms" msgid "The service is provided without warranties and these terms may change in the future" msgstr "" "Услуги предоставляется без гарантий, и эти условия могут измениться в будущем" -#: lib/web/templates/api/privacy.html.eex:118 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:118 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 18, 2020." msgstr "" "Этот документ находится под лицензией CC BY-SA. Последний раз обновлялся 18 июня 2020." -#: lib/web/templates/api/terms.html.eex:97 #, elixir-format +#: lib/web/templates/api/terms.html.eex:97 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 22, 2020." msgstr "" "Этот документ находится под лицензиейCC BY-SA. Последний раз обновлялся 22 июня 2020." -#: lib/web/templates/api/terms.html.eex:8 #, elixir-format +#: lib/web/templates/api/terms.html.eex:8 msgctxt "terms" msgid "You must respect other people and %{instance_name}'s rules when using the service" msgstr "" "Вы должны уважать других людей и правила %{instance_name} используя " "этот сервис" -#: lib/web/templates/api/terms.html.eex:7 #, elixir-format +#: lib/web/templates/api/terms.html.eex:7 msgctxt "terms" msgid "You must respect the law when using %{instance_name}" msgstr "Вы должны соблюдать законы при использовании %{instance_name}" -#: lib/web/templates/api/terms.html.eex:5 #, elixir-format +#: lib/web/templates/api/terms.html.eex:5 msgctxt "terms" msgid "Your content is yours" msgstr "Ваши данные принадлежат вам" -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 msgid "Confirm my e-mail address" msgstr "Подтвердите мой адрес электронной почты" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Confirm your e-mail" msgstr "Подтвердите ваш адрес электронной почты" -#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "Привет! Вы только что зарегистрировались, чтобы присоединиться к мероприятию:" " « % {title} ». Пожалуйста, подтвердите адрес электронной почты, который вы " "указали:" +#, elixir-format #: lib/web/templates/email/email.html.eex:114 #: lib/web/templates/email/email.text.eex:8 -#, elixir-format msgid "Need help? Is something not working as expected?" msgstr "Нужна помощь? Что-то не работает?" -#: lib/web/templates/email/registration_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:38 msgid "You created an account on %{host} with this email address. You are one click away from activating it." msgstr "" "Вы создали на %{host} учётную запись с данным адресом электронной " "почты. Вы в одном клике от его активации." -#: lib/web/templates/email/report.html.eex:13 #, elixir-format +#: lib/web/templates/email/report.html.eex:13 msgid "New report on %{instance}" msgstr "Новый отчёт на %{instance}" -#: lib/web/templates/email/email_changed_old.html.eex:38 #, elixir-format +#: lib/web/templates/email/email_changed_old.html.eex:38 msgid "The email address for your account on %{host} is being changed to:" msgstr "" "Адрес электронной почты вашего аккаунта на %{host} будет изменен на:" -#: lib/web/templates/email/password_reset.html.eex:38 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:38 msgid "You requested a new password for your account on %{instance}." msgstr "" "Вы запросили новый пароль для своей учетной записи на %{instance}." -#: lib/web/templates/email/email.text.eex:5 #, elixir-format +#: lib/web/templates/email/email.text.eex:5 msgid "Please do not use it for real purposes." msgstr "Пожалуйста, используйте это только для тестовых целей." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:63 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:6 lib/web/templates/email/event_updated.html.eex:133 #: lib/web/templates/email/event_updated.text.eex:24 lib/web/templates/email/notification_each_week.html.eex:70 #: lib/web/templates/email/notification_each_week.text.eex:11 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 -#, elixir-format msgid "Would you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button." msgstr[0] "" @@ -955,9 +955,9 @@ msgstr[2] "" "просто перейдите на страницы мероприятий по указанным выше ссылкам и нажмите " "кнопку « Я участвую »." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:38 #: lib/web/templates/email/pending_participation_notification.text.eex:4 -#, elixir-format msgid "You have one pending attendance request to process:" msgid_plural "You have %{number_participation_requests} attendance requests to process:" msgstr[0] "У вас есть ожидающий рассмотрения запрос на участие:" @@ -968,66 +968,66 @@ msgstr[2] "" "У вас есть %{number_participation_requests} ожидающих рассмотрения запросов " "на участие:" -#: lib/web/templates/email/email.text.eex:11 #, elixir-format +#: lib/web/templates/email/email.text.eex:11 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} работает на платформе Mobilizon." -#: lib/web/templates/email/email.html.eex:142 #, elixir-format +#: lib/web/templates/email/email.html.eex:142 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} работает на платформе Mobilizon." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:13 #: lib/web/templates/email/pending_participation_notification.text.eex:1 -#, elixir-format msgid "A request is pending!" msgstr "Заявка находится на рассмотрении!" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "An event is upcoming!" msgstr "Скоро начало мероприятия!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:13 #: lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Confirm new email" msgstr "Подтвердите новый адрес электронной почты" -#: lib/web/templates/email/event_updated.html.eex:84 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:84 msgid "End" msgstr "Конец" -#: lib/web/templates/email/event_updated.text.eex:21 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:21 msgid "End %{ends_on}" msgstr "Конец %{ends_on}" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event update!" msgstr "Мероприятие обновлено!" -#: lib/web/templates/email/report.html.eex:88 #, elixir-format +#: lib/web/templates/email/report.html.eex:88 msgid "Flagged comments" msgstr "Помеченные комментарии" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "Good news: one of the event organizers just approved your request. Update your calendar, because you're on the guest list now!" msgstr "" "Хорошие новости: один из организаторов мероприятия только что одобрил вашу " "заявку. Обновите свой календарь, потому что теперь вы в списке гостей!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:38 #: lib/web/templates/email/email_changed_new.text.eex:3 -#, elixir-format msgid "Hi there! It seems like you wanted to change the email address linked to your account on %{instance}. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address." msgstr "" "Привет! Похоже, вы хотели изменить адрес электронной почты, связанный с " @@ -1035,16 +1035,16 @@ msgstr "" "это, нажмите кнопку ниже, чтобы подтвердить изменение. После этого вы " "сможете войти в %{instance} с новым адресом электронной почты." -#: lib/web/templates/email/email_changed_old.text.eex:3 #, elixir-format +#: lib/web/templates/email/email_changed_old.text.eex:3 msgid "Hi there! Just a quick note to confirm that the email address linked to your account on %{host} has been changed from this one to:" msgstr "" "Привет! Мы просто хотели сообщить вам, что адрес электронной почты, который " "ранее был связан с вашей учетной записью на %{host}, был изменен с этого на:" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:62 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "If you did not trigger this change yourself, it is likely that someone has gained access to your %{host} account. Please log in and change your password immediately. If you cannot login, contact the admin on %{host}." msgstr "" "Если вы не активировали это изменение самостоятельно, вероятно, кто-то " @@ -1052,174 +1052,174 @@ msgstr "" "немедленно измените свой пароль. Если вам не удается войти в систему, " "обратитесь к администратору %{host}." -#: lib/web/templates/email/password_reset.text.eex:12 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:12 msgid "If you didn't trigger the change yourself, please ignore this message. Your password won't be changed until you click the link above." msgstr "" "Если вы не активировали это изменение самостоятельно, проигнорируйте это " "сообщение. Ваш пароль не будет изменен, пока вы не нажмете ссылку выше." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:70 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:4 lib/web/templates/email/registration_confirmation.html.eex:45 -#, elixir-format msgid "If you didn't trigger this email, you may safely ignore it." msgstr "" "Если вы не оставляли этот запрос, пожалуйста, проигнорируйте данное письмо." +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:63 #: lib/web/templates/email/before_event_notification.text.eex:6 -#, elixir-format msgid "If you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgstr "" "Если вы хотите отменить свое участие, просто перейдите на страницу " "мероприятия по ссылке выше и нажмите кнопку « Я участвую »." +#, elixir-format #: lib/web/templates/email/email.html.eex:143 #: lib/web/templates/email/email.text.eex:11 -#, elixir-format msgid "Learn more about Mobilizon here!" msgstr "Узнайте больше о Mobilizon!" -#: lib/web/templates/email/event_updated.html.eex:94 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:94 msgid "Location" msgstr "Местонахождение" -#: lib/web/templates/email/event_updated.html.eex:104 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:104 msgid "Location address was removed" msgstr "Адрес местоположения был удален" +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:51 #: lib/web/templates/email/pending_participation_notification.text.eex:6 -#, elixir-format msgid "Manage pending requests" msgstr "Управление запросами в ожидании" +#, elixir-format #: lib/web/templates/email/registration_confirmation.html.eex:13 #: lib/web/templates/email/registration_confirmation.text.eex:1 -#, elixir-format msgid "Nearly there!" msgstr "Почти готово!" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email confirmation" msgstr "Подтверждение нового адреса электронной почты" -#: lib/web/templates/email/report.html.eex:106 #, elixir-format +#: lib/web/templates/email/report.html.eex:106 msgid "Reasons for report" msgstr "Причина жалобы" -#: lib/web/templates/email/report.html.eex:39 #, elixir-format +#: lib/web/templates/email/report.html.eex:39 msgid "Someone on %{instance} reported the following content for you to analyze:" msgstr "Кто-то на %{instance} сообщил вам о следующем содержимом:" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:13 #: lib/web/templates/email/event_participation_rejected.text.eex:1 -#, elixir-format msgid "Sorry! You're not going." msgstr "Очень жаль! Вы не будете участвовать." -#: lib/web/templates/email/event_updated.html.eex:74 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:74 msgid "Start" msgstr "Начало" -#: lib/web/templates/email/event_updated.text.eex:18 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:18 msgid "Start %{begins_on}" msgstr "Начало %{begins_on}" -#: lib/web/templates/email/event_updated.text.eex:3 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:3 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "В %{title} произошли изменения, поэтому мы решили сообщить вам об этом." +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:55 #: lib/web/templates/email/event_updated.text.eex:11 -#, elixir-format msgid "This event has been cancelled by its organizers. Sorry!" msgstr "Мероприятие отменено организаторами. Очень жаль!" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:51 #: lib/web/templates/email/event_updated.text.eex:7 -#, elixir-format msgid "This event has been confirmed" msgstr "Мероприятие подтверждено" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:53 #: lib/web/templates/email/event_updated.text.eex:9 -#, elixir-format msgid "This event has yet to be confirmed: organizers will let you know if they do confirm it." msgstr "" "Это мероприятие еще не подтверждено: организаторы сообщат вам, если " "подтвердят его." +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your request." msgstr "К сожалению, организаторы отклонили ваше участие." -#: lib/web/templates/email/email_changed_new.html.eex:51 #, elixir-format +#: lib/web/templates/email/email_changed_new.html.eex:51 msgid "Verify your email address" msgstr "Проверьте свой адрес электронной почты" -#: lib/web/templates/email/report.html.eex:126 #, elixir-format +#: lib/web/templates/email/report.html.eex:126 msgid "View report" msgstr "Смотреть отчёт" -#: lib/web/templates/email/report.text.eex:24 #, elixir-format +#: lib/web/templates/email/report.text.eex:24 msgid "View report:" msgstr "Смотреть отчёт:" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:58 #: lib/web/templates/email/event_participation_confirmed.html.eex:58 -#, elixir-format msgid "Visit event page" msgstr "Посетите страницу мероприятия" -#: lib/web/templates/email/event_updated.html.eex:121 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:121 msgid "Visit the updated event page" msgstr "Посетите обновленную страницу мероприятия" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "Visit the updated event page: %{link}" msgstr "Посетите обновленную страницу мероприятия: %{link}" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:13 #: lib/web/templates/email/notification_each_week.text.eex:1 -#, elixir-format msgid "What's up this week?" msgstr "Что будет на этой неделе?" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "What's up today?" msgstr "Что будет сегодня?" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:70 #: lib/web/templates/email/event_participation_approved.text.eex:11 lib/web/templates/email/event_participation_confirmed.html.eex:70 #: lib/web/templates/email/event_participation_confirmed.text.eex:6 -#, elixir-format msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button." msgstr "" "Если вы хотите обновить или отменить свое участие, просто перейдите на " "страницу мероприятия по ссылке выше и нажмите кнопку « Я участвую »." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:64 #: lib/web/templates/email/pending_participation_notification.text.eex:8 -#, elixir-format msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »." msgstr "" "Вы получили это письмо, потому что выбрали получение уведомлений об " @@ -1227,133 +1227,133 @@ msgstr "" "изменить настройки уведомлений в настройках своей учетной записи в разделе « " "Уведомления »." -#: lib/web/templates/email/event_participation_rejected.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:5 msgid "You issued a request to attend %{title}." msgstr "Вы подали заявку на участие в %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.text.eex:5 #: lib/web/templates/email/event_participation_confirmed.text.eex:3 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Вы недавно подали заявку на присоединение к %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:13 #: lib/web/templates/email/event_participation_confirmed.html.eex:13 lib/web/templates/email/event_participation_confirmed.text.eex:1 -#, elixir-format msgid "You're going!" msgstr "Вы примете участие!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:64 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" "Если вы не активировали изменение самостоятельно, проигнорируйте это " "сообщение." -#: lib/web/templates/email/email.html.eex:89 #, elixir-format +#: lib/web/templates/email/email.html.eex:89 msgid "Please do not use it for real purposes." msgstr "Пожалуйста, используйте это только для тестовых целей." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:45 #: lib/web/templates/email/group_member_removal.text.eex:5 -#, elixir-format msgid "If you feel this is an error, you may contact the group's administrators so that they can add you back." msgstr "" "Если вы считаете, что это ошибка, вы можете связаться с администраторами " "группы, чтобы они добавили вас обратно." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:13 #: lib/web/templates/email/group_member_removal.text.eex:1 -#, elixir-format msgid "So long, and thanks for the fish!" msgstr "Всего хорошего, и спасибо за рыбу!" -#: lib/web/email/group.ex:63 #, elixir-format +#: lib/web/email/group.ex:63 msgid "You have been removed from group %{group}" msgstr "Вас исключили из группы %{group}" -#: lib/web/templates/email/group_member_removal.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_member_removal.text.eex:3 msgid "You have been removed from group %{group}. You will not be able to access this group's private content anymore." msgstr "" "Вас исключили из группы %{group}. Вы больше не сможете получить доступ к " "приватному контенту этой группы." -#: lib/web/templates/email/group_invite.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:38 msgid "%{inviter} just invited you to join their group %{link_start}%{group}%{link_end}" msgstr "" "%{inviter} только что пригласил вас присоединиться к их группе " "%{link_start}%{group}%{link_end}" -#: lib/web/templates/email/group_member_removal.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_member_removal.html.eex:38 msgid "You have been removed from group %{link_start}%{group}%{link_end}. You will not be able to access this group's private content anymore." msgstr "" "Вас исключили из группы %{link_start}%{group}%{link_end}. Вы больше " "не сможете получить доступ к приватному контенту этой группы." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:54 #: lib/web/templates/email/group_suspension.text.eex:7 -#, elixir-format msgid "As this group was located on another instance, it will continue to work for other instances than this one." msgstr "" "Поскольку эта группа находилась на другом узле, она все равно будет работать " "на других узлах, кроме этого." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:46 #: lib/web/templates/email/group_suspension.text.eex:5 -#, elixir-format msgid "As this group was located on this instance, all of it's data has been irretrievably deleted." msgstr "" "Поскольку эта группа находилась на этом узле, все её содержимое было " "безвозвратно удалено." +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:38 #: lib/web/templates/email/group_deletion.text.eex:3 -#, elixir-format msgid "The administrator %{author} deleted group %{group}. All of the group's events, discussions, posts and todos have been deleted." msgstr "" "Администратор %{author} удалил группу %{group}. Все мероприятия, обсуждения, " "сообщения и записи связанные с ней были удалены." +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:13 #: lib/web/templates/email/group_suspension.text.eex:1 -#, elixir-format msgid "The group %{group} has been suspended on %{instance}!" msgstr "Группа %{group} заблокирована на %{instance}!" +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:13 #: lib/web/templates/email/group_deletion.text.eex:1 -#, elixir-format msgid "The group %{group} was deleted on %{instance}!" msgstr "Группа %{group} удалена на %{instance}!" +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:38 #: lib/web/templates/email/group_suspension.text.eex:3 -#, elixir-format msgid "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group." msgstr "" "Команда модераторов вашего узла приняла решение приостановить работу " "%{group_name} (%{group_address}). Вы больше не являетесь участником этой " "группы." -#: lib/web/email/group.ex:136 #, elixir-format +#: lib/web/email/group.ex:136 msgid "The group %{group} has been deleted on %{instance}" msgstr "Группа %{group} удалена на %{instance}" -#: lib/web/email/group.ex:97 #, elixir-format +#: lib/web/email/group.ex:97 msgid "The group %{group} has been suspended on %{instance}" msgstr "Группа %{group} заблокирована на %{instance}" -#: lib/web/templates/api/terms.html.eex:24 #, elixir-format +#: lib/web/templates/api/terms.html.eex:24 msgctxt "terms" msgid "By accessing or using the Service, this means you agree to be bound by all the terms below. If these terms are in any way unclear, please let us know by contacting %{contact}." msgstr "" @@ -1361,8 +1361,8 @@ msgstr "" "ниже условиями. Если некоторые из этих условий вам неясны, сообщите нам об " "этом, связавшись с %{contact}." -#: lib/web/templates/api/terms.html.eex:40 #, elixir-format +#: lib/web/templates/api/terms.html.eex:40 msgctxt "terms" msgid "For information about how we collect and use information about users of the Service, please check our privacy policy." msgstr "" @@ -1370,22 +1370,22 @@ msgstr "" "пользователях Сервиса, ознакомьтесь с нашей политикой " "конфиденциальности." -#: lib/web/templates/api/terms.html.eex:36 #, elixir-format +#: lib/web/templates/api/terms.html.eex:36 msgctxt "terms" msgid "If you continue to use the Service after the revised Terms go into effect, you accept the revised Terms." msgstr "" "Если вы продолжите использовать Сервис после вступления в силу измененных " "Условий, значит вы соглашаетесь с ними." -#: lib/web/templates/api/privacy.html.eex:78 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:78 msgctxt "terms" msgid "If you delete this information, you need to login again." msgstr "Если вы удалите эту информацию, вам придётся снова войти в систему." -#: lib/web/templates/api/privacy.html.eex:80 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:80 msgctxt "terms" msgid "If you're not connected, we don't store any information on your device, unless you participate in an event anonymously. In this specific case we store the hash of an unique identifier for the event and participation status in your browser so that we may display participation status. Deleting this information will only stop displaying participation status in your browser." msgstr "" @@ -1395,31 +1395,31 @@ msgstr "" "идентификатора мероприятия и статус участия. Удаление этой информации " "приведет только к прекращению отображения статуса участия в браузере." -#: lib/web/templates/api/privacy.html.eex:87 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:87 msgctxt "terms" msgid "Note: This information is stored in your localStorage and not your cookies." msgstr "" "Примечание: Эта информация хранится в вашем локальном хранилище, а не в " "куках." -#: lib/web/templates/api/terms.html.eex:71 #, elixir-format +#: lib/web/templates/api/terms.html.eex:71 msgctxt "terms" msgid "Our responsibility" msgstr "Наша ответственность" -#: lib/web/templates/api/privacy.html.eex:61 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:61 msgctxt "terms" msgid "Retain server logs containing the IP address of all requests to this server, insofar as such logs are kept, no more than 90 days." msgstr "" "Хранить логи сервера, содержащие IP-адреса всех запросов к этому серверу, " "если таковые имеются, не более 90 дней." +#, elixir-format #: lib/web/templates/api/privacy.html.eex:3 #: lib/web/templates/api/terms.html.eex:15 -#, elixir-format msgctxt "terms" msgid "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We have provided a glossary to help you understand them better." msgstr "" @@ -1427,8 +1427,8 @@ msgstr "" "тексте, могут охватывать трудные для понимания концепции. Мы подготовили глоссарий, чтобы помочь вам лучше их освоить." -#: lib/web/templates/api/terms.html.eex:45 #, elixir-format +#: lib/web/templates/api/terms.html.eex:45 msgctxt "terms" msgid "We are not liable for any loss you may incur as a result of someone else using your email or password, either with or without your knowledge." msgstr "" @@ -1436,8 +1436,8 @@ msgstr "" "результате использования кем-либо вашего адреса электронной почты или " "пароля, с вашего ведома или без него." -#: lib/web/templates/api/terms.html.eex:50 #, elixir-format +#: lib/web/templates/api/terms.html.eex:50 msgctxt "terms" msgid "We cannot be held responsible should a programming or administrative error make your content visible to a larger audience than intended. Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service." msgstr "" @@ -1447,8 +1447,8 @@ msgstr "" "права на контент, который вы публикуете, ссылаетесь или иным образом делаете " "доступным на Сервисе или через него." -#: lib/web/templates/api/privacy.html.eex:10 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:10 msgctxt "terms" msgid "We collect information from you when you register on this instance and gather data when you participate in the platform by reading, writing, and interacting with content shared here. If you register on this instance, you will be asked to enter an email address, a password (hashed) and at least an username. Your email address will be verified by an email containing a unique link. Once the link is activated, we know you control that email address. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly. You may however visit this instance without registering." msgstr "" @@ -1465,16 +1465,16 @@ msgstr "" "отображаемое имя, биография, аватарка и логотип всегда общедоступны. " "Однако вы можете пользоваться этим узел без регистрации." -#: lib/web/templates/api/terms.html.eex:30 #, elixir-format +#: lib/web/templates/api/terms.html.eex:30 msgctxt "terms" msgid "We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature." msgstr "" "Мы оставляем за собой право изменять эти Условия в любое время. Например, " "нам может потребоваться сделать это при добавлении новой функции." -#: lib/web/templates/api/terms.html.eex:20 #, elixir-format +#: lib/web/templates/api/terms.html.eex:20 msgctxt "terms" msgid "When we say “we”, “our”, or “us” in this document, we are referring to the owners, operators and administrators of this Mobilizon instance. The Mobilizon software is provided by the team of Mobilizon contributors, supported by Framasoft, a French not-for-profit organization advocating for Free/Libre Software. Unless explicitly stated, this Mobilizon instance is an independent service using Mobilizon's source code. You may find more information about this instance on the \"About this instance\" page." msgstr "" @@ -1487,8 +1487,8 @@ msgstr "" "использующей исходный код Mobilizon. Дополнительную информацию об этом узле " "можно найти на странице «Об этом узле»." -#: lib/web/templates/api/terms.html.eex:43 #, elixir-format +#: lib/web/templates/api/terms.html.eex:43 msgctxt "terms" msgid "When you create an account you agree to maintain the security and confidentiality of your password and accept all risks of unauthorized access to your account data and any other information you provide to %{instance_name}." msgstr "" @@ -1497,8 +1497,8 @@ msgstr "" "доступа к данным вашей учетной записи и любой другой информации, которую вы " "предоставляете %{instance_name}." -#: lib/web/templates/api/terms.html.eex:49 #, elixir-format +#: lib/web/templates/api/terms.html.eex:49 msgctxt "terms" msgid "When you post, link or otherwise make available content to the Service, you grant us the right and license to display and distribute your content on or through the Service (including via applications). We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. The displaying and distribution of your content happens only according to the visibility rules you have set for the content. We will not modify the visibility of the content you have set." msgstr "" @@ -1511,8 +1511,8 @@ msgstr "" "в соответствии с правилами видимости, которые вы установили для него. Мы не " "будем изменять видимость установленного вами контента." -#: lib/web/templates/api/privacy.html.eex:19 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:19 msgctxt "terms" msgid "Your events and comments are delivered to other instances that follow your own, meaning they are delivered to different instances and copies are stored there. When you delete events or comments, this is likewise delivered to these other instances. All interactions related to event features - such as joining an event - or group features - such as managing resources - are federated as well. Please keep in mind that the operators of the instance and any receiving instances may view such messages and information, and that recipients may screenshot, copy or otherwise re-share them." msgstr "" @@ -1526,8 +1526,8 @@ msgstr "" "что получатели могут делать снимки экрана, копировать или иным образом " "повторно делиться ими." -#: lib/web/templates/api/privacy.html.eex:99 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:99 msgctxt "terms" msgid "Your content may be downloaded by other instances in the network. Your public events and comments are delivered to the instances following your own instance. Content created through a group is forwarded to all the instances of all the members of the group, insofar as these members reside on a different instance than this one." msgstr "" @@ -1536,208 +1536,213 @@ msgstr "" "Групповой контент, отправляется на узлы всех участников группы, если эти " "участники находятся на отличном от этого узле." -#: lib/web/templates/email/event_participation_confirmed.text.eex:4 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.text.eex:4 msgid "You have confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Вы подтвердили свое участие. Обновите свой календарь, потому что теперь вы в " "списке гостей!" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:38 #: lib/web/templates/email/event_participation_confirmed.html.eex:38 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Вы недавно запросили участие в мероприятии %{title}." -#: lib/web/email/participation.ex:91 #, elixir-format +#: lib/web/email/participation.ex:91 msgid "Your participation to event %{title} has been confirmed" msgstr "Ваше участие в мероприятии %{title} одобрено" -#: lib/web/templates/email/report.html.eex:41 #, elixir-format +#: lib/web/templates/email/report.html.eex:41 msgid "%{reporter} reported the following content." msgstr "%{reporter} сообщил о следующем содержимом." -#: lib/web/templates/email/report.text.eex:5 #, elixir-format +#: lib/web/templates/email/report.text.eex:5 msgid "Group %{group} was reported" msgstr "Группа %{group} сообщила" -#: lib/web/templates/email/report.html.eex:51 #, elixir-format +#: lib/web/templates/email/report.html.eex:51 msgid "Group reported" msgstr "Группа сообщила" -#: lib/web/templates/email/report.text.eex:7 #, elixir-format +#: lib/web/templates/email/report.text.eex:7 msgid "Profile %{profile} was reported" msgstr "Профиль %{profile} сообщил" -#: lib/web/templates/email/report.html.eex:56 #, elixir-format +#: lib/web/templates/email/report.html.eex:56 msgid "Profile reported" msgstr "Профиль сообщил" -#: lib/web/templates/email/event_participation_confirmed.html.eex:45 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.html.eex:45 msgid "You have now confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Вы подтвердили свое участие. Обновите свой календарь, потому что теперь вы в " "списке гостей!" -#: lib/mobilizon/posts/post.ex:94 #, elixir-format +#: lib/mobilizon/posts/post.ex:94 msgid "A text is required for the post" msgstr "Для публикации требуется текст" -#: lib/mobilizon/posts/post.ex:93 #, elixir-format +#: lib/mobilizon/posts/post.ex:93 msgid "A title is required for the post" msgstr "Для публикации требуется заголовок" -#: lib/web/templates/email/instance_follow.text.eex:3 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:3 msgid "%{name} (%{domain}) just requested to follow your instance." msgstr "%{name} (%{domain}) только что попросил подписаться на ваш узел." -#: lib/web/email/follow.ex:54 #, elixir-format +#: lib/web/email/follow.ex:54 msgid "%{name} requests to follow your instance" msgstr "%{name} просит подписаться на ваш узел" -#: lib/web/templates/email/instance_follow.html.eex:38 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:38 msgid "%{name} (%{domain}) just requested to follow your instance. If you accept, this instance will receive all of your instance's public events." msgstr "" "%{name} (%{domain}) только что просил подписаться на ваш узел. Если " "вы согласитесь, то этот узел будет получать все публичные события вашего " "узла." -#: lib/web/templates/email/instance_follow.text.eex:4 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:4 msgid "If you accept, this instance will receive all of your public events." msgstr "" "Если вы согласитесь, то этот узел будет получать все публичные события " "вашего узла." -#: lib/web/email/follow.ex:48 #, elixir-format +#: lib/web/email/follow.ex:48 msgid "Instance %{name} (%{domain}) requests to follow your instance" msgstr "Узел %{name} (%{domain}) просит подписаться на ваш узел" -#: lib/web/templates/email/instance_follow.html.eex:66 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:66 msgid "See the federation settings" msgstr "Смотри настройки федерализации" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:52 #: lib/web/templates/email/instance_follow.text.eex:6 -#, elixir-format msgid "To accept this invitation, head over to the instance's admin settings." msgstr "Чтобы принять это приглашение, перейдите в админку узла." +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:13 #: lib/web/templates/email/instance_follow.text.eex:1 -#, elixir-format msgid "Want to connect?" msgstr "Вы хотите подключиться?" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:45 #: lib/web/templates/email/instance_follow.text.eex:5 -#, elixir-format msgid "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." msgstr "" "Примечание: Подписка %{name} (%{domain}) на вас не обязательно означает, что " "вы подписаны на этот узел, но вы также можете запросить подписку на него." -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "Привет! Вы только что зарегистрировались для участия в этом мероприятии: « " "%{title} ». Пожалуйста, подтвердите адрес электронной почты, который " "вы указали:" -#: lib/web/templates/email/event_participation_rejected.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.html.eex:38 msgid "You issued a request to attend %{title}." msgstr "Вы отправили запрос на участие в %{title}." -#: lib/web/templates/email/event_updated.html.eex:64 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Название мероприятия" -#: lib/web/templates/email/event_updated.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "" "В %{title} были внесены изменения, поэтому мы решили сообщить вам об " "этом." -#: lib/web/templates/error/500_page.html.eex:7 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 msgid "This page is not correct" msgstr "Эта страница недействительна" -#: lib/web/templates/error/500_page.html.eex:50 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:50 msgid "We're sorry, but something went wrong on our end." msgstr "Сожалеем, но с нашей стороны что-то пошло не так." +#, elixir-format #: lib/web/templates/email/email.html.eex:88 #: lib/web/templates/email/email.text.eex:4 -#, elixir-format msgid "This is a demonstration site to test Mobilizon." msgstr "Это демонстрационная площадка для тестирования Mobilizon." +#, elixir-format #: lib/service/metadata/actor.ex:53 lib/service/metadata/actor.ex:60 #: lib/service/metadata/instance.ex:54 lib/service/metadata/instance.ex:60 -#, elixir-format msgid "%{name}'s feed" msgstr "Лента %{name}" -#: lib/service/export/feed.ex:120 #, elixir-format +#: lib/service/export/feed.ex:120 msgid "%{actor}'s private events feed on %{instance}" msgstr "Лента приватных мероприятий от %{actor} на %{instance}" -#: lib/service/export/feed.ex:115 #, elixir-format +#: lib/service/export/feed.ex:115 msgid "%{actor}'s public events feed on %{instance}" msgstr "Лента публичных мероприятий от %{actor} на %{instance}" -#: lib/service/export/feed.ex:220 #, elixir-format +#: lib/service/export/feed.ex:220 msgid "Feed for %{email} on %{instance}" msgstr "Лента для %{email} на %{instance}" -#: lib/web/templates/error/500_page.html.eex:57 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:57 msgid "If the issue persists, you may contact the server administrator at %{contact}." msgstr "" "Если проблема не исчезнет, вы можете связаться с администратором сервера по " "адресу %{contact}." -#: lib/web/templates/error/500_page.html.eex:55 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:55 msgid "If the issue persists, you may try to contact the server administrator." msgstr "" "Если проблема не исчезнет, вы можете попытаться связаться с администратором " "сервера." -#: lib/web/templates/error/500_page.html.eex:68 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:68 msgid "Technical details" msgstr "Технические подробности" -#: lib/web/templates/error/500_page.html.eex:52 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:52 msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Сервер Mobilizon %{instance} временно недоступен." -#: lib/service/export/feed.ex:73 #, elixir-format +#: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "Публичная лента для %{instance}" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/activity.po b/priv/gettext/sv/LC_MESSAGES/activity.po new file mode 100644 index 00000000..7d8883c9 --- /dev/null +++ b/priv/gettext/sv/LC_MESSAGES/activity.po @@ -0,0 +1,231 @@ +## "msgid"s in this file come from POT (.pot) files. +## +## Do not add, change, or remove "msgid"s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use "mix gettext.extract --merge" or "mix gettext.merge" +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: sv\n" +"Plural-Forms: nplurals=2\n" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +msgid "%{member} accepted the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +msgid "%{member} rejected the invitation to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +msgid "%{member} requested to join the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +msgid "%{member} was invited by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +msgid "%{profile} added the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +msgid "%{profile} archived the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 +msgid "%{profile} created the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +msgid "%{profile} created the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:1 +msgid "%{profile} created the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +msgid "%{profile} created the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +msgid "%{profile} deleted the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +msgid "%{profile} deleted the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +msgid "%{profile} deleted the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +msgid "%{profile} excluded member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +msgid "%{profile} moved the folder %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +msgid "%{profile} moved the resource %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +msgid "%{profile} quit the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +msgid "%{profile} renamed the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 +#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 +msgid "%{profile} replied to the discussion %{discussion}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_group_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_group_activity_item.text.eex:7 +msgid "%{profile} updated the group %{group}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +msgid "%{profile} updated the member %{member}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +msgid "The event %{event} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +msgid "The event %{event} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +msgid "The event %{event} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +msgid "The post %{post} was created by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +msgid "The post %{post} was deleted by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +msgid "The post %{post} was updated by %{profile}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 +#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +msgid "%{member} joined the group." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +msgid "%{profile} posted a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 +#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +msgid "%{profile} replied to a comment on the event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.text.eex:21 +msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.text.eex:17 +msgid "View one more activity" +msgid_plural "View %{count} more activities" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:38 +#: lib/web/templates/email/email_direct_activity.text.eex:4 +msgid "There has been an activity!" +msgid_plural "There has been some activity!" +msgstr[0] "" +msgstr[1] "" diff --git a/priv/gettext/sv/LC_MESSAGES/default.po b/priv/gettext/sv/LC_MESSAGES/default.po index 3485a6a9..b6b41c6b 100644 --- a/priv/gettext/sv/LC_MESSAGES/default.po +++ b/priv/gettext/sv/LC_MESSAGES/default.po @@ -1432,3 +1432,8 @@ msgstr "" #, elixir-format msgid "Public feed for %{instance}" msgstr "" + +#, elixir-format +#: lib/web/email/activity.ex:25 +msgid "Activity notification for %{instance}" +msgstr "" diff --git a/test/service/workers/activity_builder_test.exs b/test/service/workers/activity_builder_test.exs new file mode 100644 index 00000000..955f989b --- /dev/null +++ b/test/service/workers/activity_builder_test.exs @@ -0,0 +1,61 @@ +defmodule Mobilizon.Service.Workers.ActivityBuilderTest do + @moduledoc """ + Test the ActivityBuilder module + """ + + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Workers.ActivityBuilder + alias Mobilizon.Users.User + alias Mobilizon.Web.Email.Activity, as: EmailActivity + + use Mobilizon.DataCase + use Bamboo.Test + + import Mobilizon.Factory + + describe "Sends direct email notification to users" do + test "if the user has a profile member of a group" do + %User{} = user = insert(:user) + + %Actor{} = actor = insert(:actor, user: user) + + %Actor{type: :Group} = group = insert(:group) + insert(:member, parent: group, actor: actor, role: :member) + + %Activity{} = + activity = insert(:mobilizon_activity, group: group, inserted_at: DateTime.utc_now()) + + assert :ok == ActivityBuilder.notify_activity(activity) + + assert_delivered_email( + EmailActivity.direct_activity( + user.email, + [activity] + ) + ) + end + + test "unless if the user has a profile member of a group" do + %User{} = user = insert(:user) + + %Actor{} = actor = insert(:actor, user: user) + + %Actor{type: :Group} = group = insert(:group) + insert(:member, parent: group, actor: actor, role: :member) + + %Activity{} = + activity = + insert(:mobilizon_activity, group: group, inserted_at: DateTime.utc_now(), author: actor) + + assert :ok == ActivityBuilder.notify_activity(activity) + + refute_delivered_email( + EmailActivity.direct_activity( + user.email, + [activity] + ) + ) + end + end +end From 4f6e203ced6f3521123120c775f1f2b2c9a11b28 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Wed, 5 May 2021 18:28:10 +0200 Subject: [PATCH 02/67] Fix MEMBER_JOINED activity type not being handled in activity timeline Signed-off-by: Thomas Citharel --- js/src/components/Activity/MemberActivityItem.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/js/src/components/Activity/MemberActivityItem.vue b/js/src/components/Activity/MemberActivityItem.vue index b81f0bfd..c03c21b9 100644 --- a/js/src/components/Activity/MemberActivityItem.vue +++ b/js/src/components/Activity/MemberActivityItem.vue @@ -83,6 +83,8 @@ export default class MemberActivityItem extends mixins(ActivityMixin) { return "You added the member {member}."; } return "{profile} added the member {member}."; + case ActivityMemberSubject.MEMBER_JOINED: + return "{member} joined the group."; case ActivityMemberSubject.MEMBER_UPDATED: if (this.subjectParams.member_role && this.subjectParams.old_role) { return this.roleUpdate; From 9f5e3a39ecf2a061828b062a12140a7ef6d96182 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 6 May 2021 12:27:04 +0200 Subject: [PATCH 03/67] Add Push notifications backend support Signed-off-by: Thomas Citharel --- lib/graphql/resolvers/push_subscription.ex | 49 ++++++++++++ lib/graphql/schema/users/push_subscription.ex | 34 +++++++++ lib/mobilizon/users/push_subscription.ex | 49 ++++++++++++ lib/mobilizon/users/setting.ex | 9 ++- lib/mobilizon/users/users.ex | 76 ++++++++++++++++++- lib/service/notifier/email.ex | 63 +++++++++++++-- lib/service/notifier/notifier.ex | 6 +- lib/service/notifier/push.ex | 22 +++--- lib/service/workers/activity_builder.ex | 4 +- lib/web/email/activity.ex | 5 +- .../email/email_direct_activity.html.eex | 2 + .../email/email_direct_activity.text.eex | 2 +- ...on_and_last_notification_date_settings.exs | 10 +++ ...6080303_create_user_push_subscriptions.exs | 16 ++++ 14 files changed, 321 insertions(+), 26 deletions(-) create mode 100644 lib/graphql/resolvers/push_subscription.ex create mode 100644 lib/graphql/schema/users/push_subscription.ex create mode 100644 lib/mobilizon/users/push_subscription.ex create mode 100644 priv/repo/migrations/20210505172402_add_group_notification_and_last_notification_date_settings.exs create mode 100644 priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs diff --git a/lib/graphql/resolvers/push_subscription.ex b/lib/graphql/resolvers/push_subscription.ex new file mode 100644 index 00000000..f8b40a9e --- /dev/null +++ b/lib/graphql/resolvers/push_subscription.ex @@ -0,0 +1,49 @@ +defmodule Mobilizon.GraphQL.Resolvers.PushSubscription do + @moduledoc """ + Handles the push subscriptions-related GraphQL calls. + """ + + alias Mobilizon.Users + alias Mobilizon.Storage.Page + alias Mobilizon.Users.{PushSubscription, User} + + @doc """ + List all of an user's registered push subscriptions + """ + def list_user_push_subscriptions(_parent, %{page: page, limit: limit}, %{ + context: %{current_user: %User{id: user_id}} + }) do + %Page{} = page = Users.list_user_push_subscriptions(user_id, page, limit) + {:ok, page} + end + + def list_user_push_subscriptions(_parent, _args, _resolution), do: {:error, :unauthenticated} + + @doc """ + Register a push subscription + """ + def register_push_subscription(_parent, args, %{ + context: %{current_user: %User{id: user_id}} + }) do + Users.create_push_subscription(Map.put(args, :user_id, user_id)) + end + + @spec unregister_push_subscription(map(), map(), map()) :: + {:ok, PushSubscription.t()} | {:error, :unauthorized} | {:error, :not_found} + def unregister_push_subscription(_parent, %{id: push_subscription_id}, %{ + context: %{current_user: %User{id: user_id}} + }) do + with %PushSubscription{user: %User{id: push_subscription_user_id}} = push_subscription <- + Users.get_push_subscription(push_subscription_id), + {:user_owns_push_subscription, true} <- + {:user_owns_push_subscription, push_subscription_user_id == user_id} do + Users.delete_push_subscription(push_subscription) + else + {:user_owns_push_subscription, false} -> + {:error, :unauthorized} + + nil -> + {:error, :not_found} + end + end +end diff --git a/lib/graphql/schema/users/push_subscription.ex b/lib/graphql/schema/users/push_subscription.ex new file mode 100644 index 00000000..43376b44 --- /dev/null +++ b/lib/graphql/schema/users/push_subscription.ex @@ -0,0 +1,34 @@ +defmodule Mobilizon.GraphQL.Schema.Users.PushSubscription do + @moduledoc """ + Schema representation for PushSubscription + """ + use Absinthe.Schema.Notation + alias Mobilizon.GraphQL.Resolvers.PushSubscription + + @desc """ + An object representing the keys for a push subscription + """ + input_object :push_subscription_keys do + field(:p256dh, non_null(:string)) + field(:auth, non_null(:string)) + end + + object :push_queries do + field :list_push_subscriptions, :paginated_push_subscription_list do + resolve(&PushSubscription.list_user_push_subscriptions/3) + end + end + + object :push_mutations do + field :register_push_mutation, :string do + arg(:endpoint, non_null(:string)) + arg(:keys, non_null(:push_subscription_keys)) + resolve(&PushSubscription.register_push_subscription/3) + end + + field :unregister_push_mutation, :string do + arg(:id, non_null(:id)) + resolve(&PushSubscription.unregister_push_subscription/3) + end + end +end diff --git a/lib/mobilizon/users/push_subscription.ex b/lib/mobilizon/users/push_subscription.ex new file mode 100644 index 00000000..0ea7fa77 --- /dev/null +++ b/lib/mobilizon/users/push_subscription.ex @@ -0,0 +1,49 @@ +defmodule Mobilizon.Users.PushSubscription do + use Ecto.Schema + alias Mobilizon.Users.User + import Ecto.Changeset + + schema "user_push_subscriptions" do + field(:digest, :string) + belongs_to(:user, User) + + embeds_one :data, Data, on_replace: :delete do + field(:endpoint, :string) + + embeds_one :keys, Keys, on_replace: :delete do + field(:auth, :string) + field(:p256dh, :string) + end + end + + timestamps() + end + + @doc false + def changeset(push_subscription, attrs) do + push_subscription + |> cast(attrs, [:user_id]) + |> cast_embed(:data, with: &cast_data/2) + |> put_change(:digest, compute_digest(attrs.data)) + |> validate_required([:digest, :user_id, :data]) + end + + defp cast_data(schema, attrs) do + schema + |> cast(attrs, [:endpoint]) + |> cast_embed(:keys, with: &cast_keys/2) + |> validate_required([:endpoint, :keys]) + end + + defp cast_keys(schema, attrs) do + schema + |> cast(attrs, [:auth, :p256dh]) + |> validate_required([:auth, :p256dh]) + end + + defp compute_digest(data) do + :sha256 + |> :crypto.hash(data) + |> Base.encode16() + end +end diff --git a/lib/mobilizon/users/setting.ex b/lib/mobilizon/users/setting.ex index 38d76281..b4f7d01d 100644 --- a/lib/mobilizon/users/setting.ex +++ b/lib/mobilizon/users/setting.ex @@ -14,6 +14,8 @@ defmodule Mobilizon.Users.Setting do notification_before_event: boolean, notification_pending_participation: NotificationPendingNotificationDelay.t(), notification_pending_membership: NotificationPendingNotificationDelay.t(), + group_notifications: NotificationPendingNotificationDelay.t(), + last_notification_sent: DateTime.t(), user: User.t() } @@ -25,7 +27,9 @@ defmodule Mobilizon.Users.Setting do :notification_each_week, :notification_before_event, :notification_pending_participation, - :notification_pending_membership + :notification_pending_membership, + :group_notifications, + :last_notification_sent ] @attrs @required_attrs ++ @optional_attrs @@ -47,6 +51,9 @@ defmodule Mobilizon.Users.Setting do default: :one_day ) + field(:group_notifications, NotificationPendingNotificationDelay, default: :one_day) + field(:last_notification_sent, :utc_datetime) + embeds_one :location, Location, on_replace: :update, primary_key: false do field(:name, :string) field(:range, :integer) diff --git a/lib/mobilizon/users/users.ex b/lib/mobilizon/users/users.ex index b9d5ce77..30e04f18 100644 --- a/lib/mobilizon/users/users.ex +++ b/lib/mobilizon/users/users.ex @@ -13,7 +13,7 @@ defmodule Mobilizon.Users do alias Mobilizon.{Crypto, Events} alias Mobilizon.Events.FeedToken alias Mobilizon.Storage.{Page, Repo} - alias Mobilizon.Users.{Setting, User} + alias Mobilizon.Users.{PushSubscription, Setting, User} defenum(UserRole, :user_role, [:administrator, :moderator, :user]) @@ -405,6 +405,80 @@ defmodule Mobilizon.Users do Setting.changeset(setting, %{}) end + @doc """ + Get a paginated list of all of a user's subscriptions + """ + @spec list_user_push_subscriptions(String.t() | integer(), integer() | nil, integer() | nil) :: + Page.t() + def list_user_push_subscriptions(user_id, page \\ nil, limit \\ nil) do + PushSubscription + |> where([p], p.user_id == ^user_id) + |> preload([:user]) + |> Page.build_page(page, limit) + end + + @doc """ + Get a push subscription by their ID + """ + @spec get_push_subscription(String.t() | integer()) :: PushSubscription.t() | nil + def get_push_subscription(push_subscription_id) do + PushSubscription + |> Repo.get(push_subscription_id) + |> Repo.preload([:user]) + end + + @doc """ + Creates a push subscription. + + ## Examples + + iex> create_push_subscription(%{field: value}) + {:ok, %PushSubscription{}} + + iex> create_push_subscription(%{field: bad_value}) + {:error, %Ecto.Changeset{}} + + """ + def create_push_subscription(attrs \\ %{}) do + %PushSubscription{} + |> PushSubscription.changeset(attrs) + |> Repo.insert() + end + + @doc """ + Updates a push subscription. + + ## Examples + + iex> update_push_subscription(push_subscription, %{field: new_value}) + {:ok, %PushSubscription{}} + + iex> update_push_subscription(push_subscription, %{field: bad_value}) + {:error, %Ecto.Changeset{}} + + """ + def update_push_subscription(%PushSubscription{} = push_subscription, attrs) do + push_subscription + |> PushSubscription.changeset(attrs) + |> Repo.update() + end + + @doc """ + Deletes a push subscription. + + ## Examples + + iex> delete_push_subscription(push_subscription) + {:ok, %PushSubscription{}} + + iex> delete_push_subscription(push_subscription) + {:error, %Ecto.Changeset{}} + + """ + def delete_push_subscription(%PushSubscription{} = push_subscription) do + Repo.delete(push_subscription) + end + @spec user_by_email_query(String.t(), boolean | nil, boolean()) :: Ecto.Query.t() defp user_by_email_query(email, activated, unconfirmed) do User diff --git a/lib/service/notifier/email.ex b/lib/service/notifier/email.ex index a1f01a6f..2db6aa0b 100644 --- a/lib/service/notifier/email.ex +++ b/lib/service/notifier/email.ex @@ -3,10 +3,10 @@ defmodule Mobilizon.Service.Notifier.Email do Email notifier """ alias Mobilizon.Activities.Activity - alias Mobilizon.Config + alias Mobilizon.{Config, Users} alias Mobilizon.Service.Notifier alias Mobilizon.Service.Notifier.Email - alias Mobilizon.Users.User + alias Mobilizon.Users.{NotificationPendingNotificationDelay, Setting, User} alias Mobilizon.Web.Email.Activity, as: EmailActivity alias Mobilizon.Web.Email.Mailer @@ -18,14 +18,61 @@ defmodule Mobilizon.Service.Notifier.Email do end @impl Notifier - def send(%User{} = user, %Activity{} = activity) do - Email.send(user, [activity]) + def send(%User{} = user, %Activity{} = activity, options) do + Email.send(user, [activity], options) end @impl Notifier - def send(%User{email: email, locale: locale}, activities) when is_list(activities) do - email - |> EmailActivity.direct_activity(activities, locale) - |> Mailer.send_email() + def send(%User{email: email, locale: locale} = user, activities, options) + when is_list(activities) do + if can_send?(user) do + email + |> EmailActivity.direct_activity(activities, Keyword.put(options, :locale, locale)) + |> Mailer.send_email() + + save_last_notification_time(user) + {:ok, :sent} + else + {:ok, :skipped} + end + end + + @type notification_type :: + :group_notifications + | :notification_pending_participation + | :notification_pending_membership + + @spec user_notification_delay(User.t(), notification_type()) :: + NotificationPendingNotificationDelay.t() + defp user_notification_delay(%User{} = user, type \\ :group_notifications) do + Map.from_struct(user.settings)[type] + end + + @spec can_send?(User.t()) :: boolean() + defp can_send?(%User{settings: %Setting{last_notification_sent: last_notification_sent}} = user) do + last_notification_sent_or_default = last_notification_sent || DateTime.utc_now() + notification_delay = user_notification_delay(user) + diff = DateTime.diff(DateTime.utc_now(), last_notification_sent_or_default) + + cond do + notification_delay == :none -> false + is_nil(last_notification_sent) -> true + notification_delay == :direct -> true + notification_delay == :one_hour -> diff >= 60 * 60 + notification_delay == :one_day -> diff >= 24 * 60 * 60 + end + end + + @spec save_last_notification_time(User.t()) :: {:ok, Setting.t()} | {:error, Ecto.Changeset.t()} + defp save_last_notification_time(%User{id: user_id}) do + attrs = %{user_id: user_id, last_notification_sent: DateTime.utc_now()} + + case Users.get_setting(user_id) do + nil -> + Users.create_setting(attrs) + + %Setting{} = setting -> + Users.update_setting(setting, attrs) + end end end diff --git a/lib/service/notifier/notifier.ex b/lib/service/notifier/notifier.ex index 56b57d17..9c9140ae 100644 --- a/lib/service/notifier/notifier.ex +++ b/lib/service/notifier/notifier.ex @@ -14,12 +14,12 @@ defmodule Mobilizon.Service.Notifier do @doc """ Sends one or multiple notifications from an activity """ - @callback send(User.t(), Activity.t()) :: {:ok, any()} | {:error, String.t()} + @callback send(User.t(), Activity.t(), Keyword.t()) :: {:ok, any()} | {:error, String.t()} - @callback send(User.t(), list(Activity.t())) :: {:ok, any()} | {:error, String.t()} + @callback send(User.t(), list(Activity.t()), Keyword.t()) :: {:ok, any()} | {:error, String.t()} def notify(%User{} = user, %Activity{} = activity, opts \\ []) do - Enum.each(providers(opts), & &1.send(user, activity)) + Enum.each(providers(opts), & &1.send(user, activity, opts)) end @spec providers(Keyword.t()) :: list() diff --git a/lib/service/notifier/push.ex b/lib/service/notifier/push.ex index 532aa402..e9b7c0b9 100644 --- a/lib/service/notifier/push.ex +++ b/lib/service/notifier/push.ex @@ -3,9 +3,10 @@ defmodule Mobilizon.Service.Notifier.Push do WebPush notifier """ alias Mobilizon.Activities.Activity - alias Mobilizon.Config + alias Mobilizon.{Config, Users} alias Mobilizon.Service.Notifier alias Mobilizon.Service.Notifier.Push + alias Mobilizon.Storage.Page alias Mobilizon.Users.User @behaviour Notifier @@ -16,17 +17,14 @@ defmodule Mobilizon.Service.Notifier.Push do end @impl Notifier - def send(%User{} = _user, %Activity{} = activity) do - # Get user's subscriptions - activity - |> payload() - - # |> WebPushEncryption.send_web_push() + def send(%User{id: user_id} = _user, %Activity{} = activity, _opts) do + %Page{elements: subscriptions} = Users.list_user_push_subscriptions(user_id, 1, 100) + Enum.each(subscriptions, &send_subscription(activity, &1)) end @impl Notifier - def send(%User{} = user, activities) when is_list(activities) do - Enum.each(activities, &Push.send(user, &1)) + def send(%User{} = user, activities, opts) when is_list(activities) do + Enum.each(activities, &Push.send(user, &1, opts)) end defp payload(%Activity{subject: subject}) do @@ -35,4 +33,10 @@ defmodule Mobilizon.Service.Notifier.Push do } |> Jason.encode!() end + + defp send_subscription(activity, subscription) do + activity + |> payload() + |> WebPushEncryption.send_web_push(subscription) + end end diff --git a/lib/service/workers/activity_builder.ex b/lib/service/workers/activity_builder.ex index cf8a4d1a..85e4f2de 100644 --- a/lib/service/workers/activity_builder.ex +++ b/lib/service/workers/activity_builder.ex @@ -29,7 +29,7 @@ defmodule Mobilizon.Service.Workers.ActivityBuilder do def notify_activity(%Activity{} = activity) do activity |> users_to_notify() - |> Enum.each(&Notifier.notify(&1, activity)) + |> Enum.each(&Notifier.notify(&1, activity, single_activity: true)) end @spec users_to_notify(Activity.t()) :: list(User.t()) @@ -45,6 +45,6 @@ defmodule Mobilizon.Service.Workers.ActivityBuilder do |> Enum.map(& &1.user_id) |> Enum.filter(& &1) |> Enum.uniq() - |> Enum.map(&Users.get_user!/1) + |> Enum.map(&Users.get_user_with_settings!/1) end end diff --git a/lib/web/email/activity.ex b/lib/web/email/activity.ex index 01ed0c02..fecdc0d5 100644 --- a/lib/web/email/activity.ex +++ b/lib/web/email/activity.ex @@ -17,8 +17,10 @@ defmodule Mobilizon.Web.Email.Activity do def direct_activity( email, activities, - locale \\ "en" + options \\ [] ) do + locale = Keyword.get(options, :locale, "en") + single_activity = Keyword.get(options, :single_activity, false) Gettext.put_locale(locale) subject = @@ -34,6 +36,7 @@ defmodule Mobilizon.Web.Email.Activity do |> assign(:subject, subject) |> assign(:activities, chunked_activities) |> assign(:total_number_activities, length(activities)) + |> assign(:single_activity, single_activity) |> render(:email_direct_activity) end diff --git a/lib/web/templates/email/email_direct_activity.html.eex b/lib/web/templates/email/email_direct_activity.html.eex index 14928748..109cd37e 100644 --- a/lib/web/templates/email/email_direct_activity.html.eex +++ b/lib/web/templates/email/email_direct_activity.html.eex @@ -105,7 +105,9 @@ <%= render("activity/_comment_activity_item.html", activity: activity) %> <% end %>

+ <%= unless @single_activity do %> <%= datetime_relative(activity.inserted_at, @locale) %> + <% end %> <% end %> diff --git a/lib/web/templates/email/email_direct_activity.text.eex b/lib/web/templates/email/email_direct_activity.text.eex index e52c5ed2..4b8a6580 100644 --- a/lib/web/templates/email/email_direct_activity.text.eex +++ b/lib/web/templates/email/email_direct_activity.text.eex @@ -11,7 +11,7 @@ <%= for activity <- Enum.take(group_activities, 5) do %> * <%= case activity.type do %><% :discussion -> %><%= render("activity/_discussion_activity_item.text", activity: activity) %><% :event -> %><%= render("activity/_event_activity_item.text", activity: activity) %><% :group -> %><%= render("activity/_group_activity_item.text", activity: activity) %> <% :member -> %><%= render("activity/_member_activity_item.text", activity: activity) %><% :post -> %><%= render("activity/_post_activity_item.text", activity: activity) %><% :resource -> %><%= render("activity/_resource_activity_item.text", activity: activity) %><% :comment -> %><%= render("activity/_comment_activity_item.text", activity: activity) %><% end %> -<%= datetime_relative(activity.inserted_at, @locale) %> +<%= unless @single_activity do %><%= datetime_relative(activity.inserted_at, @locale) %><% end %> <% end %> <%= if length(group_activities) > 5 do %> <%= dngettext "activity", "View one more activity", "View %{count} more activities", length(group_activities) - 5, %{count: length(group_activities) - 5} %> diff --git a/priv/repo/migrations/20210505172402_add_group_notification_and_last_notification_date_settings.exs b/priv/repo/migrations/20210505172402_add_group_notification_and_last_notification_date_settings.exs new file mode 100644 index 00000000..bd22dc9e --- /dev/null +++ b/priv/repo/migrations/20210505172402_add_group_notification_and_last_notification_date_settings.exs @@ -0,0 +1,10 @@ +defmodule Mobilizon.Storage.Repo.Migrations.AddGroupNotificationAndLastNotificationDateSettings do + use Ecto.Migration + + def change do + alter table(:user_settings) do + add(:group_notifications, :integer, default: 10, nullable: false) + add(:last_notification_sent, :utc_datetime, nullable: true) + end + end +end diff --git a/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs b/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs new file mode 100644 index 00000000..6f790981 --- /dev/null +++ b/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs @@ -0,0 +1,16 @@ +defmodule Mobilizon.Repo.Migrations.CreateUserPushSubscriptions do + use Ecto.Migration + + def change do + create table(:user_push_subscriptions, primary_key: false) do + add(:id, :uuid, primary_key: true) + add(:user_id, references(:users, on_delete: :nothing), null: false) + add(:digest, :text, null: false) + add(:data, :map, null: false) + + timestamps() + end + + create(unique_index(:user_push_subscriptions, [:user_id, :digest])) + end +end From 3ff7bc4512a81b315a0ac9f9ae331a12af62f8df Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 6 May 2021 17:20:54 +0200 Subject: [PATCH 04/67] WIP vue-cli 5 Signed-off-by: Thomas Citharel --- config/dev.exs | 3 +- js/.browserslistrc | 1 + js/.eslintrc.js | 2 +- js/package.json | 31 +- .../img/icons/android-chrome-192x192.png | Bin 10249 -> 9416 bytes .../img/icons/android-chrome-512x512.png | Bin 45089 -> 29808 bytes .../icons/android-chrome-maskable-192x192.png | Bin 0 -> 6401 bytes .../icons/android-chrome-maskable-512x512.png | Bin 10249 -> 23038 bytes .../img/icons/apple-touch-icon-120x120.png | Bin 11302 -> 3369 bytes .../img/icons/apple-touch-icon-152x152.png | Bin 12805 -> 4046 bytes .../img/icons/apple-touch-icon-180x180.png | Bin 15054 -> 4678 bytes .../img/icons/apple-touch-icon-60x60.png | Bin 8216 -> 1491 bytes .../img/icons/apple-touch-icon-76x76.png | Bin 9082 -> 1823 bytes js/public/img/icons/apple-touch-icon.png | Bin 15054 -> 4678 bytes js/public/img/icons/favicon-16x16.png | Bin 507 -> 799 bytes js/public/img/icons/favicon-32x32.png | Bin 668 -> 1271 bytes .../img/icons/msapplication-icon-144x144.png | Bin 668 -> 1169 bytes js/public/img/icons/safari-pinned-tab.svg | 150 +- js/public/img/pics/event_creation-1024w.jpg | Bin 0 -> 178661 bytes js/public/img/pics/event_creation-1024w.webp | Bin 0 -> 44518 bytes js/public/img/pics/event_creation-480w.jpg | Bin 0 -> 55124 bytes js/public/img/pics/event_creation-480w.webp | Bin 0 -> 14922 bytes js/public/img/pics/group-1024w.jpg | Bin 0 -> 198085 bytes js/public/img/pics/group-1024w.webp | Bin 0 -> 51678 bytes js/public/img/pics/group-480w.jpg | Bin 0 -> 65897 bytes js/public/img/pics/group-480w.webp | Bin 0 -> 18008 bytes .../img/pics/homepage_background-1024w.png | Bin 0 -> 77239 bytes .../img/pics/homepage_background-1024w.webp | Bin 0 -> 19554 bytes js/src/router/index.ts | 6 +- js/src/service-worker.ts | 89 + js/src/views/Event/Event.vue | 2 +- js/src/views/Event/MyEvents.vue | 8 +- js/src/views/Group/MyGroups.vue | 8 +- js/src/views/Home.vue | 4 +- .../unit/{svgTransform.js => svgTransform.ts} | 2 +- js/vue.config.js | 38 +- js/yarn.lock | 6684 +++++++---------- 37 files changed, 2927 insertions(+), 4101 deletions(-) create mode 100644 js/public/img/icons/android-chrome-maskable-192x192.png create mode 100644 js/public/img/pics/event_creation-1024w.jpg create mode 100644 js/public/img/pics/event_creation-1024w.webp create mode 100644 js/public/img/pics/event_creation-480w.jpg create mode 100644 js/public/img/pics/event_creation-480w.webp create mode 100644 js/public/img/pics/group-1024w.jpg create mode 100644 js/public/img/pics/group-1024w.webp create mode 100644 js/public/img/pics/group-480w.jpg create mode 100644 js/public/img/pics/group-480w.webp create mode 100644 js/public/img/pics/homepage_background-1024w.png create mode 100644 js/public/img/pics/homepage_background-1024w.webp create mode 100644 js/src/service-worker.ts rename js/tests/unit/{svgTransform.js => svgTransform.ts} (92%) diff --git a/config/dev.exs b/config/dev.exs index a932818a..23e63beb 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -24,7 +24,8 @@ config :mobilizon, Mobilizon.Web.Endpoint, "node_modules/webpack/bin/webpack.js", "--mode", "development", - "--watch-stdin", + "--watch", + "--watch-options-stdin", "--config", "node_modules/@vue/cli-service/webpack.config.js", cd: Path.expand("../js", __DIR__) diff --git a/js/.browserslistrc b/js/.browserslistrc index 214388fe..40bd99ce 100644 --- a/js/.browserslistrc +++ b/js/.browserslistrc @@ -1,3 +1,4 @@ > 1% last 2 versions not dead +not ie 11 \ No newline at end of file diff --git a/js/.eslintrc.js b/js/.eslintrc.js index a5dd51f7..7ee28a44 100644 --- a/js/.eslintrc.js +++ b/js/.eslintrc.js @@ -8,8 +8,8 @@ module.exports = { extends: [ "plugin:vue/essential", "eslint:recommended", - "@vue/prettier", "@vue/typescript/recommended", + "@vue/prettier", "@vue/prettier/@typescript-eslint", ], diff --git a/js/package.json b/js/package.json index b8dc795e..0e7d0486 100644 --- a/js/package.json +++ b/js/package.json @@ -8,7 +8,7 @@ "test:unit": "LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8 vue-cli-service test:unit", "test:e2e": "vue-cli-service test:e2e", "lint": "vue-cli-service lint", - "build:assets": "vue-cli-service build --modern", + "build:assets": "vue-cli-service build", "build:pictures": "bash ./scripts/build/pictures.sh" }, "dependencies": { @@ -50,7 +50,7 @@ "ngeohash": "^0.6.3", "p-debounce": "^4.0.0", "phoenix": "^1.4.11", - "register-service-worker": "^1.7.1", + "register-service-worker": "^1.7.2", "tippy.js": "^6.2.3", "unfetch": "^4.2.0", "v-tooltip": "^2.1.3", @@ -78,22 +78,22 @@ "@types/vuedraggable": "^2.23.0", "@typescript-eslint/eslint-plugin": "^4.18.0", "@typescript-eslint/parser": "^4.18.0", - "@vue/cli-plugin-babel": "~4.5.13", - "@vue/cli-plugin-e2e-cypress": "~4.5.13", - "@vue/cli-plugin-eslint": "~4.5.13", - "@vue/cli-plugin-pwa": "~4.5.13", - "@vue/cli-plugin-router": "~4.5.13", - "@vue/cli-plugin-typescript": "~4.5.13", - "@vue/cli-plugin-unit-jest": "~4.5.13", - "@vue/cli-service": "~4.5.13", + "@vue/cli-plugin-babel": "~5.0.0-beta.0", + "@vue/cli-plugin-e2e-cypress": "~5.0.0-beta.0", + "@vue/cli-plugin-eslint": "~5.0.0-beta.0", + "@vue/cli-plugin-pwa": "~5.0.0-beta.0", + "@vue/cli-plugin-router": "~5.0.0-beta.0", + "@vue/cli-plugin-typescript": "~5.0.0-beta.0", + "@vue/cli-plugin-unit-jest": "~5.0.0-beta.0", + "@vue/cli-service": "~5.0.0-beta.0", "@vue/eslint-config-prettier": "^6.0.0", "@vue/eslint-config-typescript": "^7.0.0", "@vue/test-utils": "^1.1.0", - "eslint": "^6.7.2", + "eslint": "^7.20.0", "eslint-plugin-cypress": "^2.10.3", "eslint-plugin-import": "^2.20.2", "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-vue": "^6.2.2", + "eslint-plugin-vue": "^7.6.0", "flush-promises": "^1.0.2", "jest-junit": "^12.0.0", "mock-apollo-client": "^0.6", @@ -102,12 +102,11 @@ "sass": "^1.29.0", "sass-loader": "^8.0.2", "typescript": "~4.1.5", + "ts-jest": "^26.5.3", + "vue-jest": "^4.0.1", "vue-cli-plugin-svg": "~0.1.3", "vue-i18n-extract": "^1.0.2", "vue-template-compiler": "^2.6.11", - "webpack-cli": "^3.3" - }, - "resolutions": { - "workbox-webpack-plugin": "5.1.3" + "webpack-cli": "^4.7.0" } } diff --git a/js/public/img/icons/android-chrome-192x192.png b/js/public/img/icons/android-chrome-192x192.png index 52399911be96c7d859de45e05d40a63c92c41964..b02aa64d97167ad649e496908b35f14c603d9249 100644 GIT binary patch literal 9416 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 b^@3oh5?Ob$6*B@f?ST|NsJ^d~HV*tB%&o!| diff --git a/js/public/img/icons/android-chrome-512x512.png b/js/public/img/icons/android-chrome-512x512.png index 4a61825043a9d564cfd9956d9bfd2ade5e1f2e4f..06088b011eccebb820b6e8de0cd244aa443208ba 100644 GIT binary patch literal 29808 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

O!>l4QP2E{ZGhxgBx|7#f5^ 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 Slw^Zz0tT0_>Auu)iupgC(3cAU diff --git a/js/public/img/icons/android-chrome-maskable-192x192.png b/js/public/img/icons/android-chrome-maskable-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..791e9c8c2c69ddb7be30cef2517dd6050b079cf0 GIT binary patch literal 6401 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 literal 10249 zcmb7~WmFq&w6=p&tQ05&cPsAhEp7#hrnozVBE^ChcXy{iaSiTn#T|-M912AWoO!>W z-}!ZtHJPkgvqqkoXYYMq_YPNAmBYp$!2p3k*b4IRHGp;Ze+xP)@T;+Aj|QwzO_k){ zgI@mo=5>@N0$W}=%j-cwAWZ!K76ed678uxw=BA+X0c{5Z`!y?gV6&MI1fl{dyqD7Q zTsh5NOr#(Avf-b;SLJkGGITyZDGb77MW2?Ul2=Rub0>vQ=Q15B6a>E3fDwH7*%Q~z zUK4q<^A-4%tatdTz{lrgwAarD*cU+}n#;|{@7E4%*FU8njG0|!orj&M8F9^B(MJm1 z(|~><;04$CQ}rL*os&d~-y;>Ob)IXz@0jZPaT;{(~26{AYBHO_&)7pIVb8s{{S@>29|L30{P*f4$DG6Z#{ z|8J+|xK{9)5?%n?20?F@mIx*Ys?mS{Awp>4sM=Itz8o9eZ$+52pn5P) zK8T)#P)w&EG=pe?tRKX$ZPHl#qMECHF}v9YieuGBHAi4j1B<@OVeP~SVjRo0qqL4l zB?0q+ax$)RH59#fGt2OqUBQeAJxiq$w})yzG5E12+i$D_1rv+XsV3F$~?`}T+wGOT43AE@#(;|UiGPZmOKfuVp;>d;7y!Lh`(^a!@sY= zKF$a+P+h{}u6Sv6j$YcNieZ^EH%#s1J7Uq7wQ z>fuVbN<5aGm25aT2pR0nLP3E`9P` zMkGa|*mcnMzX$1W3&v}3t%vDWzaexj*<9|sM?OBj@s`O|ct>1Hk*Jkmhe z2xBcDp{;q%Y#pqsYt~5XIDw6J!Lt6p_MEK!UWhPB z8@sow@s?)nd;9w10##9-UeNL4J%XB4|9Y&@^e+LU1Qr>X4~ekHM{0?V#r;R8iR&%S z{zQwWT_1*?B2M|KQ1rt7orBl*pD&MywZNelED18zsk z2zldEN;be@&rUx4`(v0%xp{iAQHc7DHdpr0PONrqIA|9(uAIw|Bm7#(_X#li2}_vy{`*?~D3QP%RO zzVWmy;eP-8gQ*i2wHO6>BPrL;S}13IFNsu4n7;?7}$hqGOpC<}gNV zY!e`qY;4%n%^lIux4T=sFHK%Ot0w_XabDc;2IWt^cJ#RSKfm#G#*KfcKs(*oBt9TB zWDRDZaI$ZVN8C3M641ep?pDTs14Qv#2Jo=!$of;*%l!jl*ODVO{rdv#=TbJQkE|a4 z5;U5D^M;`u*aC~D($!5MwM_yvlBBKb&GW0&^YPj*!11LHGli#KqCOWC)=uTVn8ql- zBGivab_``q=RcSOd16RakDz$>!6-M*uKrTGr59bTeR6H3ig&7aIv2N{!Qop>!RvJQ z8h?O{>e=>7@POiGsOZ+b@hYI;#JpRO)FTZe`E)q-=TD$s*tW?0KO>W?}jQAH0(zzzR%H zaW3X~@$f`QM5Mva#=tA%ATkb-(4Fc(;=od1UlzykIyOlZXwv_~_?&+AIAF6U{`9Cx z>Gk`3O5ar4rsw$Y>c8sTsq0-q(7CVuWEi|CR_jX+2BW-}4j%&&p@4{Xsnu0i^W z2?Oqvkg>YfSC^OaA4#RMUfq5Ze+r)xOaymxcuA2vti0(>QF5XTK{f~_;)pupdwZ(> z_ESj#YIpU{gL#>X*Ymu$*x9+<`%agI1`?zk80XxqFr5(?cyvJiVP`dG{X!6!*wl9= zmK?CNw6l?8kt0HeRs{c)1Bqm|lTj!>j0tHn`c^x%VA4-&;P6#tK!<+_xl^iQ1@WKa zwt`HS!p3r~J;&da^JHREMfdrv&M=i1P#F~G;gM-i8On?3Ffv3| zN%n;lr0*Dq ziiW`I0o^x4T2EgO0X-riqk^9EOYLEwOyntWZj4&Tnm}p8XL|eoCT&xJF1tW+k&j~-?hQ-$ z%{_ulDe8DJ`{?k1PifRz+cmgkJM1WP$zgbQEywZqesq8GF_c;ZK+rJRCtL?5@6{FBzj=mKI^n>RKEnQU;5 zdqGdJd8ngY#DTWi^VR^Z;c^z|=A;8EqyIx&MMERHba(N5Fg#`3_%M-Rlz(JRo?v*} z-RY5YcgUmlhZ{8ID{(IuqG2g343|o*?|J%w^1RuL7ad*H0e(Urr==ij<9T`&x7jv- zupm1QVd3!cxg772XSYVpkodY6=6{nc^ELV(ZDDHpx{}DSQz_*|qBk2bCFOa@-{~T4 z;p;ev#{bFb)@nnm7?qnf9f&&c<2?NBbAM>x?Z+nnAho=jp!@rEAjh-w&T}!w^x;KZ5a_w z^{{B**F`<6uQTc3H6gBiAaM#_diYj{98ev~4bZ*UVNGN+0cwa|r%l019@=Sq_phX{*?W+%n5szC&#(9dN5qbW-r1m#>kuTbW%L-c|P#e7G6v8Mb<4GWXvt zjPS-I(kM_J02OMv0wvGwM_nxM3NT2r1X(FNYq2WEUM05h%jXqc_x57d!AMek{sT?n zcG3G*(hqifT1v;Df6F0+<6 z9qd=2#fdI9)D}?j!ujdsV$rVQ2-KWk@cCdO4rO$tQ{?bU71t&E={`U8eO^d)j#BBoEh?zlp@SprBCA@@o5s@nEcR&otg z7hAtwM?*r!6J8zvUYtuzk=;8p?Ekq`(Oy`o0YZl*X7(Py$Nf?MXG_slL1GoTD1u^7Td;Uw!+TP64T54)EHD#wJ+b;eRMG}`e3a>*lLESVjg11XT z7+}T)%J*9Sk1RD(yZh48TcnHz_u@)PZ-R47pwt$XnQyryZ(hBoHcpandMy)UHg)#b z%Pm0hq040Z@;jyQ?63(N%mkk4Vj|witOvbig>fxxIyOQHSB0V_bqqsn*kBe9o}%a_ z1RMv#n7k46Z9%YbB;o+>N3$s7vg~@pC={{Tpe-z3nLd4vLj0p6@bbIQo64_HYo}aj zMj{KOT{b}Kts;E|CcXL~Gy+-JxeeipkWx0;ri*RYR2`!ADqj;WjrfJHz*=a0ZsLF@gpQBS84c(|2`If%yg{w8u*Pq(l zG?o}jd-``Ssi;OiSfuCKBIKa})xGmc;(nd$-q6xmHK3DN=2Yj(|E-({cl;IF&jpRw@Eh>cbZrxjN9`TSFtz<~>raYI=j6FOPwW0-)l~I;? z66xu+fyQ90prxHl7s>MX7Dv;HAgYi`EFaes9wsKF3ifEWN4v}b%g#zx>`0;IDxQj$ z!5E$lCzg!-K@{Yq5gZY>RejK8A|@Sjkz$QM8E2FQ7gfRbXXd~@S?kYv_@J!Q*-fxg zwcuu5nfi_-E`)-)aBjzVH}NfDUPOHfw<&8eO5ytibJySattJRqm<}HZ4(t6Nh<+0i zp3gBs@_w5^9|>G6KW{;FQeRS%^Nb{`ko)>+C+XSA8$ad&iZnQfc{{M)3B||e@clw1 zPmDSv4eQe$Q#_N3g)mjc%G=^!f|p@qs5WS-N@i4lc(di-c-C{dt%BrbcI^;tvZ#si zB@>inYa7U62fryKmqHUi(y*yT(V}xM!D?sKtzJ;?@VBdE^K9hiHyx7B9J7{rTdJm4 zf1FSllOXNZmERpCK3Qx|+gSUY)B1Da_c+tm;M@DyWP!`#nS1CG&GogKCZ{MsAx$i_ z;9?4eebqcYOJ(7Bc2<}%e-!MqnH|E(9EpG_LVy&fDjh?z=Itre6u~&jlg>*aVK=lq zBnKPpJH=^teIT=`>i)Ng^jsT98c^wlMHvMxie@kqns6Qg*@9Fl=PlBecxgp3O)eM$ zqK)<43TiLAE-bLYE=!TY#*5l^5&^_Hs}ZIJk4M4NJtOJ5%erKNsYy1Ie7L^W|*8iBBtJOE1Z zyw&2=wxGA}(Imbn+00bALAxl9b_sSaptBYh5nN0OtcyS^Zy?hr{e?9jM!+xsXO9)B z8@H7JiNFZTrfxBK+HM{Y^=9@~h6u9j+Ic!BmL^5!IkS{*7c(HBh?!J=xK*KXG{=ld z^?fg07c@n%OeCPa22%VaFjHnqG>na@?iegC)(c&zlPpGYWbR7xoF!Knn)T^2E|aW%_6eg7)Zg#lgs zwFb8#a;J+a_m~_g4+UOca;Df?!==g;R%@fj)5ji{l#-<_2*tPOAU|!@(Zq)^bEOcR zDF<-)e*9!mWYxOA_x>I_g!!ko-Fx8U#gJo()yH3omuALyN6KAVbL~b)n zQc&w~JN!C=FtpR^!n_B|bP^N9d6$zOBUAoW6ASS(ul0Bpiu3qrI=)(7dH!MY&w`{K zS4a)0UkTo22y?h(-u=s`3hS&1+CWykoZi*;-w ziQaBv9*g`*lW2J6qdunbyU;>%*%_PNWR0K0iiR6W>~Y?OVKe{wQA|UlU<-kC^<-Je zson(PU6$5ID`Ga2Z^VQdxg=i6Sx{{HkVoU@#e9U}s52hQ6t%_CXrETME` ziNyx3KL?|TU|Mw1J`KiF^0$eYEE{RusNm9spm--V5A<&Z*GBi*|A}PE`zXz$aTM?p z-LM8DBNKx0BsR#NNWHo&!V9tzp4HaPsY>rHvx#$td&b4|&$g!;<%TYi|E}^YokRY4 zM~P{1<}z!XkQ%$X%gRFlx!hbhD+_clXf*=7<-AKY%VI@~9K+MIG0lfbb;w6hvHoL5 zu*OwCNmZtHMac$rWyVbFgnL&X*D7IWi8hvgCEj4x=*Aa!p~=YMTiR82S9YT5 zMjEkKMXu;LE<`)Tc8;WiXbXs|ZfVU~SVYJ?hh~boA@)3 zS;p|Q+eb}OIKnt8A==8bGsXUf*l?1pZm+ch{cGVQNAba*23Jn zI*{uuS*+oc^vf%?cymAqvamUOfD9H75Nz@=p{)dq*@QuR0BO^NL!-3miyCO62S_bq zwGe`UUg!ex4ZyOnwZ`>J{Wlz-gC{Rm@)x(&Rc;pBbJe=?TE2U>SQwm4)uN z9*HmtQ@~6SCN}C4HLXm23wd%BH99m14LR@P8+v)Z7Yz#k7U!N=;mp@Qo$%`4RuGQ= z^8%Rx+MAv6Ov~W%ro$EV6k(yM>Y*R*JffRRM;ACDYN~o5k-{;4rAaW6XO(5!&81yX7QtatU}3fU%Q~*Oc2E(4nb6jm}$vNi3jk#=p-)VFF%x~5CGtz!vGq51l?_qR!-6jz0o|Z7Ao}-~HpYySIST(q+=8r>m$iYQ%f)wiqVZLLTXWbn;E<|Mw7Yc6wgvf^tU3XykK=P% zjRaN%S#wSCNQ`b^!q2m3ss28{;m0{RBOUmqBgo`<`5$VPe0#YhybI<=%6j zZUlL#b_(z}D}!L(j{xQi#lnvjY#g=;T|peFeNs%yJGS%NS&4Hp5^3_Fi;2zrLITn^ z&?vvTk20{s2RuS!n8}HVPO_f3Qq?c(lUjj4UY=keepor})-Q|!X0D|tH}Q3%&l7KI z6yBI(^XzL+Hv(7AI*X;AxrCN4AZ5l*&(J-`$%@pW_I9CK8#5Jbn30vq*q?2HWNfza zfsiCRS3lUq84lzTo);{09RDkK>j0+^PB8baGvOA-tlHv!#3gV5zeh!!=S?2SpME4*)KtC1xk&q zUyUS;^tG}g-WG9AYVz!lBEAenbNOFr zawphGj8#t(Z1RMNyMJ75W%qGjG^QO(pLTstXVNx(&cH?_Niry2xwf@aqtbS4lCK;q zhyJzcyoT2$#W81X;fqxlL>I^C9qs#^hahm+E2H~rj&vWVH-Ri*-;<3yv#;kP%>azJ zWqf#DLy2cK6SG{lm;O!y+zNogmEg@zuH6|^;poqk5ySOO7qUU;HhwQ5;xEsnXsk^< zb$S^`-m-wnInA@CpL-EKMr+v0X_=p0*zi5-w@(RM_fg_dqO*zk&O8e(kZvSe3-7mF zkcvZ~9?10!7TTqx%vII>|28m@fHA96p0c_i6NZAA>X~wQA!$>00@V~V5xlXnNDpRR z3)7_?&yt7406g?LUg6sGHt8OfwsrFUf(^4mN45)G{7MWsrF5DXi-4i!UHV}wU6{cW zgG;vxWkM3_LcQnBfpvFEI>g#=%~N(~MFCnNXrS)|FrPAuR)0DGj*iqslge|jy)0Fq z3fQZU?ASRecGEEi zA?{u?YjtCv4VCXVFnynQ1pdNX(xl&I|2`MfA>5)ZO@ztj!8@~XJwyBQ)%q6g$=~=#UHo4fSGBUpzwTYnAz-+ z@rO~ooXR@6k@+sEuirg~7zr?lfM@k9Q|DWIoseZ&_Nr_)ajVCrmEASSOzArZd(ppR zo!5FNyI@*iZofrw6YSyqRZz`Q({LdLAdCnn2=V3mL9Ex_c9@}v+#X)y#KP!3Pg^<) z^{hZOj^253JA8dRx{^?$V-uLPZ&3D?we-a+1mBI&Yk&z2gpA;V`yRQJ7i+e?02?D; z86@Nhax9XlAk_~vE=#SQ8`HJkb0fu2(>Kh0?x$t{J)fPHV;DccJJ`g<-UJ08;$n(f z=NI2$j~vQr=E1bz1!7Rb59a<4qsrgD6`QhP@AU5&pIj$;J3McnQc#LJPUq_4=^5oz zGr>>97D$BSGb}wjU0ud)Ir>ruHwx31Cn@g^ObYW4XE0p%4d4zOe|Q1g(e=?K$Q$j= zQ>_4f+f7mW2smHsfwh@WbBtUh?P5@WT!$mZ%TLS_N{up=H#H(QI&J_{!&4)Pdb1{h z?zQ6=c@FrTf88_96$|)y&T%Y8UETdGp#2^>68i$VA|?2~u7%G(#^4ncENuG{iZ3 zF$2P_WYm9yBx;fzghham%~sOZlIH3%u;1qI-ZcQx{E4nl7VW#OoIn(1PcPFb7((}J zS|nNDP8DH2HPrI^WiT~{J^9oa(cr&@Xlfu&X2kn4C+BWfwL*^&eaA`AWvY+?`cCG3 z@;a#OLrVt{0A(*daq}Xd7rA}k6=xf$7msP>tgK{latHZN7OVc}T>$M9Qc$Qx1a-hQSPF`m4-5D0*m6p%9mS1iED zC1;lVyi_Q0N!(8n6fWm~0_CmkqM%QpOWhqE#4USgXD?2Ujd*N|lH-fI+049ZX?(~_ z04Un3bRwhE(#7%8t{kUjBah6{oLiFVTkf&6R)!kX?gLS;(zBj2(rHzoHz@(1y}C?=Iv4k=bn}hU61@omp9MLm(9lq)^$d6k%4W#6o6)&Nieqg{ zr2`W_L~ZX3xb_MH4S5GRx>Ee42twP2lc=|5~*(Hl(MUXOieCD zLl$prSo!CYf_}-Yh_3^sb~gt#e7RQ=c1E43unNgLd%kKl`_!U+mGA$@&b0sCz9v+7 b^@3oh5?Ob$6*B@f?ST|NsJ^d~HV*tB%&o!| diff --git a/js/public/img/icons/apple-touch-icon-120x120.png b/js/public/img/icons/apple-touch-icon-120x120.png index 7cd046b204652ade6591fe81b8550bfe713af5a4..1427cf62752646ad7217df0a61aa01fdef7475d1 100644 GIT binary patch literal 3369 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 ROru=^AazZ3N)e9H{|11FNXq~K literal 11302 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 diff --git a/js/public/img/icons/apple-touch-icon-152x152.png b/js/public/img/icons/apple-touch-icon-152x152.png index 47780197ddf0d7a6ce278c8249c0ff0dd1f628e4..f24d454a2ecb8851bb893192b64ee09386d30e24 100644 GIT binary patch literal 4046 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 z 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 diff --git a/js/public/img/icons/apple-touch-icon-180x180.png b/js/public/img/icons/apple-touch-icon-180x180.png index 94f32ff702405dad83037abc6e5f54e3f8aba78c..404e192a95ccccbede087203c42b1f25f6bc6e67 100644 GIT binary patch literal 4678 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�MrHbYR_buu=L>f*wO=Er8~{qfkYT+HoHag8)VqJoC-#@ zNT})4xRE%sP-B9?xmL5!2Y8VLa?yj@Y@r1C)6o~9GF9nWG!SI2VJ$>ejtUE%Qv&r_ zYLgZ0h3iIrw7{TyurC(g^$XT%PP5`FB3aFpP&fM-8!J#3I_ujG?;7(Xv5ni%BjYP4 z^+oydy=)_&bdxYJx`X%G5PFkUB%3h6RiOs^F?#ojsB%DbfhqzGhuv4)S1%vw@PDyE z3xWF{Y^0>+=Wg! z{>z@$rD6ej*V- z^$zKIOWOfdN4~7@ndhru01+3cxwD&_Muyja({*O;-5VnF(e$WDALNStE{1{F#ts+VR{o zSlQ*@U=Du8fgKW$lU~)O)b6FS?H1SSnKVIC=DOvbo8IUvM zVf+U4YxG%qLGd%ew7Jp8>@U`ew+A#Q=2oJHNH@_f!WadS20$KZEZ+BHAvU@FB zzRCYN5r+Z#g`C^hrH$yW7ABstwjvMM*CHGzY41bbo2zy$6E8DAOPn zUnHG?e7?u7pQ}Kqbu1jEd+=mcGea4aL6V4g(m*b7x}z|ijsjb3e|tf-3&^JK{=sWz z8sqIu9jy)#J}n}cXqtXmkb-NDVPcAKn=G9uX42zYvufu_OCr>xJ=oTNp8WA5wEqvM z{r~m8;7_C>U68iRr@|rd7UYhON#(-S_+Uf>s)hhPU{{exlxc&eD literal 15054 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 JPDHLkV1jLJfV}_! literal 9082 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

aZW9cb|x>1jZDoAu$NpeWiVk@{x{! zmmBmDgx|qNN?LyIrl9$qmj{KjZ8zpa=4edK3FuFS$KFl}bWPoO*Ax#Z1c2#3JAN(O zYhi>`%H9fSnLkAq|5vs>+?U*bdfMc6TmDu+QqnN9xgfZsG25($^;v7U1nBl9Q^o*i z)&?UaYZ=~7XZa75xPKB1s~MB1m<*dN08pqiy*q!)_Kc|;EZs3&nNdMQ5#LFu+J z?*($vO)$hkMOVc16f-ep;K@_~&Y6t?0t9I0(lBkZBfic|u)3pK$Xv=A@jUQnB2sC` zbI)L9m;VNkWOao}2c3b4_u4+bg zuf-@d1$?asdD1~mORQ02#!&1Xm#41*xz}wETNqKb;kueQ*~OpcAXTpJFYUYcKoA&Z z8Ke=2Vh~cu_uTb&6AH75L!k8zo~&wRsDLs^3YkD2!~;%u6sFrzV2A5(FQ|3}+0-K- zWX)W2yq%?^)iKhyMGPB5*DnWBaLqAHLJ47;r5nvkeq3u_?J{Xaf_}6I+xpLwKS7NC z|KYU%zup)8i85jc)^Yt*I0W8;+zHUI3V7@o;3DUYasdq>DFK%im4J)F?;|B-<=}8R z>HESGa5)KyCnGII|E+YX&h4Y+xCRvyX@oGhhG4 j58+{W$RJv~NLLKlV4)8v^7hU(R-4l(}$teLl` literal 15054 zcmZXb18^j5^zP$i!;S4^W81cE+qP|UW1AamV{2mDwy}4<0iS$<0bX7L;AaZneFt@Tb zBXad}G$S(ev@!<)@mz1ovT`QliVyqufaU^$q6}``2P?|v>VnF-%`{~3Y`snTLGyCXE`~Cav_AU5U z^_Z#md-2Zy-|pM{Q&56S$=laM|8{+357MLm-a+8nEbZr?UOlqe$&0r~eaX|4Cz*?~ z9XlcYgbS15=cn8!uE!Ih&zsvTRI$qWx^9}7oE&Fg|8*P4w1v%dmwwdWX?2#@UJGpFGV)`;%a2^> z&bS-`X4;aSj&nV$$q>_D#~gYGdVTKleZzb*GAPA9YS1rGBSTDsMB|hm4H{OuhA+?&&UNwN9AYFT6%BOsAat_IHJZ?beNTL@F8WXNka-~ z!^6jA*;KZ)RxJr%xixP}SJ$%H$vcZQVbrdxE;U~?*bY~*sjytIcRs>HFK>6cU-Tpp z8#xyBH$vSI^0Js6YnkWToj0$YX!cp8scGnR+CH(hUUnBoZME8O_$8za1X0OzJvA4P z$_pF>w`4nXJhfJ@*!LbZ+1%89KRzLKrf=(|l&gI6e_i6tLM#L^A(#Yqu^`Y zfCOUPXf>-wd!BS#G{T7}g^8)($gPg^h{H`vDPw;nZ2P%g*S}*_eW~pnD&)d#cm5MU z0jvG!aOgcucjA(aVVb65V*@=Bc4F1OL#!70bA2TxPjC(p2~WKgK} zxv74gua;@~LvqXIB}%)79rSQc?f4Yem^};GA&R*TQS?D_K`20RK_sSnb*(sG3a*(+ z^5a>%TNbh+lv!o{syU}l>Gkk}pe>Du;R4${yY*&kH>F1@Qj7tb{`AOfuhhX+LRuK8atc>mT9163^;%|#urkuBnF6qHmYK2gM_mPrm)uHqT9H?W|rR+b&E}mu_7JCC{F}^FM?^UZzy#QY8x4r9tT$c2<)?cV)vPx z6O1r_#Pz^+rz{YtdOkbJ;CLy(Kn7j*Fe<1$@ViWFP1-v*FaPDqH1htC>OL*lH9HGg z>-9dTl)kVHjyK~ec(nuUY=NkkBiJe7QBL@#X0I1W6=02ICIYl1uyGu)M@wfdasRowmZM&7q2UV5#q^ z(|KF{%SlD6O6a7KiFKQRybOxoz}d7Amv)@y#$C;nCq{7yOA`z^(XDclX0gETySH=A z{%QOnz{eiO20b`jk*I!|Cy&l;p6brFS5t^ui823~^QIk^dFK}Usr6F@PB4r+_!2I|Hk|lm=rKq{TQKBpNqW#5kVhr9GK~-}a3SVH z+JoUQ;-y67Df2TBvr(9wk6h<0Z!!vVDE-9RtX9dm>(bQSoK9h^+P(yivCRS)ZmgYbx?53CP&jfhl-x0Uyyc98~eh$!#yu&@%y@8B%;;%{6r4L1eOC5m}G2H>~#Hr$!k!BT;VNGn{j@ z9kS!mh13x(2TUiFYvXSe(iSY2zd84$xHmt&ZKs62&&orXND+8MF-j z(tQiA9He0ctj5eZ_FpK1*=;o-!mSUor0ZTn%g+`3)Xc-YDEeqd$c@*S3W|6Im27WK z2kV@cE7-G$a?_0VMB|BeROhpvsqHb~Z2y}^?KgU|2MuN8QpG(5(VB&wD_mU=J}@L< zY(5;^H;BnLtAT&Q%5xn2tN`_^qeHSfHAX9!4}Y53!J=X+%8Zbr|N9nInV)@*ZBoWM zQf;xzEwZ*I@AFEtVC_M z=(yT?>!&$H(rbKaI+Z!+)ZRo5Wy5sD?&PLIF#W|r?as0!B-XgjP#0btxCocoZ=`I{ zfA|&I(iJ);$9|soh8POA2-9~tGfqLDj3$}D>6(xBGRMU$Zc+$-IV%BoYrs=rc#QO2 zx_e>bFq)(Iz z=cDFBkLMWfilG-yjFFWe;O$(pOP?SS`gf0KWn$*J>qVwo2ck?se;y7LQso*iaZPLB zMPN`~hy#N$02$$rk5nmHaeuO#JfR2LH^dRNW@Kn)$lKI6Sbe9lB2y}Se@|!u)GIwd zmYa{=sIF)4rswN+o{3Lo)UHs2FsgwG!clBVs?Hkx^28eM=hlU?K?5Xh)~Cl{4uIim zkcZLTyMgz{ydO2+A~l3*4HY*5Wnm#2gv9lbMcmf#z>$<XyDhSBU%Be;r1^)upDUF z0_`z(ZjN_V9-4zFTi*fv#=`GByooHNkYa8H2JW=LX7v#ZRXE%O7XIwl&;*-c)|JKmz zCiV@^wBO$=0QV~>EsC(v&m!?$L2FcKA(Vp9gr=PBKIsFf!mpv|x_;e5j@2p^O2h=X zC)0G#UV~*nJL|n!|LoL;B@|!Vf-rBWR7ZNeZW`QbaAu>|wgiSX zzocK`2D&(V(;*T1{&6=Y0%g7fZT)p~Nbq3Xk&?NR5Fxe~75-ll{ai^b(25`{`kGrb z2&+sHOZEJh`~1-_q}$ji|Mp7=38j=IglR!u1wD?v!}MQWjh_AF0D)vUK^lVw9i^Jg zQuj#c?9Z!~?Bh{^&cO=!(r@OJQ)b_IyAz*G?Jy%oQ;uHzsboT$weuBBppyL$dW_3u2Uc2S4*;Z%Be*Ge(`{x>uw_m7z z=eL)+x+B-b1FzGGUU+5G4Dqgu?t!Kek4HeB5op`;tNScHE8#CK7x+PYmk&Q>9#o z1oJ!6=W0fb_Ot%-#RJb=wjw2=4x^Ql%tqkxwQCjmaIz@ZES#L`*Yn3l1~lu-&nbUKOAStCCs>3+$@eKz;NJf5Q=LxFx};0@c&#?&ZNT^kEpbBrAk(&}D;*Qnr%j4Gu+@>A*Z3Ud+E?#7VBziUy*l=9&`6ZNU&*Gq9YfSb_ASJmC&4+@DT~f%7$^#+IVGODP)6Y0Hdx_o zWdvuU9`X&vdYI(B+`W!hp6knt^^u_DZA@=o_z~kXDhm*sS>ha*z6B`xr!pJDFcVT( znNsXRsbA-liaMEvF&;(EJz|-DK1_3l_1*)zmPCK!<-m}ATcva6n#fW%Jk9rd9mu^t zTAZ1w6b~H%n9tkg)a6nvB_#Q=V{i$cqE}Zk2GERTIQ1byp|n#7yp$riubvUszO_Si zlcJ~@ljv=ASRsHc62@1I;`!X;^q+WW*8$Tg0RPdt8- zi|-3!_xl_nOkE|58h5GDsBaRESr%Zn2ex}sD;Kn}ufZ44mA@^6;0^~L{pCE2?9Yr8 zTro6m8kd@)LNCy6G)yGdIb$yRmNa7<(7SY~C%g*T1Eq<`JH^JP!J{0o@~ULVB=m8Q zOe`wa9{WLd!wW`D6!xeY`0{H31(7e&E%z3^93|1r9nr^gFA=lmzN(HsZV zpN~gZ_BAUdo~dT2m2R?tl2-JgXiowU^@9x2bYDYds2?Fune+IV!7>Z^Ig;e@X9i zE??z>V+I$Z{6vYq2CnbAKnYkg`mMJxHLy%-3@9WHq6tTgx? z;fN$3g*TWxpb&7_8XEW2(;y@D6M~(&Fe9k3Cuip@RO9ts2LVQc9O*K`Cdw>_9!9p2 zu+O2#P@27gxKBY?EuN;TV$1$lmS0S&5!bQ>p@ry3<`r0*=dqRTO?iS~G`}bs0`fSG* z4KfJ@k5;kZWlFp4_-EH-@x~p1**h)RpoL8FN8Sl6(~Zg9L~NkgK#Teu^Plw(O%pKG zA?+PysT<|U)|d@EGr)FCDfkfo zbL7#ZGiR^4&!YNYJ^swE4Z0Dp*xTzcqAGuZ1^kfL>Eo538sq;)mOmGKdj2Uu7wK?Z z#!I~m)N3r59$mH&fPjF8T8W4#N{NX450e6ts2sl}KFL8rykP?!88K>D3?-*A#a!CR zXijVNXhq^h*jnyP-FHYioMbdiiT;+|-BIJE{$VW*XbqvCpCC@ouF9@SDE~6hw1+$$ zHxoQw2s~~;0(z!Yn@sQ&*(N2)_l19TQHSay4-t7I3-=Dm`pKiE+~OI$+}=IWk2H19 zesOiC<&1;m3-V674w7sW>%s@tb@v<0~s5}fI z8y5mboN=3q3Q-i0CD7H1eFH|!!X7XzT6E2(eeN;CUDhXVYiLgzRD!eQm#k=OKf;`@LDARgWOYO9UW0%ubec-WqZORZo&>$HyqD1e zJm6ewJ9^k&oZdl7Dyt6>935d|F(`eu4z_ZydcJ(h)^?D{C!8bGZj@Yrs1V9nMnV)g z0v~T8T>-%1hohtx@Dn)H|DK>ASvgq1H=$jnygxU}i#oDEB6~jKucBYb|Y*NT-Y@ zX$K`+wtxJ)=$|o_6Va`dpaPEj;BG;m(!)9Z83v*987>`|{H{Q+g(zwWXF zS}8a}gcjNNMX>ihee#>hkfni3Q^j{>*Z}s0Jo={8j~s47=2p%QqV>VEsQ}tS@Py_S zmUuP@^Mxo?9n9NXuugEb9PbVDYeC>1x-=~?kHj#8^U3&6Hw5qneQh%epfpV#th0Gu zS}^1PjM_g==cQ>t^|YZo(M*e1KP2UyBN=t3c)CV zSr)0P`XE{5 zptU9B>gkk@22O@}6(%B0MOLctahfU#2v3>0K`q4#h0P~8fPK8* zY#6TebISi`V_Sw(r%O{OX?{4_5@BLJd_twp;unYs(bXWk zMnumjHtziJ^2BnvAv#_Nfki?hMeGE%qQ}2IqKs^kw2C^)N1;>bZEbO6hT$aOOw0}* z<1n5+b{<$tOU1=R(Z7b*)RDAOWu4YU4Q(wToz?hBm6t)h_AuHtGLH-4`v>!3Bf`zz zVa3ZCWnKpDH%3Y4nD(lRemh8Z<}E}t{y<mFVSQl%LchSen#@W{p`c7yF4fcF&#% z=Yepwsfz0-@!`Cf1lm$3X)PFdt|Hgh>aV5@$KOI>T^~#v6v$hmL1BXH1Ef6lynI?2 zF1xg+KFKog*my4xK39RodHV&ZjyDAZad1C47~nhp1&A1e zyT9beBzV-mj}Cqj+G}v)LttG5GcZ9n1&~@7lG)Oee;%4=5b9qzeeEZPMgLN!zs<40 zVO}B7Hf#iY=0SGYak%Z0V7tClTeX9JLpRrHVV1NI7 zG>_21gdR$oY)K8wBd(*3DY)_c=@`&EaMNbp{m?KY!NUZ-6{y&;FJ5w~i{Gyts2ZPj zD1Lv+Y2Jqa#}5ZUKq&zu{&-xlu+m4^`M9c zKW{fxV(Wz$2Kqohw*A9GVQva0l@2`x*N}ZNP@9@N zNVsEgXdqw>oZO9qnot3=;r^N{x2`_b;mHk(lU{bk3Qfj|n$76s1^H6qBAtx4?U?u1 z2T%h4`kp9L(GJ$uDQR2*2%axWX{FjRg4)~d^Aw1evYzK_Ag)Ym_k=ImpMza7wz;B5 zhY$GxVKYl4urG|{Dn_HFl&tKeaZPoC~QM6Vg z`HYIL1zQ)P-CqSW3^&}~6pN3e)GAknTQzxR7wsbg0jq~!wb9@YsjNEzNpWSee`$j_ zaiY;x-oHy-Qy3ExNWagDF>GR}XyTNje7!dmLe3zYaPh7X&^%s@{oU&O4^m*p;SYb; zqUJXmIP!Kq7CYvfNefI-ie*{%KTD1E?${|Ozzei*m!e?1(n|{l^auigd9|(0`tw~s z1UiCgP!vwVLjZ#&A_CdxDp9|xjAIOi{^zD$MEAdviP}*$>YzPi8Zp_uLm5Ut zOn{%jDFiUi@9yNo2K57zulMCctVl-&!EE5LSJY9KF_@Qiu&bwI)!E9CajhHQLS8OM zN(>XJ46r-Bfh_9Rg+a4$rA8uSd9e+M#f4KQOm5&QCh{mtA88Fxd+84cAmJd9Q zs_FO6m#fVkfV4wAT671Zr5pWvdn_2(;^P2h`5ey_6<}2&>)M)k|6$*ao91`0eQtNN zk|bXa-1~y^#n4{XWEEn0hhP8`g;6_^O3+XZ$x!N zXRhb=XPr;@!r4b}T=YR)4WG^S)Q0)7#v3}v8%Fa)%KE5_xr&WtrLn789D$BCGdm`_ zA@XuEsB9cY%>H>`fv`2|c8#wJi;UIFYLY0Utv0>Wy?*Rqz<1O#>4$N#-oxPYYuz}% ze-@`Fy$^+QQkd;z)}iH%P=NRNNJfOZ&`GHD>B7~SbnPPa^V=y78oE)2NB&20u$5O; zY*>o_*jET_LcB3I_}RL!Ur-0&uU^%0cjw%R1w;P*x_G|0nh8R{Jb{r3q$PBoj0}|k zB2P0kz2K)|xpcBm8NvKKwzU68!_2$!#JjUF5$%HFOAf3c+>z@E|5n1=mwKB1zGu_y zWD2enp5?wST;k}hX<$)fvJ#kqyf#=`-3(SATlW1W`+q+Zmn=<6zW=acjt#4o4VaM4#opJ8J z)zeb^18-mR%D@1{jqfvpP671;GghK?-QI9ez{}Ft9qw0?f4pHe74h+=% zAH_-Fv56V#UaZs~T~DboXX*)T^fykMTyUHhkxt3`HJ>c!DXRONH<4al1&$kVi&}2| z4`p@&TOkW}0+h|#P|;tEi3^mnjs_qFr2ZOh7x*1)vkgh6*YSa(0N`7mg> z{xbI!Pcl!DL2o5qEhH}J2QqoewRnR!Q{K08W8yst6A%tJLkDS?0c7E*la4+#KDxX4 ziIVNRmYUHJ#BYkVrh(O$vmcvLW!Wq}>Y0!=eZO%Djh(k-)gpX3Eyr4tMF!kJnwI<87nESdSqGd#G9^Pcum@{W3Pp43lj0gkn@xY8Pc29j-31TBmQY^cKs;!xIlJs#W?sC4U{_C@0!WHy2p6)uLF{UcXL`>zBB>8INr;W3NFMkApk>`n)8aQ zWzv3MJl>bKg%zWy&$;k-lk#jN$)xO<9fpHTN0O5pc_G1@FASZuws+KFztWTw!w@Ww zJ~rP(XJlb|ROQCpHu;n@eH7|#JK{6o z2N^+%dpIIfi9RTQ(!|;nn)Lu@V5N zIigi%b2??Pq7Ne+?`l*;K(MKe4Xervc3Q0W z8RF#HOB0`QW|BInHj=^>;!tx9Po_=NM5_E8H>o_`0ZPpt_c6wYHk*xoYQ3k`hRvzU zVgJdooy#aR2r%_*Y??ScEy;>EX1zx#!WXpPdAYmYz2B1#N(%eYwuteHQI;1({ zxd%*F6{<}ufiJk z^cO7j{)8-Gvlf48(S(o|sxGrqcb&7iKI^CLg$<>y0)bdg*c(#U>GAo2Ojq+6R-jLNU9t*>p@<59P5 zkkdW`UeSn`)q%grFVta>VLS^iZ&E}*dgeS|#-oWpO8~_fc;Ol51IKL=#p~uDX;0qk zFndFLK2gS*vhLny&Vlr=s`do}`+&SsXNl4q#>H>$?>xxB=(f7hY+a3Ee+h=+G~=9U zO(6j#_=j=sx+n{-8f17Dsj{!>+#ne@DytvSNguy=WNbF6yD1qdXYa+pR_-{aAf@Oj zytQR>L~w~{z@YY!=adC0XUUo&njEA%`xNDZ%4%AISussfXUxaP0~7(v0pdbZGH9!n zTIeq|^0{*s_v;pFXqC>SIr5{r=3M*_k2n_}$2<<~laOh%4}c_Qdz(y)3D7!f+h4S$ zzx)EVa9_5(aT*AYKJw=cv%z&`jDElge&lsJ+1zgS2(2R6r#!OecyKckn!5*=FfOxT)-S<_e)|tXEXa0&ynMjFbhJ}D+_z! zy#yYs^eV}uQICI(Qixt1WJj(o`y|p4E=Ig93$7cy&H}sxiWSs?SoA}2V?+D-h>=d#HCEee9Hn@}0h;Y!8@mRv`;uy= z+`K->HZk)x3|xOKE~#RJSTV6kyP-A@3U0k_0XdV-vLb9W3j;ykBNTu8=i*dlIP9*n zopTNVF7TE?Lnz*_1qOkj%%tPZnK1>5xI$TzMbK*w20@e)w}n|6c3t}_QlM!7Kh5rC zb=`Hw+1!lhHQJ{s5If>=$aUF%Q9q_YJm?fPmn_aB#d)A2a@t*^fX(QXaS=*>yO{Pb z3tYC>SHTTn3Zg4hOAXbwt%zMVm8~G*(GpA$IPLHwB9NJF#X7_@cZQ8d-uVWdj$0TQ zYu*u(3b~lB6AQQI)QU?4hPOBkk+?$Llk0=t_A)SIqlz{fo0r1t{!1WV2-dF}a}N6H zAJI_qQ$9$m{XTjlSC<~-_9KyzmM>)sm-+k3S^bflZ9a|lva_# zaf%PL%a&Wg+1{oVq2En-%fiW0P-l3qTj;69*<;4j5xp0w)EZy1w3AyFznfkA-ZCL_ifo!R6Z%8jHYTJ3c9D-F!F}q0D7h#u z>{@Z2fVvr-CC1!{SRr@JGx_79758gZdY4&Cn(1!Wbsvvg(VkF}Z&@=GQ;5spG>6IZ%ZBw*VMFBhY_OeZbaS@!i?epRF^*PG@k$D8;32kLjA;g)<4 z5QEy^mW968+7~n&iaX9DSt6xQE_))#6>81Va@-erKI19IYcJ8YM}ZyCsjuVKFjvO6XQ;FBN`1aUD5VH^V83Eqt-LA~eyPQ=6pH2@;nGP1bR0G|0*xTc6d za|@{hnMHK9xsiHS5Z7)X^l9>n^Vh2^)z7&Kn^6rO_QWj3L7r9}f#(X1;Q)>y=HM=n z!pnugbya=$3YcoQBw9!wlpj(8X7w{Umks3~|1m}l)_L&U$K6860a$Hx4_Y;mgBEED zNO+ZTU;&mQ#Hhm(jv@Q&6cMd_Fwnn@H@;a2Pn({V1xM{_n#%JI00P&NGZ{mb1~6_W zL?=}O>CC4lz#qEW zjAi-MCxv0X<<-czKnOv*+`AyCIx3Tm^bE3;#;)CXb=kdL;> z3-fQ+CYr+X;_nzxC8nj*rd;NTUN)0 zqTyln?gSZtC|T=0Gi)y2RQ038pn$Byv>w&jqI_c8DYRwT=6DxQulY|iH0TYlrQ<&$ zdID*IgnagEetkXp_RgG~me}gve@Wy?=$p1ZA3m6RipAjaTf?U{>=kD3+^k z4oJ{DqwZVTmhHeXYFM4^_3-}8k0nk7EbgHLT30nR6WCVNQGrs4y6~Agls@_j3<&Z4 zy~@W22eGca0@YzoazCODQ+i+tZCBa@u#&9y?3BJN8;^mv1UH*c<9hkqC3l;znJ)Cp zy3yQ)Ywz7!8ZRrVevuD}fXc8Q^&WV2gg5G(XK^?ueCF(_M{`P3vknZ-798TR0YL@3 zwrBID>Lb+`e(C2OG_h~nd;D~TJ_WQZ>fzm;Oa(aF&ZJ)m09cCkKO2Z|OXUdue)Uow zls$?_T9zR8ghQXlLLoc66)vlA(SD)+*XjLIowcm2xH43jm@GwrCPx4(=sK2Apv)H# zHc|e;_irl5*;k5ZSET#c0}*hZ^3h$^UruBnClr zxF$UBzyF>S;8i}{>$|zXEi^?0uptvN0q*x&w`8M#&sHHo3nRe4aXNdYOIJ%OIzo;&WtJh@RWl2Yf4lNN z;fCRMrkHz!g7`NE>W;=e^dg`WfzjKvB5_}AfR0-E+j_!|%cGju%Np@Uohu z@a`U^SY^qtg!=4x4)2tP28%Ou-N&R1oVXPa4*YO-jcbTlf+uTZ^Eb~O9|jU7|il2vTk&7ZqL2*zvA}`aE)qi{|2eUAoO5;sv+V&7g2_&uY#Y|g20}frXjQN__uZ3zw7dW2HV5=HC za&F&`_}iAlS#5A~6;3!6`ckvlf~^a@%uM>61a=n&Gl3?IGoN0UqB!r`zIaix63?v$ zrGNWh7WpD$Tm|}3{ju>hAmW(BM8o<$xYpsb#W^hX?gE!PRGc8 z+I2SD-P;EeE1kA=WDpbbY)hFxko-o&_ioC3fX9GUA9}aq0fK3E6|Mdd=aL~Ky z$gw}G%s+EuS8vds{Vy>8-LF&C>zx(zj_uF1L=bo(5kpL}P3thY0&O!Ha>6UsQ+V_s zYObd?1Q6r~#ktR2?Sy(wxG~*u~iz3!%W~`%rWcRU2TG6xv#(=jKG2lZxJA>ohzBt(YS3mDUU>S^QN#K$9hzAEk z2Qoy^QBN&3&sCx-Tt`{nLicF{>fC|0a45*y3}Jg?HWoKPbe2avZQmLjArkMHKiuXXLWf5^}CPQ)5Ap z&%d_Q!;g7wQ*y#92??}_3Hd7TW{Pnf1S%d5$waAEuwQt~o@0ZiBuUKLyA$u1;|Lu7 z0*=jPFL-Oblf-k291)$qs0 z*L}Phf&S<1bnm?C=h%~N%=Wr?&TggRJw+W|I!C4jz`Q3r+30~eg@KR#LqAKnw*&}1#unuA5%VDOFKSl2yhY<^OFP|(ufnLN=RU@?3ddNypg7Q7&%wue@N-PbR zmg$hUY0m=TxfAfOV>4D`{v5j{gaCqxyPO?Mens!)VJt|`196g^?`>f=i;ldebw{0_ z_WD@&=SQH~G*KJkX2&$AKG(qm_4|!tjZQReiO0#s_G7tQ)Py&xuZIN#2ZKO=3;oFG zkaiwKA$=(%1EPoP9(SzA_&W?`yFolL-#I1$E9{E0h3e$SP6qflP z5cC63jVM3Z)%^>QS6w2W^Lj=|3Ia7@nnEX=g)A=2ENo02t_*G9-oE}>SguKT(oz+^ zNOPUVJMLr}EKjBBBpjT~es)H0;b6%m7z`n~KVp^5&XRyOtcqel9tWmyEc*A` zym0In>07$Mr-#XOyYRuRY-PCak5ex2ckI<+4G24{6h14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>WRE8{w#)hawXn|-Xp4{E;v!=;4B^%-x&;Cm1 zP>^*#n_J!T^1SBMI!C4h-R53dN8`?ylD}d{L%(vZvUKT)~-CgWFQy3lt zIqW5#zOL*K8HL%o&D;R|TePl5?VWhq^wrj^qed%lKKkpp-FogeyEi+p zE?K8rW7E1fuEJ{5jaaAp0~aIt+keS?T)@vXM=*X}V#VGMCm1~v-+0wr{w3CJ-R8wG zS@XVpzqP-5Mf0H?y-zh=XVL>S6E;rKnDmrMQlmoKbK9p$evXN`oe{6g>lvi)-+#c) zb+Al&$zRqtWk1@VTt6MPmq9d7^!kmXZn8k{sFt`!l%ynwlArU1(iRB6fMfqu& zIjIUIl?AB^nFS@u3=9=>9)IHDC=AokIOTu(jOWuJ24-b$y<~1-Wnu5hBFw@HE)6D! wQ<#-EhbWxBaplC3Ge=~Ou%B-5Sm33{@Jd{;RG<|Mp00i_>zopr0DGh}-~a#s delta 481 zcmV<70UrLJ2Kxh$B!3BTNLh0L01FcU01FcV0GgZ_00007bV*G`2jdC~3l9;Pbm)}; z007=lOjJetu`K(sEHyV+HaA!}I9ND2S2;OXIyzT7I#)b9S3W#eK0Q`IJyk+KRYN~j zN<&jmM^af$P+Cq;Tu)D4P)}%9OlVe3ZCOloUP^diNqJ#Nf`4X5gJ(yDXhw@{M3!JGF*8xrsZ`mo?OwG}W0j;Gi<$p)uv8G3}@??x`;DsxI}dE&Hq=`>rMX zuP6JjDEqJ~`>`wgu`K+uEd8=8{jx0m){*_)r2Xi?{;?+hvn&4a*#EO9|FbLqv@8F$ zD*v@B|F$asw|^@CxGDd*D*wDc|NsB!9wu}E0007XQchDe;)A`tn*aa+0b)x>L`jDQ z!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+0817m!EPlzi}fpbWjb7-1N zREF=ab|~82?p|H&9FPi<3Q0p2_nKbg9F`6d2a)0F5LviN5F-?-1uh6wgGU@;KHLFx zWcX}ub<4|h4hH*lce~e|TIa|N-yLo4RYl&*8eQTtJ=)5A);GJR=Xg%80{Y!&YpYvf zzSsOZP>Ahpcdsq>UfJl9kmb=;?z6GQH8a<1TD9-CHn-w}|NsA+Nb6JrgE+J#$S)X3 zGcfS;fdK35)2Be-Oetf?`zOY13)%G^e)6sPw@*;|%KXdcU#*P1v1-S;t21mOG>nAE-eH;@V%$t;WjcxYXwEUbR z3z>7z#DtTVO-oacoh9{_MQY8Ot-i}F{j^uD+E(t7w)x6MKX=vIp4w>b*IOPH6jixJ zZ#|uAv~yR1m9_1`d$&$jY?ogCnOnuicG8u{jt?HmM3~l)E(#;^5{P>Y|zRB0* zEz%!bA15~jCmrhl{dVr6;-~M#%Kx{>DI^zpsl1afdH67nWtqCYg=$*b#>z9DEt9H` z|+MWPFs%ZPNO+J zf0-lgZs?zWIq~q~#m;eY33n#>L}?XxEeV>+^y8e1Yo5XT(EXF-y$iEBhj zN@7W>RdP`(kYX@0Ff`XSFw`})3^6dbGBmU@HPtpSv@$SAK61eeMMG|WN@iLmZVf^+ zGrj>egja<`lmsP~D-;yvr)B1(DwI?fq$*?3oE!Zm>f=FR^A+x6KRs1HJyt+HRYgHmM?zFdLsLsc zQ%pruPexKuM^aKqQB_M(R!dMUQkY7P)=Y`PGeI|WK>OTSxatNOKw_9 zZ(B-nTS|0YN_AdIcwk6+Vn};oM}K5Uf@Vj9XGe%?MU8Dlj(=@Lk8VVeZ$p@LL7H_! zn{`2+ctD?cKcRU*qk2E2dp@LlKc##>rhGoAem$#yJ*|N}uYx?VgFLZ>JF!&a6s4nlRF7T=@_N^@Tt}OVk zEcvf2`mihev41T4u`T6z*YOgTKmIa{KjVd&U^jcqy6Bk{pP#=@!9_P z?Ed=k{{8y?{{H{}|EBrAc>n+a1awkPQveBg;QOvjlK=n#7)eAyR5;6()7Mf0K@^1H z-G$$Pf?`(82{Yz^A|}jXZ82w^_kRX&)GBM1-Lh}zyMLIObJ}rSPZi_2j^oA@l9=mw z3XSI|B7eZu%lpUcT?n`_#+auNaBGY)&mo}vX3Xbf2vGU{;X3S+k*_$+XGh02jw*qR zscHafX8b_l_w$pX%OH>g=$_~SSPTFswZNRDc_49WgEb)SOY)n5bsG!=SxM43Fk*vt zU_p|!1buYapaCdIl8Qj14N}0CBxxH+*`NhjmL#nJZ8qoyCM8MJK%WhAK&K=r1I*f> zR0Z)JNxN}~mjb?e5U4NgZ6<+%pjjNJe}|Pk2pso*>-TwcslvjX<-6)gWLD4rw{nry ei!5(c{l5UE-xQqMHqd+k0000M zgi4xxPFrSEd~icXVNJS+LsVu<%#BOJia|kOKTc&uYHde?b&b-l!vFvP5Oh*bQvhIw zttdd~7z^sr{QkDc>03p*fB*mk(@8`@RCwC$n(LCAFbsu*gJTHEEXJ_={%=~^rnw?n zmSn?B(Qht7oG<5S*~4M4z4qE`uf0;Mah!@>m37hP@2M?PUnig{yq^j>@9Tox?e>_* zAwV^JkAAVH6FMVznwHNSzmc0AZztP!=z$u#3AplPu!anD*3`lGYOT9z$bbj+!w)nf zU&H-a57hXB+{)ZEG>_;E9u|5Jb##RrxuHDlwQPpuqWYQGvCuBff<({6esgH=*pb`0H^fBb& zn;h$xc{9^{C(rQ036#a%g1^wC5Na(|gMog@=4oHrerIFC* zApc@w@4A+v54$|k#6HmPMd-7T?<;6PTuZyBSrrp|N52jHG;3HURylMd5~Nuk^2Rmj zwt%Nu6nz%*XX_$MBQMR)=v!%S<)DvPnmo5Eqpyy^;qXc;&`WcWXp%3dC_~VNJdEp|vq-gT0DnXyFYff&>iT;dyAg`)%UCT$LfxK*y z6|JgKU5n9AT~%Y~vn)-tszy3uEwZ9jH81*l$jcU4(W)x3wAhGvt7?`stC3q()2vEv zRZX)hxfK`@)6x`jt8SXrG%=M$RwK7+rdgfbs)v3S^z$Ll zOS7Y9Zq-P$y17-JX0>xGE6u(%q?}u&X;weCa?9|qn}vxkf)n|pr`gQ8m4SXyF8%gp0vnj zT2%#UHgj%GPqUeGs|@}8$fuznT3cp7L`w@LkWaC+%qEs>Y1vII75!4kKhVc@J+xKP zexjB(n369nj{Z;%c@p|Xk*A4_eyLTDN9DAD?B`RP+-1D=KkIrcivE{o``)_4VM84mvz-_Ary*BwX+U#F jO>@|5uf6u#>;I@<+=d5}Wx6KRs1HJyt+HRYgHmM?zFdLsLscQ%pruPexKuM^aKqQB_M(R!dMUQkY7P)=Y`PGeI|WK>OTSxatNOKw_9Z(B-nTS|0YN_AdIcwk6+Vn};oM}K5U zf@Vj9XGe%?MU8Dlj%`GbZbXo8Lzr|ynsq{(bwQqZK%aO&p?N@~dOxIlKBRj;rF=i8 zd_JgtJ*$5`t${qRf;_N;Jh6m3vV=Udggmr`JGF&7w}(5ri8<1kG}W0j)tWTio-*H{ zG3TT(>ZLI2r!VcOF7K%>@TxBMtt|GgEcmZ1`L8Vcuq*qqEc>x7`?E9qx<&iGPy4`C z`@&lL!(aTyX8g{3{oSMe;H&-SyZ-Un{`ls<)AF~*pu5O8aZG0!2O z{ASGOV+c_B{^2_8l98`C%x6c(HjXNRi>Yb=YG(XE;P>;Bq01nU1L&UU0ay$GC$+$w zqR0Z)JNxN}~mjb?e5U4NgZ6<+%pjjNJe}|Pk z2pso*>-TwcslvjX<-6)gWLD4rw{nryi!5(c{l5UE-xQqMHqd+k0000 - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - + + diff --git a/js/public/img/pics/event_creation-1024w.jpg b/js/public/img/pics/event_creation-1024w.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57c879268ae873691d0dacac9541e39ce2920e01 GIT binary patch literal 178661 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

? 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

t*(o|#MF40 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®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 AU|ACO2g10Sa&{kE8DyORydIX+1 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 aeulW_QPfl4G4k`%hHj63j`=Sv0002Dw6J&p literal 0 HcmV?d00001 diff --git a/js/public/img/pics/event_creation-480w.jpg b/js/public/img/pics/event_creation-480w.jpg new file mode 100644 index 0000000000000000000000000000000000000000..004c872c0f0b8ead2b98f83fdbd82b3653105a52 GIT binary patch literal 55124 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%0ARV@ksbS_#+ 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
_oq`uQbd4Xx>%aI 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%0D5=L=*Mezy%+Riz!<*f+C^8tq9uFU^NgN_ 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 literal 0 HcmV?d00001 diff --git a/js/public/img/pics/group-1024w.webp b/js/public/img/pics/group-1024w.webp new file mode 100644 index 0000000000000000000000000000000000000000..3e9463f90b616fcb5653eaff0b443d09cefb3637 GIT binary patch literal 51678 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

    ggRTh>mGfCXU#<f;Hd^B_ zuRtfP!vqsj3A7O`VXW0zVT86=r>%e9wDl^X6Yfb+BPU_jmFs^UwtYUASyO2T@Rgxh*seflkODvf>yE@i`~i4&(|n z(W7f0J8rJE44OE1*WhAQZ_YeF#s5<9yP>v#5kcEfZQre04yM@aUC3qZ8^9Gou2yZf zlH7EW&pg!SI8|gvP*GuwWY5;ZEC5ND^DBJE8(-cLp)SqnBAsPpb9L+}LtyJ8r^a zbnag60`GSlCcl-bM66;NZYM%X5oOt0QtiR}=@tGz~aQ{iMZ zsr)fn)R~qpuj_EY5#WX`aj1&^6WzACbt$cDPsA%feXmyso(XyUB}s5m|@yaumD z>Y!q%*X~r<#}hpGoXM{5&FUW{-Du})!Of&AA8B`n@mFI7Nv2U+8Q5c%ToeSr>$#_b zF7pgVB}AMXd;ksKt#pI`592#6!>h3k09zFr-|~2qUf(u zoT`6BBFhJ+Mbmt8Kp7w8g4n&la?uy@s6KnVUL<1!Of{6X{tMwQQJrP}vi$<};%TcI zcmi}z%gmn~wy_wfyytPO@1cVw) zgF#sMuIci8y+%IuTQ4rSX&;3lK;f!NDZ@54l3&>(tcH3hKHnr@aV^g+a6g)qMDf!G zxtrgrS5HedQthE7Zj7ONv#U%dE{UbS`*S%)ehu;VpN!Om{zE&_TwA6YbJW8PUF^h5 z%-SDaJ=C|6a@0x@{A1r_n5)F;aOyIp!lomXB@~r&vz|L)s*z_?GwIGgx4)?i$z#a% zYUy{gwYmXXXrJTyk5DFd9j=oAS6TWI-{$DXsS?ls2)aJBe#s?o_A4I1006N}aFHRI z-5L^h;oECNC^rq7muD9dD&xiT$^YgTB!vU8g^%y5gR#I|3i+2CAC+L*@RiU^9dP{7 zB+o^?>C#b~)kll`0-y;nnRAcKzOyODW>jaI?v000{TTqT(fJUi;x;0$rkn^Jqr&37 zp?n0QJIDYkLt~1T+Mx>Ez%xkZ+f6|K5;5+DG>2Fnn(+9!(V9k7e@hqa9=$k(w=u-n z^@tmx*GnC9v5Yzma!8P-9Mz~931HSDwjA?kugy--Z}Jd~69f~d5xyY%_-NSzDM*k^ ztEQ0%kB{jNi&VT~_yG|O1oS1QgYfb9UeFg3RctKwJ2h$>Z;xE3FA7O^YS2p_+tBJl;*0yl2( z4zxH=DNBs*FXO5WC00CPaAe2d$1o4`<~I(M3Sc3NBdOrlBF(R)zcipkGa|F%2k zK9RhFLVoxfJFq`+j}c#DV178Q_fu#9yHs|^jQ(W!+Qo#aGSzoAB_J~aR)tv+Y{WgP zQ5x#dLoLoWc`{C~swDBUg8Z~xdT876sM%^{(S1yFI{%TDrNTP@C>Usr9-vGtZNjT- ziQG5>nRCLrs+HiEcQyAlJ1UWI+=B8J00Vsp@YBsI2FQCB;aWYGvFgT8mAnbypf{LV zzuzo%7CQE0Ii-+WM2$ozZ&L4;-X>|AEf*fI7G+IoRP8iOww8r>4eb(5`$Du#NpRc} zAB(k5IR2nDTegL*b!<2YnVgY`RVaEpj{d@9eA9GvyW10lhe>3J#Cv`wQVxg(A`USO z%KEImJ4>x{LrOktfQ)BHeOi{hNz?QQ3;!?>JOVUR(GLt$8 z5G$cW@ENP-aQlE3z-z|1KyHTAbRvC(HYvwsM`L)Kf@Wb{WM>;I00003zMkbF*h>So zAG!##k}oSuBj8dS5yQwRD()eTEHUhe9Hcx0)lKZ-T2tt#NEEB%ERC=jin8cT&gTi0{7gw+O{hdk;W&l4?f*)_s;ROPl&B~0R PztR|3DNEz|0000081)pp literal 0 HcmV?d00001 diff --git a/js/public/img/pics/group-480w.jpg b/js/public/img/pics/group-480w.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b003dd502f2c716a14ad4e167addaf5e8c59dd2c GIT binary patch literal 65897 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

    aZW9cb|x>1jZDoAu$NpeWiVk@{x{! zmmBmDgx|qNN?LyIrl9$qmj{KjZ8zpa=4edK3FuFS$KFl}bWPoO*Ax#Z1c2#3JAN(O zYhi>`%H9fSnLkAq|5vs>+?U*bdfMc6TmDu+QqnN9xgfZsG25($^;v7U1nBl9Q^o*i z)&?UaYZ=~7XZa75xPKB1s~MB1m<*dN08pqiy*q!)_Kc|;EZs3&nNdMQ5#LFu+J z?*($vO)$hkMOVc16f-ep;K@_~&Y6t?0t9I0(lBkZBfic|u)3pK$Xv=A@jUQnB2sC` zbI)L9m;VNkWOao}2c3b4_u4+bg zuf-@d1$?asdD1~mORQ02#!&1Xm#41*xz}wETNqKb;kueQ*~OpcAXTpJFYUYcKoA&Z z8Ke=2Vh~cu_uTb&6AH75L!k8zo~&wRsDLs^3YkD2!~;%u6sFrzV2A5(FQ|3}+0-K- zWX)W2yq%?^)iKhyMGPB5*DnWBaLqAHLJ47;r5nvkeq3u_?J{Xaf_}6I+xpLwKS7NC z|KYU%zup)8i85jc)^Yt*I0W8;+zHUI3V7@o;3DUYasdq>DFK%im4J)F?;|B-<=}8R z>HESGa5)KyCnGII|E+YX&h4Y+xCRvyX@oGhhG4 j58+{W$RJv~NLLKlV4)8v^7hU(R-4l(}$teLl` diff --git a/js/public/img/icons/badge-128x128.png b/js/public/img/icons/badge-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..41328edec474ee4f7cc1adf018c190fb8f6a3c17 GIT binary patch literal 1668 zcmZuyc~H}b63&50K+YiH2pEvFBoWdA1_9-)JV2DIV5U4G(A0)-MiWY!21FnT;zh&* zN<_}45Cev)96u9~!$@1XQqEuniZqaDA;?i0$3NfOncZ)9XTJGncV=hVCr^B?t8K0g z0)cdcj|W7kk@dl~G}Te;Lwv3VSo-m}ED*?S_k)8OpMf{jO*3j>EHyIiD=LkcnGB-Q zXxOu<#jiTR`PZNrwqmg~eRb|C^6xEmHa2g#79$r<`PI&2&Y0_9Bq6V<4=R4UOVB6l zNeBLr@OHnKcTO#;a`(J*AK!ogC-7a2} z3jG1P3OQQ6{PUz`x!&M{~?d>i&R?w_Hw8{%V~iiX}7-aRyC%~TY9#IEAx zc@Ue96s2W-eK03FjJ5w(+ttn{`(y9QnI$2X6aDeg@PsCRi%*dsQ`B{L!55<%8)9xL zT#u5}(gc&a-lhTE(!ZkJz~?>Nl;!>w5!c9keGLr8>zj- zko3NrC_{+E)zkS`0ZU-DH{Yph0jv+6%=LX$cww(rS<$S%#EGhFJBUkgPB+>rtzLMk zlLE#%r%;k4o~#$Z+3h1;kM2UMYD!o3zh2RkX)UR1ByHGOTjXO}_6IojQ`ozqz zR3!n+_RA)+&?K0`>(@nohwl2Q3G02n_rOcDLep8|du@?npFk2XDs^z3DCvBM2t?CN z=3bzl3;tUi+kBU(sX!<#75c;ierzR>A%451HI6V^iciUr1r?f(StQbXtP6w>btduB zKdhLQ>Cp!)3Kx(iZCaC6s(XoOee=Xe6RsR##sOhz*OV*AOuB$%s8Oi&QCe*GX($;< zMWmcO`qb;gz5%+EwxyFD5WLu-;4zss5T8qb?g}=6w(727Do2a$8tn}WZnxe@gz#`< zv-3v1-^-u6lPi+FY#Nbp0OwC?BD0t>lK)QmN8*`+REx_-Ra0S4uf^(2-%IBtLSpN( z!yc$SV!zT?Ry=lRt7(}Cc>}?Cm)3Lg3z&;umhQQ&se1~_q~JvGdW2AZ!O zJ~^Iw(5bP>?${unfu<0~oIXq_Xh)-_hdnOop2MgNuMN6_yWB=9S@QFl&gT-J%+mL~ z!t`lKDZC$EE!`=X208w;d_%2~ZZNs8(#dC&@r0XtR9JKRgN%!!mfKa^disIwXzEMv z+9dU2K#YWj9DG-|W*u=0xl0-4D?BN!dH*#G?wdPtBFMrcFE#{jupZ>u?{--QNCLoBwCoTL^{aF_#_>c%=G+fPw>01T_04 GEX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{H z_@gcQq%HiWEdHk}{-`kitVsU3cK*GA{=bI)*SP=N!T;dP|LNNQ?&JUe|0LgMfdBvi z0b)x>L^43qOvnHL0CY)2K~xwS1;Gg-LID6k!FfkMvPRjmQw`a>|KZF801&YL`F;Ze zzBZc=AmH=w_Z14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>WRE8{w#)hawXn|-Xp4{E;v!=;4B^%-x&;Cm1 zP>^*#n_J!T^1SBMI!C4h-R53dN8`?ylD}d{L%(vZvUKT)~-CgWFQy3lt zIqW5#zOL*K8HL%o&D;R|TePl5?VWhq^wrj^qed%lKKkpp-FogeyEi+p zE?K8rW7E1fuEJ{5jaaAp0~aIt+keS?T)@vXM=*X}V#VGMCm1~v-+0wr{w3CJ-R8wG zS@XVpzqP-5Mf0H?y-zh=XVL>S6E;rKnDmrMQlmoKbK9p$evXN`oe{6g>lvi)-+#c) zb+Al&$zRqtWk1@VTt6MPmq9d7^!kmXZn8k{sFt`!l%ynwlArU1(iRB6fMfqu& zIjIUIl?AB^nFS@u3=9=>9)IHDC=AokIOTu(jOWuJ24-b$y<~1-Wnu5hBFw@HE)6D! wQ<#-EhbWxBaplC3Ge=~Ou%B-5Sm33{@Jd{;RG<|Mp00i_>zopr0DGh}-~a#s diff --git a/js/public/img/icons/favicon-32x32.png b/js/public/img/icons/favicon-32x32.png index 46ca04dee251a4fa85a2891a145fbe20cc619d96..0f07a6a04c4cc235d378bb85e3a530903ee9dd19 100644 GIT binary patch delta 994 zcmV<810DSL3HJw(BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{H0E_M$HMqb>QQEr0%}EB>b}{;*j7v0DDJUH-Xq{<(Jk zy@CF~hyKW#{>`QS)3E;7y8qtA|K!sD@#z2e@&Eq(|Ns9Sq_BYi0004EOGiXelxch_ z0002@Nklnj1tB8l?CJgR!gNdfJGA=18jPunr{dMMQ!mkT*aYm=Dtx zU?L7G0EIB$1_)xn2iOVoT>w7@Jb=A0FIxh5gWeGIdxK=URV)J;qs)BNhsp@BVSv-9 zlUw#q%F^FiELetho$5|=?9#Rm=X1a3*|L43YDY5wQwP=FJ9+2a$^ZTCA4iPPz|Swx Qa{vGU07*qoM6N<$f~oq-EC2ui literal 1271 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+0817m!EPlzi}fpbWjb7-1N zREF=ab|~82?p|H&9FPi<3Q0p2_nKbg9F`6d2a)0F5LviN5F-?-1uh6wgGU@;KHLFx zWcX}ub<4|h4hH*lce~e|TIa|N-yLo4RYl&*8eQTtJ=)5A);GJR=Xg%80{Y!&YpYvf zzSsOZP>Ahpcdsq>UfJl9kmb=;?z6GQH8a<1TD9-CHn-w}|NsA+Nb6JrgE+J#$S)X3 zGcfS;fdK35)2Be-Oetf?`zOY13)%G^e)6sPw@*;|%KXdcU#*P1v1-S;t21mOG>nAE-eH;@V%$t;WjcxYXwEUbR z3z>7z#DtTVO-oacoh9{_MQY8Ot-i}F{j^uD+E(t7w)x6MKX=vIp4w>b*IOPH6jixJ zZ#|uAv~yR1m9_1`d$&$jY?ogCnOnuicG8u{jt?HmM3~l)E(#;^5{P>Y|zRB0* zEz%!bA15~jCmrhl{dVr6;-~M#%Kx{>DI^zpsl1afdH67nWtqCYg=$*b#>z9DEt9H` z|+MWPFs%ZPNO+J zf0-lgZs?zWIq~q~#m;eY33n#>L}?XxEeV>+^y8e1Yo5XT(EXF-y$iEBhj zN@7W>RdP`(kYX@0Ff`XSFw`})3^6dbGBmU@HPtpSv@$SAK61eeMMG|WN@iLmZVf^+ zGrj>egja<`lmsP~D-;yvr)B1(DwI?fq$*?3oE!Zm>f=FR^A+ \ No newline at end of file diff --git a/js/public/img/icons/icon-128x128.png b/js/public/img/icons/icon-128x128.png deleted file mode 100644 index 8813cc5f93d4a01db47ec51a4899e21db1abc9f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 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 literal 0 HcmV?d00001 diff --git a/js/public/img/icons/icon-168x168.png b/js/public/img/icons/icon-168x168.png new file mode 100644 index 0000000000000000000000000000000000000000..c28edb93b304d4f5882c736f7bf24637e199339a GIT binary patch literal 4471 zcmZvfXE+={x5vfmJ<;n*5S{3~_quvny@W_4tR5w-wrWI6(M3cML>F~M7oum?wW|eD zR*Pj>*ZbwYAMSnTIWzw`^X;79JTw1fGgCck3N{J?0s?9SeQk@|^~-;PjPQ2G2}-UL z5ZsCP(b6(A(9+`e5AgHy@qJ7{AdnfAsiNPf&N1NPV3ca5XlK@cUn{tQTWIZzwSZ=V znQ+stYrqb(w2!`pBL^`eHV&9-P0H-;#OX+^fdTZ7j~h(s7+$$pJh{8x3sFO^L@aj! zuEvEd$BQ89b0R$1h7{kgs_4RX=-jj=Vq*G@qf8lQFdQ!Dn4>eX-p0;}YlX|4*b#za zb>*KyeGib_MaZV0U$}k=o3{*Wfol?RV)|FZ!3&#mzxZI+%2HmQQYZZq?xnK>0nCjJ zrT0L0hZwEPBBOsjPB>xmZU%erM;tTjQY?;2B7A6g5_Ci~;t5!Tt;`Y z*n)>#o)JnFf09!KUy&uf05BssO^^Vw(3oC+CrMsCipf*vR5*?`%93llhd3Ouj9kRY zM-ep4T3?dL%M1A@SL;|8~FA@|p}54`Oc;y-amQy@R= zHc1*}V4_31NlZq|$(1adX?&X^aW~S_Cb;>}DCw%mCLo{;#vccH7W%{V*6*gL za0?Baclp7C)7wXc{KBht@+J6|>T~C=s_=B*6gP_!XAdVhTuK6COr=Z@ znCSoiqAL-%!r78aK}x3PZY+0l62b5$LH zOsl1QRb9Aezz?JB|LKxUE!Y3{VSSAb@AHXDYv1Qg`RoIWlp8}Uo;M;5jkZ`FH`J#0 zSZl{fve40%Pkp6Ee?} zaMV$;`{#gGCOkVbpzq>j{|@|JO|b(`>;8M3W#T7^nVmRLYER8z)9#=64l>vVQ7Nxb zbZO9t(LvPC5bag4)m-?^hl0g)D*RMbLj(Z;q<}>XJX__C^NZ4^5%EI#yt4~sWQ}y7 zym(3t0JXO8rck$j>ut^QGyGxx004r#{>_aXBB8yzlKhm!ITHm+WClq1J}E^5kJ z-=tFBC+9din85y8L7(5AoVACYk%h=3jPW1FJHvPB<<&YfsJbuiFDSi*R&>vA!A0J` zmFQLb!sl>GrF^z{mx2B7qh1$Yda);v8=i?t?B&YH{ZGizF!CyO$M-AAI5Hsktznm-f_2qk? zXx`ZZ!Gg|evaE{BmZX7`* zY;>>%c+q~xuqyOq6s&^8xVZnQK3MhR(K8zEE%!VOYnap4tP7ocpv31_YSCEwC)bGu3$D|Ws4LVvG0)`ow3v3yPi&)VJ5d_&QF7T)W& zHj{nzl4s>`qKR`t_Nx6p7m^?oT46J8EyS{b+sdz~z=nU1rO9@cBpWmx9wUDtwThs3 ze7}3=nYjxa!lK3O967XtE0; z8Xw;Ki+hz@1kEUc*NNqC6NMI%Y=9^q;%U7dfHq%P!y=tTjqTp-Zc@#fAHEqEU`Pu< zeGt++dJ&Ltd?u)gA{q0sV2nb5

    @rkW)n970rTj{4oriCf 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 literal 0 HcmV?d00001 diff --git a/js/public/img/icons/icon-256x256.png b/js/public/img/icons/icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..473e081d74f8e3d79d505be8575f9749764d79d1 GIT binary patch literal 6302 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 N6~$)?6;I59{sVnYXdwUq literal 0 HcmV?d00001 diff --git a/js/public/img/icons/icon-384x384.png b/js/public/img/icons/icon-384x384.png deleted file mode 100644 index 8813cc5f93d4a01db47ec51a4899e21db1abc9f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 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 literal 0 HcmV?d00001 diff --git a/js/public/img/icons/icon-96x96.png b/js/public/img/icons/icon-96x96.png index 8813cc5f93d4a01db47ec51a4899e21db1abc9f2..1d00aebc4ee6caca00ef185e46c62ced6506dda3 100644 GIT binary patch literal 2847 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 R$20%{002ovPDHLkV1n`l|EmB1 delta 1160 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 UPfbkO!vFvP07*qoM6N<$g4knYaR2}S literal 4282 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 - - + \ No newline at end of file diff --git a/js/src/graphql/config.ts b/js/src/graphql/config.ts index ba02ad92..37c5649c 100644 --- a/js/src/graphql/config.ts +++ b/js/src/graphql/config.ts @@ -84,6 +84,10 @@ export const CONFIG = gql` instanceFeeds { enabled } + webPush { + enabled + publicKey + } } } `; @@ -160,3 +164,14 @@ export const TIMEZONES = gql` } } `; + +export const WEB_PUSH = gql` + query { + config { + webPush { + enabled + publicKey + } + } + } +`; diff --git a/js/src/graphql/webPush.ts b/js/src/graphql/webPush.ts new file mode 100644 index 00000000..fd4b563c --- /dev/null +++ b/js/src/graphql/webPush.ts @@ -0,0 +1,13 @@ +import gql from "graphql-tag"; + +export const REGISTER_PUSH_MUTATION = gql` + mutation RegisterPush($endpoint: String!, $auth: String!, $p256dh: String!) { + registerPush(endpoint: $endpoint, auth: $auth, p256dh: $p256dh) + } +`; + +export const UNREGISTER_PUSH_MUTATION = gql` + mutation UnRegisterPush($endpoint: String!) { + unregisterPush(endpoint: $endpoint) + } +`; diff --git a/js/src/registerServiceWorker.ts b/js/src/registerServiceWorker.ts index 1473a0af..168a5cb5 100644 --- a/js/src/registerServiceWorker.ts +++ b/js/src/registerServiceWorker.ts @@ -2,33 +2,33 @@ import { register } from "register-service-worker"; -if (process.env.NODE_ENV === "production") { - register(`${process.env.BASE_URL}service-worker.js`, { - ready() { - console.log( - "App is being served from cache by a service worker.\n" + - "For more details, visit https://goo.gl/AFskqB" - ); - }, - registered() { - console.log("Service worker has been registered."); - }, - cached() { - console.log("Content has been cached for offline use."); - }, - updatefound() { - console.log("New content is downloading."); - }, - updated() { - console.log("New content is available; please refresh."); - }, - offline() { - console.log( - "No internet connection found. App is running in offline mode." - ); - }, - error(error) { - console.error("Error during service worker registration:", error); - }, - }); -} +// if (process.env.NODE_ENV === "production") { +register(`${process.env.BASE_URL}service-worker.js`, { + ready() { + console.log( + "App is being served from cache by a service worker.\n" + + "For more details, visit https://goo.gl/AFskqB" + ); + }, + registered() { + console.log("Service worker has been registered."); + }, + cached() { + console.log("Content has been cached for offline use."); + }, + updatefound() { + console.log("New content is downloading."); + }, + updated() { + console.log("New content is available; please refresh."); + }, + offline() { + console.log( + "No internet connection found. App is running in offline mode." + ); + }, + error(error) { + console.error("Error during service worker registration:", error); + }, +}); +// } diff --git a/js/src/service-worker.ts b/js/src/service-worker.ts index ea958ccb..826bc56a 100644 --- a/js/src/service-worker.ts +++ b/js/src/service-worker.ts @@ -11,6 +11,7 @@ import { CacheableResponsePlugin } from "workbox-cacheable-response"; import { ExpirationPlugin } from "workbox-expiration"; import { precacheAndRoute } from "workbox-precaching"; +import { IPushNotification } from "./types/push-notification"; // Use with precache injection // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -75,3 +76,25 @@ registerRoute( ], }) ); + +self.addEventListener("push", async (event: any) => { + const payload = event.data.json() as IPushNotification; + console.log("received push", payload); + const options = { + title: payload.title, + body: payload.body, + icon: "/img/icons/android-chrome-512x512.png", + badge: "/img/icons/badge-128x128.png", + timestamp: new Date(payload.timestamp), + lang: payload.locale, + data: { + dateOfArrival: Date.now(), + }, + }; + + event.waitUntil( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + self.registration.showNotification(payload.title, options) + ); +}); diff --git a/js/src/services/push-subscription.ts b/js/src/services/push-subscription.ts new file mode 100644 index 00000000..d94a95c8 --- /dev/null +++ b/js/src/services/push-subscription.ts @@ -0,0 +1,64 @@ +import apolloProvider from "@/vue-apollo"; +import ApolloClient from "apollo-client"; +import { NormalizedCacheObject } from "apollo-cache-inmemory"; +import { WEB_PUSH } from "../graphql/config"; +import { IConfig } from "../types/config.model"; + +function urlBase64ToUint8Array(base64String: string): Uint8Array { + const padding = "=".repeat((4 - (base64String.length % 4)) % 4); + const base64 = (base64String + padding).replace(/-/g, "+").replace(/_/g, "/"); + + const rawData = window.atob(base64); + const outputArray = new Uint8Array(rawData.length); + + for (let i = 0; i < rawData.length; ++i) { + outputArray[i] = rawData.charCodeAt(i); + } + return outputArray; +} + +export async function subscribeUserToPush(): Promise { + const client = apolloProvider.defaultClient as ApolloClient; + + const registration = await navigator.serviceWorker.ready; + const { data } = await client.mutate<{ config: IConfig }>({ + mutation: WEB_PUSH, + }); + + if (data?.config?.webPush?.enabled && data?.config?.webPush?.publicKey) { + const subscribeOptions = { + userVisibleOnly: true, + applicationServerKey: urlBase64ToUint8Array( + data?.config?.webPush?.publicKey + ), + }; + const pushSubscription = await registration.pushManager.subscribe( + subscribeOptions + ); + console.log( + "Received PushSubscription: ", + JSON.stringify(pushSubscription) + ); + return pushSubscription; + } + return null; +} + +export async function isSubscribed(): Promise { + const registration = await navigator.serviceWorker.ready; + return (await registration.pushManager.getSubscription()) !== null; +} + +export async function unsubscribeUserToPush(): Promise { + console.log("performing unsubscribeUserToPush"); + const registration = await navigator.serviceWorker.ready; + console.log("found registration", registration); + const subscription = await registration.pushManager.getSubscription(); + console.log("found subscription", subscription); + if (subscription && (await subscription?.unsubscribe()) === true) { + console.log("done unsubscription"); + return subscription?.endpoint; + } + console.log("went wrong"); + return undefined; +} diff --git a/js/src/types/config.model.ts b/js/src/types/config.model.ts index 86147207..f135458f 100644 --- a/js/src/types/config.model.ts +++ b/js/src/types/config.model.ts @@ -98,4 +98,8 @@ export interface IConfig { instanceFeeds: { enabled: boolean; }; + webPush: { + enabled: boolean; + publicKey: string; + }; } diff --git a/js/src/types/push-notification.ts b/js/src/types/push-notification.ts new file mode 100644 index 00000000..bfcaf652 --- /dev/null +++ b/js/src/types/push-notification.ts @@ -0,0 +1,7 @@ +export interface IPushNotification { + title: string; + body: string; + url: string; + timestamp: string; + locale: string; +} diff --git a/js/src/views/Settings/Notifications.vue b/js/src/views/Settings/Notifications.vue index e5250e22..93dfa701 100644 --- a/js/src/views/Settings/Notifications.vue +++ b/js/src/views/Settings/Notifications.vue @@ -15,6 +15,19 @@
    +
    +

    {{ $t("Participation notifications") }}

    +
    + {{ + $t("Unsubscribe to WebPush") + }} + {{ $t("WebPush") }} + {{ $t("You can't use webpush in this browser.") }}

    {{ $t("Participation notifications") }}

    @@ -202,6 +215,14 @@ import { IUser } from "../../types/current-user.model"; import RouteName from "../../router/name"; import { IFeedToken } from "@/types/feedtoken.model"; import { CREATE_FEED_TOKEN, DELETE_FEED_TOKEN } from "@/graphql/feed_tokens"; +import { + subscribeUserToPush, + unsubscribeUserToPush, +} from "../../services/push-subscription"; +import { + REGISTER_PUSH_MUTATION, + UNREGISTER_PUSH_MUTATION, +} from "@/graphql/webPush"; @Component({ apollo: { @@ -235,6 +256,8 @@ export default class Notifications extends Vue { showCopiedTooltip = { ics: false, atom: false }; + subscribed = false; + mounted(): void { this.notificationPendingParticipationValues = { [INotificationPendingEnum.NONE]: this.$t("Do not receive any mail"), @@ -307,6 +330,55 @@ export default class Notifications extends Vue { this.feedTokens.push(newToken); } + async subscribeToWebPush(): Promise { + if (this.canShowWebPush()) { + const subscription = await subscribeUserToPush(); + if (subscription) { + const subscriptionJSON = subscription?.toJSON(); + console.log("subscription", subscriptionJSON); + const { data } = await this.$apollo.mutate({ + mutation: REGISTER_PUSH_MUTATION, + variables: { + endpoint: subscriptionJSON.endpoint, + auth: subscriptionJSON?.keys?.auth, + p256dh: subscriptionJSON?.keys?.p256dh, + }, + }); + this.subscribed = true; + console.log(data); + } + } else { + console.log("can't do webpush"); + } + } + + async unsubscribeToWebPush(): Promise { + const endpoint = await unsubscribeUserToPush(); + if (endpoint) { + const { data } = await this.$apollo.mutate({ + mutation: UNREGISTER_PUSH_MUTATION, + variables: { + endpoint, + }, + }); + console.log(data); + this.subscribed = false; + } + } + + canShowWebPush(): boolean { + return window.isSecureContext && !!navigator.serviceWorker; + } + + async created(): Promise { + this.subscribed = await this.isSubscribed(); + } + + private async isSubscribed(): Promise { + const registration = await navigator.serviceWorker.getRegistration(); + return (await registration?.pushManager.getSubscription()) !== null; + } + private async deleteFeedToken(token: string): Promise { await this.$apollo.mutate({ mutation: DELETE_FEED_TOKEN, diff --git a/js/tsconfig.json b/js/tsconfig.json index 05e246d1..5380762d 100644 --- a/js/tsconfig.json +++ b/js/tsconfig.json @@ -18,7 +18,7 @@ "paths": { "@/*": ["src/*"] }, - "lib": ["esnext", "dom", "dom.iterable", "scripthost"] + "lib": ["esnext", "dom", "dom.iterable", "scripthost", "webworker"] }, "include": [ "src/**/*.ts", diff --git a/lib/graphql/resolvers/activity.ex b/lib/graphql/resolvers/activity.ex index 618ccb06..7184fd57 100644 --- a/lib/graphql/resolvers/activity.ex +++ b/lib/graphql/resolvers/activity.ex @@ -5,9 +5,8 @@ defmodule Mobilizon.GraphQL.Resolvers.Activity do import Mobilizon.Users.Guards alias Mobilizon.{Activities, Actors, Users} - alias Mobilizon.Activities.Activity alias Mobilizon.Actors.Actor - alias Mobilizon.Service.Activity, as: ActivityService + alias Mobilizon.Service.Activity.Utils alias Mobilizon.Storage.Page alias Mobilizon.Users.User @@ -27,12 +26,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Activity do limit ) - elements = - Enum.map(elements, fn %Activity{} = activity -> - activity - |> Map.update(:subject_params, %{}, &transform_params/1) - |> Map.put(:object, ActivityService.object(activity)) - end) + elements = Enum.map(elements, &Utils.transform_activity/1) {:ok, %Page{total: total, elements: elements}} else @@ -44,15 +38,4 @@ defmodule Mobilizon.GraphQL.Resolvers.Activity do def group_activity(_, _, _) do {:error, :unauthenticated} end - - @spec transform_params(map()) :: list() - defp transform_params(params) do - Enum.map(params, fn {key, value} -> %{key: key, value: transform_value(value)} end) - end - - defp transform_value(value) when is_list(value) do - Enum.join(value, ",") - end - - defp transform_value(value), do: value end diff --git a/lib/graphql/resolvers/config.ex b/lib/graphql/resolvers/config.ex index ad25b8bb..170993bb 100644 --- a/lib/graphql/resolvers/config.ex +++ b/lib/graphql/resolvers/config.ex @@ -143,6 +143,11 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do }, instance_feeds: %{ enabled: Config.get([:instance, :enable_instance_feeds]) + }, + web_push: %{ + enabled: !is_nil(Application.get_env(:web_push_encryption, :vapid_details)), + public_key: + get_in(Application.get_env(:web_push_encryption, :vapid_details), [:public_key]) } } end diff --git a/lib/graphql/resolvers/push_subscription.ex b/lib/graphql/resolvers/push_subscription.ex index f8b40a9e..30be6482 100644 --- a/lib/graphql/resolvers/push_subscription.ex +++ b/lib/graphql/resolvers/push_subscription.ex @@ -25,25 +25,39 @@ defmodule Mobilizon.GraphQL.Resolvers.PushSubscription do def register_push_subscription(_parent, args, %{ context: %{current_user: %User{id: user_id}} }) do - Users.create_push_subscription(Map.put(args, :user_id, user_id)) + case Users.create_push_subscription(Map.put(args, :user_id, user_id)) do + {:ok, %PushSubscription{}} -> + {:ok, "OK"} + + {:error, err} -> + require Logger + Logger.error(inspect(err)) + {:error, "Something went wrong"} + end end @spec unregister_push_subscription(map(), map(), map()) :: {:ok, PushSubscription.t()} | {:error, :unauthorized} | {:error, :not_found} - def unregister_push_subscription(_parent, %{id: push_subscription_id}, %{ + def unregister_push_subscription(_parent, %{endpoint: push_subscription_endpoint}, %{ context: %{current_user: %User{id: user_id}} }) do with %PushSubscription{user: %User{id: push_subscription_user_id}} = push_subscription <- - Users.get_push_subscription(push_subscription_id), + Users.get_push_subscription_by_endpoint(push_subscription_endpoint), {:user_owns_push_subscription, true} <- - {:user_owns_push_subscription, push_subscription_user_id == user_id} do - Users.delete_push_subscription(push_subscription) + {:user_owns_push_subscription, push_subscription_user_id == user_id}, + {:ok, %PushSubscription{}} <- Users.delete_push_subscription(push_subscription) do + {:ok, "OK"} else {:user_owns_push_subscription, false} -> {:error, :unauthorized} nil -> {:error, :not_found} + + {:error, err} -> + require Logger + Logger.error(inspect(err)) + {:error, "Something went wrong"} end end end diff --git a/lib/graphql/schema.ex b/lib/graphql/schema.ex index 39ea5b39..0c620b6a 100644 --- a/lib/graphql/schema.ex +++ b/lib/graphql/schema.ex @@ -47,6 +47,7 @@ defmodule Mobilizon.GraphQL.Schema do import_types(Schema.ReportType) import_types(Schema.AdminType) import_types(Schema.StatisticsType) + import_types(Schema.Users.PushSubscription) @desc "A struct containing the id of the deleted object" object :deleted_object do @@ -155,6 +156,7 @@ defmodule Mobilizon.GraphQL.Schema do import_fields(:resource_queries) import_fields(:post_queries) import_fields(:statistics_queries) + # import_fields(:push_queries) end @desc """ @@ -179,6 +181,7 @@ defmodule Mobilizon.GraphQL.Schema do import_fields(:post_mutations) import_fields(:actor_mutations) import_fields(:follower_mutations) + import_fields(:push_mutations) end @desc """ diff --git a/lib/graphql/schema/config.ex b/lib/graphql/schema/config.ex index d33cca9f..8e0ef2c1 100644 --- a/lib/graphql/schema/config.ex +++ b/lib/graphql/schema/config.ex @@ -64,6 +64,7 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do field(:auth, :auth, description: "The instance auth methods") field(:instance_feeds, :instance_feeds, description: "The instance's feed settings") + field(:web_push, :web_push, description: "Web Push settings for the instance") end @desc """ @@ -301,6 +302,11 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do field(:enabled, :boolean, description: "Whether the instance-wide feeds are enabled") end + object :web_push do + field(:enabled, :boolean, description: "Whether the WebPush feature is enabled") + field(:public_key, :string, description: "The server's public WebPush VAPID key") + end + object :config_queries do @desc "Get the instance config" field :config, :config do diff --git a/lib/graphql/schema/users/push_subscription.ex b/lib/graphql/schema/users/push_subscription.ex index 43376b44..9bf4c54a 100644 --- a/lib/graphql/schema/users/push_subscription.ex +++ b/lib/graphql/schema/users/push_subscription.ex @@ -5,29 +5,32 @@ defmodule Mobilizon.GraphQL.Schema.Users.PushSubscription do use Absinthe.Schema.Notation alias Mobilizon.GraphQL.Resolvers.PushSubscription - @desc """ - An object representing the keys for a push subscription - """ - input_object :push_subscription_keys do - field(:p256dh, non_null(:string)) - field(:auth, non_null(:string)) - end + # object :push_subscription do + # field(:id, :id) + # end - object :push_queries do - field :list_push_subscriptions, :paginated_push_subscription_list do - resolve(&PushSubscription.list_user_push_subscriptions/3) - end - end + # @desc "A paginated list of subscriptions" + # object :paginated_push_subscription_list do + # field(:elements, list_of(:push_subscription), description: "A list of push subscriptions") + # field(:total, :integer, description: "The total number of push subscriptions in the list") + # end + + # object :push_queries do + # field :list_push_subscriptions, :paginated_push_subscription_list do + # resolve(&PushSubscription.list_user_push_subscriptions/3) + # end + # end object :push_mutations do - field :register_push_mutation, :string do + field :register_push, :string do arg(:endpoint, non_null(:string)) - arg(:keys, non_null(:push_subscription_keys)) + arg(:auth, non_null(:string)) + arg(:p256dh, non_null(:string)) resolve(&PushSubscription.register_push_subscription/3) end - field :unregister_push_mutation, :string do - arg(:id, non_null(:id)) + field :unregister_push, :string do + arg(:endpoint, non_null(:string)) resolve(&PushSubscription.unregister_push_subscription/3) end end diff --git a/lib/mobilizon/users/push_subscription.ex b/lib/mobilizon/users/push_subscription.ex index 0ea7fa77..2dc8c24c 100644 --- a/lib/mobilizon/users/push_subscription.ex +++ b/lib/mobilizon/users/push_subscription.ex @@ -3,45 +3,29 @@ defmodule Mobilizon.Users.PushSubscription do alias Mobilizon.Users.User import Ecto.Changeset + @primary_key {:id, :binary_id, autogenerate: true} schema "user_push_subscriptions" do field(:digest, :string) belongs_to(:user, User) - - embeds_one :data, Data, on_replace: :delete do - field(:endpoint, :string) - - embeds_one :keys, Keys, on_replace: :delete do - field(:auth, :string) - field(:p256dh, :string) - end - end - + field(:endpoint, :string) + field(:auth, :string) + field(:p256dh, :string) timestamps() end @doc false def changeset(push_subscription, attrs) do push_subscription - |> cast(attrs, [:user_id]) - |> cast_embed(:data, with: &cast_data/2) - |> put_change(:digest, compute_digest(attrs.data)) - |> validate_required([:digest, :user_id, :data]) + |> cast(attrs, [:user_id, :endpoint, :auth, :p256dh]) + |> put_change(:digest, compute_digest(attrs)) + |> validate_required([:digest, :user_id, :endpoint, :auth, :p256dh]) + |> unique_constraint([:digest, :user_id], name: :user_push_subscriptions_user_id_digest_index) end - defp cast_data(schema, attrs) do - schema - |> cast(attrs, [:endpoint]) - |> cast_embed(:keys, with: &cast_keys/2) - |> validate_required([:endpoint, :keys]) - end + defp compute_digest(attrs) do + data = + Jason.encode!(%{endpoint: attrs.endpoint, keys: %{auth: attrs.auth, p256dh: attrs.p256dh}}) - defp cast_keys(schema, attrs) do - schema - |> cast(attrs, [:auth, :p256dh]) - |> validate_required([:auth, :p256dh]) - end - - defp compute_digest(data) do :sha256 |> :crypto.hash(data) |> Base.encode16() diff --git a/lib/mobilizon/users/users.ex b/lib/mobilizon/users/users.ex index 30e04f18..b20166ae 100644 --- a/lib/mobilizon/users/users.ex +++ b/lib/mobilizon/users/users.ex @@ -413,17 +413,16 @@ defmodule Mobilizon.Users do def list_user_push_subscriptions(user_id, page \\ nil, limit \\ nil) do PushSubscription |> where([p], p.user_id == ^user_id) - |> preload([:user]) |> Page.build_page(page, limit) end @doc """ - Get a push subscription by their ID + Get a push subscription by their endpoint """ - @spec get_push_subscription(String.t() | integer()) :: PushSubscription.t() | nil - def get_push_subscription(push_subscription_id) do + @spec get_push_subscription_by_endpoint(String.t()) :: PushSubscription.t() | nil + def get_push_subscription_by_endpoint(endpoint) do PushSubscription - |> Repo.get(push_subscription_id) + |> Repo.get_by(endpoint: endpoint) |> Repo.preload([:user]) end diff --git a/lib/service/activity/renderer/discussion.ex b/lib/service/activity/renderer/discussion.ex new file mode 100644 index 00000000..f156d2fa --- /dev/null +++ b/lib/service/activity/renderer/discussion.ex @@ -0,0 +1,83 @@ +defmodule Mobilizon.Service.Activity.Renderer.Discussion do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :discussion_created -> + %{ + body: + dgettext("activity", "%{profile} created the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_replied -> + %{ + body: + dgettext("activity", "%{profile} replied to the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_renamed -> + %{ + body: + dgettext("activity", "%{profile} renamed the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_archived -> + %{ + body: + dgettext("activity", "%{profile} archived the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_deleted -> + %{ + body: + dgettext("activity", "%{profile} deleted the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: nil + } + end + end + + defp discussion_url(activity) do + Routes.page_url( + Endpoint, + :discussion, + Actor.preferred_username_and_domain(activity.group), + activity.subject_params["discussion_slug"] + ) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["discussion_title"] +end diff --git a/lib/service/activity/renderer/event.ex b/lib/service/activity/renderer/event.ex new file mode 100644 index 00000000..8f70c92d --- /dev/null +++ b/lib/service/activity/renderer/event.ex @@ -0,0 +1,83 @@ +defmodule Mobilizon.Service.Activity.Renderer.Event do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :event_created -> + %{ + body: + dgettext("activity", "The event %{event} was created by %{profile}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: event_url(activity) + } + + :event_updated -> + %{ + body: + dgettext("activity", "The event %{event} was updated by %{profile}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: event_url(activity) + } + + :event_deleted -> + %{ + body: + dgettext("activity", "The event %{event} was deleted by %{profile}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: nil + } + + :comment_posted -> + if activity.subject_params["comment_reply_to"] do + %{ + body: + dgettext("activity", "%{profile} replied to a comment on the event %{event}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: event_url(activity) + } + else + %{ + body: + dgettext("activity", "%{profile} posted a comment on the event %{event}.", %{ + profile: profile(activity), + event: title(activity) + }), + url: event_url(activity) + } + end + end + end + + defp event_url(activity) do + Routes.page_url( + Endpoint, + :event, + activity.subject_params["event_uuid"] + ) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["event_title"] +end diff --git a/lib/service/activity/renderer/group.ex b/lib/service/activity/renderer/group.ex new file mode 100644 index 00000000..cb0fa455 --- /dev/null +++ b/lib/service/activity/renderer/group.ex @@ -0,0 +1,58 @@ +defmodule Mobilizon.Service.Activity.Renderer.Group do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :post_created -> + %{ + body: + dgettext("activity", "The post %{post} was created by %{profile}.", %{ + profile: profile(activity), + post: title(activity) + }), + url: post_url(activity) + } + + :post_updated -> + %{ + body: + dgettext("activity", "The post %{post} was updated by %{profile}.", %{ + profile: profile(activity), + post: title(activity) + }), + url: post_url(activity) + } + + :post_deleted -> + %{ + body: + dgettext("activity", "The post %{post} was deleted by %{profile}.", %{ + profile: profile(activity), + post: title(activity) + }), + url: post_url(activity) + } + end + end + + defp post_url(activity) do + Routes.page_url(Endpoint, :post, activity.subject_params["post_slug"]) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["post_title"] +end diff --git a/lib/service/activity/renderer/member.ex b/lib/service/activity/renderer/member.ex new file mode 100644 index 00000000..4e804229 --- /dev/null +++ b/lib/service/activity/renderer/member.ex @@ -0,0 +1,122 @@ +defmodule Mobilizon.Service.Activity.Renderer.Member do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :member_request -> + %{ + body: + dgettext("activity", "%{member} requested to join the group.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_invited -> + %{ + body: + dgettext("activity", "%{member} was invited by %{profile}.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_accepted_invitation -> + %{ + body: + dgettext("activity", "%{member} accepted the invitation to join the group.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_rejected_invitation -> + %{ + body: + dgettext("activity", "%{member} rejected the invitation to join the group.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_joined -> + %{ + body: + dgettext("activity", "%{member} joined the group.", %{ + member: title(activity) + }), + url: member_url(activity) + } + + :member_added -> + %{ + body: + dgettext("activity", "%{profile} added the member %{member}.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_updated -> + %{ + body: + dgettext("activity", "%{profile} updated the member %{member}.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_removed -> + %{ + body: + dgettext("activity", "%{profile} excluded member %{member}.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + + :member_quit -> + %{ + body: + dgettext("activity", "%{profile} quit the group.", %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + end + end + + defp member_url(activity) do + Routes.page_url( + Endpoint, + :discussion, + Actor.preferred_username_and_domain(activity.group), + activity.subject_params["discussion_slug"] + ) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["discussion_title"] +end diff --git a/lib/service/activity/renderer/post.ex b/lib/service/activity/renderer/post.ex new file mode 100644 index 00000000..6636f128 --- /dev/null +++ b/lib/service/activity/renderer/post.ex @@ -0,0 +1,83 @@ +defmodule Mobilizon.Service.Activity.Renderer.Post do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :discussion_created -> + %{ + body: + dgettext("activity", "%{profile} created the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_replied -> + %{ + body: + dgettext("activity", "%{profile} replied to the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_renamed -> + %{ + body: + dgettext("activity", "%{profile} renamed the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_archived -> + %{ + body: + dgettext("activity", "%{profile} archived the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_deleted -> + %{ + body: + dgettext("activity", "%{profile} deleted the discussion %{discussion}.", %{ + profile: profile(activity), + discussion: title(activity) + }), + url: nil + } + end + end + + defp discussion_url(activity) do + Routes.page_url( + Endpoint, + :discussion, + Actor.preferred_username_and_domain(activity.group), + activity.subject_params["discussion_slug"] + ) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["discussion_title"] +end diff --git a/lib/service/activity/renderer/renderer.ex b/lib/service/activity/renderer/renderer.ex new file mode 100644 index 00000000..5a56edb5 --- /dev/null +++ b/lib/service/activity/renderer/renderer.ex @@ -0,0 +1,47 @@ +defmodule Mobilizon.Service.Activity.Renderer do + @moduledoc """ + Behavior for Activity renderers + """ + + alias Mobilizon.Config + alias Mobilizon.Activities.Activity + alias Mobilizon.Service.Activity.Renderer.{Discussion, Event, Group, Member, Post, Resource} + require Logger + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @type render :: %{body: String.t(), url: String.t()} + + @callback render(entity :: Activity.t(), Keyword.t()) :: render() + + @spec render(Activity.t()) :: render() + def render(%Activity{} = activity, options \\ []) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + res = + activity + |> do_render(options) + |> Map.put(:timestamp, DateTime.utc_now() |> DateTime.to_iso8601()) + |> Map.put(:locale, Keyword.get(options, :locale, "en")) + |> Map.put( + :title, + dgettext("activity", "Activity on %{instance}", %{instance: Config.instance_name()}) + ) + + Logger.debug("notification to be sent") + Logger.debug(inspect(res)) + res + end + + defp do_render(%Activity{type: type} = activity, options) do + case type do + :discussion -> Discussion.render(activity, options) + :event -> Event.render(activity, options) + :group -> Group.render(activity, options) + :member -> Member.render(activity, options) + :post -> Post.render(activity, options) + :resource -> Resource.render(activity, options) + _ -> nil + end + end +end diff --git a/lib/service/activity/renderer/resource.ex b/lib/service/activity/renderer/resource.ex new file mode 100644 index 00000000..5355d527 --- /dev/null +++ b/lib/service/activity/renderer/resource.ex @@ -0,0 +1,122 @@ +defmodule Mobilizon.Service.Activity.Renderer.Resource do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + + case activity.subject do + :resource_created -> + if activity.subject_params["is_folder"] do + %{ + body: + dgettext("activity", "%{profile} created the folder %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + else + %{ + body: + dgettext("activity", "%{profile} created the resource %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + end + + :resource_renamed -> + if activity.subject_params["is_folder"] do + %{ + body: + dgettext( + "activity", + "%{profile} renamed the folder from %{old_resource_title} to %{resource}.", + %{ + profile: profile(activity), + resource: title(activity), + old_resource_title: activity.subject_params["old_resource_title"] + } + ), + url: resource_url(activity) + } + else + %{ + body: + dgettext( + "activity", + "%{profile} renamed the resource from %{old_resource_title} to %{resource}.", + %{ + profile: profile(activity), + resource: title(activity), + old_resource_title: activity.subject_params["old_resource_title"] + } + ), + url: resource_url(activity) + } + end + + :resource_moved -> + if activity.subject_params["is_folder"] do + %{ + body: + dgettext("activity", "%{profile} moved the folder %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + else + %{ + body: + dgettext("activity", "%{profile} moved the resource %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + end + + :resource_deleted -> + if activity.subject_params["is_folder"] do + %{ + body: + dgettext("activity", "%{profile} deleted the folder %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + else + %{ + body: + dgettext("activity", "%{profile} deleted the resource %{resource}.", %{ + profile: profile(activity), + resource: title(activity) + }), + url: resource_url(activity) + } + end + end + end + + defp resource_url(activity) do + Routes.page_url(Endpoint, :resource, activity.subject_params["resource_uuid"]) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp title(activity), do: activity.subject_params["resource_title"] +end diff --git a/lib/service/activity/utils.ex b/lib/service/activity/utils.ex new file mode 100644 index 00000000..dcb26e2d --- /dev/null +++ b/lib/service/activity/utils.ex @@ -0,0 +1,30 @@ +defmodule Mobilizon.Service.Activity.Utils do + @moduledoc """ + Utils for activities + """ + + alias Mobilizon.Activities.Activity + alias Mobilizon.Service.Activity, as: ActivityService + + def transform_activity(%Activity{} = activity) do + activity + |> Map.update(:subject_params, %{}, &transform_params/1) + |> add_activity_object() + end + + @spec add_activity_object(Activity.t()) :: Activity.t() + def add_activity_object(%Activity{} = activity) do + Map.put(activity, :object, ActivityService.object(activity)) + end + + @spec transform_params(map()) :: list() + defp transform_params(params) do + Enum.map(params, fn {key, value} -> %{key: key, value: transform_value(value)} end) + end + + defp transform_value(value) when is_list(value) do + Enum.join(value, ",") + end + + defp transform_value(value), do: value +end diff --git a/lib/service/notifier/push.ex b/lib/service/notifier/push.ex index e9b7c0b9..6043e0eb 100644 --- a/lib/service/notifier/push.ex +++ b/lib/service/notifier/push.ex @@ -4,10 +4,11 @@ defmodule Mobilizon.Service.Notifier.Push do """ alias Mobilizon.Activities.Activity alias Mobilizon.{Config, Users} + alias Mobilizon.Service.Activity.{Renderer, Utils} alias Mobilizon.Service.Notifier alias Mobilizon.Service.Notifier.Push alias Mobilizon.Storage.Page - alias Mobilizon.Users.User + alias Mobilizon.Users.{PushSubscription, User} @behaviour Notifier @@ -17,26 +18,37 @@ defmodule Mobilizon.Service.Notifier.Push do end @impl Notifier - def send(%User{id: user_id} = _user, %Activity{} = activity, _opts) do + def send(user, activity, options \\ []) + + def send(%User{id: user_id, locale: locale} = _user, %Activity{} = activity, options) do + options = Keyword.put_new(options, :locale, locale) + %Page{elements: subscriptions} = Users.list_user_push_subscriptions(user_id, 1, 100) - Enum.each(subscriptions, &send_subscription(activity, &1)) + Enum.map(subscriptions, &send_subscription(activity, convert_subscription(&1), options)) end @impl Notifier - def send(%User{} = user, activities, opts) when is_list(activities) do - Enum.each(activities, &Push.send(user, &1, opts)) + def send(%User{} = user, activities, options) when is_list(activities) do + Enum.map(activities, &Push.send(user, &1, options)) end - defp payload(%Activity{subject: subject}) do - %{ - title: subject - } + defp send_subscription(activity, subscription, options) do + activity + |> payload(options) + |> WebPushEncryption.send_web_push(subscription) + end + + defp payload(%Activity{} = activity, options) do + activity + |> Utils.add_activity_object() + |> Renderer.render(options) |> Jason.encode!() end - defp send_subscription(activity, subscription) do - activity - |> payload() - |> WebPushEncryption.send_web_push(subscription) + defp convert_subscription(%PushSubscription{} = subscription) do + %{ + endpoint: subscription.endpoint, + keys: %{auth: subscription.auth, p256dh: subscription.p256dh} + } end end diff --git a/priv/gettext/activity.pot b/priv/gettext/activity.pot index bbfd28fc..3dcd2c33 100644 --- a/priv/gettext/activity.pot +++ b/priv/gettext/activity.pot @@ -11,52 +11,54 @@ msgid "" msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -67,75 +69,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -148,73 +153,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -228,3 +233,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ar/LC_MESSAGES/activity.po b/priv/gettext/ar/LC_MESSAGES/activity.po index 35b2eb9e..496fa0dd 100644 --- a/priv/gettext/ar/LC_MESSAGES/activity.po +++ b/priv/gettext/ar/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=6\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -237,3 +242,8 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ar/LC_MESSAGES/default.po b/priv/gettext/ar/LC_MESSAGES/default.po index b3ecfb3e..e27541f2 100644 --- a/priv/gettext/ar/LC_MESSAGES/default.po +++ b/priv/gettext/ar/LC_MESSAGES/default.po @@ -31,7 +31,7 @@ msgid "Activate my account" msgstr "تنشيط حسابي" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "أطلب مِن المجتمَع على Framacolibri" @@ -135,7 +135,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "تنبيه" @@ -744,7 +744,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -807,7 +807,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} هو خادم موبيليزون Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} هو خادم موبيليزون Mobilizon." @@ -891,7 +891,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "تعلّم المزيد عن Mobilizon." @@ -1059,7 +1059,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1385,7 +1385,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1437,6 +1437,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/activity.po b/priv/gettext/be/LC_MESSAGES/activity.po index 50607f40..acf443d6 100644 --- a/priv/gettext/be/LC_MESSAGES/activity.po +++ b/priv/gettext/be/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -231,3 +236,8 @@ msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" msgstr[2] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/default.po b/priv/gettext/be/LC_MESSAGES/default.po index 7fbe8896..8dfb26e9 100644 --- a/priv/gettext/be/LC_MESSAGES/default.po +++ b/priv/gettext/be/LC_MESSAGES/default.po @@ -28,7 +28,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -132,7 +132,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -726,7 +726,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -783,7 +783,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -867,7 +867,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1035,7 +1035,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1361,7 +1361,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1413,6 +1413,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/activity.po b/priv/gettext/ca/LC_MESSAGES/activity.po index 2dc7bf60..f02a0410 100644 --- a/priv/gettext/ca/LC_MESSAGES/activity.po +++ b/priv/gettext/ca/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/default.po b/priv/gettext/ca/LC_MESSAGES/default.po index 18a7a9d9..408cb561 100644 --- a/priv/gettext/ca/LC_MESSAGES/default.po +++ b/priv/gettext/ca/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Activa el meu compte" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Pregunta a la comunitat a Framacolibri" @@ -142,7 +142,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Algú ha soŀlicitat a %{instance} una contrasenya nova." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Alerta" @@ -892,7 +892,7 @@ msgstr "" "confirma l'adreça de correu que has introduït:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Necessites ajuda? Alguna cosa no funciona?" @@ -954,7 +954,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} és un servidor de Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} és un servidor de Mobilizon." @@ -1055,7 +1055,7 @@ msgstr "" "l'enllaç de dalt i clica al botó de participació." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Per aprendre més de Mobilizon." @@ -1231,7 +1231,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Si no has fet tu aquest canvi, pots ignorar aquest missatge." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "No ho facis servir més que proves, sisplau." @@ -1610,7 +1610,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Ho sentim, s'ha produït un error al nostre costat." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Aquesta és una web de proves per provar la beta de Mobilizon." @@ -1662,6 +1662,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/activity.po b/priv/gettext/cs/LC_MESSAGES/activity.po index c1c41302..b1d9bc2f 100644 --- a/priv/gettext/cs/LC_MESSAGES/activity.po +++ b/priv/gettext/cs/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -231,3 +236,8 @@ msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" msgstr[2] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/default.po b/priv/gettext/cs/LC_MESSAGES/default.po index be19692f..78f4ae32 100644 --- a/priv/gettext/cs/LC_MESSAGES/default.po +++ b/priv/gettext/cs/LC_MESSAGES/default.po @@ -28,7 +28,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -132,7 +132,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -726,7 +726,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -783,7 +783,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -867,7 +867,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1035,7 +1035,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1361,7 +1361,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1413,6 +1413,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/activity.po b/priv/gettext/de/LC_MESSAGES/activity.po index 83419e27..db677c96 100644 --- a/priv/gettext/de/LC_MESSAGES/activity.po +++ b/priv/gettext/de/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index 78ae91b9..d684bdd3 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -33,7 +33,7 @@ msgid "Activate my account" msgstr "Mein Konto aktivieren" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Richte deine Fragen an die Gemeinschaft auf Framacolibri" @@ -145,7 +145,7 @@ msgstr "" "Du hast ein neues Passwort für deinen Account auf %{instance} angefragt." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Warnung" @@ -922,7 +922,7 @@ msgstr "" "angegebene E-Mail Adresse:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Brauchst Du Hilfe? Funktioniert etwas nicht richtig?" @@ -986,7 +986,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} ist ein Mobilizon-Server." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} ist ein Mobilizon-Server." @@ -1088,7 +1088,7 @@ msgstr "" "auf die Veranstaltungs-Seite und klicke auf den Teilnahme-Button." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Lerne mehr über Mobilizon!" @@ -1273,7 +1273,7 @@ msgstr "" "diese Meldung." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Bitte verwenden Sie es nicht für reale Zwecke." @@ -1719,7 +1719,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Es tut uns leid, aber auf unserer Seite ist etwas schief gelaufen." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Dies ist eine Demo-Seite, um die Beta-Version von Mobilizon zu testen." @@ -1777,6 +1777,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 9f2091da..71c75d69 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -14,7 +14,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -118,7 +118,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -707,7 +707,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -762,7 +762,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -846,7 +846,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1014,7 +1014,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1340,7 +1340,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1392,6 +1392,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/activity.po b/priv/gettext/en/LC_MESSAGES/activity.po index 55bd8a9b..5f762726 100644 --- a/priv/gettext/en/LC_MESSAGES/activity.po +++ b/priv/gettext/en/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index c4cd0226..0b8675bc 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -37,7 +37,7 @@ msgid "Activate my account" msgstr "Activate my account" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Ask the community on Framacolibri" @@ -141,7 +141,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "You requested a new password for your account on %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Warning" @@ -760,7 +760,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Need some help? Something not working properly?" @@ -815,7 +815,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} is a Mobilizon server." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} is a Mobilizon server." @@ -899,7 +899,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "If you need to cancel your participation, just access the event page through link above and click on the participation button." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Learn more about Mobilizon." @@ -1067,7 +1067,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Please do not use it in any real way" @@ -1393,7 +1393,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "This is a demonstration site to test the beta version of Mobilizon." @@ -1445,6 +1445,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/activity.po b/priv/gettext/es/LC_MESSAGES/activity.po index 3f423fc8..7aac461c 100644 --- a/priv/gettext/es/LC_MESSAGES/activity.po +++ b/priv/gettext/es/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po index c9fe5ec2..f3aec70f 100644 --- a/priv/gettext/es/LC_MESSAGES/default.po +++ b/priv/gettext/es/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Activar mi cuenta" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Preguntar a la comunidad en framacolibri" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Solicitó una nueva contraseña para su cuenta en %{instancia}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Advertencia" @@ -902,7 +902,7 @@ msgstr "" "Confirme la dirección de correo electrónico que proporcionó:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "¿Necesita ayuda? ¿Algo no está funcionando correctamente?" @@ -967,7 +967,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es un servidor de Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es una instancia de Mobilizon." @@ -1067,7 +1067,7 @@ msgstr "" "mediante el enlace debajo y presiona el botón." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "¡Aprenda más sobre Mobilizon aquí!" @@ -1244,7 +1244,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Si no activó el cambio usted mismo, ignore este mensaje." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Por favor no lo use de ninguna manera real." @@ -1676,7 +1676,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Lo sentimos, pero algo salió mal por nuestra parte." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Este es un sitio de demostración para probar Mobilizon." @@ -1733,6 +1733,6 @@ msgid "Public feed for %{instance}" msgstr "Flujo público para %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/fi/LC_MESSAGES/activity.po b/priv/gettext/fi/LC_MESSAGES/activity.po index 435aa72d..d1183024 100644 --- a/priv/gettext/fi/LC_MESSAGES/activity.po +++ b/priv/gettext/fi/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/fi/LC_MESSAGES/default.po b/priv/gettext/fi/LC_MESSAGES/default.po index 59051489..79c31ef7 100644 --- a/priv/gettext/fi/LC_MESSAGES/default.po +++ b/priv/gettext/fi/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Aktivoi tilini" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Kysy yhteisöltä Framacolibrissa" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Pyysit uutta salasanaa tilillesi palvelimella %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Varoitus" @@ -885,7 +885,7 @@ msgstr "" "sähköpostiosoite:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Tarvitsetko apua? Eikö kaikki toimi niin kuin pitäisi?" @@ -948,7 +948,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} on Mobilizon-palvelin." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} on Mobilizon-palvelin." @@ -1048,7 +1048,7 @@ msgstr "" "linkistä ja napsauta siellä osallistumispainiketta." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Lue lisää Mobilizonista." @@ -1224,7 +1224,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Jos et tehnyt vaihtoa itse, voit jättää tämän viestin huomiotta." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Älä käytä todellisiin tarkoituksiin." @@ -1651,7 +1651,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Pahoittelemme, tapahtui virhe palvelimen päässä." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Tällä kokeilusivustolla voit koekäyttää Mobilizonia." @@ -1703,6 +1703,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/activity.po b/priv/gettext/fr/LC_MESSAGES/activity.po index 36413eb3..16a9d04b 100644 --- a/priv/gettext/fr/LC_MESSAGES/activity.po +++ b/priv/gettext/fr/LC_MESSAGES/activity.po @@ -18,223 +18,232 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 2.4.3\n" -#, elixir-format +#: lib/service/activity/renderer/member.ex:43 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 #: lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "%{member} a accepté l'invitation à rejoindre le groupe." -#, elixir-format +#: lib/service/activity/renderer/member.ex:53 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 #: lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "%{member} a refusé l'invitation à rejoindre le groupe." -#, elixir-format +#: lib/service/activity/renderer/member.ex:23 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 #: lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "%{member} a demandé à rejoindre le groupe." -#, elixir-format +#: lib/service/activity/renderer/member.ex:33 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 #: lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "%{member} a été invité⋅e par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:72 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 #: lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "%{profile} a ajouté le ou la membre %{membre}." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "%{profile} a archivé la discussion %{discussion}." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "%{profile} a créé la discussion %{discussion}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:24 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "%{profile} a créé le dossier %{resource}." -#, elixir-format #: lib/web/templates/email/activity/_group_activity_item.html.eex:4 #: lib/web/templates/email/activity/_group_activity_item.text.eex:1 msgid "%{profile} created the group %{group}." msgstr "%{profile} a créé le groupe %{group}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:33 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "%{profile} a créé la resource %{resource}." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "%{profile} a créé la discussion %{discussion}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:97 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "%{profile} a supprimé le dossier %{resource}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:106 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "%{profile} a supprimé la resource %{resource}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:92 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 #: lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "%{profile} a exclu le ou la membre %{membre}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:76 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "%{profile} a déplacé le dossier %{resource}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:85 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "%{profile} a déplacé la ressource %{resource}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:102 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 #: lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "%{profile} a quitté le groupe." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "%{profile} a renommé la discussion %{discussion}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:45 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "%{profile} a renommé le dossier %{old_resource_title} en %{resource}." -#, elixir-format +#: lib/service/activity/renderer/resource.ex:59 #: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 #: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "%{profile} a renommé la resource %{old_resource_title} en %{resource}." -#, elixir-format +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 #: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." msgstr "%{profile} a répondu à la discussion %{discussion}." -#, elixir-format #: lib/web/templates/email/activity/_group_activity_item.html.eex:19 #: lib/web/templates/email/activity/_group_activity_item.text.eex:7 msgid "%{profile} updated the group %{group}." msgstr "%{profile} a mis à jour le groupe %{group}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:82 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 #: lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "%{profile} a mis à jour le membre %{member}." -#, elixir-format +#: lib/service/activity/renderer/event.ex:23 #: lib/web/templates/email/activity/_event_activity_item.html.eex:4 #: lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "L'événement %{event} a été créé par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/event.ex:43 #: lib/web/templates/email/activity/_event_activity_item.html.eex:34 #: lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "L'événement %{event} a été supprimé par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/event.ex:33 #: lib/web/templates/email/activity/_event_activity_item.html.eex:19 #: lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "L'événement %{event} a été mis à jour par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/group.ex:23 #: lib/web/templates/email/activity/_post_activity_item.html.eex:4 #: lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "Le billet %{post} a été créé par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/group.ex:43 #: lib/web/templates/email/activity/_post_activity_item.html.eex:34 #: lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "Le billet %{post} a été supprimé par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/group.ex:33 #: lib/web/templates/email/activity/_post_activity_item.html.eex:19 #: lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "Le billet %{post} a été mis à jour par %{profile}." -#, elixir-format +#: lib/service/activity/renderer/member.ex:63 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 #: lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "%{member} a rejoint le groupe." -#, elixir-format +#: lib/service/activity/renderer/event.ex:63 #: lib/web/templates/email/activity/_event_activity_item.html.eex:58 #: lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "%{profile} a posté un commentaire sur l'événement %{event}." -#, elixir-format +#: lib/service/activity/renderer/event.ex:54 #: lib/web/templates/email/activity/_event_activity_item.html.eex:43 #: lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "%{profile} a répondu à un commentaire sur l'événement %{event}." -#, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "Vous ne voulez pas recevoir de notifications d'activité ? Vous pouvez changer leur fréquence ou les désactiver dans vos préférences." -#, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "Voir une activité de plus" msgstr[1] "Voir %{count} activités de plus" -#, elixir-format #: lib/web/templates/email/email_direct_activity.html.eex:38 #: lib/web/templates/email/email_direct_activity.text.eex:4 msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "Il y a eu une activité !" msgstr[1] "Il y a eu de l'activité !" + +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "Activité sur %{instance}" diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po index 998b12c1..0dc5883f 100644 --- a/priv/gettext/fr/LC_MESSAGES/default.po +++ b/priv/gettext/fr/LC_MESSAGES/default.po @@ -36,7 +36,7 @@ msgid "Activate my account" msgstr "Activer mon compte" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Demander à la communauté sur Framacolibri" @@ -140,7 +140,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Vous avez demandé un nouveau mot de passe pour votre compte sur %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Attention" @@ -743,7 +743,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "Salut ! Vous venez de vous enregistrer pour rejoindre cet événement : « %{title} ». Merci de confirmer l'adresse email que vous avez fournie :" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Besoin d'aide ? Quelque chose ne fonctionne pas correctement ?" @@ -798,7 +798,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} est une instance Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} est une instance Mobilizon." @@ -882,7 +882,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "Si vous avez besoin d'annuler votre participation, il suffit d'accéder à la page de l'événement à partir du lien ci-dessus et de cliquer sur le bouton « Je participe »." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "En apprendre plus à propos de Mobilizon ici !" @@ -1050,7 +1050,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Si vous n'êtes pas à l'origine de cette modification, merci d'ignorer ce message." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Veuillez ne pas l'utiliser pour un cas réel." @@ -1378,7 +1378,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Nous sommes désolé·e·s, mais quelque chose s’est mal passé de notre côté." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Ceci est un site de démonstration permettant de tester Mobilizon." @@ -1430,6 +1430,6 @@ msgid "Public feed for %{instance}" msgstr "Flux public pour %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "Notification d'activité sur %{instance}" diff --git a/priv/gettext/gl/LC_MESSAGES/activity.po b/priv/gettext/gl/LC_MESSAGES/activity.po index 7087b827..9dd50f7a 100644 --- a/priv/gettext/gl/LC_MESSAGES/activity.po +++ b/priv/gettext/gl/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/gl/LC_MESSAGES/default.po b/priv/gettext/gl/LC_MESSAGES/default.po index 5e128063..f65626fb 100644 --- a/priv/gettext/gl/LC_MESSAGES/default.po +++ b/priv/gettext/gl/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Activar a miña conta" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Pregunta á comunidade en Framacolibri" @@ -143,7 +143,7 @@ msgstr "" "Solicitaches un novo contrasinal para a túa conta na instancia %{instance]." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Aviso" @@ -881,7 +881,7 @@ msgstr "" "confirma o email proporcionado:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Precisas axuda? Algo non funciona como agardabas?" @@ -945,7 +945,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} funciona grazas a Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} funciona grazas a Mobilizon." @@ -1045,7 +1045,7 @@ msgstr "" "da ligazón superior e preme no botón « Participar »." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Coñece máis acerca de Mobilizon!" @@ -1222,7 +1222,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Se non propiciaches ti o cambio, por favor ignora esta mensaxe." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Por favor, non o uses para eventos reais." @@ -1646,7 +1646,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Lamentámolo, pero algo está a fallar pola nosa parte." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Este é un sitio web de exemplo para probar Mobilizon." @@ -1701,6 +1701,6 @@ msgid "Public feed for %{instance}" msgstr "Fonte pública de %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/hu/LC_MESSAGES/activity.po b/priv/gettext/hu/LC_MESSAGES/activity.po index 26ec6810..0762eb83 100644 --- a/priv/gettext/hu/LC_MESSAGES/activity.po +++ b/priv/gettext/hu/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/hu/LC_MESSAGES/default.po b/priv/gettext/hu/LC_MESSAGES/default.po index 61eaebfc..f615be09 100644 --- a/priv/gettext/hu/LC_MESSAGES/default.po +++ b/priv/gettext/hu/LC_MESSAGES/default.po @@ -37,7 +37,7 @@ msgid "Activate my account" msgstr "Saját fiók aktiválása" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Kérdezze meg a közösséget a Framacolibrin" @@ -149,7 +149,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Új jelszót kért a(z) %{instance} példányon lévő fiókjához." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Figyelmeztetés" @@ -771,7 +771,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -826,7 +826,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -910,7 +910,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1080,7 +1080,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1406,7 +1406,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1458,6 +1458,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/it/LC_MESSAGES/activity.po b/priv/gettext/it/LC_MESSAGES/activity.po index 3fb8c46a..4f768988 100644 --- a/priv/gettext/it/LC_MESSAGES/activity.po +++ b/priv/gettext/it/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/it/LC_MESSAGES/default.po b/priv/gettext/it/LC_MESSAGES/default.po index a3ae0489..7155537f 100644 --- a/priv/gettext/it/LC_MESSAGES/default.po +++ b/priv/gettext/it/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Attiva il mio account" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Chiedi alla comunità su Framacolibri" @@ -142,7 +142,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Hai richiesto una nuova password per il tuo account su %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Avviso" @@ -904,7 +904,7 @@ msgstr "" "Conferma l'indirizzo e-mail che hai fornito:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Bisogno di aiuto? Qualcosa non funziona correttamente?" @@ -970,7 +970,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "% {instance} è alimentata da Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} è alimentata da Mobilizon." @@ -1071,7 +1071,7 @@ msgstr "" "tramite il link in alto e fai clic sul pulsante «Partecipanti»." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Scopri di più su Mobilizon qui!" @@ -1253,7 +1253,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Se non hai attivato tu stesso la modifica, ignora questo messaggio." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr " Si prega di non utilizzarlo per scopi reali. " @@ -1691,7 +1691,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Siamo spiacenti, ma qualcosa è andato storto da parte nostra." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Questo è un sito di prova per testare Mobilizon." @@ -1746,6 +1746,6 @@ msgid "Public feed for %{instance}" msgstr "Feed pubblico per %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/ja/LC_MESSAGES/activity.po b/priv/gettext/ja/LC_MESSAGES/activity.po index 698146a2..f912b116 100644 --- a/priv/gettext/ja/LC_MESSAGES/activity.po +++ b/priv/gettext/ja/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=1\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -227,3 +232,8 @@ msgstr[0] "" msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ja/LC_MESSAGES/default.po b/priv/gettext/ja/LC_MESSAGES/default.po index 37f18eb9..d6a97426 100644 --- a/priv/gettext/ja/LC_MESSAGES/default.po +++ b/priv/gettext/ja/LC_MESSAGES/default.po @@ -30,7 +30,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -134,7 +134,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -718,7 +718,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -771,7 +771,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -855,7 +855,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1023,7 +1023,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1349,7 +1349,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1401,6 +1401,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/activity.po b/priv/gettext/nl/LC_MESSAGES/activity.po index 53a1820c..4145c0eb 100644 --- a/priv/gettext/nl/LC_MESSAGES/activity.po +++ b/priv/gettext/nl/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/default.po b/priv/gettext/nl/LC_MESSAGES/default.po index 52563b8f..3e80232f 100644 --- a/priv/gettext/nl/LC_MESSAGES/default.po +++ b/priv/gettext/nl/LC_MESSAGES/default.po @@ -33,7 +33,7 @@ msgid "Activate my account" msgstr "Activeer mijn account" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Vragen aan de gemeenschap op Framacolibri" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "U hebt een nieuw wachtwoord aangevraagd voor uw account op %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Waarschuwing" @@ -732,7 +732,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Hulp nodig? Werkt iets niet juist?" @@ -793,7 +793,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} is een Mobilizonserver." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} is een Mobilizonserver." @@ -879,7 +879,7 @@ msgstr "" "via de link hierboven, en klikt u op de deelnameknop." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Leer meer over Mobilizon." @@ -1047,7 +1047,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1374,7 +1374,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Dit is een demosite om de bètaversie van Mobilizon te testen." @@ -1426,6 +1426,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/nn/LC_MESSAGES/activity.po b/priv/gettext/nn/LC_MESSAGES/activity.po index 1e15ffde..d2e1ac97 100644 --- a/priv/gettext/nn/LC_MESSAGES/activity.po +++ b/priv/gettext/nn/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/nn/LC_MESSAGES/default.po b/priv/gettext/nn/LC_MESSAGES/default.po index 1e172c4c..a99e3368 100644 --- a/priv/gettext/nn/LC_MESSAGES/default.po +++ b/priv/gettext/nn/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Ta i bruk kontoen min" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Spør brukarsamfunnet på Framacolibri" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Du ba om eit nytt passord for brukarkontoen din på %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Åtvaring" @@ -877,7 +877,7 @@ msgstr "" "epostadressa du skreiv inn:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Treng du hjelp, eller er det noko som ikkje verkar slik du venta?" @@ -940,7 +940,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} er ein Mobilizon-nettstad." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} er ein Mobilizon-nettstad." @@ -1040,7 +1040,7 @@ msgstr "" "og klkka på «Deltek»-knappen." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Lær meir om Mobilizon her!" @@ -1217,7 +1217,7 @@ msgstr "" "Viss du ikkje endra dette sjølv, kan du trygt sjå bort frå denne meldinga." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Ikkje bruk det på ordentleg." @@ -1647,7 +1647,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Orsak, det skjedde noko feil hjå oss." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Dette er ei demoside for å prøva ut Mobilizon." @@ -1702,6 +1702,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/activity.po b/priv/gettext/oc/LC_MESSAGES/activity.po index d8e27493..3531e9da 100644 --- a/priv/gettext/oc/LC_MESSAGES/activity.po +++ b/priv/gettext/oc/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/default.po b/priv/gettext/oc/LC_MESSAGES/default.po index 17aca022..f4586201 100644 --- a/priv/gettext/oc/LC_MESSAGES/default.po +++ b/priv/gettext/oc/LC_MESSAGES/default.po @@ -31,7 +31,7 @@ msgid "Activate my account" msgstr "Activar mon compte" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Demandatz a la comunautat sus Framacolibri" @@ -135,7 +135,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Avètz demandat un nòu senhal per vòstre compte sus %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Avertiment" @@ -800,7 +800,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Besonh d’ajuda ? Quicòm truca ?" @@ -865,7 +865,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es una instància Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es una instància Mobilizon." @@ -952,7 +952,7 @@ msgstr "" "participacion." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Ne saber mai tocant Mobilizon." @@ -1124,7 +1124,7 @@ msgstr "" "S’avètz pas demandat aquesta modificacion, mercés d’ignorar aqueste messatge." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Mercés de l’utilizar pas d’un biais real." @@ -1458,7 +1458,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1511,6 +1511,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/activity.po b/priv/gettext/pl/LC_MESSAGES/activity.po index d3a8d086..7fca2979 100644 --- a/priv/gettext/pl/LC_MESSAGES/activity.po +++ b/priv/gettext/pl/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -231,3 +236,8 @@ msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" msgstr[2] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/default.po b/priv/gettext/pl/LC_MESSAGES/default.po index d4e58838..47528c54 100644 --- a/priv/gettext/pl/LC_MESSAGES/default.po +++ b/priv/gettext/pl/LC_MESSAGES/default.po @@ -34,7 +34,7 @@ msgid "Activate my account" msgstr "Aktywuj moje konto" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Zapytaj społeczność na Framacolibri" @@ -145,7 +145,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Poprosiłeś(-aś) o nowe hasło do swojego konta na %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Ostrzeżenie" @@ -795,7 +795,7 @@ msgstr "" "„%{title}”. Potwierdź wprowadzony adres e-mail:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Potrzebujesz pomocy? Coś nie działa prawidłowo?" @@ -864,7 +864,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} jest serwerem Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} jest serwerem Mobilizon." @@ -963,7 +963,7 @@ msgstr "" "używając powyższego przycisku i naciśnij przycisk zgłaszania udziału." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Dowiedz się więcej o Mobilizon." @@ -1133,7 +1133,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Nie używaj go do żadnych rzeczywistych celów" @@ -1475,7 +1475,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Przepraszamy, ale coś poszło nie tak po naszej stronie." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "To jest strona demonstracyjna pozwalająca na przetestowanie Mobilizon." @@ -1527,6 +1527,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/activity.po b/priv/gettext/pt/LC_MESSAGES/activity.po index 6b6ca9c2..2bf2bb1c 100644 --- a/priv/gettext/pt/LC_MESSAGES/activity.po +++ b/priv/gettext/pt/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/default.po b/priv/gettext/pt/LC_MESSAGES/default.po index 8d0196cf..e1c79e08 100644 --- a/priv/gettext/pt/LC_MESSAGES/default.po +++ b/priv/gettext/pt/LC_MESSAGES/default.po @@ -28,7 +28,7 @@ msgid "Activate my account" msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "" @@ -132,7 +132,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "" @@ -721,7 +721,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "" @@ -776,7 +776,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "" @@ -860,7 +860,7 @@ msgid "If you wish to cancel your attendance, visit the event page through the l msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "" @@ -1028,7 +1028,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1354,7 +1354,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "" @@ -1406,6 +1406,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/activity.po b/priv/gettext/pt_BR/LC_MESSAGES/activity.po index 104f0b40..6412a93a 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/activity.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/default.po b/priv/gettext/pt_BR/LC_MESSAGES/default.po index ec5d2e98..e880bd3a 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/default.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgid "Activate my account" msgstr "Ativar a minha conta" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Perguntar à comunidade Framacolibri" @@ -143,7 +143,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Você solicitou uma nova senha para sua conta em %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Atenção" @@ -790,7 +790,7 @@ msgid "Hi there! You just registered to join this event: « %{title} ». Please msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Precisa de ajuda? Algo não está funcionando bem?" @@ -851,7 +851,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} é um servidor Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} é um servidor Mobilizon." @@ -937,7 +937,7 @@ msgstr "" "evento através do link acima e clique no botão participação." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Aprenda mais sobre Mobilizon." @@ -1105,7 +1105,7 @@ msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Por favor não utilize este serviço em nenhum caso real" @@ -1466,7 +1466,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Este é um site de demonstração para testar a versão beta do Mobilizon." @@ -1518,6 +1518,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/activity.po b/priv/gettext/ru/LC_MESSAGES/activity.po index 5def29e5..acb893cd 100644 --- a/priv/gettext/ru/LC_MESSAGES/activity.po +++ b/priv/gettext/ru/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -231,3 +236,8 @@ msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" msgstr[2] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/default.po b/priv/gettext/ru/LC_MESSAGES/default.po index d1d915cb..d9a41422 100644 --- a/priv/gettext/ru/LC_MESSAGES/default.po +++ b/priv/gettext/ru/LC_MESSAGES/default.po @@ -33,7 +33,7 @@ msgid "Activate my account" msgstr "Активировать мою учётную запись" #, elixir-format -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 msgid "Ask the community on Framacolibri" msgstr "Обратиться к сообществу на Framacolibri" @@ -144,7 +144,7 @@ msgid "You requested a new password for your account on %{instance}." msgstr "Вы запросили новый пароль для своей учетной записи на %{instance}." #, elixir-format -#: lib/web/templates/email/email.html.eex:85 +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Предупреждение" @@ -901,7 +901,7 @@ msgstr "" "указали:" #, elixir-format -#: lib/web/templates/email/email.html.eex:114 +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 msgid "Need help? Is something not working as expected?" msgstr "Нужна помощь? Что-то не работает?" @@ -974,7 +974,7 @@ msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} работает на платформе Mobilizon." #, elixir-format -#: lib/web/templates/email/email.html.eex:142 +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} работает на платформе Mobilizon." @@ -1075,7 +1075,7 @@ msgstr "" "мероприятия по ссылке выше и нажмите кнопку « Я участвую »." #, elixir-format -#: lib/web/templates/email/email.html.eex:143 +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 msgid "Learn more about Mobilizon here!" msgstr "Узнайте больше о Mobilizon!" @@ -1253,7 +1253,7 @@ msgstr "" "сообщение." #, elixir-format -#: lib/web/templates/email/email.html.eex:89 +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "Пожалуйста, используйте это только для тестовых целей." @@ -1687,7 +1687,7 @@ msgid "We're sorry, but something went wrong on our end." msgstr "Сожалеем, но с нашей стороны что-то пошло не так." #, elixir-format -#: lib/web/templates/email/email.html.eex:88 +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 msgid "This is a demonstration site to test Mobilizon." msgstr "Это демонстрационная площадка для тестирования Mobilizon." @@ -1743,6 +1743,6 @@ msgid "Public feed for %{instance}" msgstr "Публичная лента для %{instance}" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/activity.po b/priv/gettext/sv/LC_MESSAGES/activity.po index 7d8883c9..627afa7b 100644 --- a/priv/gettext/sv/LC_MESSAGES/activity.po +++ b/priv/gettext/sv/LC_MESSAGES/activity.po @@ -12,52 +12,54 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#: lib/service/activity/renderer/member.ex:43 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#: lib/service/activity/renderer/member.ex:53 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#: lib/service/activity/renderer/member.ex:23 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#: lib/service/activity/renderer/member.ex:33 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#: lib/service/activity/renderer/member.ex:72 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 +#: lib/service/activity/renderer/discussion.ex:53 +#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/service/activity/renderer/discussion.ex:23 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/service/activity/renderer/resource.ex:24 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "" @@ -68,75 +70,78 @@ msgid "%{profile} created the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/service/activity/renderer/resource.ex:33 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 +#: lib/service/activity/renderer/discussion.ex:63 +#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/service/activity/renderer/resource.ex:97 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/service/activity/renderer/resource.ex:106 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#: lib/service/activity/renderer/member.ex:92 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/service/activity/renderer/resource.ex:76 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/service/activity/renderer/resource.ex:85 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#: lib/service/activity/renderer/member.ex:102 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 +#: lib/service/activity/renderer/discussion.ex:43 +#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/service/activity/renderer/resource.ex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/service/activity/renderer/resource.ex:59 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/service/activity/renderer/discussion.ex:33 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 #: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." @@ -149,73 +154,73 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#: lib/service/activity/renderer/member.ex:82 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/service/activity/renderer/event.ex:23 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/service/activity/renderer/event.ex:43 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/service/activity/renderer/event.ex:33 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/service/activity/renderer/group.ex:23 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/service/activity/renderer/group.ex:43 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/service/activity/renderer/group.ex:33 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#: lib/service/activity/renderer/member.ex:63 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/service/activity/renderer/event.ex:63 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/service/activity/renderer/event.ex:54 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:104 +#: lib/web/templates/email/email_direct_activity.html.eex:142 #: lib/web/templates/email/email_direct_activity.text.eex:21 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:84 +#: lib/web/templates/email/email_direct_activity.html.eex:122 #: lib/web/templates/email/email_direct_activity.text.eex:17 msgid "View one more activity" msgid_plural "View %{count} more activities" @@ -229,3 +234,8 @@ msgid "There has been an activity!" msgid_plural "There has been some activity!" msgstr[0] "" msgstr[1] "" + +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:28 +msgid "Activity on %{instance}" +msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/default.po b/priv/gettext/sv/LC_MESSAGES/default.po index b6b41c6b..b7ae50d6 100644 --- a/priv/gettext/sv/LC_MESSAGES/default.po +++ b/priv/gettext/sv/LC_MESSAGES/default.po @@ -32,7 +32,7 @@ msgstr "%{title} av %{creator}" msgid "Activate my account" msgstr "Aktivera mitt konto" -#: lib/web/templates/email/email.html.eex:117 +#: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 #, elixir-format msgid "Ask the community on Framacolibri" @@ -143,8 +143,8 @@ msgstr "Ny titel: %{title}" msgid "You requested a new password for your account on %{instance}." msgstr "Du har bett om ett nytt lösenord för ditt konto på %{instance}." -#: lib/web/templates/email/email.html.eex:85 #, elixir-format +#: lib/web/templates/email/email.html.eex:86 msgid "Warning" msgstr "Varning" @@ -736,7 +736,8 @@ msgstr "" msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" -#: lib/web/templates/email/email.html.eex:114 +#, elixir-format +#: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 #, elixir-format msgid "Need help? Is something not working as expected?" @@ -797,8 +798,8 @@ msgstr[1] "" msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} är en Mobilizon-server." -#: lib/web/templates/email/email.html.eex:142 #, elixir-format +#: lib/web/templates/email/email.html.eex:143 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} är en Mobilizon-server." @@ -884,7 +885,8 @@ msgstr "" "Om du behöver lämna återbud är det bara att gå till evenemangets sida, på " "länken ovan, och klicka på deltagande-knappen." -#: lib/web/templates/email/email.html.eex:143 +#, elixir-format +#: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 #, elixir-format msgid "Learn more about Mobilizon here!" @@ -1052,8 +1054,8 @@ msgstr "" msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" -#: lib/web/templates/email/email.html.eex:89 #, elixir-format +#: lib/web/templates/email/email.html.eex:90 msgid "Please do not use it for real purposes." msgstr "" @@ -1380,7 +1382,8 @@ msgstr "" msgid "We're sorry, but something went wrong on our end." msgstr "" -#: lib/web/templates/email/email.html.eex:88 +#, elixir-format +#: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 #, elixir-format msgid "This is a demonstration site to test Mobilizon." @@ -1434,6 +1437,6 @@ msgid "Public feed for %{instance}" msgstr "" #, elixir-format -#: lib/web/email/activity.ex:25 +#: lib/web/email/activity.ex:27 msgid "Activity notification for %{instance}" msgstr "" diff --git a/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs b/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs index 6f790981..56c6fe3e 100644 --- a/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs +++ b/priv/repo/migrations/20210506080303_create_user_push_subscriptions.exs @@ -6,7 +6,9 @@ defmodule Mobilizon.Repo.Migrations.CreateUserPushSubscriptions do add(:id, :uuid, primary_key: true) add(:user_id, references(:users, on_delete: :nothing), null: false) add(:digest, :text, null: false) - add(:data, :map, null: false) + add(:endpoint, :string, null: false) + add(:auth, :string, null: false) + add(:p256dh, :string, null: false) timestamps() end From 628c55cd84bba7e4a88a28f2c49e38424d03f766 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Wed, 12 May 2021 11:02:46 +0200 Subject: [PATCH 08/67] Make sure relay and anonymous actors don't automatically approve followers Signed-off-by: Thomas Citharel --- lib/mobilizon/actors/actor.ex | 28 ++++++++++--------- ...4824_repair_relay_and_anonymous_actors.exs | 15 ++++++++++ 2 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 priv/repo/migrations/20210512084824_repair_relay_and_anonymous_actors.exs diff --git a/lib/mobilizon/actors/actor.ex b/lib/mobilizon/actors/actor.ex index 49316bc8..1bfa41c3 100644 --- a/lib/mobilizon/actors/actor.ex +++ b/lib/mobilizon/actors/actor.ex @@ -416,17 +416,18 @@ defmodule Mobilizon.Actors.Actor do @spec build_relay_creation_attrs :: Ecto.Changeset.t() def build_relay_creation_attrs do data = %{ - "name" => Config.get([:instance, :name], "Mobilizon"), - "summary" => + name: Config.get([:instance, :name], "Mobilizon"), + summary: Config.get( [:instance, :description], "An internal service actor for this Mobilizon instance" ), - "keys" => Crypto.generate_rsa_2048_private_key(), - "preferred_username" => "relay", - "domain" => nil, - "visibility" => :public, - "type" => :Application + keys: Crypto.generate_rsa_2048_private_key(), + preferred_username: "relay", + domain: nil, + visibility: :public, + type: :Application, + manually_approves_followers: true } %__MODULE__{} @@ -440,12 +441,13 @@ defmodule Mobilizon.Actors.Actor do @spec build_anonymous_actor_creation_attrs :: Ecto.Changeset.t() def build_anonymous_actor_creation_attrs do data = %{ - "name" => "Mobilizon Anonymous Actor", - "summary" => "A fake person for anonymous participations", - "keys" => Crypto.generate_rsa_2048_private_key(), - "preferred_username" => "anonymous", - "domain" => nil, - "type" => :Person + name: "Mobilizon Anonymous Actor", + summary: "A fake person for anonymous participations", + keys: Crypto.generate_rsa_2048_private_key(), + preferred_username: "anonymous", + domain: nil, + type: :Person, + manually_approves_followers: true } %__MODULE__{} diff --git a/priv/repo/migrations/20210512084824_repair_relay_and_anonymous_actors.exs b/priv/repo/migrations/20210512084824_repair_relay_and_anonymous_actors.exs new file mode 100644 index 00000000..3a9827b2 --- /dev/null +++ b/priv/repo/migrations/20210512084824_repair_relay_and_anonymous_actors.exs @@ -0,0 +1,15 @@ +defmodule Mobilizon.Storage.Repo.Migrations.RepairRelayAndAnonymousActors do + use Ecto.Migration + + def up do + Ecto.Adapters.SQL.query!( + Mobilizon.Storage.Repo, + "UPDATE actors SET manually_approves_followers = true WHERE preferred_username = 'relay' and domain is null" + ) + + Ecto.Adapters.SQL.query!( + Mobilizon.Storage.Repo, + "UPDATE actors SET manually_approves_followers = true WHERE preferred_username = 'anonymous' and domain is null" + ) + end +end From d19de15c11f1fce7130ac94e2b955cd802dca3ff Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Wed, 12 May 2021 18:06:37 +0200 Subject: [PATCH 09/67] Add orientation to web manifest Signed-off-by: Thomas Citharel --- js/vue.config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/vue.config.js b/js/vue.config.js index e723a2cf..d7046822 100644 --- a/js/vue.config.js +++ b/js/vue.config.js @@ -14,6 +14,9 @@ module.exports = { swSrc: "./src/service-worker.ts", // ...other Workbox options... }, + manifestOptions: { + orientation: "portrait-primary", + }, }, css: { loaderOptions: { From 3db4ee1aabc8e8096a23da39645a6fb5b996c0b8 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Wed, 12 May 2021 18:10:33 +0200 Subject: [PATCH 10/67] Warn when offline Signed-off-by: Thomas Citharel --- js/src/App.vue | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/js/src/App.vue b/js/src/App.vue index b8c29a98..f3e75139 100644 --- a/js/src/App.vue +++ b/js/src/App.vue @@ -71,6 +71,8 @@ export default class App extends Vue { error: Error | null = null; + online = true; + async created(): Promise { if (await this.initializeCurrentUser()) { await initializeCurrentActor(this.$apollo.provider.defaultClient); @@ -100,6 +102,23 @@ export default class App extends Vue { } return false; } + + mounted(): void { + this.online = window.navigator.onLine; + window.addEventListener("offline", () => { + this.online = false; + this.showOfflineNetworkWarning(); + console.log("offline"); + }); + window.addEventListener("online", () => { + this.online = true; + console.log("online"); + }); + } + + showOfflineNetworkWarning(): void { + this.$notifier.error(this.$t("You are offline") as string); + } } From d152803547cc7b52ad787a73c77008151f9c5d15 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Wed, 12 May 2021 18:13:39 +0200 Subject: [PATCH 11/67] Import only what we need from lodash Signed-off-by: Thomas Citharel --- js/src/components/Account/ActorAutoComplete.vue | 2 +- js/src/components/Event/AddressAutoComplete.vue | 3 ++- js/src/components/Event/FullAddressAutoComplete.vue | 3 ++- js/src/components/Event/TagInput.vue | 3 ++- js/src/components/Todo/FullTodo.vue | 3 ++- js/src/views/Moderation/Report.vue | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/js/src/components/Account/ActorAutoComplete.vue b/js/src/components/Account/ActorAutoComplete.vue index a7f14334..50a77e1b 100644 --- a/js/src/components/Account/ActorAutoComplete.vue +++ b/js/src/components/Account/ActorAutoComplete.vue @@ -45,7 +45,7 @@ diff --git a/js/src/components/Admin/Followings.vue b/js/src/components/Admin/Followings.vue index 18a9fbb9..e257c8fa 100644 --- a/js/src/components/Admin/Followings.vue +++ b/js/src/components/Admin/Followings.vue @@ -32,8 +32,13 @@ :show-detail-icon="false" paginated backend-pagination + :current-page.sync="page" + :aria-next-label="$t('Next page')" + :aria-previous-label="$t('Previous page')" + :aria-page-label="$t('Page')" + :aria-current-label="$t('Current page')" :total="relayFollowings.total" - :per-page="perPage" + :per-page="FOLLOWINGS_PER_PAGE" @page-change="onFollowingsPageChange" checkable checkbox-position="left" @@ -127,7 +132,7 @@ - {{ + {{ $t("You don't follow any instances yet.") }} @@ -139,8 +144,31 @@ import { formatDistanceToNow } from "date-fns"; import { ADD_RELAY, REMOVE_RELAY } from "../../graphql/admin"; import { IFollower } from "../../types/actor/follower.model"; import RelayMixin from "../../mixins/relay"; +import { RELAY_FOLLOWINGS } from "@/graphql/admin"; +import { Paginate } from "@/types/paginate"; +import RouteName from "@/router/name"; +import { + ApolloCache, + FetchResult, + InMemoryCache, + Reference, +} from "@apollo/client/core"; +import gql from "graphql-tag"; + +const FOLLOWINGS_PER_PAGE = 10; @Component({ + apollo: { + relayFollowings: { + query: RELAY_FOLLOWINGS, + variables() { + return { + page: this.page, + limit: FOLLOWINGS_PER_PAGE, + }; + }, + }, + }, metaInfo() { return { title: this.$t("Followings") as string, @@ -155,16 +183,78 @@ export default class Followings extends Mixins(RelayMixin) { formatDistanceToNow = formatDistanceToNow; + relayFollowings: Paginate = { elements: [], total: 0 }; + + FOLLOWINGS_PER_PAGE = FOLLOWINGS_PER_PAGE; + + checkedRows: IFollower[] = []; + + get page(): number { + return parseInt((this.$route.query.page as string) || "1", 10); + } + + set page(page: number) { + this.pushRouter(RouteName.RELAY_FOLLOWINGS, { + page: page.toString(), + }); + } + + async onFollowingsPageChange(page: number): Promise { + this.page = page; + try { + await this.$apollo.queries.relayFollowings.fetchMore({ + variables: { + page: this.page, + limit: FOLLOWINGS_PER_PAGE, + }, + }); + } catch (err) { + console.error(err); + } + } + async followRelay(e: Event): Promise { e.preventDefault(); try { - await this.$apollo.mutate({ + await this.$apollo.mutate<{ relayFollowings: Paginate }>({ mutation: ADD_RELAY, variables: { address: this.newRelayAddress.trim(), // trim to fix copy and paste domain name spaces and tabs }, + update(cache: ApolloCache, { data }: FetchResult) { + cache.modify({ + fields: { + relayFollowings( + existingFollowings = { elements: [], total: 0 }, + { readField } + ) { + const newFollowingRef = cache.writeFragment({ + id: `${data?.addRelay.__typename}:${data?.addRelay.id}`, + data: data?.addRelay, + fragment: gql` + fragment NewFollowing on Follower { + id + } + `, + }); + if ( + existingFollowings.elements.some( + (ref: Reference) => + readField("id", ref) === data?.addRelay.id + ) + ) { + return existingFollowings; + } + return { + total: existingFollowings.total + 1, + elements: [newFollowingRef, ...existingFollowings.elements], + }; + }, + }, + broadcast: false, + }); + }, }); - await this.$apollo.queries.relayFollowings.refetch(); this.newRelayAddress = ""; } catch (err) { Snackbar.open({ @@ -175,21 +265,35 @@ export default class Followings extends Mixins(RelayMixin) { } } - async removeRelays(): Promise { - await this.checkedRows.forEach((row: IFollower) => { - this.removeRelay( - `${row.targetActor.preferredUsername}@${row.targetActor.domain}` - ); + removeRelays(): void { + this.checkedRows.forEach((row: IFollower) => { + this.removeRelay(row); }); } - async removeRelay(address: string): Promise { + async removeRelay(follower: IFollower): Promise { + const address = `${follower.targetActor.preferredUsername}@${follower.targetActor.domain}`; try { await this.$apollo.mutate({ mutation: REMOVE_RELAY, variables: { address, }, + update(cache: ApolloCache) { + cache.modify({ + fields: { + relayFollowings(existingFollowingRefs, { readField }) { + return { + total: existingFollowingRefs.total - 1, + elements: existingFollowingRefs.elements.filter( + (followingRef: Reference) => + follower.id !== readField("id", followingRef) + ), + }; + }, + }, + }); + }, }); await this.$apollo.queries.relayFollowings.refetch(); this.checkedRows = []; diff --git a/js/src/components/Comment/Comment.vue b/js/src/components/Comment/Comment.vue index 8d5810b8..090d398d 100644 --- a/js/src/components/Comment/Comment.vue +++ b/js/src/components/Comment/Comment.vue @@ -279,7 +279,7 @@ export default class Comment extends Vue { const { event } = eventData; const { comments } = event; const parentCommentIndex = comments.findIndex( - (oldComment) => oldComment.id === parentId + (oldComment: IComment) => oldComment.id === parentId ); const parentComment = comments[parentCommentIndex]; if (!parentComment) return; diff --git a/js/src/components/Comment/CommentTree.vue b/js/src/components/Comment/CommentTree.vue index 3f3c64e5..3d2f23ab 100644 --- a/js/src/components/Comment/CommentTree.vue +++ b/js/src/components/Comment/CommentTree.vue @@ -88,6 +88,7 @@ import { import { CURRENT_ACTOR_CLIENT } from "../../graphql/actor"; import { IPerson } from "../../types/actor"; import { IEvent } from "../../types/event.model"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; @Component({ apollo: { @@ -157,7 +158,7 @@ export default class CommentTree extends Vue { ? comment.inReplyToComment.id : null, }, - update: (store, { data }) => { + update: (store: ApolloCache, { data }: FetchResult) => { if (data == null) return; const newComment = data.createComment; @@ -249,7 +250,7 @@ export default class CommentTree extends Vue { variables: { commentId: comment.id, }, - update: (store, { data }) => { + update: (store: ApolloCache, { data }: FetchResult) => { if (data == null) return; const deletedCommentId = data.deleteComment.id; diff --git a/js/src/components/Editor/Image.ts b/js/src/components/Editor/Image.ts index 653fd8c9..a67b8275 100644 --- a/js/src/components/Editor/Image.ts +++ b/js/src/components/Editor/Image.ts @@ -1,10 +1,10 @@ import { UPLOAD_MEDIA } from "@/graphql/upload"; import apolloProvider from "@/vue-apollo"; -import ApolloClient from "apollo-client"; -import { NormalizedCacheObject } from "apollo-cache-inmemory"; +import { ApolloClient } from "@apollo/client/core/ApolloClient"; import { Plugin } from "prosemirror-state"; import { EditorView } from "prosemirror-view"; import Image from "@tiptap/extension-image"; +import { NormalizedCacheObject } from "@apollo/client/cache"; /* eslint-disable class-methods-use-this */ diff --git a/js/src/components/Editor/Mention.ts b/js/src/components/Editor/Mention.ts index dbb6f809..0842b176 100644 --- a/js/src/components/Editor/Mention.ts +++ b/js/src/components/Editor/Mention.ts @@ -2,11 +2,11 @@ import { SEARCH_PERSONS } from "@/graphql/search"; import { VueRenderer } from "@tiptap/vue-2"; import tippy from "tippy.js"; import MentionList from "./MentionList.vue"; -import ApolloClient from "apollo-client"; -import { NormalizedCacheObject } from "apollo-cache-inmemory"; +import { ApolloClient } from "@apollo/client/core/ApolloClient"; import apolloProvider from "@/vue-apollo"; import { IPerson } from "@/types/actor"; import pDebounce from "p-debounce"; +import { NormalizedCacheObject } from "@apollo/client/cache/inmemory/types"; const client = apolloProvider.defaultClient as ApolloClient; diff --git a/js/src/components/NavBar.vue b/js/src/components/NavBar.vue index 1256b22c..c2be785c 100644 --- a/js/src/components/NavBar.vue +++ b/js/src/components/NavBar.vue @@ -234,7 +234,9 @@ export default class NavBar extends Vue { query: IDENTITIES, }); if (data) { - this.identities = data.identities.map((identity) => new Person(identity)); + this.identities = data.identities.map( + (identity: IPerson) => new Person(identity) + ); // If we don't have any identities, the user has validated their account, // is logging for the first time but didn't create an identity somehow diff --git a/js/src/components/Participation/ParticipationWithoutAccount.vue b/js/src/components/Participation/ParticipationWithoutAccount.vue index 802b11e7..1b86c7a4 100644 --- a/js/src/components/Participation/ParticipationWithoutAccount.vue +++ b/js/src/components/Participation/ParticipationWithoutAccount.vue @@ -134,6 +134,7 @@ import { addLocalUnconfirmedAnonymousParticipation } from "@/services/AnonymousP import { EventJoinOptions, ParticipantRole } from "@/types/enums"; import RouteName from "@/router/name"; import { IParticipant } from "../../types/participant.model"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; @Component({ apollo: { @@ -195,7 +196,10 @@ export default class ParticipationWithoutAccount extends Vue { message: this.anonymousParticipation.message, locale: this.$i18n.locale, }, - update: (store, { data: updateData }) => { + update: ( + store: ApolloCache, + { data: updateData }: FetchResult + ) => { if (updateData == null) { console.error( "Cannot update event participant cache, because of data null value." diff --git a/js/src/graphql/actor.ts b/js/src/graphql/actor.ts index 68f08d5f..e23c5d07 100644 --- a/js/src/graphql/actor.ts +++ b/js/src/graphql/actor.ts @@ -37,12 +37,14 @@ export const FETCH_PERSON = gql` `; export const GET_PERSON = gql` - query ( + query Person( $actorId: ID! $organizedEventsPage: Int $organizedEventsLimit: Int $participationPage: Int $participationLimit: Int + $membershipsPage: Int + $membershipsLimit: Int ) { person(id: $actorId) { id @@ -89,6 +91,24 @@ export const GET_PERSON = gql` } } } + memberships(page: $membershipsPage, limit: $membershipsLimit) { + total + elements { + id + role + insertedAt + parent { + id + preferredUsername + name + domain + avatar { + id + url + } + } + } + } user { id email diff --git a/js/src/graphql/admin.ts b/js/src/graphql/admin.ts index f6aa1978..5dac4ea0 100644 --- a/js/src/graphql/admin.ts +++ b/js/src/graphql/admin.ts @@ -37,6 +37,7 @@ export const DASHBOARD = gql` export const RELAY_FRAGMENT = gql` fragment relayFragment on Follower { + id actor { id preferredUsername diff --git a/js/src/graphql/discussion.ts b/js/src/graphql/discussion.ts index 1d96a0d0..ef66d22c 100644 --- a/js/src/graphql/discussion.ts +++ b/js/src/graphql/discussion.ts @@ -67,6 +67,17 @@ export const DISCUSSION_FIELDS_FRAGMENT = gql` text insertedAt updatedAt + deletedAt + publishedAt + actor { + id + domain + name + preferredUsername + avatar { + url + } + } } actor { id @@ -104,8 +115,7 @@ export const REPLY_TO_DISCUSSION = gql` export const GET_DISCUSSION = gql` query getDiscussion($slug: String!, $page: Int, $limit: Int) { discussion(slug: $slug) { - comments(page: $page, limit: $limit) - @connection(key: "discussion-comments", filter: ["slug"]) { + comments(page: $page, limit: $limit) { total elements { id @@ -158,6 +168,8 @@ export const DISCUSSION_COMMENT_CHANGED = gql` text updatedAt insertedAt + deletedAt + publishedAt actor { id preferredUsername diff --git a/js/src/graphql/group.ts b/js/src/graphql/group.ts index bb5f23dc..08e67930 100644 --- a/js/src/graphql/group.ts +++ b/js/src/graphql/group.ts @@ -125,13 +125,13 @@ export const GROUP_FIELDS_FRAGMENTS = gql` ...DiscussionBasicFields } } - posts { + posts(page: $postsPage, limit: $postsLimit) { total elements { ...PostBasicFields } } - members { + members(page: $membersPage, limit: $membersLimit) { elements { id role @@ -212,6 +212,10 @@ export const GET_GROUP = gql` $beforeDateTime: DateTime $organisedEventsPage: Int $organisedEventslimit: Int + $postsPage: Int + $postsLimit: Int + $membersPage: Int + $membersLimit: Int ) { getGroup(id: $id) { mediaSize diff --git a/js/src/graphql/report.ts b/js/src/graphql/report.ts index 8b0e8ff0..bc842070 100644 --- a/js/src/graphql/report.ts +++ b/js/src/graphql/report.ts @@ -1,41 +1,44 @@ import gql from "graphql-tag"; export const REPORTS = gql` - query Reports($status: ReportStatus) { - reports(status: $status) { - id - reported { + query Reports($status: ReportStatus, $page: Int, $limit: Int) { + reports(status: $status, page: $page, limit: $limit) { + total + elements { id - preferredUsername - domain - name - avatar { + reported { id - url + preferredUsername + domain + name + avatar { + id + url + } } - } - reporter { - id - preferredUsername - name - avatar { + reporter { id - url + preferredUsername + name + avatar { + id + url + } + domain + type } - domain - type - } - event { - id - uuid - title - picture { + event { id - url + uuid + title + picture { + id + url + } } + status + content } - status - content } } `; diff --git a/js/src/mixins/event.ts b/js/src/mixins/event.ts index df3f65bf..0608ae0d 100644 --- a/js/src/mixins/event.ts +++ b/js/src/mixins/event.ts @@ -11,6 +11,7 @@ import { LEAVE_EVENT, } from "../graphql/event"; import { IPerson } from "../types/actor"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; @Component export default class EventMixin extends mixins(Vue) { @@ -30,7 +31,7 @@ export default class EventMixin extends mixins(Vue) { actorId, token, }, - update: (store, { data }) => { + update: (store: ApolloCache, { data }: FetchResult) => { if (data == null) return; let participation; diff --git a/js/src/mixins/relay.ts b/js/src/mixins/relay.ts index 0db4033a..0289c139 100644 --- a/js/src/mixins/relay.ts +++ b/js/src/mixins/relay.ts @@ -1,106 +1,30 @@ -import { Component, Vue, Ref } from "vue-property-decorator"; import { IActor } from "@/types/actor"; -import { IFollower } from "@/types/actor/follower.model"; -import { RELAY_FOLLOWERS, RELAY_FOLLOWINGS } from "@/graphql/admin"; -import { Paginate } from "@/types/paginate"; import { ActorType } from "@/types/enums"; +import { Component, Vue, Ref } from "vue-property-decorator"; +import VueRouter from "vue-router"; +const { isNavigationFailure, NavigationFailureType } = VueRouter; -@Component({ - apollo: { - relayFollowings: { - query: RELAY_FOLLOWINGS, - fetchPolicy: "cache-and-network", - variables() { - return { - page: this.followingsPage, - limit: this.perPage, - }; - }, - }, - relayFollowers: { - query: RELAY_FOLLOWERS, - fetchPolicy: "cache-and-network", - variables() { - return { - page: this.followersPage, - limit: this.perPage, - }; - }, - }, - }, -}) +@Component export default class RelayMixin extends Vue { @Ref("table") readonly table!: any; - relayFollowers: Paginate = { elements: [], total: 0 }; - - relayFollowings: Paginate = { elements: [], total: 0 }; - - checkedRows: IFollower[] = []; - - followingsPage = 1; - - followersPage = 1; - - perPage = 10; - toggle(row: Record): void { this.table.toggleDetails(row); } - async onFollowingsPageChange(page: number): Promise { - this.followingsPage = page; + protected async pushRouter( + routeName: string, + args: Record + ): Promise { try { - await this.$apollo.queries.relayFollowings.fetchMore({ - variables: { - page: this.followingsPage, - limit: this.perPage, - }, - updateQuery: (previousResult, { fetchMoreResult }) => { - if (!fetchMoreResult) return previousResult; - const newFollowings = fetchMoreResult.relayFollowings.elements; - return { - relayFollowings: { - __typename: previousResult.relayFollowings.__typename, - total: previousResult.relayFollowings.total, - elements: [ - ...previousResult.relayFollowings.elements, - ...newFollowings, - ], - }, - }; - }, + await this.$router.push({ + name: routeName, + query: { ...this.$route.query, ...args }, }); - } catch (err) { - console.error(err); - } - } - - async onFollowersPageChange(page: number): Promise { - this.followersPage = page; - try { - await this.$apollo.queries.relayFollowers.fetchMore({ - variables: { - page: this.followersPage, - limit: this.perPage, - }, - updateQuery: (previousResult, { fetchMoreResult }) => { - if (!fetchMoreResult) return previousResult; - const newFollowers = fetchMoreResult.relayFollowers.elements; - return { - relayFollowers: { - __typename: previousResult.relayFollowers.__typename, - total: previousResult.relayFollowers.total, - elements: [ - ...previousResult.relayFollowers.elements, - ...newFollowers, - ], - }, - }; - }, - }); - } catch (err) { - console.error(err); + } catch (e) { + if (isNavigationFailure(e, NavigationFailureType.redirected)) { + throw Error(e.toString()); + } } } diff --git a/js/src/services/push-subscription.ts b/js/src/services/push-subscription.ts index 841ad5df..820a4d25 100644 --- a/js/src/services/push-subscription.ts +++ b/js/src/services/push-subscription.ts @@ -1,6 +1,6 @@ import apolloProvider from "@/vue-apollo"; -import ApolloClient from "apollo-client"; -import { NormalizedCacheObject } from "apollo-cache-inmemory"; +import { NormalizedCacheObject } from "@apollo/client/cache/inmemory/types"; +import { ApolloClient } from "@apollo/client/core/ApolloClient"; import { WEB_PUSH } from "../graphql/config"; import { IConfig } from "../types/config.model"; diff --git a/js/src/types/apollo.ts b/js/src/types/apollo.ts index 76db3748..da8b84b3 100644 --- a/js/src/types/apollo.ts +++ b/js/src/types/apollo.ts @@ -1,4 +1,5 @@ -import { ServerError, ServerParseError } from "apollo-link-http-common"; +import { ServerParseError } from "@apollo/client/link/http"; +import { ServerError } from "@apollo/client/link/utils"; function isServerError( err: Error | ServerError | ServerParseError | undefined diff --git a/js/src/utils/auth.ts b/js/src/utils/auth.ts index 52354432..b59efefc 100644 --- a/js/src/utils/auth.ts +++ b/js/src/utils/auth.ts @@ -9,11 +9,11 @@ import { } from "@/constants"; import { ILogin, IToken } from "@/types/login.model"; import { UPDATE_CURRENT_USER_CLIENT } from "@/graphql/user"; -import ApolloClient from "apollo-client"; +import { ApolloClient } from "@apollo/client/core/ApolloClient"; import { IPerson } from "@/types/actor"; import { IDENTITIES, UPDATE_CURRENT_ACTOR_CLIENT } from "@/graphql/actor"; -import { NormalizedCacheObject } from "apollo-cache-inmemory"; import { ICurrentUserRole } from "@/types/enums"; +import { NormalizedCacheObject } from "@apollo/client/cache/inmemory/types"; export function saveTokenData(obj: IToken): void { localStorage.setItem(AUTH_ACCESS_TOKEN, obj.accessToken); diff --git a/js/src/views/Account/Register.vue b/js/src/views/Account/Register.vue index 381b0c89..0bb1ce8e 100644 --- a/js/src/views/Account/Register.vue +++ b/js/src/views/Account/Register.vue @@ -128,6 +128,7 @@ import { MOBILIZON_INSTANCE_HOST } from "../../api/_entrypoint"; import RouteName from "../../router/name"; import { changeIdentity } from "../../utils/auth"; import identityEditionMixin from "../../mixins/identityEdition"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; @Component({ apollo: { @@ -164,7 +165,10 @@ export default class Register extends mixins(identityEditionMixin) { const { data } = await this.$apollo.mutate<{ registerPerson: IPerson }>({ mutation: REGISTER_PERSON, variables: { email: this.email, ...this.identity }, - update: (store, { data: localData }) => { + update: ( + store: ApolloCache, + { data: localData }: FetchResult + ) => { if (this.userAlreadyActivated) { const identitiesData = store.readQuery<{ identities: IPerson[] }>({ query: IDENTITIES, diff --git a/js/src/views/Account/children/EditIdentity.vue b/js/src/views/Account/children/EditIdentity.vue index 4f1b08c2..367b0226 100644 --- a/js/src/views/Account/children/EditIdentity.vue +++ b/js/src/views/Account/children/EditIdentity.vue @@ -232,9 +232,10 @@ import { DELETE_FEED_TOKEN, } from "@/graphql/feed_tokens"; import { IFeedToken } from "@/types/feedtoken.model"; -import { ServerParseError } from "apollo-link-http-common"; import { IConfig } from "@/types/config.model"; import { CONFIG } from "@/graphql/config"; +import { ServerParseError } from "@apollo/client/link/http"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; @Component({ components: { @@ -324,7 +325,7 @@ export default class EditIdentity extends mixins(identityEditionMixin) { variables: { id: this.identity.id, }, - update: (store) => { + update: (store: ApolloCache) => { const data = store.readQuery<{ identities: IPerson[] }>({ query: IDENTITIES, }); @@ -368,18 +369,21 @@ export default class EditIdentity extends mixins(identityEditionMixin) { await this.$apollo.mutate({ mutation: UPDATE_PERSON, variables, - update: (store, { data: { updatePerson } }) => { + update: ( + store: ApolloCache, + { data: updateData }: FetchResult + ) => { const data = store.readQuery<{ identities: IPerson[] }>({ query: IDENTITIES, }); - if (data) { + if (data && updateData?.updatePerson) { const index = data.identities.findIndex( (i) => i.id === this.identity.id ); - this.$set(data.identities, index, updatePerson); - this.maybeUpdateCurrentActorCache(updatePerson); + this.$set(data.identities, index, updateData?.updatePerson); + this.maybeUpdateCurrentActorCache(updateData?.updatePerson); store.writeQuery({ query: IDENTITIES, data }); } @@ -403,13 +407,16 @@ export default class EditIdentity extends mixins(identityEditionMixin) { await this.$apollo.mutate({ mutation: CREATE_PERSON, variables, - update: (store, { data: { createPerson } }) => { + update: ( + store: ApolloCache, + { data: updateData }: FetchResult + ) => { const data = store.readQuery<{ identities: IPerson[] }>({ query: IDENTITIES, }); - if (data) { - data.identities.push(createPerson); + if (data && updateData?.createPerson) { + data.identities.push(updateData?.createPerson); store.writeQuery({ query: IDENTITIES, data }); } diff --git a/js/src/views/Admin/AdminGroupProfile.vue b/js/src/views/Admin/AdminGroupProfile.vue index 33d22c19..5237382c 100644 --- a/js/src/views/Admin/AdminGroupProfile.vue +++ b/js/src/views/Admin/AdminGroupProfile.vue @@ -88,6 +88,11 @@ :loading="$apollo.queries.group.loading" paginated backend-pagination + :current-page.sync="membersPage" + :aria-next-label="$t('Next page')" + :aria-previous-label="$t('Previous page')" + :aria-page-label="$t('Page')" + :aria-current-label="$t('Current page')" :total="group.members.total" :per-page="EVENTS_PER_PAGE" @page-change="onMembersPageChange" @@ -119,8 +124,11 @@ {{ props.row.actor.name }}@{{ usernameWithDomain(props.row.actor) }}
    - @{{ usernameWithDomain(props.row.actor) }} @@ -170,11 +178,9 @@
    @@ -191,6 +197,11 @@ :loading="$apollo.queries.group.loading" paginated backend-pagination + :current-page.sync="organizedEventsPage" + :aria-next-label="$t('Next page')" + :aria-previous-label="$t('Previous page')" + :aria-page-label="$t('Page')" + :aria-current-label="$t('Current page')" :total="group.organizedEvents.total" :per-page="EVENTS_PER_PAGE" @page-change="onOrganizedEventsPageChange" @@ -213,11 +224,9 @@ {{ props.row.beginsOn | formatDateTimeString }} @@ -234,8 +243,13 @@ :loading="$apollo.queries.group.loading" paginated backend-pagination + :current-page.sync="postsPage" + :aria-next-label="$t('Next page')" + :aria-previous-label="$t('Previous page')" + :aria-page-label="$t('Page')" + :aria-current-label="$t('Current page')" :total="group.posts.total" - :per-page="EVENTS_PER_PAGE" + :per-page="POSTS_PER_PAGE" @page-change="onPostsPageChange" > @@ -256,11 +270,9 @@ {{ props.row.publishAt | formatDateTimeString }} @@ -276,8 +288,14 @@ import { IGroup } from "../../types/actor"; import { usernameWithDomain, IActor } from "../../types/actor/actor.model"; import RouteName from "../../router/name"; import ActorCard from "../../components/Account/ActorCard.vue"; +import EmptyContent from "../../components/Utils/EmptyContent.vue"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; +import VueRouter from "vue-router"; +const { isNavigationFailure, NavigationFailureType } = VueRouter; -const EVENTS_PER_PAGE = 10; +const EVENTS_PER_PAGE = 3; +const POSTS_PER_PAGE = 1; +const MEMBERS_PER_PAGE = 3; @Component({ apollo: { @@ -287,8 +305,10 @@ const EVENTS_PER_PAGE = 10; variables() { return { id: this.id, - organizedEventsPage: 1, + organizedEventsPage: this.organizedEventsPage, organizedEventsLimit: EVENTS_PER_PAGE, + postsPage: this.postsPage, + postsLimit: POSTS_PER_PAGE, }; }, skip() { @@ -299,6 +319,7 @@ const EVENTS_PER_PAGE = 10; }, components: { ActorCard, + EmptyContent, }, }) export default class AdminGroupProfile extends Vue { @@ -312,14 +333,39 @@ export default class AdminGroupProfile extends Vue { EVENTS_PER_PAGE = EVENTS_PER_PAGE; - organizedEventsPage = 1; + POSTS_PER_PAGE = POSTS_PER_PAGE; - membersPage = 1; - - postsPage = 1; + MEMBERS_PER_PAGE = MEMBERS_PER_PAGE; MemberRole = MemberRole; + get organizedEventsPage(): number { + return parseInt( + (this.$route.query.organizedEventsPage as string) || "1", + 10 + ); + } + + set organizedEventsPage(page: number) { + this.pushRouter({ organizedEventsPage: page.toString() }); + } + + get membersPage(): number { + return parseInt((this.$route.query.membersPage as string) || "1", 10); + } + + set membersPage(page: number) { + this.pushRouter({ membersPage: page.toString() }); + } + + get postsPage(): number { + return parseInt((this.$route.query.postsPage as string) || "1", 10); + } + + set postsPage(page: number) { + this.pushRouter({ postsPage: page.toString() }); + } + get metadata(): Array> { if (!this.group) return []; const res: Record[] = [ @@ -367,64 +413,85 @@ export default class AdminGroupProfile extends Vue { } async suspendProfile(): Promise { - this.$apollo.mutate<{ suspendProfile: { id: string } }>({ - mutation: SUSPEND_PROFILE, - variables: { - id: this.id, - }, - update: (store, { data }) => { - if (data == null) return; - const profileId = this.id; + try { + await this.$apollo.mutate<{ suspendProfile: { id: string } }>({ + mutation: SUSPEND_PROFILE, + variables: { + id: this.id, + }, + update: (store: ApolloCache, { data }: FetchResult) => { + if (data == null) return; + const profileId = this.id; - const profileData = store.readQuery<{ getGroup: IGroup }>({ - query: GET_GROUP, - variables: { - id: profileId, - }, - }); + const profileData = store.readQuery<{ getGroup: IGroup }>({ + query: GET_GROUP, + variables: { + id: profileId, + }, + }); - if (!profileData) return; - const { getGroup: group } = profileData; - group.suspended = true; - group.avatar = null; - group.name = ""; - group.summary = ""; - store.writeQuery({ - query: GET_GROUP, - variables: { - id: profileId, - }, - data: { getGroup: group }, - }); - }, - }); + if (!profileData) return; + store.writeQuery({ + query: GET_GROUP, + variables: { + id: profileId, + }, + data: { + getGroup: { + ...profileData.getGroup, + suspended: true, + avatar: null, + name: "", + summary: "", + }, + }, + }); + }, + }); + } catch (e) { + console.error(e); + this.$notifier.error(this.$t("Error while suspending group") as string); + } } async unsuspendProfile(): Promise { - const profileID = this.id; - await this.$apollo.mutate<{ unsuspendProfile: { id: string } }>({ - mutation: UNSUSPEND_PROFILE, - variables: { - id: this.id, - }, - refetchQueries: [ - { - query: GET_GROUP, - variables: { - id: profileID, - }, + try { + const profileID = this.id; + await this.$apollo.mutate<{ unsuspendProfile: { id: string } }>({ + mutation: UNSUSPEND_PROFILE, + variables: { + id: this.id, }, - ], - }); + refetchQueries: [ + { + query: GET_GROUP, + variables: { + id: profileID, + }, + }, + ], + }); + } catch (e) { + console.error(e); + this.$notifier.error(this.$t("Error while suspending group") as string); + } } async refreshProfile(): Promise { - this.$apollo.mutate<{ refreshProfile: IActor }>({ - mutation: REFRESH_PROFILE, - variables: { - actorId: this.id, - }, - }); + try { + this.$apollo.mutate<{ refreshProfile: IActor }>({ + mutation: REFRESH_PROFILE, + variables: { + actorId: this.id, + }, + }); + this.$notifier.success( + this.$t("Triggered profile refreshment") as string + ); + } catch (e) { + console.error(e); + this.$notifier.error(this.$t("Error while suspending group") as string); + } } async onOrganizedEventsPageChange(page: number): Promise { @@ -435,24 +502,6 @@ export default class AdminGroupProfile extends Vue { organizedEventsPage: this.organizedEventsPage, organizedEventsLimit: EVENTS_PER_PAGE, }, - updateQuery: (previousResult, { fetchMoreResult }) => { - if (!fetchMoreResult) return previousResult; - const newOrganizedEvents = - fetchMoreResult.group.organizedEvents.elements; - return { - group: { - ...previousResult.group, - organizedEvents: { - __typename: previousResult.group.organizedEvents.__typename, - total: previousResult.group.organizedEvents.total, - elements: [ - ...previousResult.group.organizedEvents.elements, - ...newOrganizedEvents, - ], - }, - }, - }; - }, }); } @@ -464,23 +513,6 @@ export default class AdminGroupProfile extends Vue { memberPage: this.membersPage, memberLimit: EVENTS_PER_PAGE, }, - updateQuery: (previousResult, { fetchMoreResult }) => { - if (!fetchMoreResult) return previousResult; - const newMembers = fetchMoreResult.group.members.elements; - return { - group: { - ...previousResult.group, - members: { - __typename: previousResult.group.members.__typename, - total: previousResult.group.members.total, - elements: [ - ...previousResult.group.members.elements, - ...newMembers, - ], - }, - }, - }; - }, }); } @@ -490,24 +522,23 @@ export default class AdminGroupProfile extends Vue { variables: { actorId: this.id, postsPage: this.postsPage, - postLimit: EVENTS_PER_PAGE, - }, - updateQuery: (previousResult, { fetchMoreResult }) => { - if (!fetchMoreResult) return previousResult; - const newPosts = fetchMoreResult.group.posts.elements; - return { - group: { - ...previousResult.group, - posts: { - __typename: previousResult.group.posts.__typename, - total: previousResult.group.posts.total, - elements: [...previousResult.group.posts.elements, ...newPosts], - }, - }, - }; + postLimit: POSTS_PER_PAGE, }, }); } + + private async pushRouter(args: Record): Promise { + try { + await this.$router.push({ + name: RouteName.ADMIN_GROUP_PROFILE, + query: { ...this.$route.query, ...args }, + }); + } catch (e) { + if (isNavigationFailure(e, NavigationFailureType.redirected)) { + throw Error(e.toString()); + } + } + } } diff --git a/js/src/views/Admin/AdminProfile.vue b/js/src/views/Admin/AdminProfile.vue index 68b0221b..84e909ff 100644 --- a/js/src/views/Admin/AdminProfile.vue +++ b/js/src/views/Admin/AdminProfile.vue @@ -74,6 +74,11 @@ :loading="$apollo.queries.person.loading" paginated backend-pagination + :current-page.sync="organizedEventsPage" + :aria-next-label="$t('Next page')" + :aria-previous-label="$t('Previous page')" + :aria-page-label="$t('Page')" + :aria-current-label="$t('Current page')" :total="person.organizedEvents.total" :per-page="EVENTS_PER_PAGE" @page-change="onOrganizedEventsPageChange" @@ -93,11 +98,9 @@ @@ -115,9 +118,14 @@ (participation) => participation.event ) " - :loading="$apollo.queries.person.loading" + :loading="$apollo.loading" paginated backend-pagination + :current-page.sync="participationsPage" + :aria-next-label="$t('Next page')" + :aria-previous-label="$t('Previous page')" + :aria-page-label="$t('Page')" + :aria-current-label="$t('Current page')" :total="person.participations.total" :per-page="EVENTS_PER_PAGE" @page-change="onParticipationsPageChange" @@ -137,11 +145,115 @@ + + +
    +

    + {{ + $tc("{number} memberships", person.memberships.total, { + number: person.memberships.total, + }) + }} +

    + + +
    +
    + +
    + +
    +
    + {{ + props.row.parent.name + }}
    + @{{ usernameWithDomain(props.row.parent) }} +
    -
    + + + + + {{ $t("Administrator") }} + + + {{ $t("Moderator") }} + + + {{ $t("Member") }} + + + {{ $t("Not approved") }} + + + {{ $t("Rejected") }} + + + {{ $t("Invited") }} + + + + + {{ props.row.insertedAt | formatDateString }}
    {{ + props.row.insertedAt | formatTimeString + }} +
    +
    + @@ -159,8 +271,15 @@ import { IPerson } from "../../types/actor"; import { usernameWithDomain } from "../../types/actor/actor.model"; import RouteName from "../../router/name"; import ActorCard from "../../components/Account/ActorCard.vue"; +import EmptyContent from "../../components/Utils/EmptyContent.vue"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; +import VueRouter from "vue-router"; +import { MemberRole } from "@/types/enums"; +const { isNavigationFailure, NavigationFailureType } = VueRouter; const EVENTS_PER_PAGE = 10; +const PARTICIPATIONS_PER_PAGE = 10; +const MEMBERSHIPS_PER_PAGE = 10; @Component({ apollo: { @@ -170,8 +289,12 @@ const EVENTS_PER_PAGE = 10; variables() { return { actorId: this.id, - organizedEventsPage: 1, + organizedEventsPage: this.organizedEventsPage, organizedEventsLimit: EVENTS_PER_PAGE, + participationsPage: this.participationsPage, + participationLimit: PARTICIPATIONS_PER_PAGE, + membershipsPage: this.membershipsPage, + membershipsLimit: MEMBERSHIPS_PER_PAGE, }; }, skip() { @@ -181,6 +304,7 @@ const EVENTS_PER_PAGE = 10; }, components: { ActorCard, + EmptyContent, }, }) export default class AdminProfile extends Vue { @@ -194,9 +318,41 @@ export default class AdminProfile extends Vue { EVENTS_PER_PAGE = EVENTS_PER_PAGE; - organizedEventsPage = 1; + PARTICIPATIONS_PER_PAGE = PARTICIPATIONS_PER_PAGE; - participationsPage = 1; + MEMBERSHIPS_PER_PAGE = MEMBERSHIPS_PER_PAGE; + + MemberRole = MemberRole; + + get organizedEventsPage(): number { + return parseInt( + (this.$route.query.organizedEventsPage as string) || "1", + 10 + ); + } + + set organizedEventsPage(page: number) { + this.pushRouter({ organizedEventsPage: page.toString() }); + } + + get participationsPage(): number { + return parseInt( + (this.$route.query.participationsPage as string) || "1", + 10 + ); + } + + set participationsPage(page: number) { + this.pushRouter({ participationsPage: page.toString() }); + } + + get membershipsPage(): number { + return parseInt((this.$route.query.membershipsPage as string) || "1", 10); + } + + set membershipsPage(page: number) { + this.pushRouter({ membershipsPage: page.toString() }); + } get metadata(): Array> { if (!this.person) return []; @@ -233,7 +389,7 @@ export default class AdminProfile extends Vue { variables: { id: this.id, }, - update: (store, { data }) => { + update: (store: ApolloCache, { data }: FetchResult) => { if (data == null) return; const profileId = this.id; @@ -248,16 +404,20 @@ export default class AdminProfile extends Vue { if (!profileData) return; const { person } = profileData; - person.suspended = true; - person.avatar = null; - person.name = ""; - person.summary = ""; store.writeQuery({ query: GET_PERSON, variables: { actorId: profileId, }, - data: { person }, + data: { + person: { + ...person, + suspended: true, + avatar: null, + name: "", + summary: "", + }, + }, }); }, }); @@ -283,63 +443,48 @@ export default class AdminProfile extends Vue { }); } - async onOrganizedEventsPageChange(page: number): Promise { - this.organizedEventsPage = page; + async onOrganizedEventsPageChange(): Promise { await this.$apollo.queries.person.fetchMore({ variables: { actorId: this.id, organizedEventsPage: this.organizedEventsPage, organizedEventsLimit: EVENTS_PER_PAGE, }, - updateQuery: (previousResult, { fetchMoreResult }) => { - if (!fetchMoreResult) return previousResult; - const newOrganizedEvents = - fetchMoreResult.person.organizedEvents.elements; - return { - person: { - ...previousResult.person, - organizedEvents: { - __typename: previousResult.person.organizedEvents.__typename, - total: previousResult.person.organizedEvents.total, - elements: [ - ...previousResult.person.organizedEvents.elements, - ...newOrganizedEvents, - ], - }, - }, - }; - }, }); } - async onParticipationsPageChange(page: number): Promise { - this.participationsPage = page; + async onParticipationsPageChange(): Promise { await this.$apollo.queries.person.fetchMore({ variables: { actorId: this.id, participationPage: this.participationsPage, - participationLimit: EVENTS_PER_PAGE, - }, - updateQuery: (previousResult, { fetchMoreResult }) => { - if (!fetchMoreResult) return previousResult; - const newParticipations = - fetchMoreResult.person.participations.elements; - return { - person: { - ...previousResult.person, - participations: { - __typename: previousResult.person.participations.__typename, - total: previousResult.person.participations.total, - elements: [ - ...previousResult.person.participations.elements, - ...newParticipations, - ], - }, - }, - }; + participationLimit: PARTICIPATIONS_PER_PAGE, }, }); } + + async onMembershipsPageChange(): Promise { + await this.$apollo.queries.person.fetchMore({ + variables: { + actorId: this.id, + membershipsPage: this.participationsPage, + membershipsLimit: MEMBERSHIPS_PER_PAGE, + }, + }); + } + + private async pushRouter(args: Record): Promise { + try { + await this.$router.push({ + name: RouteName.ADMIN_PROFILE, + query: { ...this.$route.query, ...args }, + }); + } catch (e) { + if (isNavigationFailure(e, NavigationFailureType.redirected)) { + throw Error(e.toString()); + } + } + } } diff --git a/js/src/views/Admin/Follows.vue b/js/src/views/Admin/Follows.vue index 4a7d007f..2d9b6e59 100644 --- a/js/src/views/Admin/Follows.vue +++ b/js/src/views/Admin/Follows.vue @@ -32,7 +32,6 @@ tag="li" active-class="is-active" :to="{ name: RouteName.RELAY_FOLLOWINGS }" - exact >
    @@ -46,7 +45,6 @@ tag="li" active-class="is-active" :to="{ name: RouteName.RELAY_FOLLOWERS }" - exact > diff --git a/js/src/views/Admin/GroupProfiles.vue b/js/src/views/Admin/GroupProfiles.vue index 9d255331..261bfcb0 100644 --- a/js/src/views/Admin/GroupProfiles.vue +++ b/js/src/views/Admin/GroupProfiles.vue @@ -23,6 +23,12 @@ paginated backend-pagination backend-filtering + :debounce-search="200" + :current-page.sync="page" + :aria-next-label="$t('Next page')" + :aria-previous-label="$t('Previous page')" + :aria-page-label="$t('Page')" + :aria-current-label="$t('Current page')" :total="groups.total" :per-page="PROFILES_PER_PAGE" @page-change="onPageChange" @@ -81,20 +87,21 @@ diff --git a/js/src/views/Admin/Profiles.vue b/js/src/views/Admin/Profiles.vue index 71384cf5..682f8b5e 100644 --- a/js/src/views/Admin/Profiles.vue +++ b/js/src/views/Admin/Profiles.vue @@ -23,6 +23,12 @@ paginated backend-pagination backend-filtering + :debounce-search="200" + :current-page.sync="page" + :aria-next-label="$t('Next page')" + :aria-previous-label="$t('Previous page')" + :aria-page-label="$t('Page')" + :aria-current-label="$t('Current page')" :total="persons.total" :per-page="PROFILES_PER_PAGE" @page-change="onPageChange" @@ -81,20 +87,21 @@ diff --git a/js/src/views/Admin/Users.vue b/js/src/views/Admin/Users.vue index 60ffb817..94230417 100644 --- a/js/src/views/Admin/Users.vue +++ b/js/src/views/Admin/Users.vue @@ -22,6 +22,11 @@ backend-pagination backend-filtering detailed + :current-page.sync="page" + :aria-next-label="$t('Next page')" + :aria-previous-label="$t('Previous page')" + :aria-page-label="$t('Page')" + :aria-current-label="$t('Current page')" :show-detail-icon="true" :total="users.total" :per-page="USERS_PER_PAGE" @@ -108,6 +113,8 @@ import { Component, Vue } from "vue-property-decorator"; import { LIST_USERS } from "../../graphql/user"; import RouteName from "../../router/name"; +import VueRouter from "vue-router"; +const { isNavigationFailure, NavigationFailureType } = VueRouter; const USERS_PER_PAGE = 10; @@ -119,7 +126,7 @@ const USERS_PER_PAGE = 10; variables() { return { email: this.email, - page: 1, + page: this.page, limit: USERS_PER_PAGE, }; }, @@ -127,14 +134,26 @@ const USERS_PER_PAGE = 10; }, }) export default class Users extends Vue { - page = 1; - - email = ""; - USERS_PER_PAGE = USERS_PER_PAGE; RouteName = RouteName; + get page(): number { + return parseInt((this.$route.query.page as string) || "1", 10); + } + + set page(page: number) { + this.pushRouter({ page: page.toString() }); + } + + get email(): string { + return (this.$route.query.email as string) || ""; + } + + set email(email: string) { + this.pushRouter({ email }); + } + async onPageChange(page: number): Promise { this.page = page; await this.$apollo.queries.users.fetchMore({ @@ -143,23 +162,25 @@ export default class Users extends Vue { page: this.page, limit: USERS_PER_PAGE, }, - updateQuery: (previousResult, { fetchMoreResult }) => { - if (!fetchMoreResult) return previousResult; - const newFollowings = fetchMoreResult.users.elements; - return { - users: { - __typename: previousResult.users.__typename, - total: previousResult.users.total, - elements: [...previousResult.users.elements, ...newFollowings], - }, - }; - }, }); } onFiltersChange({ email }: { email: string }): void { this.email = email; } + + private async pushRouter(args: Record): Promise { + try { + await this.$router.push({ + name: RouteName.USERS, + query: { ...this.$route.query, ...args }, + }); + } catch (e) { + if (isNavigationFailure(e, NavigationFailureType.redirected)) { + throw Error(e.toString()); + } + } + } } diff --git a/js/src/views/Discussions/Discussion.vue b/js/src/views/Discussions/Discussion.vue index da3b1e9f..522c1864 100644 --- a/js/src/views/Discussions/Discussion.vue +++ b/js/src/views/Discussions/Discussion.vue @@ -143,6 +143,7 @@ import { DELETE_COMMENT, UPDATE_COMMENT } from "@/graphql/comment"; import GroupMixin from "@/mixins/group"; import RouteName from "../../router/name"; import { IComment } from "../../types/comment.model"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; @Component({ apollo: { @@ -168,24 +169,36 @@ import { IComment } from "../../types/comment.model"; variables() { return { slug: this.slug, + page: this.page, + limit: this.COMMENTS_PER_PAGE, }; }, - updateQuery: (previousResult, { subscriptionData }) => { + updateQuery: function ( + previousResult: any, + { subscriptionData }: { subscriptionData: any } + ) { const previousDiscussion = previousResult.discussion; - console.log("updating subscription with ", subscriptionData); - if ( - !previousDiscussion.comments.elements.find( - (comment: IComment) => - comment.id === - subscriptionData.data.discussionCommentChanged.lastComment.id - ) - ) { - previousDiscussion.lastComment = - subscriptionData.data.discussionCommentChanged.lastComment; - previousDiscussion.comments.elements.push( - subscriptionData.data.discussionCommentChanged.lastComment - ); - previousDiscussion.comments.total += 1; + const lastComment = + subscriptionData.data.discussionCommentChanged.lastComment; + const canLoadMore = !previousDiscussion.comments.elements.find( + (comment: IComment) => comment.id === lastComment.id + ); + if (canLoadMore) { + return { + discussion: { + ...previousDiscussion, + lastComment: lastComment, + comments: { + elements: [ + ...previousDiscussion.comments.elements.filter( + ({ id }: { id: string }) => id !== lastComment.id + ), + lastComment, + ], + total: previousDiscussion.comments.total + 1, + }, + }, + }; } return previousDiscussion; @@ -239,29 +252,6 @@ export default class discussion extends mixins(GroupMixin) { discussionId: this.discussion.id, text: this.newComment, }, - update: (store, { data: { replyToDiscussion } }) => { - const discussionData = store.readQuery<{ - discussion: IDiscussion; - }>({ - query: GET_DISCUSSION, - variables: { - slug: this.slug, - page: this.page, - }, - }); - if (!discussionData) return; - const { discussion: discussionCached } = discussionData; - discussionCached.lastComment = replyToDiscussion.lastComment; - discussionCached.comments.elements.push(replyToDiscussion.lastComment); - discussionCached.comments.total += 1; - store.writeQuery({ - query: GET_DISCUSSION, - variables: { slug: this.slug, page: this.page }, - data: { discussion: discussionCached }, - }); - }, - // We don't need to handle cache update since - // there's the subscription that handles this for us }); this.newComment = ""; } @@ -273,7 +263,7 @@ export default class discussion extends mixins(GroupMixin) { commentId: comment.id, text: comment.text, }, - update: (store, { data }) => { + update: (store: ApolloCache, { data }: FetchResult) => { if (!data || !data.deleteComment) return; const discussionData = store.readQuery<{ discussion: IDiscussion; @@ -308,7 +298,7 @@ export default class discussion extends mixins(GroupMixin) { variables: { commentId: comment.id, }, - update: (store, { data }) => { + update: (store: ApolloCache, { data }: FetchResult) => { if (!data || !data.deleteComment) return; const discussionData = store.readQuery<{ discussion: IDiscussion; @@ -324,17 +314,30 @@ export default class discussion extends mixins(GroupMixin) { const index = discussionCached.comments.elements.findIndex( ({ id }) => id === data.deleteComment.id ); + let discussionUpdated = discussionCached; if (index > -1) { - const updatedComment = discussionCached.comments.elements[index]; - updatedComment.deletedAt = new Date(); - updatedComment.actor = null; - updatedComment.text = ""; - discussionCached.comments.elements.splice(index, 1, updatedComment); + const updatedComment = { + ...discussionCached.comments.elements[index], + deletedAt: new Date(), + actor: null, + updatedComment: { + text: "", + }, + }; + const elements = [...discussionCached.comments.elements]; + elements.splice(index, 1, updatedComment); + discussionUpdated = { + ...discussionCached, + comments: { + total: discussionCached.comments.total, + elements, + }, + }; } store.writeQuery({ query: GET_DISCUSSION, variables: { slug: this.slug, page: this.page }, - data: { discussion: discussionCached }, + data: { discussion: discussionUpdated }, }); }, }); @@ -351,19 +354,6 @@ export default class discussion extends mixins(GroupMixin) { page: this.page, limit: this.COMMENTS_PER_PAGE, }, - // Transform the previous result with new data - updateQuery: (previousResult, { fetchMoreResult }) => { - if (!fetchMoreResult) return previousResult; - const newComments = fetchMoreResult.discussion.comments.elements; - this.hasMoreComments = newComments.length === 1; - const { discussion: discussionCached } = previousResult; - discussionCached.comments.elements = [ - ...previousResult.discussion.comments.elements, - ...newComments, - ]; - - return { discussion: discussionCached }; - }, }); } catch (e) { console.error(e); @@ -377,7 +367,10 @@ export default class discussion extends mixins(GroupMixin) { discussionId: this.discussion.id, title: this.newTitle, }, - update: (store, { data: { updateDiscussion } }) => { + update: ( + store: ApolloCache, + { data }: FetchResult<{ updateDiscussion: IDiscussion }> + ) => { const discussionData = store.readQuery<{ discussion: IDiscussion; }>({ @@ -387,14 +380,18 @@ export default class discussion extends mixins(GroupMixin) { page: this.page, }, }); - if (!discussionData) return; - const { discussion: discussionCached } = discussionData; - discussionCached.title = updateDiscussion.title; - store.writeQuery({ - query: GET_DISCUSSION, - variables: { slug: this.slug, page: this.page }, - data: { discussion: discussionCached }, - }); + if (discussionData && data?.updateDiscussion) { + store.writeQuery({ + query: GET_DISCUSSION, + variables: { slug: this.slug, page: this.page }, + data: { + discussion: { + ...discussionData.discussion, + title: data?.updateDiscussion.title, + }, + }, + }); + } }, }); this.editTitleMode = false; diff --git a/js/src/views/Event/Edit.vue b/js/src/views/Event/Edit.vue index 98f01283..95460777 100644 --- a/js/src/views/Event/Edit.vue +++ b/js/src/views/Event/Edit.vue @@ -442,7 +442,7 @@ section { diff --git a/js/src/views/Resources/ResourceFolder.vue b/js/src/views/Resources/ResourceFolder.vue index 1ae5a4e9..7e3435a4 100644 --- a/js/src/views/Resources/ResourceFolder.vue +++ b/js/src/views/Resources/ResourceFolder.vue @@ -229,7 +229,7 @@ import { Component, Mixins, Prop, Watch } from "vue-property-decorator"; import ResourceItem from "@/components/Resource/ResourceItem.vue"; import FolderItem from "@/components/Resource/FolderItem.vue"; import Draggable from "vuedraggable"; -import { RefetchQueryDescription } from "apollo-client/core/watchQueryOptions"; +import { RefetchQueryDescription } from "@apollo/client/core/watchQueryOptions"; import { CURRENT_ACTOR_CLIENT } from "../../graphql/actor"; import { IActor, usernameWithDomain } from "../../types/actor"; import RouteName from "../../router/name"; @@ -249,6 +249,7 @@ import { CONFIG } from "../../graphql/config"; import { IConfig } from "../../types/config.model"; import ResourceMixin from "../../mixins/resource"; import ResourceSelector from "../../components/Resource/ResourceSelector.vue"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; @Component({ components: { FolderItem, ResourceItem, Draggable, ResourceSelector }, @@ -538,7 +539,7 @@ export default class Resources extends Mixins(ResourceMixin) { path: resource.path, }, refetchQueries: () => this.postRefreshQueries(), - update: (store, { data }) => { + update: (store: ApolloCache, { data }: FetchResult) => { if (!data || data.updateResource == null || parentPath == null) return; if (!this.resource.actor) return; diff --git a/js/src/views/Todos/TodoList.vue b/js/src/views/Todos/TodoList.vue index 415d019e..c980c46a 100644 --- a/js/src/views/Todos/TodoList.vue +++ b/js/src/views/Todos/TodoList.vue @@ -51,6 +51,7 @@ import { CURRENT_ACTOR_CLIENT } from "@/graphql/actor"; import { IActor } from "@/types/actor"; import { ITodoList } from "@/types/todolist"; import RouteName from "../../router/name"; +import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; @Component({ components: { @@ -88,7 +89,7 @@ export default class TodoList extends Vue { status: this.newTodo.status, todoListId: this.id, }, - update: (store, { data }) => { + update: (store: ApolloCache, { data }: FetchResult) => { if (data == null) return; const cachedData = store.readQuery<{ todoList: ITodoList }>({ query: FETCH_TODO_LIST, diff --git a/js/src/vue-apollo.ts b/js/src/vue-apollo.ts index 3191afd5..65a23ac4 100644 --- a/js/src/vue-apollo.ts +++ b/js/src/vue-apollo.ts @@ -1,14 +1,16 @@ import Vue from "vue"; import VueApollo from "vue-apollo"; -import { ApolloLink, Observable, split } from "apollo-link"; +import { onError } from "@apollo/client/link/error"; +import { createLink } from "apollo-absinthe-upload-link"; import { + ApolloClient, + ApolloLink, defaultDataIdFromObject, InMemoryCache, NormalizedCacheObject, -} from "apollo-cache-inmemory"; -import { onError } from "apollo-link-error"; -import { createLink } from "apollo-absinthe-upload-link"; -import { ApolloClient } from "apollo-client"; + Observable, + split, +} from "@apollo/client/core"; import buildCurrentUserResolver from "@/apollo/user"; import { isServerError } from "@/types/apollo"; import { AUTH_ACCESS_TOKEN } from "@/constants"; @@ -16,10 +18,14 @@ import { logout } from "@/utils/auth"; import { Socket as PhoenixSocket } from "phoenix"; import * as AbsintheSocket from "@absinthe/socket"; import { createAbsintheSocketLink } from "@absinthe/socket-apollo-link"; -import { getMainDefinition } from "apollo-utilities"; +import { getMainDefinition } from "@apollo/client/utilities"; import fetch from "unfetch"; import { GRAPHQL_API_ENDPOINT, GRAPHQL_API_FULL_PATH } from "./api/_entrypoint"; -import { fragmentMatcher, refreshAccessToken } from "./apollo/utils"; +import { + possibleTypes, + typePolicies, + refreshAccessToken, +} from "./apollo/utils"; // Install the vue plugin Vue.use(VueApollo); @@ -89,7 +95,7 @@ const errorLink = onError( ({ graphQLErrors, networkError, forward, operation }) => { if ( isServerError(networkError) && - networkError.statusCode === 401 && + networkError?.statusCode === 401 && !alreadyRefreshedToken ) { if (!refreshingTokenPromise) @@ -130,7 +136,8 @@ const errorLink = onError( const fullLink = authMiddleware.concat(errorLink).concat(link); const cache = new InMemoryCache({ - fragmentMatcher, + typePolicies, + possibleTypes, dataIdFromObject: (object: any) => { if (object.__typename === "Address") { return object.origin_id; diff --git a/js/tests/unit/specs/components/Comment/CommentTree.spec.ts b/js/tests/unit/specs/components/Comment/CommentTree.spec.ts index 44d1b635..004158bc 100644 --- a/js/tests/unit/specs/components/Comment/CommentTree.spec.ts +++ b/js/tests/unit/specs/components/Comment/CommentTree.spec.ts @@ -1,7 +1,6 @@ import { config, createLocalVue, shallowMount, Wrapper } from "@vue/test-utils"; import CommentTree from "@/components/Comment/CommentTree.vue"; import Buefy from "buefy"; -import { InMemoryCache } from "apollo-cache-inmemory"; import { createMockClient, MockApolloClient, @@ -17,6 +16,7 @@ import { newCommentForEventMock, newCommentForEventResponse, } from "../../mocks/event"; +import { InMemoryCache } from "@apollo/client/cache"; const localVue = createLocalVue(); localVue.use(Buefy); diff --git a/js/tests/unit/specs/components/Participation/ParticipationSection.spec.ts b/js/tests/unit/specs/components/Participation/ParticipationSection.spec.ts index 2b20839b..7bf40017 100644 --- a/js/tests/unit/specs/components/Participation/ParticipationSection.spec.ts +++ b/js/tests/unit/specs/components/Participation/ParticipationSection.spec.ts @@ -10,10 +10,10 @@ import { RequestHandler, } from "mock-apollo-client"; import buildCurrentUserResolver from "@/apollo/user"; -import { InMemoryCache } from "apollo-cache-inmemory"; import { CONFIG } from "@/graphql/config"; import VueApollo from "vue-apollo"; import { configMock } from "../../mocks/config"; +import { InMemoryCache } from "@apollo/client/cache"; const localVue = createLocalVue(); localVue.use(Buefy); diff --git a/js/tests/unit/specs/components/Participation/ParticipationWithoutAccount.spec.ts b/js/tests/unit/specs/components/Participation/ParticipationWithoutAccount.spec.ts index 5c792318..047cb595 100644 --- a/js/tests/unit/specs/components/Participation/ParticipationWithoutAccount.spec.ts +++ b/js/tests/unit/specs/components/Participation/ParticipationWithoutAccount.spec.ts @@ -14,7 +14,6 @@ import { RequestHandler, } from "mock-apollo-client"; import buildCurrentUserResolver from "@/apollo/user"; -import { InMemoryCache } from "apollo-cache-inmemory"; import { CONFIG } from "@/graphql/config"; import VueApollo from "vue-apollo"; import { FETCH_EVENT_BASIC, JOIN_EVENT } from "@/graphql/event"; @@ -26,6 +25,7 @@ import { joinEventMock, joinEventResponseMock, } from "../../mocks/event"; +import { InMemoryCache } from "@apollo/client/cache"; const localVue = createLocalVue(); localVue.use(Buefy); diff --git a/js/tests/unit/specs/components/User/login.spec.ts b/js/tests/unit/specs/components/User/login.spec.ts index 67698e7f..600d1484 100644 --- a/js/tests/unit/specs/components/User/login.spec.ts +++ b/js/tests/unit/specs/components/User/login.spec.ts @@ -8,7 +8,6 @@ import { } from "mock-apollo-client"; import VueApollo from "vue-apollo"; import buildCurrentUserResolver from "@/apollo/user"; -import { InMemoryCache } from "apollo-cache-inmemory"; import { configMock } from "../../mocks/config"; import { i18n } from "@/utils/i18n"; import { CONFIG } from "@/graphql/config"; @@ -18,6 +17,7 @@ import { CURRENT_USER_CLIENT } from "@/graphql/user"; import { ICurrentUser } from "@/types/current-user.model"; import flushPromises from "flush-promises"; import RouteName from "@/router/name"; +import { InMemoryCache } from "@apollo/client/cache"; const localVue = createLocalVue(); localVue.use(Buefy); diff --git a/js/tests/unit/specs/components/navbar.spec.ts b/js/tests/unit/specs/components/navbar.spec.ts index f2123eed..cd729749 100644 --- a/js/tests/unit/specs/components/navbar.spec.ts +++ b/js/tests/unit/specs/components/navbar.spec.ts @@ -8,10 +8,10 @@ import { import VueApollo from "vue-apollo"; import { CONFIG } from "@/graphql/config"; import { USER_SETTINGS } from "@/graphql/user"; -import { InMemoryCache } from "apollo-cache-inmemory"; import buildCurrentUserResolver from "@/apollo/user"; import Buefy from "buefy"; import { configMock } from "../mocks/config"; +import { InMemoryCache } from "@apollo/client/cache"; const localVue = createLocalVue(); localVue.use(VueApollo); diff --git a/js/yarn.lock b/js/yarn.lock index 315dc1dd..deaf540c 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -27,7 +27,7 @@ core-js "2.6.0" zen-observable "0.8.11" -"@apollo/client@^3.0.0": +"@apollo/client@^3.0.0", "@apollo/client@^3.3.16": version "3.3.19" resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.3.19.tgz#f1172dc9b9d7eae04c8940b047fd3b452ef92d2c" integrity sha512-vzljWLPP0GwocfBhUopzDCUwsiaNTtii1eu8qDybAXqwj4/ZhnIM46c6dNQmnVcJpAIFRIsNCOxM4OlMDySJug== @@ -1906,7 +1906,7 @@ resolved "https://registry.yarnpkg.com/@types/ngeohash/-/ngeohash-0.6.2.tgz#356bb5e79294bc9f746ad89eb848eca2741a6e43" integrity sha512-6nlq2eEh75JegDGUXis9wGTYIJpUvbori4qx++PRKQsV3YRkaqUNPNykzphniqPSZADXCouBuAnyptjUkMkhvw== -"@types/node@*", "@types/node@>=6": +"@types/node@*": version "15.3.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-15.3.0.tgz#d6fed7d6bc6854306da3dea1af9f874b00783e26" integrity sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ== @@ -2746,14 +2746,6 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.4.0.tgz#f84fd07bcacefe56ce762925798871092f0f228e" integrity sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg== -"@wry/context@^0.4.0": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.4.4.tgz#e50f5fa1d6cfaabf2977d1fda5ae91717f8815f8" - integrity sha512-LrKVLove/zw6h2Md/KZyWxIkFM6AoyKp71OqpH9Hiip1csjPVoD3tPxlbQUNxEnHENks3UGgNpSBCAfq9KWuag== - dependencies: - "@types/node" ">=6" - tslib "^1.9.3" - "@wry/context@^0.6.0": version "0.6.0" resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.6.0.tgz#f903eceb89d238ef7e8168ed30f4511f92d83e06" @@ -2984,74 +2976,6 @@ apollo-absinthe-upload-link@^1.5.0: graphql "^15.0.0" rxjs "~6.2.2" -apollo-cache-inmemory@^1.6.6: - version "1.6.6" - resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.6.tgz#56d1f2a463a6b9db32e9fa990af16d2a008206fd" - integrity sha512-L8pToTW/+Xru2FFAhkZ1OA9q4V4nuvfoPecBM34DecAugUZEBhI2Hmpgnzq2hTKZ60LAMrlqiASm0aqAY6F8/A== - dependencies: - apollo-cache "^1.3.5" - apollo-utilities "^1.3.4" - optimism "^0.10.0" - ts-invariant "^0.4.0" - tslib "^1.10.0" - -apollo-cache@1.3.5, apollo-cache@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.3.5.tgz#9dbebfc8dbe8fe7f97ba568a224bca2c5d81f461" - integrity sha512-1XoDy8kJnyWY/i/+gLTEbYLnoiVtS8y7ikBr/IfmML4Qb+CM7dEEbIUOjnY716WqmZ/UpXIxTfJsY7rMcqiCXA== - dependencies: - apollo-utilities "^1.3.4" - tslib "^1.10.0" - -apollo-client@^2.6.10: - version "2.6.10" - resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.6.10.tgz#86637047b51d940c8eaa771a4ce1b02df16bea6a" - integrity sha512-jiPlMTN6/5CjZpJOkGeUV0mb4zxx33uXWdj/xQCfAMkuNAC3HN7CvYDyMHHEzmcQ5GV12LszWoQ/VlxET24CtA== - dependencies: - "@types/zen-observable" "^0.8.0" - apollo-cache "1.3.5" - apollo-link "^1.0.0" - apollo-utilities "1.3.4" - symbol-observable "^1.0.2" - ts-invariant "^0.4.0" - tslib "^1.10.0" - zen-observable "^0.8.0" - -apollo-link-error@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/apollo-link-error/-/apollo-link-error-1.1.13.tgz#c1a1bb876ffe380802c8df0506a32c33aad284cd" - integrity sha512-jAZOOahJU6bwSqb2ZyskEK1XdgUY9nkmeclCrW7Gddh1uasHVqmoYc4CKdb0/H0Y1J9lvaXKle2Wsw/Zx1AyUg== - dependencies: - apollo-link "^1.2.14" - apollo-link-http-common "^0.2.16" - tslib "^1.9.3" - -apollo-link-http-common@^0.2.16: - version "0.2.16" - resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz#756749dafc732792c8ca0923f9a40564b7c59ecc" - integrity sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg== - dependencies: - apollo-link "^1.2.14" - ts-invariant "^0.4.0" - tslib "^1.9.3" - -apollo-link-http@^1.5.17: - version "1.5.17" - resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.17.tgz#499e9f1711bf694497f02c51af12d82de5d8d8ba" - integrity sha512-uWcqAotbwDEU/9+Dm9e1/clO7hTB2kQ/94JYcGouBVLjoKmTeJTUPQKcJGpPwUjZcSqgYicbFqQSoJIW0yrFvg== - dependencies: - apollo-link "^1.2.14" - apollo-link-http-common "^0.2.16" - tslib "^1.9.3" - -apollo-link-ws@^1.0.19: - version "1.0.20" - resolved "https://registry.yarnpkg.com/apollo-link-ws/-/apollo-link-ws-1.0.20.tgz#dfad44121f8445c6d7b7f8101a1b24813ba008ed" - integrity sha512-mjSFPlQxmoLArpHBeUb2Xj+2HDYeTaJqFGOqQ+I8NVJxgL9lJe84PDWcPah/yMLv3rB7QgBDSuZ0xoRFBPlySw== - dependencies: - apollo-link "^1.2.14" - tslib "^1.9.3" - apollo-link@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.5.tgz#f54932d6b8f1412a35e088bc199a116bce3f1f16" @@ -3060,17 +2984,7 @@ apollo-link@1.2.5: apollo-utilities "^1.0.0" zen-observable-ts "^0.8.12" -apollo-link@^1.0.0, apollo-link@^1.2.14: - version "1.2.14" - resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" - integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== - dependencies: - apollo-utilities "^1.3.0" - ts-invariant "^0.4.0" - tslib "^1.9.3" - zen-observable-ts "^0.8.21" - -apollo-utilities@1.3.4, apollo-utilities@^1.0.0, apollo-utilities@^1.3.0, apollo-utilities@^1.3.2, apollo-utilities@^1.3.4: +apollo-utilities@^1.0.0: version "1.3.4" resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf" integrity sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig== @@ -8182,10 +8096,10 @@ mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" -mock-apollo-client@^0.6: - version "0.6.0" - resolved "https://registry.yarnpkg.com/mock-apollo-client/-/mock-apollo-client-0.6.0.tgz#ff1760f18798789931e421c6668bfc0e7f1f0649" - integrity sha512-HPo6yVkAE+uxIpB8oPO9ISM86hFDwefrHKz5uOowecT/hR79e/NbXAl372LOQ1lWYVNVgCaP3RIMgWEhVFWtjw== +mock-apollo-client@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mock-apollo-client/-/mock-apollo-client-1.1.0.tgz#0589ae458a2539518e870bb0c08961f30a9eaec1" + integrity sha512-OXCvwAwwHbieMMipcE3wGdPONPHC+f65EEiyC1XpYaS5Jk6/c7oBe9t8knwzAqyCQ9nZziHdR8UDqORPTfkcFw== module-alias@^2.2.2: version "2.2.2" @@ -8578,13 +8492,6 @@ opn@^5.5.0: dependencies: is-wsl "^1.1.0" -optimism@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.10.3.tgz#163268fdc741dea2fb50f300bedda80356445fd7" - integrity sha512-9A5pqGoQk49H6Vhjb9kPgAeeECfUDF6aIICbMDL23kDLStBn1MWk3YvcZ4xWF9CsSf6XEgvRLkXy4xof/56vVw== - dependencies: - "@wry/context" "^0.4.0" - optimism@^0.16.0: version "0.16.1" resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.16.1.tgz#7c8efc1f3179f18307b887e18c15c5b7133f6e7d" @@ -10907,7 +10814,7 @@ svgo@^2.3.0: csso "^4.2.0" stable "^0.1.8" -symbol-observable@^1.0.2, symbol-observable@^1.1.0: +symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -12449,7 +12356,7 @@ yorkie@^2.0.0: normalize-path "^1.0.0" strip-indent "^2.0.0" -zen-observable-ts@^0.8.12, zen-observable-ts@^0.8.21: +zen-observable-ts@^0.8.12: version "0.8.21" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d" integrity sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg== From b5a5de5c0c3d0bf575e9a0da14a0267b04dc22ec Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Mon, 17 May 2021 09:38:04 +0200 Subject: [PATCH 24/67] Event edit and participant fixes Signed-off-by: Thomas Citharel --- js/src/apollo/utils.ts | 39 ++++++++++---- js/src/graphql/comment.ts | 1 + js/src/types/event.model.ts | 14 ++++- js/src/views/Event/Edit.vue | 80 ++++++----------------------- js/src/views/Event/Participants.vue | 63 +++++++++++++++++------ lib/graphql/resolvers/event.ex | 3 ++ 6 files changed, 110 insertions(+), 90 deletions(-) diff --git a/js/src/apollo/utils.ts b/js/src/apollo/utils.ts index 0e3ed7f5..7486c096 100644 --- a/js/src/apollo/utils.ts +++ b/js/src/apollo/utils.ts @@ -1,6 +1,7 @@ import { AUTH_ACCESS_TOKEN, AUTH_REFRESH_TOKEN } from "@/constants"; import { REFRESH_TOKEN } from "@/graphql/auth"; import { IFollower } from "@/types/actor/follower.model"; +import { IParticipant } from "@/types/participant.model"; import { Paginate } from "@/types/paginate"; import { saveTokenData } from "@/utils/auth"; import { @@ -11,6 +12,9 @@ import { TypePolicies, } from "@apollo/client/core"; import introspectionQueryResultData from "../../fragmentTypes.json"; +import { IMember } from "@/types/actor/member.model"; +import { IComment } from "@/types/comment.model"; +import { IEvent } from "@/types/event.model"; type possibleTypes = { name: string }; type schemaType = { @@ -31,19 +35,34 @@ export const possibleTypes = types.reduce((acc, type) => { export const typePolicies: TypePolicies = { Discussion: { fields: { - comments: pageLimitPagination(), + comments: paginatedLimitPagination(), }, }, Group: { fields: { - organizedEvents: pageLimitPagination(["afterDatetime", "beforeDatetime"]), + organizedEvents: paginatedLimitPagination([ + "afterDatetime", + "beforeDatetime", + ]), }, }, Person: { fields: { organizedEvents: pageLimitPagination(), - participations: pageLimitPagination(["eventId"]), - memberships: pageLimitPagination(["group"]), + participations: paginatedLimitPagination(["eventId"]), + memberships: paginatedLimitPagination(["group"]), + }, + }, + Event: { + fields: { + participants: paginatedLimitPagination(["roles"]), + commnents: pageLimitPagination(), + relatedEvents: pageLimitPagination(), + }, + }, + Comment: { + fields: { + replies: pageLimitPagination(), }, }, RootQueryType: { @@ -53,15 +72,15 @@ export const typePolicies: TypePolicies = { "orderBy", "direction", ]), - events: pageLimitPagination(), - groups: pageLimitPagination([ + events: paginatedLimitPagination(), + groups: paginatedLimitPagination([ "preferredUsername", "name", "domain", "local", "suspended", ]), - persons: pageLimitPagination([ + persons: paginatedLimitPagination([ "preferredUsername", "name", "domain", @@ -103,12 +122,12 @@ type KeyArgs = FieldPolicy["keyArgs"]; export function pageLimitPagination( keyArgs: KeyArgs = false ): FieldPolicy { - console.log("pageLimitPagination"); return { keyArgs, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore merge(existing, incoming, { args }) { + console.log("pageLimitPagination"); console.log("existing", existing); console.log("incoming", incoming); // console.log("args", args); @@ -123,12 +142,14 @@ export function pageLimitPagination( export function paginatedLimitPagination>( keyArgs: KeyArgs = false ): FieldPolicy> { - console.log("paginatedLimitPagination"); return { keyArgs, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore merge(existing, incoming, { args }) { + console.log("paginatedLimitPagination"); + console.log("existing", existing); + console.log("incoming", incoming); if (!incoming) return existing; if (!existing) return incoming; // existing will be empty the first time diff --git a/js/src/graphql/comment.ts b/js/src/graphql/comment.ts index ce4b2ce2..8ef20812 100644 --- a/js/src/graphql/comment.ts +++ b/js/src/graphql/comment.ts @@ -21,6 +21,7 @@ export const COMMENT_FIELDS_FRAGMENT = gql` summary } totalReplies + insertedAt updatedAt deletedAt } diff --git a/js/src/types/event.model.ts b/js/src/types/event.model.ts index e67b107f..3dcf496e 100644 --- a/js/src/types/event.model.ts +++ b/js/src/types/event.model.ts @@ -42,6 +42,7 @@ interface IEventEditJSON { draft: boolean; picture?: IMedia | { mediaId: string } | null; attributedToId: string | null; + organizerActorId?: string; onlineAddress?: string; phoneAddress?: string; physicalAddress?: IAddress; @@ -209,8 +210,8 @@ export class EventModel implements IEvent { tags: this.tags.map((t) => t.title), onlineAddress: this.onlineAddress, phoneAddress: this.phoneAddress, - physicalAddress: this.physicalAddress, - options: this.options, + physicalAddress: this.removeTypeName(this.physicalAddress), + options: this.removeTypeName(this.options), attributedToId: this.attributedTo && this.attributedTo.id ? this.attributedTo.id : null, contacts: this.contacts.map(({ id }) => ({ @@ -218,4 +219,13 @@ export class EventModel implements IEvent { })), }; } + + private removeTypeName(entity: any): any { + if (entity?.__typename) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { __typename, ...purgedEntity } = entity; + return purgedEntity; + } + return entity; + } } diff --git a/js/src/views/Event/Edit.vue b/js/src/views/Event/Edit.vue index 95460777..88e4d3fc 100644 --- a/js/src/views/Event/Edit.vue +++ b/js/src/views/Event/Edit.vue @@ -486,6 +486,7 @@ import "intersection-observer"; import { CONFIG } from "../../graphql/config"; import { IConfig } from "../../types/config.model"; import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; +import { cloneDeep } from "@apollo/client/utilities"; const DEFAULT_LIMIT_NUMBER_OF_PLACES = 10; @@ -512,7 +513,7 @@ const DEFAULT_LIMIT_NUMBER_OF_PLACES = 10; }; }, update(data) { - return new EventModel(data.event); + return new EventModel(cloneDeep(data.event)); }, skip() { return !this.eventId; @@ -547,8 +548,6 @@ export default class EditEvent extends Vue { config!: IConfig; - unmodifiedEvent!: IEvent; - pictureFile: File | null = null; EventStatus = EventStatus; @@ -646,7 +645,11 @@ export default class EditEvent extends Vue { if (!(this.isUpdate || this.isDuplicate)) { this.initializeEvent(); } else { - this.event.description = this.event.description || ""; + this.event = { + ...this.event, + options: this.event.options, + description: this.event.description || "", + }; } } @@ -669,27 +672,6 @@ export default class EditEvent extends Vue { } } - @Watch("event") - setInitialData(): void { - if ( - this.isUpdate && - this.unmodifiedEvent === undefined && - this.event && - this.event.uuid - ) { - this.unmodifiedEvent = JSON.parse( - JSON.stringify(this.event.toEditJSON()) - ); - } - } - - // @Watch('event.attributedTo', { deep: true }) - // updateHideOrganizerWhenGroupEventOption(attributedTo) { - // if (!attributedTo.preferredUsername) { - // this.event.options.hideOrganizerWhenGroupEvent = false; - // } - // } - private validateForm() { const form = this.$refs.form as HTMLFormElement; if (form.checkValidity()) { @@ -777,8 +759,8 @@ export default class EditEvent extends Vue { } get updateEventMessage(): string { - if (this.unmodifiedEvent.draft && !this.event.draft) - return this.$i18n.t("The event has been updated and published") as string; + // if (this.unmodifiedEvent.draft && !this.event.draft) + // return this.$i18n.t("The event has been updated and published") as string; return ( this.event.draft ? this.$i18n.t("The draft event has been updated") @@ -884,24 +866,12 @@ export default class EditEvent extends Vue { ? this.event.organizerActor : this.organizerActor; if (organizerActor) { - res = Object.assign(res, { - organizerActorId: organizerActor.id, - }); + res = { ...res, organizerActorId: organizerActor?.id }; } const attributedToId = this.event.attributedTo?.id ? this.event.attributedTo.id : null; - res = Object.assign(res, { attributedToId }); - - // eslint-disable-next-line - // @ts-ignore - delete this.event.options.__typename; - - if (this.event.physicalAddress) { - // eslint-disable-next-line - // @ts-ignore - delete this.event.physicalAddress.__typename; - } + res = { ...res, attributedToId }; if (this.endsOnNull) { res.endsOn = null; @@ -931,25 +901,6 @@ export default class EditEvent extends Vue { return res; } - private async getEvent() { - const result = await this.$apollo.query({ - query: FETCH_EVENT, - variables: { - uuid: this.eventId, - }, - }); - - if (result.data.event.endsOn === null) { - this.endsOnNull = true; - } - // as stated here : https://github.com/elixir-ecto/ecto/issues/1684 - // "Ecto currently silently transforms empty strings into nil" - if (result.data.event.description === null) { - result.data.event.description = ""; - } - return new EventModel(result.data.event); - } - @Watch("limitedPlaces") updatedEventCapacityOptions(limitedPlaces: boolean): void { if (!limitedPlaces) { @@ -1023,10 +974,11 @@ export default class EditEvent extends Vue { } get isEventModified(): boolean { - return ( - JSON.stringify(this.event.toEditJSON()) !== - JSON.stringify(this.unmodifiedEvent) - ); + // return ( + // JSON.stringify(this.event.toEditJSON()) !== + // JSON.stringify(this.unmodifiedEvent) + // ); + return false; } get beginsOn(): Date { diff --git a/js/src/views/Event/Participants.vue b/js/src/views/Event/Participants.vue index 7f48fb05..47e1ac9a 100644 --- a/js/src/views/Event/Participants.vue +++ b/js/src/views/Event/Participants.vue @@ -30,8 +30,8 @@

    {{ $t("Participants") }}

    - -

    Nmi0(KZvUsyou3)F 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 literal 0 HcmV?d00001 diff --git a/js/public/img/pics/homepage_background-1024w.png b/js/public/img/pics/homepage_background-1024w.png new file mode 100644 index 0000000000000000000000000000000000000000..bc15d185e809d23d0eab096755022192b97bdc51 GIT binary patch literal 77239 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�S1JhKSmlT+(OXa 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 literal 0 HcmV?d00001 diff --git a/js/public/img/pics/homepage_background-1024w.webp b/js/public/img/pics/homepage_background-1024w.webp new file mode 100644 index 0000000000000000000000000000000000000000..9f63b55e54f3695a1e21bb5e57902927dce9c38d GIT binary patch literal 19554 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 => - import(/* webpackChunkName: "search" */ "../views/Search.vue"), + import(/* webpackChunkName: "Search" */ "@/views/Search.vue"), props: true, meta: { requiredAuth: false }, }, @@ -140,7 +140,9 @@ export const routes = [ path: "/404", name: RouteName.PAGE_NOT_FOUND, component: (): Promise => - import(/* webpackChunkName: "search" */ "../views/PageNotFound.vue"), + import( + /* webpackChunkName: "PageNotFound" */ "../views/PageNotFound.vue" + ), meta: { requiredAuth: false }, }, { diff --git a/js/src/service-worker.ts b/js/src/service-worker.ts new file mode 100644 index 00000000..4a832b06 --- /dev/null +++ b/js/src/service-worker.ts @@ -0,0 +1,89 @@ +import { registerRoute, setCatchHandler } from "workbox-routing"; +import { + NetworkFirst, + StaleWhileRevalidate, + CacheFirst, +} from "workbox-strategies"; + +// Used for filtering matches based on status code, header, or both +import { CacheableResponsePlugin } from "workbox-cacheable-response"; +// Used to limit entries in cache, remove entries after a certain period of time +import { ExpirationPlugin } from "workbox-expiration"; + +import { precacheAndRoute, matchPrecache } from "workbox-precaching"; + +// Use with precache injection +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +// eslint-disable-next-line no-underscore-dangle +precacheAndRoute(self.__WB_MANIFEST); + +// Catch routing errors, like if the user is offline +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +setCatchHandler(async ({ event }) => { + // Return the precached offline page if a document is being requested + if (event.request.destination === "document") { + return matchPrecache("/offline.html"); + } + + return Response.error(); +}); + +registerRoute( + // Check to see if the request is a navigation to a new page + ({ request }) => request.mode === "navigate", + // Use a Network First caching strategy + new NetworkFirst({ + // Put all cached files in a cache named 'pages' + cacheName: "pages", + plugins: [ + // Ensure that only requests that result in a 200 status are cached + new CacheableResponsePlugin({ + statuses: [200], + }), + ], + }) +); + +// Cache CSS, JS, and Web Worker requests with a Stale While Revalidate strategy +registerRoute( + // Check to see if the request's destination is style for stylesheets, script for JavaScript, or worker for web worker + ({ request }) => + request.destination === "style" || + request.destination === "script" || + request.destination === "worker", + // Use a Stale While Revalidate caching strategy + new StaleWhileRevalidate({ + // Put all cached files in a cache named 'assets' + cacheName: "assets", + plugins: [ + // Ensure that only requests that result in a 200 status are cached + new CacheableResponsePlugin({ + statuses: [200], + }), + ], + }) +); + +// Cache images with a Cache First strategy +registerRoute( + // Check to see if the request's destination is style for an image + ({ request }) => request.destination === "image", + // Use a Cache First caching strategy + new CacheFirst({ + // Put all cached files in a cache named 'images' + cacheName: "images", + plugins: [ + // Ensure that only requests that result in a 200 status are cached + new CacheableResponsePlugin({ + statuses: [200], + }), + // Don't cache more than 50 items, and expire them after 30 days + new ExpirationPlugin({ + maxEntries: 50, + maxAgeSeconds: 60 * 60 * 24 * 30, // 30 Days + }), + ], + }) +); diff --git a/js/src/views/Event/Event.vue b/js/src/views/Event/Event.vue index 9dbe0033..0b83955e 100755 --- a/js/src/views/Event/Event.vue +++ b/js/src/views/Event/Event.vue @@ -1306,7 +1306,7 @@ export default class Event extends EventMixin { } .header-picture-default { - background-image: url("/img/mobilizon_default_card.png"); + background-image: url("../../../public/img/mobilizon_default_card.png"); } div.sidebar { diff --git a/js/src/views/Event/MyEvents.vue b/js/src/views/Event/MyEvents.vue index eefba7a5..1eb158c1 100644 --- a/js/src/views/Event/MyEvents.vue +++ b/js/src/views/Event/MyEvents.vue @@ -356,18 +356,18 @@ section { .not-found { .img-container { - background-image: url("/img/pics/event_creation-480w.jpg"); + background-image: url("../../../public/img/pics/event_creation-480w.jpg"); @media (min-resolution: 2dppx) { & { - background-image: url("/img/pics/event_creation-1024w.jpg"); + background-image: url("../../../public/img/pics/event_creation-1024w.jpg"); } } &.webp { - background-image: url("/img/pics/event_creation-480w.webp"); + background-image: url("../../../public/img/pics/event_creation-480w.webp"); @media (min-resolution: 2dppx) { & { - background-image: url("/img/pics/event_creation-1024w.webp"); + background-image: url("../../../public/img/pics/event_creation-1024w.webp"); } } } diff --git a/js/src/views/Group/MyGroups.vue b/js/src/views/Group/MyGroups.vue index 8fce67c8..e7c80102 100644 --- a/js/src/views/Group/MyGroups.vue +++ b/js/src/views/Group/MyGroups.vue @@ -200,18 +200,18 @@ section { .not-found { .img-container { - background-image: url("/img/pics/group-480w.jpg"); + background-image: url("../../../public/img/pics/group-480w.jpg"); @media (min-resolution: 2dppx) { & { - background-image: url("/img/pics/group-1024w.jpg"); + background-image: url("../../../public/img/pics/group-1024w.jpg"); } } &.webp { - background-image: url("/img/pics/group-480w.webp"); + background-image: url("../../../public/img/pics/group-480w.webp"); @media (min-resolution: 2dppx) { & { - background-image: url("/img/pics/group-1024w.webp"); + background-image: url("../../../public/img/pics/group-1024w.webp"); } } } diff --git a/js/src/views/Home.vue b/js/src/views/Home.vue index a8b7990b..f9581114 100644 --- a/js/src/views/Home.vue +++ b/js/src/views/Home.vue @@ -649,11 +649,11 @@ section.hero { height: 100%; opacity: 0.3; z-index: -1; - background: url("/img/pics/homepage_background-1024w.png"); + background: url("../../public/img/pics/homepage_background-1024w.png"); background-size: cover; } &.webp::before { - background-image: url("/img/pics/homepage_background-1024w.webp"); + background-image: url("../../public/img/pics/homepage_background-1024w.webp"); } & > .hero-body { diff --git a/js/tests/unit/svgTransform.js b/js/tests/unit/svgTransform.ts similarity index 92% rename from js/tests/unit/svgTransform.js rename to js/tests/unit/svgTransform.ts index f349f71a..1278771c 100644 --- a/js/tests/unit/svgTransform.js +++ b/js/tests/unit/svgTransform.ts @@ -2,7 +2,7 @@ const vueJest = require("vue-jest/lib/template-compiler"); module.exports = { - process(content) { + process(content: any) { const { render } = vueJest({ content, attrs: { diff --git a/js/vue.config.js b/js/vue.config.js index f695a6a5..e723a2cf 100644 --- a/js/vue.config.js +++ b/js/vue.config.js @@ -1,40 +1,20 @@ const path = require("path"); -const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); -const webpack = require("webpack"); module.exports = { outputDir: path.resolve(__dirname, "../priv/static"), - configureWebpack: (config) => { - // Limit the used memory when building - // Source : https://stackoverflow.com/a/55810460/10204399 - // get a reference to the existing ForkTsCheckerWebpackPlugin - const existingForkTsChecker = config.plugins.filter( - (p) => p instanceof ForkTsCheckerWebpackPlugin - )[0]; - - // remove the existing ForkTsCheckerWebpackPlugin - // so that we can replace it with our modified version - config.plugins = config.plugins.filter( - (p) => !(p instanceof ForkTsCheckerWebpackPlugin) - ); - - // copy the options from the original ForkTsCheckerWebpackPlugin - // instance and add the memoryLimit property - const forkTsCheckerOptions = existingForkTsChecker.options; - forkTsCheckerOptions.memoryLimit = process.env.NODE_BUILD_MEMORY || 2048; - - config.plugins.push(new ForkTsCheckerWebpackPlugin(forkTsCheckerOptions)); - config.plugins.push( - new webpack.DefinePlugin({ - global: "window", // Placeholder for global used in any node_modules - }) - ); - config.node.global = false; - }, chainWebpack: (config) => { // remove the prefetch plugin config.plugins.delete("prefetch"); }, + pwa: { + themeColor: "#ffd599", //not required for service worker, but place theme color here if manifest.json doesn't change the color + workboxPluginMode: "InjectManifest", + workboxOptions: { + // swSrc is required in InjectManifest mode. + swSrc: "./src/service-worker.ts", + // ...other Workbox options... + }, + }, css: { loaderOptions: { scss: { diff --git a/js/yarn.lock b/js/yarn.lock index 7f7f625e..315dc1dd 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -53,7 +53,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== @@ -65,7 +65,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== -"@babel/core@^7.1.0", "@babel/core@^7.11.0", "@babel/core@^7.8.4": +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.16", "@babel/core@^7.7.5": version "7.14.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38" integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg== @@ -86,7 +86,7 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.14.2", "@babel/generator@^7.14.3", "@babel/generator@^7.4.0": +"@babel/generator@^7.14.2", "@babel/generator@^7.14.3": version "7.14.3" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91" integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA== @@ -110,7 +110,7 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.9.6": +"@babel/helper-compilation-targets@^7.12.16", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16": version "7.13.16" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== @@ -192,7 +192,7 @@ dependencies: "@babel/types" "^7.13.12" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12", "@babel/helper-module-imports@^7.8.3": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== @@ -303,7 +303,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3", "@babel/parser@^7.4.3": +"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3": version "7.14.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.3.tgz#9b530eecb071fd0c93519df25c5ff9f14759f298" integrity sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ== @@ -326,7 +326,7 @@ "@babel/helper-remap-async-to-generator" "^7.13.0" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.8.3": +"@babel/plugin-proposal-class-properties@^7.12.13", "@babel/plugin-proposal-class-properties@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== @@ -343,7 +343,7 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-class-static-block" "^7.12.13" -"@babel/plugin-proposal-decorators@^7.8.3": +"@babel/plugin-proposal-decorators@^7.12.13": version "7.14.2" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.2.tgz#e68c3c5e4a6a08834456568256fc3e71b93590cf" integrity sha512-LauAqDd/VjQDtae58QgBcEOE42NNP+jB2OE+XeC3KBI/E+BhhRjtr5viCIrj1hmu1YvrguLipIPRJZmS5yUcFw== @@ -461,7 +461,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -496,6 +503,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" @@ -503,14 +517,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.8.3": +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.2.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -524,14 +538,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -559,7 +573,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-syntax-top-level-await@^7.12.13": +"@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== @@ -684,7 +698,7 @@ "@babel/helper-plugin-utils" "^7.13.0" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.14.0", "@babel/plugin-transform-modules-commonjs@^7.9.6": +"@babel/plugin-transform-modules-commonjs@^7.12.13", "@babel/plugin-transform-modules-commonjs@^7.14.0", "@babel/plugin-transform-modules-commonjs@^7.2.0": version "7.14.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== @@ -763,7 +777,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-runtime@^7.11.0": +"@babel/plugin-transform-runtime@^7.12.15": version "7.14.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz#1fd885a2d0de1d3c223795a4e9be72c2db4515cf" integrity sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg== @@ -826,7 +840,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.8.4": +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.16": version "7.14.2" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.2.tgz#e80612965da73579c84ad2f963c2359c71524ed5" integrity sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ== @@ -923,14 +937,14 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.11.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.13.10", "@babel/runtime@^7.8.4": version "7.14.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.0.0", "@babel/template@^7.12.13", "@babel/template@^7.4.0": +"@babel/template@^7.0.0", "@babel/template@^7.12.13", "@babel/template@^7.3.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== @@ -939,7 +953,7 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2", "@babel/traverse@^7.4.3": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2": version "7.14.2" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== @@ -953,7 +967,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.14.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3" integrity sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw== @@ -961,6 +975,11 @@ "@babel/helper-validator-identifier" "^7.14.0" to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@cnakazawa/watch@^1.0.3": version "1.0.4" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" @@ -969,7 +988,7 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@cypress/listr-verbose-renderer@0.4.1": +"@cypress/listr-verbose-renderer@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= @@ -979,7 +998,33 @@ date-fns "^1.27.2" figures "^1.7.0" -"@cypress/xvfb@1.2.4": +"@cypress/request@^2.88.5": + version "2.88.5" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.5.tgz#8d7ecd17b53a849cfd5ab06d5abe7d84976375d7" + integrity sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +"@cypress/xvfb@^1.2.4": version "1.2.4" resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== @@ -987,6 +1032,11 @@ debug "^3.1.0" lodash.once "^4.1.1" +"@discoveryjs/json-ext@^0.5.0": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" + integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== + "@eslint/eslintrc@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14" @@ -1007,194 +1057,231 @@ resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.0.tgz#0eee6373e11418bfe0b5638f654df7a4ca6a3950" integrity sha512-wYn6r8zVZyQJ6rQaALBEln5B1pzxb9shV5Ef97kTvn6yVGrqyXVnDqnU24MXnFubR+rZjBY9NWuxX3FB2sTsjg== -"@hapi/address@2.x.x": +"@hapi/address@^2.1.2": version "2.1.4" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== +"@hapi/formula@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@hapi/formula/-/formula-1.2.0.tgz#994649c7fea1a90b91a0a1e6d983523f680e10cd" + integrity sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA== -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": +"@hapi/hoek@^8.2.4", "@hapi/hoek@^8.3.0": version "8.5.1" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== -"@hapi/joi@^15.0.1", "@hapi/joi@^15.1.0": - version "15.1.1" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" +"@hapi/hoek@^9.0.0": + version "9.2.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.0.tgz#f3933a44e365864f4dad5db94158106d511e8131" + integrity sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug== -"@hapi/topo@3.x.x": +"@hapi/joi@^16.1.8": + version "16.1.8" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-16.1.8.tgz#84c1f126269489871ad4e2decc786e0adef06839" + integrity sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg== + dependencies: + "@hapi/address" "^2.1.2" + "@hapi/formula" "^1.2.0" + "@hapi/hoek" "^8.2.4" + "@hapi/pinpoint" "^1.0.2" + "@hapi/topo" "^3.1.3" + +"@hapi/pinpoint@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@hapi/pinpoint/-/pinpoint-1.0.2.tgz#025b7a36dbbf4d35bf1acd071c26b20ef41e0d13" + integrity sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ== + +"@hapi/topo@^3.1.3": version "3.1.6" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== dependencies: "@hapi/hoek" "^8.3.0" -"@intervolga/optimize-cssnano-plugin@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" - integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA== +"@hapi/topo@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7" + integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw== dependencies: - cssnano "^4.0.0" - cssnano-preset-default "^4.0.0" - postcss "^7.0.0" + "@hapi/hoek" "^9.0.0" -"@jest/console@^24.7.1", "@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" -"@jest/core@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" - integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== dependencies: - "@jest/console" "^24.7.1" - "@jest/reporters" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.9.0" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-resolve-dependencies "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - jest-watcher "^24.9.0" - micromatch "^3.1.10" - p-each-series "^1.0.0" - realpath-native "^1.1.0" - rimraf "^2.5.4" - slash "^2.0.0" - strip-ansi "^5.0.0" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" -"@jest/environment@^24.3.0", "@jest/environment@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" - integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== dependencies: - "@jest/fake-timers" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" -"@jest/fake-timers@^24.3.0", "@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" -"@jest/reporters@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" - integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== dependencies: - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-report "^2.0.4" - istanbul-lib-source-maps "^3.0.1" - istanbul-reports "^2.2.6" - jest-haste-map "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" - node-notifier "^5.4.2" - slash "^2.0.0" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" source-map "^0.6.0" - string-length "^2.0.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" -"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== dependencies: callsites "^3.0.0" - graceful-fs "^4.1.15" + graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" - integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== dependencies: - "@jest/test-result" "^24.9.0" - jest-haste-map "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" -"@jest/transform@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" - integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^24.9.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.9.0" - jest-regex-util "^24.9.0" - jest-util "^24.9.0" - micromatch "^3.1.10" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" pirates "^4.0.1" - realpath-native "^1.1.0" - slash "^2.0.0" + slash "^3.0.0" source-map "^0.6.1" - write-file-atomic "2.4.1" - -"@jest/types@^24.3.0", "@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" + write-file-atomic "^3.0.0" "@jest/types@^26.6.2": version "26.6.2" @@ -1241,14 +1328,6 @@ resolved "https://registry.yarnpkg.com/@mdi/font/-/font-5.9.55.tgz#41acd50b88073ded7095fc3029d8712b6e12f38e" integrity sha512-jswRF6q3eq8NWpWiqct6q+6Fg/I7nUhrxYJfiEM8JJpap0wVJLQdbKtyS65GdlK7S7Ytnx3TTi/bmw+tBhkGmg== -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -1262,11 +1341,6 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - "@nodelib/fs.walk@^1.2.3": version "1.2.6" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" @@ -1275,23 +1349,37 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" +"@polka/url@^1.0.0-next.9": + version "1.0.0-next.12" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.12.tgz#431ec342a7195622f86688bbda82e3166ce8cb28" + integrity sha512-6RglhutqrGFMO1MNUXp95RBuYIuc8wTnMAV5MUhLmjTOy78ncwOw7RgeQ/HeymkKXRhZd0s2DNrM1rL7unk3MQ== + "@popperjs/core@^2.8.3": version "2.9.2" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.2.tgz#adea7b6953cbb34651766b0548468e743c6a2353" integrity sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q== -"@rollup/plugin-node-resolve@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" - integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== +"@rollup/plugin-babel@^5.2.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" + integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== dependencies: - "@rollup/pluginutils" "^3.0.8" - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.14.2" + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" -"@rollup/plugin-replace@^2.3.1": +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": version "2.4.2" resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== @@ -1299,7 +1387,7 @@ "@rollup/pluginutils" "^3.1.0" magic-string "^0.25.7" -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": +"@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== @@ -1308,7 +1396,45 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@soda/friendly-errors-webpack-plugin@^1.7.1": +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" + integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== + dependencies: + any-observable "^0.3.0" + +"@sideway/address@^4.1.0": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.2.tgz#811b84333a335739d3969cfc434736268170cad1" + integrity sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@soda/friendly-errors-webpack-plugin@^1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.0.tgz#84751d82a93019d5c92c0cf0e45ac59087cd2240" integrity sha512-RLotfx6k1+nfLacwNCenj7VnTMPxVwYKoGOcffMFoJDKM8tXzBiCN0hMHFJNnoAojduYAsxuiMm0EOMixgiRow== @@ -1318,12 +1444,12 @@ string-width "^2.0.0" strip-ansi "^5" -"@soda/get-current-script@^1.0.0": +"@soda/get-current-script@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz#a53515db25d8038374381b73af20bb4f2e508d87" integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w== -"@surma/rollup-plugin-off-main-thread@^1.1.1": +"@surma/rollup-plugin-off-main-thread@^1.4.1": version "1.4.2" resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58" integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A== @@ -1331,10 +1457,10 @@ ejs "^2.6.1" magic-string "^0.25.0" -"@tiptap/core@^2.0.0-beta.41", "@tiptap/core@^2.0.0-beta.65": - version "2.0.0-beta.65" - resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.65.tgz#624dc3bf70686633a2476db8946c90238ff4a73d" - integrity sha512-mdPhJ19Tcx371tGqvw4dVZ9B/1p7V89tocIt+vLXjxsQSoORA7sr4CFS5+femHjp4SKySmjcUsl+zRG/4EhJDQ== +"@tiptap/core@^2.0.0-beta.41", "@tiptap/core@^2.0.0-beta.66": + version "2.0.0-beta.66" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.66.tgz#0fff130734c402b09ee992d2884b70bdaddd6f3c" + integrity sha512-iNivBDELTKMgqkPKcPJn3Xhyx1muNyBwz5H9dmNttDVgPgQ4+y8XRq07/zu3CADADL0nJxitmQ3lzKRX9dON3g== dependencies: "@types/prosemirror-commands" "^1.0.4" "@types/prosemirror-inputrules" "^1.0.4" @@ -1512,11 +1638,11 @@ integrity sha512-x/XN12gKrKwNx4RB5/h8bC474fpacivnM2F5A5zUWKIviS+kYJ8pZgAPhQBvMjeJoFrn5oLgUc5f+HEjJaLJJw== "@tiptap/starter-kit@^2.0.0-beta.37": - version "2.0.0-beta.62" - resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.62.tgz#56813fe45c59f613c3568b1ee070fcbfb8735c17" - integrity sha512-49BV+CtqK/g6/sxiC3iCcONKbjGZ6/QEdpYdmOVPs0MgCI19woign6DomOv+HeV3XbhYraq+MWwYG77Q21rxcg== + version "2.0.0-beta.63" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.63.tgz#0463a4a659f8cc2ae98fc0c0b64361c24c15a7ca" + integrity sha512-F2hW1V+Ee25j9RhyFR/0f2N28+6wDzB0SmURnf57hkVRyfLmugs8ntH5Z4DA65x7bFD/ww8NQH+PIah2bGyQMA== dependencies: - "@tiptap/core" "^2.0.0-beta.65" + "@tiptap/core" "^2.0.0-beta.66" "@tiptap/extension-blockquote" "^2.0.0-beta.13" "@tiptap/extension-bold" "^2.0.0-beta.13" "@tiptap/extension-bullet-list" "^2.0.0-beta.13" @@ -1554,6 +1680,11 @@ "@tiptap/extension-floating-menu" "^2.0.0-beta.15" prosemirror-view "^1.18.6" +"@trysound/sax@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" + integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== + "@types/anymatch@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-3.0.0.tgz#c95ff14401dbb2869913afac3935af4ad0d37f1a" @@ -1561,7 +1692,7 @@ dependencies: anymatch "*" -"@types/babel__core@^7.1.0": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.14" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== @@ -1587,7 +1718,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": version "7.11.1" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== @@ -1617,12 +1748,28 @@ dependencies: "@types/node" "*" +"@types/eslint-scope@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" + integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== -"@types/estree@*": +"@types/eslint@*", "@types/eslint@^7.2.4": + version "7.2.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.10.tgz#4b7a9368d46c0f8cd5408c23288a59aa2394d917" + integrity sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.47": version "0.0.47" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== @@ -1664,6 +1811,18 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/html-minifier-terser@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" + integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + "@types/http-proxy@^1.17.5": version "1.17.6" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.6.tgz#62dc3fade227d6ac2862c8f19ee0da9da9fd8616" @@ -1671,7 +1830,7 @@ dependencies: "@types/node" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== @@ -1683,14 +1842,6 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - "@types/istanbul-reports@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" @@ -1698,14 +1849,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^24.0.19": - version "24.9.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" - integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== - dependencies: - jest-diff "^24.3.0" - -"@types/jest@^26.0.18": +"@types/jest@^26.0.18", "@types/jest@^26.0.20": version "26.0.23" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.23.tgz#a1b7eab3c503b80451d019efb588ec63522ee4e7" integrity sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA== @@ -1713,7 +1857,7 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5": +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== @@ -1767,6 +1911,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.3.0.tgz#d6fed7d6bc6854306da3dea1af9f874b00783e26" integrity sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ== +"@types/node@^14.14.31": + version "14.17.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.0.tgz#3ba770047723b3eeb8dc9fca02cce8a7fb6378da" + integrity sha512-w8VZUN/f7SSbvVReb9SWp6cJFevxb4/nkG65yLAya//98WgocKm5PLDAtSs5CtJJJM+kHmJjO/6mmYW4MHShZA== + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -1782,6 +1931,11 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/prettier@^2.0.0": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== + "@types/prosemirror-commands@*", "@types/prosemirror-commands@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz#d08551415127d93ae62e7239d30db0b5e7208e22" @@ -1888,10 +2042,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== dependencies: "@types/node" "*" @@ -1903,30 +2057,25 @@ "@types/mime" "^1" "@types/node" "*" -"@types/sizzle@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" - integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== +"@types/sinonjs__fake-timers@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae" + integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg== + +"@types/sizzle@^2.3.2": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" + integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - -"@types/strip-bom@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" - integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= - -"@types/strip-json-comments@0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" - integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== "@types/tapable@^1": version "1.0.7" @@ -1972,7 +2121,7 @@ "@types/source-list-map" "*" source-map "^0.7.3" -"@types/webpack@^4", "@types/webpack@^4.0.0": +"@types/webpack@^4": version "4.41.28" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.28.tgz#0069a2159b7ad4d83d0b5801942c17d54133897b" integrity sha512-Nn84RAiJjKRfPFFCVR8LC4ueTtTdfWAMZ03THIzZWRJB+rX24BD3LqPSFnbMscWauEsT4segAsylPDIaZyZyLQ== @@ -1989,13 +2138,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== -"@types/yargs@^13.0.0": - version "13.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" - integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^15.0.0": version "15.0.13" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" @@ -2163,29 +2305,29 @@ lodash.kebabcase "^4.1.1" svg-tags "^1.0.0" -"@vue/babel-preset-app@^4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.5.13.tgz#cb475321e4c73f7f110dac29a48c2a9cb80afeb6" - integrity sha512-pM7CR3yXB6L8Gfn6EmX7FLNE3+V/15I3o33GkSNsWvgsMp6HVGXKkXgojrcfUUauyL1LZOdvTmu4enU2RePGHw== +"@vue/babel-preset-app@^5.0.0-beta.1": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-5.0.0-beta.1.tgz#e11d5b6e4e17dd4d0d4ef8871002adb40c745a4c" + integrity sha512-rOv7n7HSkOS3wutYgDOdDcEHwvYrRtR5gdxL0yonpFjEVOkYyPEBwgFwWbAVQB5nGpafEO16GFjMrClx0YqHCQ== dependencies: - "@babel/core" "^7.11.0" - "@babel/helper-compilation-targets" "^7.9.6" - "@babel/helper-module-imports" "^7.8.3" - "@babel/plugin-proposal-class-properties" "^7.8.3" - "@babel/plugin-proposal-decorators" "^7.8.3" + "@babel/core" "^7.12.16" + "@babel/helper-compilation-targets" "^7.12.16" + "@babel/helper-module-imports" "^7.12.13" + "@babel/plugin-proposal-class-properties" "^7.12.13" + "@babel/plugin-proposal-decorators" "^7.12.13" "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.11.0" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.0" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/plugin-transform-runtime" "^7.12.15" + "@babel/preset-env" "^7.12.16" + "@babel/runtime" "^7.12.13" "@vue/babel-plugin-jsx" "^1.0.3" - "@vue/babel-preset-jsx" "^1.2.4" + "@vue/babel-preset-jsx" "^1.1.2" babel-plugin-dynamic-import-node "^2.3.3" - core-js "^3.6.5" - core-js-compat "^3.6.5" - semver "^6.1.0" + core-js "^3.8.3" + core-js-compat "^3.8.3" + semver "^7.3.4" -"@vue/babel-preset-jsx@^1.2.4": +"@vue/babel-preset-jsx@^1.1.2": version "1.2.4" resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz#92fea79db6f13b01e80d3a0099e2924bdcbe4e87" integrity sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w== @@ -2248,184 +2390,178 @@ "@vue/babel-plugin-transform-vue-jsx" "^1.2.1" camelcase "^5.0.0" -"@vue/cli-overlay@^4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.5.13.tgz#4f1fd2161be8f69d6cba8079f3f0d7dc4dee47a7" - integrity sha512-jhUIg3klgi5Cxhs8dnat5hi/W2tQJvsqCxR0u6hgfSob0ORODgUBlN+F/uwq7cKIe/pzedVUk1y07F13GQvPqg== +"@vue/cli-overlay@^5.0.0-beta.1": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-5.0.0-beta.1.tgz#1b27fec570246e9a7123bb372720e2e6a458f1c8" + integrity sha512-8hLXlpL9f5MjrLwbYpwQw1RsqzDD+KaQ3WqH6wRlUO2kXK2jSboW7hVqXrKnhX9vhc+9KCa/+W/LHKlyBnKYOw== -"@vue/cli-plugin-babel@~4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.13.tgz#a89c482edcc4ea1d135645cec502a7f5fd4c30e7" - integrity sha512-ykvEAfD8PgGs+dGMGqr7l/nRmIS39NRzWLhMluPLTvDV1L+IxcoB73HNLGA/aENDpl8CuWrTE+1VgydcOhp+wg== +"@vue/cli-plugin-babel@~5.0.0-beta.0": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.0-beta.1.tgz#fc92198e17fd7b7e42d8d4cf37dc959fc3871d42" + integrity sha512-i/Mixvc+Y1aBtJ4qzQpMPwynK4Fu+PcHnCqENilDXt/x6H89pxme2Rrs2kFlqC+/hYx+mpJU4H0Bk0E+AgEZPw== dependencies: - "@babel/core" "^7.11.0" - "@vue/babel-preset-app" "^4.5.13" - "@vue/cli-shared-utils" "^4.5.13" - babel-loader "^8.1.0" - cache-loader "^4.1.0" - thread-loader "^2.1.3" - webpack "^4.0.0" + "@babel/core" "^7.12.16" + "@vue/babel-preset-app" "^5.0.0-beta.1" + "@vue/cli-shared-utils" "^5.0.0-beta.1" + babel-loader "^8.2.2" + thread-loader "^3.0.0" + webpack "^5.22.0" -"@vue/cli-plugin-e2e-cypress@~4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-e2e-cypress/-/cli-plugin-e2e-cypress-4.5.13.tgz#c014ba1b4d08e582c26b36890cc65844b12e9dde" - integrity sha512-7AyqCgDqgCj93QxkJYJG5YuXW07enHAYCdGZHPBHZKniIiq8VfvA6/ZT6TTU7DRr2/QxoIbXtbGnmNyDF/Urww== +"@vue/cli-plugin-e2e-cypress@~5.0.0-beta.0": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-e2e-cypress/-/cli-plugin-e2e-cypress-5.0.0-beta.1.tgz#1a16d185e742a7be998f62ba8d4a500b1435867f" + integrity sha512-FiFrFffHJZ4ebj429y8UlqjXJBB1erAd3n8DM3ULFSsHbuo6RHJi+yWvZBofmfAaASIY7rTUesQp/bJ//e42Cw== dependencies: - "@vue/cli-shared-utils" "^4.5.13" - cypress "^3.8.3" - eslint-plugin-cypress "^2.10.3" + "@vue/cli-shared-utils" "^5.0.0-beta.1" + cypress "^7.1.0" + eslint-plugin-cypress "^2.11.2" -"@vue/cli-plugin-eslint@~4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.13.tgz#8baf22d0d96d76720c7506646b96f4f62c05bdfa" - integrity sha512-yc2uXX6aBiy3vEf5TwaueaDqQbdIXIhk0x0KzEtpPo23jBdLkpOSoU5NCgE06g/ZiGAcettpmBSv73Hfp4wHEw== +"@vue/cli-plugin-eslint@~5.0.0-beta.0": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.0-beta.1.tgz#2091192bb4d45125bc01f15c67a048f3e08c4f80" + integrity sha512-Ac0bcQSA5o/rLbuic+qQiP8eHzl7zlQm1w/hB5YDLYOxremLDzoliRd/3T4iKxepbpPqaHNVrfzRrYTjEVLGsQ== dependencies: - "@vue/cli-shared-utils" "^4.5.13" - eslint-loader "^2.2.1" - globby "^9.2.0" - inquirer "^7.1.0" - webpack "^4.0.0" + "@vue/cli-shared-utils" "^5.0.0-beta.1" + eslint-webpack-plugin "2.4.3" + globby "^11.0.2" + inquirer "^8.0.0" + webpack "^5.22.0" yorkie "^2.0.0" -"@vue/cli-plugin-pwa@~4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-pwa/-/cli-plugin-pwa-4.5.13.tgz#a800639814b6f62a38f04198c340cfaee7295c3f" - integrity sha512-uU5pp94VU0YscfKq/mNRsKOdxG+CTqVlZWaYkRc+HCcwkJ/m/CnxgaEqQFr0QpHC8zmlX4gILO1RVYygJoR9tw== +"@vue/cli-plugin-pwa@~5.0.0-beta.0": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-pwa/-/cli-plugin-pwa-5.0.0-beta.1.tgz#546cc5d734d11f79c989cf2c2c040c0faf1fda28" + integrity sha512-OLZEcCPv/RC9TqPqGdh0wR+njtzavJ7FjDddHXqQoUn/5k9uE06EIKvU8C9rwaM49o1PJFBwi/lAweS0p4F82g== dependencies: - "@vue/cli-shared-utils" "^4.5.13" - webpack "^4.0.0" - workbox-webpack-plugin "^4.3.1" + "@vue/cli-shared-utils" "^5.0.0-beta.1" + html-webpack-plugin "^5.1.0" + webpack "^5.22.0" + workbox-webpack-plugin "^6.1.0" -"@vue/cli-plugin-router@^4.5.13", "@vue/cli-plugin-router@~4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.13.tgz#0b67c8898a2bf132941919a2a2e5f3aacbd9ffbe" - integrity sha512-tgtMDjchB/M1z8BcfV4jSOY9fZSMDTPgF9lsJIiqBWMxvBIsk9uIZHxp62DibYME4CCKb/nNK61XHaikFp+83w== +"@vue/cli-plugin-router@^5.0.0-beta.1", "@vue/cli-plugin-router@~5.0.0-beta.0": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.0-beta.1.tgz#300565ce4169298509a9bdfbf399330202419528" + integrity sha512-Dty7hYXypGpFHKV1Lr8mZPZjLPZ44czEaSuQYovtCpGEpoarO+E7Q0+xjXd6y/dnxZu1QqyNoqeYtbkCD2zF2Q== dependencies: - "@vue/cli-shared-utils" "^4.5.13" + "@vue/cli-shared-utils" "^5.0.0-beta.1" -"@vue/cli-plugin-typescript@~4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-4.5.13.tgz#f514f661e16f9096a89a9ca6e69a2d762c6d8464" - integrity sha512-CpLlIdFNV1gn9uC4Yh6QgWI42uk2x5Z3cb2ScxNSwWsR1vgSdr0/1DdNzoBm68aP8RUtnHHO/HZfPnvXiq42xA== +"@vue/cli-plugin-typescript@~5.0.0-beta.0": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-5.0.0-beta.1.tgz#20435c9016512928d0d00f3e17a81c824ea54375" + integrity sha512-FwXtmVf0aY3FVoQzYf2hEmeBWZAONQ22f8GomFWtY31+xXYR3iShfs8fERR5pypeX/aTYbrcvYyf+yzs7H4xTA== dependencies: + "@babel/core" "^7.12.16" "@types/webpack-env" "^1.15.2" - "@vue/cli-shared-utils" "^4.5.13" + "@vue/cli-shared-utils" "^5.0.0-beta.1" + babel-loader "^8.2.2" cache-loader "^4.1.0" - fork-ts-checker-webpack-plugin "^3.1.1" - globby "^9.2.0" - thread-loader "^2.1.3" - ts-loader "^6.2.2" - tslint "^5.20.1" - webpack "^4.0.0" + fork-ts-checker-webpack-plugin "^6.1.0" + globby "^11.0.2" + thread-loader "^3.0.0" + ts-loader "^8.0.17" + webpack "^5.22.0" yorkie "^2.0.0" - optionalDependencies: - fork-ts-checker-webpack-plugin-v5 "npm:fork-ts-checker-webpack-plugin@^5.0.11" -"@vue/cli-plugin-unit-jest@~4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-4.5.13.tgz#6aca031452a5883f39580ec50ea926c982e1d138" - integrity sha512-8t7QIihJWB9Kv85FamrEzWbJnvsLhQdyXHl3h+qhAihrZdLL+9mj905y88cBCq+i2PqqZ/qAoabbpf4DxDAb7g== +"@vue/cli-plugin-unit-jest@~5.0.0-beta.0": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-5.0.0-beta.1.tgz#c4fcedbb53bc6f0044b01c9beb04019fdf0ef611" + integrity sha512-jN1V4m/unJcGuCvH88y6EDfkdWiRmLUvukFFNUAzlCPLbqAz9ml5L4FKjLLW1TqbX4r65laYZAEaqD5evEQVUA== dependencies: - "@babel/core" "^7.11.0" - "@babel/plugin-transform-modules-commonjs" "^7.9.6" - "@types/jest" "^24.0.19" - "@vue/cli-shared-utils" "^4.5.13" - babel-core "^7.0.0-bridge.0" - babel-jest "^24.9.0" - babel-plugin-transform-es2015-modules-commonjs "^6.26.2" + "@babel/core" "^7.12.16" + "@babel/plugin-transform-modules-commonjs" "^7.12.13" + "@types/jest" "^26.0.20" + "@vue/cli-shared-utils" "^5.0.0-beta.1" + babel-jest "^26.6.3" deepmerge "^4.2.2" - jest "^24.9.0" - jest-environment-jsdom-fifteen "^1.0.2" + jest "^26.6.3" jest-serializer-vue "^2.0.2" jest-transform-stub "^2.0.0" - jest-watch-typeahead "^0.4.2" - ts-jest "^24.2.0" - vue-jest "^3.0.5" + jest-watch-typeahead "^0.6.1" -"@vue/cli-plugin-vuex@^4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.13.tgz#98646d8bc1e69cf6c6a6cba2fed3eace0356c360" - integrity sha512-I1S9wZC7iI0Wn8kw8Zh+A2Qkf6s1M6vTGBkx8boXjuzfwEEyEHRxadsVCecZc8Mkpydo0nykj+MyYF96TKFuVA== +"@vue/cli-plugin-vuex@^5.0.0-beta.1": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.0-beta.1.tgz#807d4e625a95fec6926b071698b980d0e36b1448" + integrity sha512-0lbC/+5vn6XzzHFbV6H0Hy0m34IT3CgeO2vQjwF7QVr9mtxWO8u3R1JZ810E58r0pRQycpMg2xtnwZ/Ia14XVQ== -"@vue/cli-service@~4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.5.13.tgz#a09e684a801684b6e24e5414ad30650970eec9ed" - integrity sha512-CKAZN4iokMMsaUyJRU22oUAz3oS/X9sVBSKAF2/shFBV5xh3jqAlKl8OXZYz4cXGFLA6djNuYrniuLAo7Ku97A== +"@vue/cli-service@~5.0.0-beta.0": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-5.0.0-beta.1.tgz#7ef6b417e99025eb8e5725c9880ce68d87c6c21a" + integrity sha512-SkSWlsf7E3nQALDeS4QuX37RdOeGbO+mm2yBJ+R07X2lzR2EYTRO249EcctEFTOt3aalEOEWfnrc8EjPXp7tgg== dependencies: - "@intervolga/optimize-cssnano-plugin" "^1.0.5" - "@soda/friendly-errors-webpack-plugin" "^1.7.1" - "@soda/get-current-script" "^1.0.0" + "@babel/helper-compilation-targets" "^7.12.16" + "@soda/friendly-errors-webpack-plugin" "^1.8.0" + "@soda/get-current-script" "^1.0.2" "@types/minimist" "^1.2.0" - "@types/webpack" "^4.0.0" "@types/webpack-dev-server" "^3.11.0" - "@vue/cli-overlay" "^4.5.13" - "@vue/cli-plugin-router" "^4.5.13" - "@vue/cli-plugin-vuex" "^4.5.13" - "@vue/cli-shared-utils" "^4.5.13" + "@vue/cli-overlay" "^5.0.0-beta.1" + "@vue/cli-plugin-router" "^5.0.0-beta.1" + "@vue/cli-plugin-vuex" "^5.0.0-beta.1" + "@vue/cli-shared-utils" "^5.0.0-beta.1" "@vue/component-compiler-utils" "^3.1.2" - "@vue/preload-webpack-plugin" "^1.1.0" - "@vue/web-component-wrapper" "^1.2.0" - acorn "^7.4.0" - acorn-walk "^7.1.1" + "@vue/web-component-wrapper" "^1.3.0" + acorn "^8.0.5" + acorn-walk "^8.0.2" address "^1.1.2" - autoprefixer "^9.8.6" - browserslist "^4.12.0" + autoprefixer "^10.2.4" + browserslist "^4.16.3" cache-loader "^4.1.0" case-sensitive-paths-webpack-plugin "^2.3.0" - cli-highlight "^2.1.4" + cli-highlight "^2.1.10" clipboardy "^2.3.0" - cliui "^6.0.0" - copy-webpack-plugin "^5.1.1" - css-loader "^3.5.3" - cssnano "^4.1.10" + cliui "^7.0.4" + copy-webpack-plugin "^8.0.0" + css-loader "^5.1.1" + css-minimizer-webpack-plugin "^2.0.0" + cssnano "^5.0.0" debug "^4.1.1" - default-gateway "^5.0.5" + default-gateway "^6.0.3" dotenv "^8.2.0" dotenv-expand "^5.1.0" - file-loader "^4.2.0" - fs-extra "^7.0.1" - globby "^9.2.0" + file-loader "^6.1.1" + fs-extra "^9.1.0" + globby "^11.0.2" hash-sum "^2.0.0" - html-webpack-plugin "^3.2.0" + html-webpack-plugin "^5.1.0" + is-file-esm "^1.0.0" launch-editor-middleware "^2.2.1" lodash.defaultsdeep "^4.6.1" lodash.mapvalues "^4.6.0" - lodash.transform "^4.6.0" - mini-css-extract-plugin "^0.9.0" + mini-css-extract-plugin "^1.3.7" minimist "^1.2.5" - pnp-webpack-plugin "^1.6.4" + module-alias "^2.2.2" portfinder "^1.0.26" - postcss-loader "^3.0.0" + postcss "^8.2.6" + postcss-loader "^5.0.0" ssri "^8.0.1" - terser-webpack-plugin "^1.4.4" - thread-loader "^2.1.3" - url-loader "^2.2.0" - vue-loader "^15.9.2" - vue-style-loader "^4.1.2" - webpack "^4.0.0" - webpack-bundle-analyzer "^3.8.0" - webpack-chain "^6.4.0" - webpack-dev-server "^3.11.0" - webpack-merge "^4.2.2" - optionalDependencies: - vue-loader-v16 "npm:vue-loader@^16.1.0" + terser-webpack-plugin "^5.1.1" + thread-loader "^3.0.0" + url-loader "^4.1.1" + vue-loader "^16.1.2" + vue-loader-v15 "npm:vue-loader@^15.9.6" + vue-style-loader "^4.1.3" + webpack "^5.22.0" + webpack-bundle-analyzer "^4.4.0" + webpack-chain "^6.5.1" + webpack-dev-server "^3.11.2" + webpack-merge "^5.7.3" + webpack-virtual-modules "^0.4.2" -"@vue/cli-shared-utils@^4.5.13": - version "4.5.13" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.13.tgz#acd40f31b4790f1634292bdaa5fca95dc1e0ff50" - integrity sha512-HpnOrkLg42RFUsQGMJv26oTG3J3FmKtO2WSRhKIIL+1ok3w9OjGCtA3nMMXN27f9eX14TqO64M36DaiSZ1fSiw== +"@vue/cli-shared-utils@^5.0.0-beta.1": + version "5.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.0-beta.1.tgz#5bea6b1d403da74c75af8060625b9ce0e873dfba" + integrity sha512-p8NnRooQu19C/fFuIXzfDLX89HMqkeFdRg0HB8NX9u/qa14WZ3WO1JcpwnN87iRNuJddNhQ16UMxiMtJigpRzQ== dependencies: - "@hapi/joi" "^15.0.1" - chalk "^2.4.2" + chalk "^4.1.0" execa "^1.0.0" + joi "^17.4.0" launch-editor "^2.2.1" - lru-cache "^5.1.1" + lru-cache "^6.0.0" + node-fetch "^2.6.1" node-ipc "^9.1.1" - open "^6.3.0" - ora "^3.4.0" + open "^8.0.2" + ora "^5.3.0" read-pkg "^5.1.1" - request "^2.88.2" - semver "^6.1.0" + semver "^7.3.4" strip-ansi "^6.0.0" "@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.1.2": @@ -2458,11 +2594,6 @@ dependencies: vue-eslint-parser "^7.0.0" -"@vue/preload-webpack-plugin@^1.1.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab" - integrity sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ== - "@vue/test-utils@^1.1.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.2.0.tgz#3bc8c17ed549157275f0aec6b95da40887f7297f" @@ -2472,155 +2603,148 @@ lodash "^4.17.15" pretty "^2.0.0" -"@vue/web-component-wrapper@^1.2.0": +"@vue/web-component-wrapper@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a" integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA== -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== +"@webassemblyjs/ast@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" + integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" + "@webassemblyjs/helper-numbers" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== +"@webassemblyjs/floating-point-hex-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" + integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== +"@webassemblyjs/helper-api-error@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" + integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== +"@webassemblyjs/helper-buffer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" + integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== +"@webassemblyjs/helper-numbers@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" + integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== dependencies: - "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== +"@webassemblyjs/helper-wasm-bytecode@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" + integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== +"@webassemblyjs/helper-wasm-section@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" + integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== dependencies: - "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== +"@webassemblyjs/ieee754@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" + integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== +"@webassemblyjs/leb128@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" + integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== +"@webassemblyjs/utf8@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" + integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== +"@webassemblyjs/wasm-edit@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" + integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-wasm-section" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-opt" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + "@webassemblyjs/wast-printer" "1.11.0" -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== +"@webassemblyjs/wasm-gen@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" + integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== +"@webassemblyjs/wasm-opt@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" + integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== +"@webassemblyjs/wasm-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" + integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== +"@webassemblyjs/wast-printer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" + integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" + "@webassemblyjs/ast" "1.11.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== +"@webpack-cli/configtest@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.3.tgz#204bcff87cda3ea4810881f7ea96e5f5321b87b9" + integrity sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw== + +"@webpack-cli/info@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.4.tgz#7381fd41c9577b2d8f6c2594fad397ef49ad5573" + integrity sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.4.0.tgz#f84fd07bcacefe56ce762925798871092f0f228e" + integrity sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg== "@wry/context@^0.4.0": version "0.4.4" @@ -2668,7 +2792,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.0: +abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== @@ -2686,44 +2810,39 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-globals@^4.1.0, acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" + acorn "^7.1.1" + acorn-walk "^7.1.1" acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^5.5.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== +acorn-walk@^8.0.0, acorn-walk@^8.0.2: + version "8.1.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.0.tgz#d3c6a9faf00987a5e2b9bdb506c2aa76cd707f83" + integrity sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg== -acorn@^6.0.1, acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.4, acorn@^8.0.5, acorn@^8.1.0, acorn@^8.2.1: + version "8.2.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.4.tgz#caba24b08185c3b56e3168e97d15ed17f4d31fd0" + integrity sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg== + address@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -2739,7 +2858,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2759,7 +2878,7 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -alphanum-sort@^1.0.0: +alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= @@ -2774,17 +2893,12 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= - ansi-escapes@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2806,7 +2920,7 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.0.0, ansi-regex@^4.1.0: +ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== @@ -2835,12 +2949,17 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= -anymatch@*, anymatch@~3.1.1: +anymatch@*, anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -2961,17 +3080,7 @@ apollo-utilities@1.3.4, apollo-utilities@^1.0.0, apollo-utilities@^1.3.0, apollo ts-invariant "^0.4.0" tslib "^1.10.0" -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -arch@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" - integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== - -arch@^2.1.1: +arch@^2.1.1, arch@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== @@ -2998,11 +3107,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -3024,7 +3128,7 @@ array-includes@^3.1.3: get-intrinsic "^1.1.1" is-string "^1.0.5" -array-union@^1.0.1, array-union@^1.0.2: +array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= @@ -3055,15 +3159,10 @@ array.prototype.flat@^1.2.4: define-properties "^1.1.3" es-abstract "^1.18.0-next.1" -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== asn1@~0.2.3: version "0.2.4" @@ -3077,24 +3176,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -3110,13 +3196,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== - dependencies: - lodash "^4.17.10" - async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -3124,6 +3203,11 @@ async@^2.6.2: dependencies: lodash "^4.17.14" +async@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3139,17 +3223,16 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^9.8.6: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== +autoprefixer@^10.2.4: + version "10.2.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.5.tgz#096a0337dbc96c0873526d7fef5de4428d05382d" + integrity sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA== dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" + browserslist "^4.16.3" + caniuse-lite "^1.0.30001196" + colorette "^1.2.2" + fraction.js "^4.0.13" normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.32" postcss-value-parser "^4.1.0" aws-sign2@~0.7.0: @@ -3162,41 +3245,21 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" -babel-core@^7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - -babel-extract-comments@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" - integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ== - dependencies: - babylon "^6.18.0" - -babel-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" - integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== - dependencies: - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.9.0" - chalk "^2.4.2" - slash "^2.0.0" - -babel-loader@^8.1.0: +babel-loader@^8.2.2: version "8.2.2" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== @@ -3206,13 +3269,6 @@ babel-loader@^8.1.0: make-dir "^3.1.0" schema-utils "^2.6.5" -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -3220,21 +3276,25 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" - integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" -babel-plugin-jest-hoist@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" - integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" babel-plugin-polyfill-corejs2@^0.2.0: @@ -3261,37 +3321,6 @@ babel-plugin-polyfill-regenerator@^0.2.0: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.0" -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-plugin-transform-es2015-modules-commonjs@^6.26.0, babel-plugin-transform-es2015-modules-commonjs@^6.26.2: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - babel-polyfill@6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" @@ -3301,15 +3330,33 @@ babel-polyfill@6.26.0: core-js "^2.5.0" regenerator-runtime "^0.10.5" -babel-preset-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" - integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.9.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-runtime@6.26.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +babel-runtime@6.26.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -3317,53 +3364,12 @@ babel-runtime@6.26.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2: +base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3398,16 +3404,6 @@ bezier-easing@2.1.0: resolved "https://registry.yarnpkg.com/bezier-easing/-/bezier-easing-2.1.0.tgz#c04dfe8b926d6ecaca1813d69ff179b7c2025d86" integrity sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY= -bfj@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" - integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== - dependencies: - bluebird "^3.5.5" - check-types "^8.0.3" - hoopy "^0.1.4" - tryer "^1.0.1" - big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" @@ -3435,26 +3431,25 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bluebird@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" - integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" -bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.5.5: +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -3519,85 +3514,12 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.6: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.3, browserslist@^4.16.6: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== @@ -3649,35 +3571,19 @@ buffer-json@^2.0.0: resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + base64-js "^1.3.1" + ieee754 "^1.1.13" builtin-modules@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - bulma-divider@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/bulma-divider/-/bulma-divider-0.2.0.tgz#a9b4d9fe8b270c7cb7573023c575062bc62616f3" @@ -3698,27 +3604,6 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^12.0.2, cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3746,12 +3631,10 @@ cache-loader@^4.1.0: neo-async "^2.6.1" schema-utils "^2.0.0" -cachedir@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4" - integrity sha512-O1ji32oyON9laVPJL1IZ5bmwd2cB46VfpxkDequezH+15FDzzVddEyrGEeX4WusDSqKxdyFdDQDEG1yo1GoWkg== - dependencies: - os-homedir "^1.0.1" +cachedir@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" @@ -3761,30 +3644,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3798,17 +3657,20 @@ camel-case@3.0.x: no-case "^2.2.0" upper-case "^1.1.1" -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== @@ -3823,7 +3685,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001196, caniuse-lite@^1.0.30001219: version "1.0.30001228" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== @@ -3845,16 +3707,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -3865,6 +3718,15 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^4.0.0, chalk@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" @@ -3873,22 +3735,22 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-more-types@2.24.0: +check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= -check-types@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" - integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== - -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.3.0, chokidar@^3.4.1: +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.2: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== @@ -3922,11 +3784,6 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -3942,13 +3799,15 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" +ci-info@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.1.1.tgz#9a32fcefdf7bcdb6f0a7e1c0f8098ec57897b80a" + integrity sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ== + +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== class-utils@^0.3.5: version "0.3.6" @@ -3960,7 +3819,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-css@4.2.x: +clean-css@4.2.x, clean-css@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== @@ -3974,7 +3833,7 @@ cli-cursor@^1.0.2: dependencies: restore-cursor "^1.0.1" -cli-cursor@^2.1.0: +cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= @@ -3988,7 +3847,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-highlight@^2.1.4: +cli-highlight@^2.1.10: version "2.1.11" resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== @@ -4000,16 +3859,21 @@ cli-highlight@^2.1.4: parse5-htmlparser2-tree-adapter "^6.0.0" yargs "^16.0.0" -cli-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - integrity sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw= - -cli-spinners@^2.0.0: +cli-spinners@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== +cli-table3@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== + dependencies: + object-assign "^4.1.0" + string-width "^4.2.0" + optionalDependencies: + colors "^1.1.2" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -4050,7 +3914,7 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -cliui@^7.0.2: +cliui@^7.0.2, cliui@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== @@ -4068,16 +3932,16 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone@2.x, clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -4097,6 +3961,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -4137,7 +4006,7 @@ color-string@^1.5.4: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@^3.0.0: +color@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== @@ -4150,6 +4019,11 @@ colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -4157,37 +4031,42 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@2.15.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== - commander@2.17.x: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.12.1, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0: +commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.0: +commander@^4.0.0, commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^6.1.0: +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^6.1.0, commander@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^7.0.0, commander@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== -common-tags@1.8.0, common-tags@^1.4.0, common-tags@^1.8.0: +common-tags@^1.4.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -4227,7 +4106,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@1.6.2, concat-stream@^1.5.0: +concat-stream@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -4259,11 +4138,6 @@ connect-history-api-fallback@^1.6.0: resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - consolidate@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" @@ -4271,11 +4145,6 @@ consolidate@^0.15.1: dependencies: bluebird "^3.1.1" -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - contains-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-1.0.0.tgz#3458b332185603e8eed18f518d4a10888a3abc91" @@ -4296,7 +4165,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.4.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -4313,42 +4182,25 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-webpack-plugin@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz#8a889e1dcafa6c91c6cd4be1ad158f1d3823bae2" - integrity sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ== +copy-webpack-plugin@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz#3f697e162764925c2f0d235f380676125508fd26" + integrity sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ== dependencies: - cacache "^12.0.3" - find-cache-dir "^2.1.0" - glob-parent "^3.1.0" - globby "^7.1.1" - is-glob "^4.0.1" - loader-utils "^1.2.3" - minimatch "^3.0.4" + fast-glob "^3.2.5" + glob-parent "^5.1.1" + globby "^11.0.3" normalize-path "^3.0.0" - p-limit "^2.2.1" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - webpack-log "^2.0.0" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" -core-js-compat@^3.6.5, core-js-compat@^3.9.0, core-js-compat@^3.9.1: +core-js-compat@^3.8.3, core-js-compat@^3.9.0, core-js-compat@^3.9.1: version "3.12.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.12.1.tgz#2c302c4708505fa7072b0adb5156d26f7801a18b" integrity sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ== @@ -4366,7 +4218,7 @@ core-js@^2.4.0, core-js@^2.5.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.6.4, core-js@^3.6.5: +core-js@^3.6.4, core-js@^3.8.3: version "3.12.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.1.tgz#6b5af4ff55616c08a44d386f1f510917ff204112" integrity sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw== @@ -4376,16 +4228,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" @@ -4397,36 +4239,16 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" cross-spawn@^5.0.1: version "5.1.0" @@ -4437,7 +4259,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -4448,7 +4270,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4457,59 +4279,57 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -css-color-names@0.0.4, css-color-names@^0.0.4: +css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== +css-color-names@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-1.0.1.tgz#6ff7ee81a823ad46e020fa2fd6ab40a887e2ba67" + integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== + +css-declaration-sorter@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.0.0.tgz#eb21f75860078627e9e3cc6f5535ccfcea445817" + integrity sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg== dependencies: - postcss "^7.0.1" timsort "^0.3.0" -css-loader@^3.5.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" - integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== +css-loader@^5.1.1: + version "5.2.4" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.4.tgz#e985dcbce339812cb6104ef3670f08f9893a1536" + integrity sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw== dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" + camelcase "^6.2.0" + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.10" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" postcss-value-parser "^4.1.0" - schema-utils "^2.7.0" - semver "^6.3.0" + schema-utils "^3.0.0" + semver "^7.3.5" + +css-minimizer-webpack-plugin@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-2.0.0.tgz#3c42f6624ed4cf4780dd963e23ee649e5a25c1a8" + integrity sha512-cG/uc94727tx5pBNtb1Sd7gvUPzwmcQi1lkpfqTpdkuNq75hJCw7bIVsCNijLm4dhDcr1atvuysl2rZqOG8Txw== + dependencies: + cssnano "^5.0.0" + jest-worker "^26.3.0" + p-limit "^3.0.2" + postcss "^8.2.9" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" css-select-base-adapter@^0.1.1: version "0.1.1" @@ -4526,6 +4346,17 @@ css-select@^2.0.0, css-select@^2.0.2: domutils "^1.7.0" nth-check "^1.0.2" +css-select@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8" + integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== + dependencies: + boolbase "^1.0.0" + css-what "^4.0.0" + domhandler "^4.0.0" + domutils "^2.4.3" + nth-check "^2.0.0" + css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -4547,6 +4378,11 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css-what@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" + integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== + css@^2.1.0: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" @@ -4562,148 +4398,123 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== +cssnano-preset-default@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.0.1.tgz#76adc00f7aae36ae80552b8356e21bec4b233ca2" + integrity sha512-cfmfThYODGqhpQKDq9H0MTAqkMvZ3dGbOUTBKw0xWZiIycMqHid22LsJXJl4r1qX4qzDeKxcSyQ/Xb5Mu3Z//Q== dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" + css-declaration-sorter "6.0.0" + cssnano-utils "^2.0.0" + postcss-calc "^8.0.0" + postcss-colormin "^5.0.0" + postcss-convert-values "^5.0.0" + postcss-discard-comments "^5.0.0" + postcss-discard-duplicates "^5.0.0" + postcss-discard-empty "^5.0.0" + postcss-discard-overridden "^5.0.0" + postcss-merge-longhand "^5.0.1" + postcss-merge-rules "^5.0.0" + postcss-minify-font-values "^5.0.0" + postcss-minify-gradients "^5.0.0" + postcss-minify-params "^5.0.0" + postcss-minify-selectors "^5.0.0" + postcss-normalize-charset "^5.0.0" + postcss-normalize-display-values "^5.0.0" + postcss-normalize-positions "^5.0.0" + postcss-normalize-repeat-style "^5.0.0" + postcss-normalize-string "^5.0.0" + postcss-normalize-timing-functions "^5.0.0" + postcss-normalize-unicode "^5.0.0" + postcss-normalize-url "^5.0.0" + postcss-normalize-whitespace "^5.0.0" + postcss-ordered-values "^5.0.0" + postcss-reduce-initial "^5.0.0" + postcss-reduce-transforms "^5.0.0" + postcss-svgo "^5.0.0" + postcss-unique-selectors "^5.0.0" -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= +cssnano-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-2.0.0.tgz#b04baaa312aa3dd5a854b7f61d76b9d94be07f74" + integrity sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA== -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== +cssnano@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.2.tgz#3f6de4fd5ecb7b5fb636c1a606de5f38cd241493" + integrity sha512-8JK3EnPsjQsULme9/e5M2hF564f/480hwsdcHvQ7ZtAIMfQ1O3SCfs+b8Mjf5KJxhYApyRshR2QSovEJi2K72Q== dependencies: - postcss "^7.0.0" + cosmiconfig "^7.0.0" + cssnano-preset-default "^5.0.1" + is-resolvable "^1.1.0" -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.0.0, cssnano@^4.1.10: - version "4.1.11" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: +csso@^4.0.2, csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: css-tree "^1.1.2" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssom@^0.4.1: +cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== -cssstyle@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" - integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== - dependencies: - cssom "0.3.x" +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.0.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -cypress@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.8.3.tgz#e921f5482f1cbe5814891c878f26e704bbffd8f4" - integrity sha512-I9L/d+ilTPPA4vq3NC1OPKmw7jJIpMKNdyfR8t1EXYzYCjyqbc59migOm1YSse/VRbISLJ+QGb5k4Y3bz2lkYw== +cypress@^7.1.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-7.3.0.tgz#17345b8d18681c120f033e7d8fd0f0271e9d0d51" + integrity sha512-aseRCH1tRVCrM6oEfja6fR/bo5l6e4SkHRRSATh27UeN4f/ANC8U7tGIulmrISJVy9xuOkOdbYKbUb2MNM+nrw== dependencies: - "@cypress/listr-verbose-renderer" "0.4.1" - "@cypress/xvfb" "1.2.4" - "@types/sizzle" "2.3.2" - arch "2.1.1" - bluebird "3.5.0" - cachedir "1.3.0" - chalk "2.4.2" - check-more-types "2.24.0" - commander "2.15.1" - common-tags "1.8.0" - debug "3.2.6" - eventemitter2 "4.1.2" - execa "0.10.0" - executable "4.1.1" - extract-zip "1.6.7" - fs-extra "5.0.0" - getos "3.1.1" - is-ci "1.2.1" - is-installed-globally "0.1.0" - lazy-ass "1.6.0" - listr "0.12.0" - lodash "4.17.15" - log-symbols "2.2.0" - minimist "1.2.0" - moment "2.24.0" - ramda "0.24.1" - request "2.88.0" - request-progress "3.0.0" - supports-color "5.5.0" - tmp "0.1.0" - untildify "3.0.3" - url "0.11.0" - yauzl "2.10.0" + "@cypress/listr-verbose-renderer" "^0.4.1" + "@cypress/request" "^2.88.5" + "@cypress/xvfb" "^1.2.4" + "@types/node" "^14.14.31" + "@types/sinonjs__fake-timers" "^6.0.2" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-table3 "~0.6.0" + commander "^5.1.0" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "4.3.2" + eventemitter2 "^6.4.3" + execa "4.1.0" + executable "^4.1.1" + extract-zip "^1.7.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-ci "^3.0.0" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr "^0.14.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.5" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + ramda "~0.27.1" + request-progress "^3.0.0" + supports-color "^8.1.1" + tmp "~0.2.1" + untildify "^4.0.0" + url "^0.11.0" + yauzl "^2.10.0" dashdash@^1.12.0: version "1.14.1" @@ -4712,14 +4523,14 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0, data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" date-fns@^1.27.2: version "1.30.1" @@ -4731,32 +4542,29 @@ date-fns@^2.16.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.21.3.tgz#8f5f6889d7a96bbcc1f0ea50239b397a83357f9b" integrity sha512-HeYdzCaFflc1i4tGbj7JKMjM4cKGYoyxwcIIkHzNgCkX8xXDNJDZXgDDVchIWpN4eQc3lH37WarduXFZJOtxfw== +dayjs@^1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2" + integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw== + de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= -deasync@^0.1.15: - version "0.1.21" - resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.21.tgz#bb11eabd4466c0d8776f0d82deb8a6126460d30f" - integrity sha512-kUmM8Y+PZpMpQ+B4AuOW9k2Pfx/mSupJtxOsLzmnHY2WqZUYRFccFn2RhzPAqt3Xb+sorK/badW2D4zNzqZz5w== - dependencies: - bindings "^1.5.0" - node-addon-api "^1.7.1" - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: - ms "^2.1.1" + ms "2.1.2" debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" @@ -4777,6 +4585,11 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -4822,12 +4635,12 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" -default-gateway@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz#4fd6bd5d2855d39b34cc5a59505486e9aafc9b10" - integrity sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA== +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: - execa "^3.3.0" + execa "^5.0.0" defaults@^1.0.3: version "1.0.3" @@ -4836,6 +4649,11 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -4888,65 +4706,26 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -diff-sequences@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" - integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== - diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0, dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -5013,27 +4792,31 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" domelementtype@1, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1: +domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== dependencies: - webidl-conversions "^4.0.2" + webidl-conversions "^5.0.0" domhandler@^2.3.0: version "2.4.2" @@ -5042,6 +4825,13 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + dependencies: + domelementtype "^2.2.0" + domready@1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/domready/-/domready-1.0.8.tgz#91f252e597b65af77e745ae24dd0185d5e26d58c" @@ -5055,6 +4845,23 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" +domutils@^2.4.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" + integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dot-object@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/dot-object/-/dot-object-2.1.4.tgz#c6c54e9fca510b4d0ea4d65acf33726963843b5f" @@ -5080,21 +4887,11 @@ dotenv@^8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== -duplexer@^0.1.1: +duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - easy-stack@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.1.tgz#8afe4264626988cabb11f3c704ccd0c835411066" @@ -5129,27 +4926,19 @@ ejs@^2.6.1: integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== electron-to-chromium@^1.3.723: - version "1.3.731" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.731.tgz#9f17f7e16f798eaddb21409d80aa755b5b5053dc" - integrity sha512-dn1Nyd0DuFa3xhqZJr6/L9phyk+YXJpvrz6Vcu6mFxFqr5TQ9r/F3yvOYFUrEwY4Tbb1YBjN19TDKnSVCQvalA== + version "1.3.732" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.732.tgz#2a07a8d61f74f2084b6f6bf2a908605a7a0b2d8d" + integrity sha512-qKD5Pbq+QMk4nea4lMuncUMhpEiQwaJyCW7MrvissnRcBDENhVfDmAqQYRQ3X525oTzhar9Zh1cK0L2d1UKYcw== elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== emoji-regex@^7.0.1: version "7.0.3" @@ -5176,14 +4965,14 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: +enhanced-resolve@^4.0.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== @@ -5192,6 +4981,14 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: memory-fs "^0.5.0" tapable "^1.0.0" +enhanced-resolve@^5.8.0: + version "5.8.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" + integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -5209,7 +5006,12 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -errno@^0.1.3, errno@~0.1.7: +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +errno@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== @@ -5252,6 +5054,11 @@ es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" +es-module-lexer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" + integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -5281,13 +5088,13 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.11.1, escodegen@^1.9.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" - estraverse "^4.2.0" + estraverse "^5.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: @@ -5308,17 +5115,6 @@ eslint-import-resolver-node@^0.3.4: debug "^2.6.9" resolve "^1.13.1" -eslint-loader@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" - integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== - dependencies: - loader-fs-cache "^1.0.0" - loader-utils "^1.0.2" - object-assign "^4.0.1" - object-hash "^1.1.4" - rimraf "^2.6.1" - eslint-module-utils@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" @@ -5327,7 +5123,7 @@ eslint-module-utils@^2.6.1: debug "^3.2.7" pkg-dir "^2.0.0" -eslint-plugin-cypress@^2.10.3: +eslint-plugin-cypress@^2.10.3, eslint-plugin-cypress@^2.11.2: version "2.11.3" resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.11.3.tgz#54ee4067aa8192aa62810cd35080eb577e191ab7" integrity sha512-hOoAid+XNFtpvOzZSNWP5LDrQBEJwbZwjib4XJ1KcRYKjeVj0mAmPmucG4Egli4j/aruv+Ow/acacoloWWCl9Q== @@ -5363,22 +5159,15 @@ eslint-plugin-prettier@^3.3.1: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-vue@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz#27fecd9a3a24789b0f111ecdd540a9e56198e0fe" - integrity sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ== +eslint-plugin-vue@^7.6.0: + version "7.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz#f8e83a2a908f4c43fc8304f5401d4ff671f3d560" + integrity sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw== dependencies: + eslint-utils "^2.1.0" natural-compare "^1.4.0" - semver "^5.6.0" - vue-eslint-parser "^7.0.0" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" + semver "^7.3.2" + vue-eslint-parser "^7.6.0" eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" @@ -5388,13 +5177,6 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" @@ -5412,50 +5194,18 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^6.7.2: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint-webpack-plugin@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.4.3.tgz#59afc76ab747e47fcc3ccd05375b58cbc5a034d5" + integrity sha512-+15ifHFkGn0gB7lQBe+xgyKcjelxv9xlTutGHEPYBUUj+1Rjrjq3+1REJLJpyAHgpQTatpqkRY1z8gQuyn3Aww== dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" + "@types/eslint" "^7.2.4" + arrify "^2.0.1" + jest-worker "^26.6.2" + micromatch "^4.0.2" + schema-utils "^3.0.0" -eslint@^7.9.0: +eslint@^7.20.0, eslint@^7.9.0: version "7.26.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.26.0.tgz#d416fdcdcb3236cd8f282065312813f8c13982f6" integrity sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg== @@ -5498,7 +5248,7 @@ eslint@^7.9.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.2, espree@^6.2.1: +espree@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== @@ -5528,14 +5278,14 @@ esquery@^1.0.1, esquery@^1.4.0: dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0, esrecurse@^4.3.0: +esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -5545,11 +5295,6 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -5570,17 +5315,17 @@ event-pubsub@4.3.0: resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== -eventemitter2@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-4.1.2.tgz#0e1a8477af821a6ef3995b311bf74c23a5247f15" - integrity sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU= +eventemitter2@^6.4.3: + version "6.4.4" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b" + integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw== eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0: +events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -5592,31 +5337,25 @@ eventsource@^1.0.7: dependencies: original "^1.0.0" -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - exec-sh@^0.3.2: version "0.3.6" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== -execa@0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== +execa@4.1.0, execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: - cross-spawn "^6.0.0" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" execa@^0.8.0: version "0.8.0" @@ -5644,23 +5383,22 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== +execa@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" -executable@4.1.1: +executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== @@ -5690,26 +5428,19 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: - homedir-polyfill "^1.0.1" + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" -expect@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" - integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== - dependencies: - "@jest/types" "^24.9.0" - ansi-styles "^3.2.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.9.0" - -express@^4.16.3, express@^4.17.1: +express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -5795,15 +5526,15 @@ extract-from-css@^0.4.4: dependencies: css "^2.1.0" -extract-zip@1.6.7: - version "1.6.7" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" - integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= +extract-zip@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" + integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== dependencies: - concat-stream "1.6.2" - debug "2.6.9" - mkdirp "0.5.1" - yauzl "2.4.1" + concat-stream "^1.6.2" + debug "^2.6.9" + mkdirp "^0.5.4" + yauzl "^2.10.0" extsprintf@1.3.0: version "1.3.0" @@ -5830,19 +5561,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-glob@^3.1.1: +fast-glob@^3.1.1, fast-glob@^3.2.5: version "3.2.5" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== @@ -5864,6 +5583,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -5885,13 +5609,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= - dependencies: - pend "~1.2.0" - fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -5899,11 +5616,6 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -5912,6 +5624,13 @@ figures@^1.7.0: escape-string-regexp "^1.0.5" object-assign "^4.1.0" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -5919,13 +5638,6 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -5933,7 +5645,7 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-loader@^4.0.0, file-loader@^4.2.0: +file-loader@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== @@ -5941,16 +5653,19 @@ file-loader@^4.0.0, file-loader@^4.2.0: loader-utils "^1.2.3" schema-utils "^2.5.0" +file-loader@^6.1.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filesize@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -5981,32 +5696,6 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-babel-config@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" - integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== - dependencies: - json5 "^0.5.1" - path-exists "^3.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" @@ -6016,14 +5705,6 @@ find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -6038,7 +5719,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -6046,25 +5727,6 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -6073,11 +5735,6 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - flatted@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" @@ -6098,26 +5755,11 @@ flush-promises@^1.0.2: resolved "https://registry.yarnpkg.com/flush-promises/-/flush-promises-1.0.2.tgz#4948fd58f15281fed79cbafc86293d5bb09b2ced" integrity sha512-G0sYfLQERwKz4+4iOZYQEZVpOt9zQrlItIxQAAYAWpfby3gbHrx0osCHz5RLl/XoXevXk0xoN4hDFky/VV9TrA== -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - follow-redirects@^1.0.0: version "1.14.1" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -6128,37 +5770,25 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -"fork-ts-checker-webpack-plugin-v5@npm:fork-ts-checker-webpack-plugin@^5.0.11": - version "5.2.1" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz#79326d869797906fa8b24e2abcf9421fc805450d" - integrity sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw== +fork-ts-checker-webpack-plugin@^6.1.0: + version "6.2.10" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.10.tgz#800ab1fa523c76011a3413bc4e7815e45b63e826" + integrity sha512-HveFCHWSH2WlYU1tU3PkrupvW8lNFMTfH3Jk0TfC2mtktE9ibHGcifhCsCFvj+kqlDfNIlwmNLiNqR9jnSA7OQ== dependencies: "@babel/code-frame" "^7.8.3" "@types/json-schema" "^7.0.5" chalk "^4.1.0" + chokidar "^3.4.2" cosmiconfig "^6.0.0" deepmerge "^4.2.2" fs-extra "^9.0.0" + glob "^7.1.6" memfs "^3.1.2" minimatch "^3.0.4" schema-utils "2.7.0" semver "^7.3.2" tapable "^1.0.0" -fork-ts-checker-webpack-plugin@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19" - integrity sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ== - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^3.3.0" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -6173,6 +5803,11 @@ forwarded@~0.1.2: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +fraction.js@^4.0.13: + version "4.1.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.0.tgz#229ec1cedc8c3c7e5d2d20688ba64f0a43af5830" + integrity sha512-o9lSKpK0TDqDwTL24Hxqi6I99s942l6TYkfl6WvGWgLOIFz/YonSGKfiSeMadoiNvTfqnfOa9mjb5SGVbBK9/w== + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -6185,42 +5820,7 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.0: +fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -6235,16 +5835,6 @@ fs-monkey@1.0.3: resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -6258,7 +5848,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@~2.3.1: +fsevents@^2.1.2, fsevents@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -6297,6 +5887,11 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -6321,17 +5916,22 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -getos@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.1.tgz#967a813cceafee0156b0483f7cffa5b3eff029c5" - integrity sha512-oUP1rnEhAr97rkitiszGP9EgDVYnmchgFzfqRzSkgtfv7ai6tEi7Ko8GgjNXts7VLWEqrTWyhsOKLe5C5b/Zkg== +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== dependencies: - async "2.6.1" + async "^3.2.0" getpass@^0.1.1: version "0.1.7" @@ -6348,17 +5948,17 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.5, glob@^7.1.6: version "7.1.7" @@ -6372,48 +5972,12 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.5, gl once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: +global-dirs@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" + ini "2.0.0" globals@^11.1.0, globals@^11.12.0: version "11.12.0" @@ -6434,12 +5998,7 @@ globals@^13.6.0: dependencies: type-fest "^0.20.2" -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - -globby@^11.0.1: +globby@^11.0.1, globby@^11.0.2, globby@^11.0.3: version "11.0.3" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== @@ -6462,33 +6021,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -6517,13 +6050,12 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gzip-size@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== dependencies: - duplexer "^0.1.1" - pify "^4.0.1" + duplexer "^0.1.2" handle-thing@^2.0.0: version "2.0.1" @@ -6535,7 +6067,7 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0, har-validator@~5.1.3: +har-validator@~5.1.3: version "5.1.5" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== @@ -6606,22 +6138,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - hash-sum@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" @@ -6632,15 +6155,7 @@ hash-sum@^2.0.0: resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.x, he@^1.1.0, he@^1.1.1: +he@1.2.x, he@^1.1.0, he@^1.1.1, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -6655,15 +6170,6 @@ highlight.js@^10.7.1: resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.2.tgz#89319b861edc66c48854ed1e6da21ea89f847360" integrity sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg== -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -6671,18 +6177,6 @@ hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -6708,12 +6202,12 @@ hsla-regex@^1.0.0: resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== dependencies: - whatwg-encoding "^1.0.1" + whatwg-encoding "^1.0.5" html-entities@^1.3.1: version "1.4.0" @@ -6725,6 +6219,19 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + html-minifier@^3.2.3: version "3.5.21" resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" @@ -6761,6 +6268,17 @@ html-webpack-plugin@^3.2.0: toposort "^1.0.0" util.promisify "1.0.0" +html-webpack-plugin@^5.1.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz#8797327548e3de438e3494e0c6d06f181a7f20d1" + integrity sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + html-minifier-terser "^5.0.1" + lodash "^4.17.20" + pretty-error "^2.1.1" + tapable "^2.0.0" + htmlparser2@^3.10.1, htmlparser2@^3.8.3: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" @@ -6854,16 +6372,16 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -6871,29 +6389,17 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@^1.1.4: +ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.3, ignore@^4.0.6: +ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== @@ -6908,21 +6414,6 @@ image-size@^0.5.1: resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -6931,13 +6422,6 @@ import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -6946,18 +6430,19 @@ import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" @@ -6973,11 +6458,6 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -6986,30 +6466,30 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@^7.0.0, inquirer@^7.1.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== +inquirer@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.0.0.tgz#957a46db1abcf0fdd2ab82deb7470e90afc7d0ac" + integrity sha512-ON8pEJPPCdyjxj+cxsYRe6XfCJepTxANdNnTebsTuQgXpRyZRRT9t4dJwjRubgmvn20CLSEnozRUayXyM9VTXA== dependencies: ansi-escapes "^4.2.1" chalk "^4.1.0" @@ -7017,10 +6497,10 @@ inquirer@^7.0.0, inquirer@^7.1.0: cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.19" + lodash "^4.17.21" mute-stream "0.0.8" run-async "^2.4.0" - rxjs "^6.6.0" + rxjs "^6.6.6" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" @@ -7033,23 +6513,16 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== intersection-observer@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.12.0.tgz#6c84628f67ce8698e5f9ccf857d97718745837aa" integrity sha512-2Vkz8z46Dv401zTWudDGwO7KiGHNDkMv417T5ItcNYfmvHR/1qCTVBO9vwH8zZmQ0WkA/1ARwpysR9bsnop4NQ== -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -7065,11 +6538,6 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - is-absolute-url@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" @@ -7137,12 +6605,12 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: +is-callable@^1.1.4, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== -is-ci@1.2.1, is-ci@^1.0.10: +is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== @@ -7156,7 +6624,14 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-color-stop@^1.0.0: +is-ci@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" + integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== + dependencies: + ci-info "^3.1.1" + +is-color-stop@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= @@ -7212,12 +6687,7 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: +is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== @@ -7239,10 +6709,12 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== +is-file-esm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-file-esm/-/is-file-esm-1.0.0.tgz#987086b0f5a5318179e9d30f4f2f8d37321e1b5f" + integrity sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA== + dependencies: + read-pkg-up "^7.0.1" is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -7280,13 +6752,18 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= +is-installed-globally@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-module@^1.0.0: version "1.0.0" @@ -7325,6 +6802,13 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== + dependencies: + symbol-observable "^1.1.0" + is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -7337,13 +6821,6 @@ is-path-in-cwd@^2.0.0: dependencies: is-path-inside "^2.1.0" -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" @@ -7351,7 +6828,12 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^1.0.0, is-plain-obj@^1.1: +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -7368,6 +6850,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-potential-custom-element-name@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-promise@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" @@ -7386,7 +6873,7 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-resolvable@^1.0.0: +is-resolvable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== @@ -7413,11 +6900,16 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-valid-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" @@ -7428,7 +6920,7 @@ is-whitespace@^0.3.0: resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -7438,14 +6930,14 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.1.1: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -7472,50 +6964,46 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" -istanbul-lib-report@^2.0.4: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" -istanbul-lib-source-maps@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== dependencies: debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" + istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" - integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== dependencies: html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" iterall@^1.2.2: version "1.3.0" @@ -7527,68 +7015,59 @@ javascript-stringify@^2.0.1: resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== -jest-changed-files@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" - integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== dependencies: - "@jest/types" "^24.9.0" - execa "^1.0.0" - throat "^4.0.0" + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" -jest-cli@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" - integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== dependencies: - "@jest/core" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" exit "^0.1.2" - import-local "^2.0.0" + graceful-fs "^4.2.4" + import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^13.3.0" + yargs "^15.4.1" -jest-config@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" - integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.9.0" - "@jest/types" "^24.9.0" - babel-jest "^24.9.0" - chalk "^2.0.1" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" glob "^7.1.1" - jest-environment-jsdom "^24.9.0" - jest-environment-node "^24.9.0" - jest-get-type "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - micromatch "^3.1.10" - pretty-format "^24.9.0" - realpath-native "^1.1.0" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" -jest-diff@^24.3.0, jest-diff@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" - integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== - dependencies: - chalk "^2.0.1" - diff-sequences "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - -jest-diff@^26.0.0: +jest-diff@^26.0.0, jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== @@ -7598,109 +7077,98 @@ jest-diff@^26.0.0: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-docblock@^24.3.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" - integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== dependencies: - detect-newline "^2.1.0" + detect-newline "^3.0.0" -jest-each@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" - integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== dependencies: - "@jest/types" "^24.9.0" - chalk "^2.0.1" - jest-get-type "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" -jest-environment-jsdom-fifteen@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom-fifteen/-/jest-environment-jsdom-fifteen-1.0.2.tgz#49a0af55e0d32737a6114a1575dd714702ad63b0" - integrity sha512-nfrnAfwklE1872LIB31HcjM65cWTh1wzvMSp10IYtPJjLDUbTTvDpajZgIxUnhRmzGvogdHDayCIlerLK0OBBg== +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== dependencies: - "@jest/environment" "^24.3.0" - "@jest/fake-timers" "^24.3.0" - "@jest/types" "^24.3.0" - jest-mock "^24.0.0" - jest-util "^24.0.0" - jsdom "^15.2.1" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" -jest-environment-jsdom@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" - integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - jsdom "^11.5.1" - -jest-environment-node@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" - integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== - dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" jest-get-type@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.9.0" - micromatch "^3.1.10" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" optionalDependencies: - fsevents "^1.2.7" + fsevents "^2.1.2" -jest-jasmine2@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" - integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" co "^4.6.0" - expect "^24.9.0" + expect "^26.6.2" is-generator-fn "^2.0.0" - jest-each "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - throat "^4.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" jest-junit@^12.0.0: version "12.0.0" @@ -7712,128 +7180,138 @@ jest-junit@^12.0.0: uuid "^3.3.3" xml "^1.0.1" -jest-leak-detector@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" - integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== dependencies: - jest-get-type "^24.9.0" - pretty-format "^24.9.0" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-matcher-utils@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" - integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== dependencies: - chalk "^2.0.1" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" -jest-mock@^24.0.0, jest-mock@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" - integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== dependencies: - "@jest/types" "^24.9.0" + "@jest/types" "^26.6.2" + "@types/node" "*" -jest-pnp-resolver@^1.2.1: +jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" - integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-resolve-dependencies@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" - integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== dependencies: - "@jest/types" "^24.9.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.9.0" + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" -jest-resolve@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" - integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== dependencies: - "@jest/types" "^24.9.0" - browser-resolve "^1.11.3" - chalk "^2.0.1" - jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" -jest-runner@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" - integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.4.2" + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-docblock "^24.3.0" - jest-haste-map "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-leak-detector "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" source-map-support "^0.5.6" - throat "^4.0.0" + throat "^5.0.0" -jest-runtime@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" - integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - chalk "^2.0.1" + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^13.3.0" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" jest-serializer-vue@^2.0.2: version "2.0.2" @@ -7842,113 +7320,126 @@ jest-serializer-vue@^2.0.2: dependencies: pretty "2.0.0" -jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" -jest-snapshot@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" - integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - expect "^24.9.0" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - mkdirp "^0.5.1" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" natural-compare "^1.4.0" - pretty-format "^24.9.0" - semver "^6.2.0" + pretty-format "^26.6.2" + semver "^7.3.2" jest-transform-stub@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz#19018b0851f7568972147a5d60074b55f0225a7d" integrity sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg== -jest-util@^24.0.0, jest-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" - integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== +jest-util@^26.1.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== dependencies: - "@jest/console" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/source-map" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" + micromatch "^4.0.2" -jest-validate@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== dependencies: - "@jest/types" "^24.9.0" - camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^24.9.0" + pretty-format "^26.6.2" -jest-watch-typeahead@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz#e5be959698a7fa2302229a5082c488c3c8780a4a" - integrity sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q== +jest-watch-typeahead@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.3.tgz#26efa37da39a46d8ff417b9e4badc8176a698016" + integrity sha512-rM+2m2U/7o4VeXxA3rcEWbbKq8K/aGjAwCgmqsthPV1AqLb5NNACzS+tDCD11bdQ8MrN+H3uN61Y9qFiJgtZPw== dependencies: - ansi-escapes "^4.2.1" - chalk "^2.4.1" - jest-regex-util "^24.9.0" - jest-watcher "^24.3.0" + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^26.0.0" + jest-watcher "^26.3.0" slash "^3.0.0" - string-length "^3.1.0" - strip-ansi "^5.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" -jest-watcher@^24.3.0, jest-watcher@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" - integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== +jest-watcher@^26.3.0, jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== dependencies: - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - jest-util "^24.9.0" - string-length "^2.0.0" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" -jest-worker@^24.6.0, jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== +jest-worker@^26.2.1, jest-worker@^26.3.0, jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: + "@types/node" "*" merge-stream "^2.0.0" - supports-color "^6.1.0" + supports-color "^7.0.0" -jest@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" - integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== +jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== dependencies: - import-local "^2.0.0" - jest-cli "^24.9.0" + "@jest/core" "^26.6.3" + import-local "^3.0.2" + jest-cli "^26.6.3" + +joi@^17.4.0: + version "17.4.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.0.tgz#b5c2277c8519e016316e49ababd41a1908d9ef20" + integrity sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.0" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" js-base64@^2.1.9: version "2.6.4" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== -js-beautify@^1.6.12, js-beautify@^1.6.14: +js-beautify@^1.6.12: version "1.13.13" resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.13.13.tgz#756907d1728f329f2b84c42efd56ad17514620bf" integrity sha512-oH+nc0U5mOAqX8M5JO1J0Pw/7Q35sAdOsM5W3i87pir9Ntx6P/5Gx1xLNoK+MGyvHk4rqqRCE4Oq58H6xl2W7A== @@ -7976,11 +7467,6 @@ js-queue@2.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - js-yaml@^3.13.1, js-yaml@^3.14.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -7994,68 +7480,36 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== +jsdom@^16.4.0: + version "16.5.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136" + integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA== dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - -jsdom@^15.2.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== - dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" + abab "^2.0.5" + acorn "^8.1.0" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" nwsapi "^2.2.0" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" + parse5 "6.0.1" + request "^2.88.2" + request-promise-native "^1.0.9" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" + whatwg-url "^8.5.0" + ws "^7.4.4" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -8115,7 +7569,7 @@ json5@2.x, json5@^2.1.2: dependencies: minimist "^1.2.5" -json5@^0.5.0, json5@^0.5.1: +json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= @@ -8127,13 +7581,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -8187,6 +7634,11 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +klona@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + launch-editor-middleware@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" @@ -8202,7 +7654,7 @@ launch-editor@^2.2.1: chalk "^2.3.0" shell-quote "^1.6.1" -lazy-ass@1.6.0: +lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= @@ -8217,24 +7669,11 @@ leaflet@^1.4.0: resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.7.1.tgz#10d684916edfe1bf41d688a3b97127c0322a2a19" integrity sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw== -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -8243,6 +7682,14 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -8253,10 +7700,10 @@ listr-silent-renderer@^1.1.1: resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= -listr-update-renderer@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" - integrity sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk= +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" @@ -8264,40 +7711,33 @@ listr-update-renderer@^0.2.0: figures "^1.7.0" indent-string "^3.0.0" log-symbols "^1.0.2" - log-update "^1.0.2" + log-update "^2.3.0" strip-ansi "^3.0.1" -listr-verbose-renderer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" - integrity sha1-ggb0z21S3cWCfl/RSYng6WWTOjU= +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" + chalk "^2.4.1" + cli-cursor "^2.1.0" date-fns "^1.27.2" - figures "^1.7.0" + figures "^2.0.0" -listr@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" - integrity sha1-a84sD1YD+klYDqF81qAMwOX6RRo= +listr@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - figures "^1.7.0" - indent-string "^2.1.0" + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" is-promise "^2.1.0" is-stream "^1.1.0" listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.2.0" - listr-verbose-renderer "^0.4.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - ora "^0.2.3" - p-map "^1.1.1" - rxjs "^5.0.0-beta.11" - stream-to-observable "^0.1.0" - strip-ansi "^3.0.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" load-json-file@^4.0.0: version "4.0.0" @@ -8309,18 +7749,10 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-fs-cache@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" - integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== - dependencies: - find-cache-dir "^0.1.1" - mkdirp "^0.5.1" - -loader-runner@^2.3.1, loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== +loader-runner@^4.1.0, loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== loader-utils@^0.2.16: version "0.2.17" @@ -8373,11 +7805,6 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -8403,7 +7830,7 @@ lodash.mapvalues@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= -lodash.memoize@4.x, lodash.memoize@^4.1.2: +lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= @@ -8423,26 +7850,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.transform@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" - integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -8453,23 +7860,11 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.17.4: +lodash@4.x, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@2.2.0, log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -8477,13 +7872,22 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" -log-update@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" - integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE= +log-symbols@^4.0.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" loglevel-colored-level-prefix@^1.0.0: version "1.0.0" @@ -8498,7 +7902,7 @@ loglevel@^1.4.1, loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== -loose-envify@^1.0.0, loose-envify@^1.4.0: +loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -8510,6 +7914,13 @@ lower-case@^1.1.1: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lru-cache@^4.0.1, lru-cache@^4.1.2, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -8518,13 +7929,6 @@ lru-cache@^4.0.1, lru-cache@^4.1.2, lru-cache@^4.1.5: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -8539,15 +7943,7 @@ magic-string@^0.25.0, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.4" -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -8578,15 +7974,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -8649,7 +8036,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -8659,11 +8046,6 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -microevent.ts@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" - integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== - micromatch@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.0.tgz#5102d4eaf20b6997d6008e3acfe1c44a3fa815e2" @@ -8683,7 +8065,7 @@ micromatch@3.1.0: snapdragon "^0.8.1" to-regex "^3.0.1" -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -8710,20 +8092,12 @@ micromatch@^4.0.0, micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.2.3" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": version "1.47.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.30" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== @@ -8735,7 +8109,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.4: +mime@^2.3.1, mime@^2.4.4: version "2.5.2" resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== @@ -8750,26 +8124,20 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" - integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== +mini-css-extract-plugin@^1.3.7: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz#b4db2525af2624899ed64a23b0016e0036411893" + integrity sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw== dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" + loader-utils "^2.0.0" + schema-utils "^3.0.0" webpack-sources "^1.1.0" -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: +minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -8777,16 +8145,6 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -8799,22 +8157,6 @@ minipass@^3.1.1: dependencies: yallist "^4.0.0" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - mitt@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.1.2.tgz#380e61480d6a615b660f07abb60d51e0a4e4bed6" @@ -8828,46 +8170,27 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" +mkdirp@1.x, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mock-apollo-client@^0.6: version "0.6.0" resolved "https://registry.yarnpkg.com/mock-apollo-client/-/mock-apollo-client-0.6.0.tgz#ff1760f18798789931e421c6668bfc0e7f1f0649" integrity sha512-HPo6yVkAE+uxIpB8oPO9ISM86hFDwefrHKz5uOowecT/hR79e/NbXAl372LOQ1lWYVNVgCaP3RIMgWEhVFWtjw== -moment@2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" +module-alias@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0" + integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== ms@2.0.0: version "2.0.0" @@ -8921,6 +8244,11 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nanoid@^3.1.23: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== + nanomatch@^1.2.1, nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -8948,7 +8276,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -8970,18 +8298,18 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" -node-addon-api@^1.7.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" - integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== - -node-cache@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-4.2.1.tgz#efd8474dee4edec4138cdded580f5516500f7334" - integrity sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: - clone "2.x" - lodash "^4.17.15" + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== node-forge@^0.10.0: version "0.10.0" @@ -9002,50 +8330,22 @@ node-ipc@^9.1.1: js-message "1.0.7" js-queue "2.0.2" -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^5.4.2: - version "5.4.5" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.5.tgz#0cbc1a2b0f658493b4025775a13ad938e96091ef" - integrity sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ== +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== dependencies: growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" + is-wsl "^2.2.0" + semver "^7.3.2" shellwords "^0.1.1" - which "^1.3.0" + uuid "^8.3.0" + which "^2.0.2" node-releases@^1.1.71: version "1.1.72" @@ -9091,20 +8391,10 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== +normalize-url@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== npm-run-path@^2.0.0: version "2.0.2" @@ -9113,7 +8403,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -9127,17 +8417,19 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + dependencies: + boolbase "^1.0.0" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.7, nwsapi@^2.2.0: +nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== @@ -9161,11 +8453,6 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-hash@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" - integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== - object-inspect@^1.9.0: version "1.10.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" @@ -9201,7 +8488,7 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0, object.getownpropertydescriptors@^2.1.1: +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== @@ -9263,21 +8550,23 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -open@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== +open@^8.0.2: + version "8.0.9" + resolved "https://registry.yarnpkg.com/open/-/open-8.0.9.tgz#a7a739fed91dfa3734094255badbeabd71116a12" + integrity sha512-vbCrqMav3K8mCCy8NdK4teUky0tpDrBbuiDLduCdVhc5oA9toJMip9rBkuwdwSI9E7NOkz4VkLWPi8DD2MP1gQ== dependencies: - is-wsl "^1.1.0" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" -opener@^1.5.1: +opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -9304,7 +8593,7 @@ optimism@^0.16.0: "@wry/context" "^0.6.0" "@wry/trie" "^0.3.0" -optionator@^0.8.1, optionator@^0.8.3: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -9328,26 +8617,19 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" - integrity sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q= +ora@^5.3.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.0.tgz#42eda4855835b9cd14d33864c97a3c95a3f56bf4" + integrity sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg== dependencies: - chalk "^1.1.1" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - object-assign "^4.0.1" - -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" wcwidth "^1.0.1" orderedmap@^1.1.0: @@ -9362,43 +8644,31 @@ original@^1.0.0: dependencies: url-parse "^1.4.3" -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= + p-debounce@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-debounce/-/p-debounce-4.0.0.tgz#348e3f44489baa9435cc7d807f17b3bb2fb16b24" integrity sha512-4Ispi9I9qYGO4lueiLDhe4q4iK5ERK8reLsuzH6BPaXn53EGaua8H66PXIFGrW897hwjXp+pVLrm/DLxN0RF0A== -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -9406,13 +8676,20 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -9434,21 +8711,11 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -9466,20 +8733,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - param-case@2.1.x: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" @@ -9487,6 +8740,14 @@ param-case@2.1.x: dependencies: no-case "^2.2.0" +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -9494,17 +8755,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -9523,11 +8773,6 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - parse5-htmlparser2-tree-adapter@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" @@ -9535,53 +8780,39 @@ parse5-htmlparser2-tree-adapter@^6.0.0: dependencies: parse5 "^6.0.1" -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== - -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== +parse5@6.0.1, parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parse5@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -9597,7 +8828,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -9641,17 +8872,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -9706,13 +8926,6 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= - dependencies: - find-up "^1.0.0" - pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -9727,7 +8940,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -9741,18 +8954,6 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -pnp-webpack-plugin@^1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" - integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== - dependencies: - ts-pnp "^1.1.6" - popper.js@^1.16.1: version "1.16.1" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" @@ -9772,264 +8973,216 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== +postcss-calc@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.0.0.tgz#a05b87aacd132740a5db09462a3612453e5df90a" + integrity sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g== dependencies: - postcss "^7.0.27" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.0.2" -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== +postcss-colormin@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.0.0.tgz#283b8934c8bdbc531e7648aeb0970107f6d06d0e" + integrity sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ== dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + browserslist "^4.16.0" + color "^3.1.1" + postcss-value-parser "^4.1.0" -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== +postcss-convert-values@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.0.0.tgz#cd77e1d23ebe8fcf508640551eed08e232784cba" + integrity sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.1.0" -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" +postcss-discard-comments@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.0.0.tgz#6c27310e0657c0b9e38a6175ad001b5aa28964bc" + integrity sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ== -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" +postcss-discard-duplicates@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.0.tgz#6a2c4f779e8d20da6781e90730f234f9e650c51c" + integrity sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ== -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" +postcss-discard-empty@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.0.0.tgz#0f0a9baee415f5f7be4ae046ba235e98626ba821" + integrity sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ== -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" +postcss-discard-overridden@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.0.tgz#ac00f695a60001eda52135a11fac87376b8da9ee" + integrity sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg== -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== +postcss-loader@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-5.3.0.tgz#1657f869e48d4fdb018a40771c235e499ee26244" + integrity sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw== dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" + cosmiconfig "^7.0.0" + klona "^2.0.4" + semver "^7.3.4" -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== +postcss-merge-longhand@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.0.1.tgz#1a008ff72d14cd3e2f3d32accc2ad37948bcabf4" + integrity sha512-H1RO8le5deFGumQzuhJjuL0bIXPRysa+w7xtk5KrHe38oiaSS9ksPXDo24+IOS3SETPhip0J5+1uCOW+ALs3Yw== dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" + css-color-names "^1.0.1" + postcss-value-parser "^4.1.0" + stylehacks "^5.0.0" -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== +postcss-merge-rules@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.0.0.tgz#e0d0c0d45c98376f4adb49eb1f1dfe2aebfd7048" + integrity sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg== dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" + browserslist "^4.16.0" caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" + cssnano-utils "^2.0.0" + postcss-selector-parser "^6.0.4" + vendors "^1.0.3" -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== +postcss-minify-font-values@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.0.0.tgz#fee5d0fa192fae8757cb744870a0ad02be5f402e" + integrity sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.1.0" -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== +postcss-minify-gradients@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.0.0.tgz#95dbe61567a45c0cd7ab897d78fb65d5096844ed" + integrity sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg== dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + cssnano-utils "^2.0.0" + is-color-stop "^1.1.0" + postcss-value-parser "^4.1.0" -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== +postcss-minify-params@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.0.0.tgz#12c7f75d69b0b4827fafbd6649970a53784a9c24" + integrity sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug== dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + alphanum-sort "^1.0.2" + browserslist "^4.16.0" + cssnano-utils "^2.0.0" + postcss-value-parser "^4.1.0" uniqs "^2.0.0" -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== +postcss-minify-selectors@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.0.0.tgz#d3e43d97fd0ba83ba0010950fc5acfa420f7caa9" + integrity sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ== dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" + alphanum-sort "^1.0.2" + postcss-selector-parser "^3.1.2" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" + icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^3.0.0: +postcss-modules-scope@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" + postcss-selector-parser "^6.0.4" -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: - postcss "^7.0.0" + icss-utils "^5.0.0" -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" +postcss-normalize-charset@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.0.0.tgz#59e1fe2094fb2e3371cc5b054cbc39828a41a710" + integrity sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ== -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== +postcss-normalize-display-values@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.0.tgz#4ff2d3b3b5146a366de28ec9e24131a1868f1933" + integrity sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA== dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + cssnano-utils "^2.0.0" + postcss-value-parser "^4.1.0" -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== +postcss-normalize-positions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.0.0.tgz#fe1d9a8122dd385b9c6908bd2008140dea17750d" + integrity sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg== dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.1.0" -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== +postcss-normalize-repeat-style@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.0.tgz#e11d88fbf63f89179c6a7391853b2fe7f46e589d" + integrity sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ== dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + cssnano-utils "^2.0.0" + postcss-value-parser "^4.1.0" -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== +postcss-normalize-string@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.0.0.tgz#2ea08ff4cb8817ce160755e9fdc7e6ef6d495002" + integrity sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw== dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.1.0" -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== +postcss-normalize-timing-functions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.0.tgz#380eb1c9b179f96efc307c659a8049116f16f381" + integrity sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q== dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + cssnano-utils "^2.0.0" + postcss-value-parser "^4.1.0" -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== +postcss-normalize-unicode@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.0.tgz#aa46a89c86ae51a01cbca13e73c1ed7b0b38807e" + integrity sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A== dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + browserslist "^4.16.0" + postcss-value-parser "^4.1.0" -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== +postcss-normalize-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.0.0.tgz#626a4c7d30007f94466cdf245e7ed9f253f1dbd9" + integrity sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + is-absolute-url "^3.0.3" + normalize-url "^4.5.0" + postcss-value-parser "^4.1.0" -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== +postcss-normalize-whitespace@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.0.tgz#1faf147a4f8d3d93a3c75109d120b4eefa00589b" + integrity sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA== dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.1.0" + +postcss-ordered-values@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.0.0.tgz#a50f224c5f40c566b338b0663655478737dcebee" + integrity sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g== + dependencies: + cssnano-utils "^2.0.0" + postcss-value-parser "^4.1.0" postcss-prefix-selector@^1.6.0: version "1.9.0" @@ -10038,27 +9191,23 @@ postcss-prefix-selector@^1.6.0: dependencies: postcss "^7.0.0" -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== +postcss-reduce-initial@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.0.0.tgz#c724e5513b0ae7f3d7bff16f0fc82133fb2f820a" + integrity sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA== dependencies: - browserslist "^4.0.0" + browserslist "^4.16.0" caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== +postcss-reduce-transforms@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.0.tgz#5c820f71fbd4eec82b323523642b7b2d1c7d29ef" + integrity sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw== dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + cssnano-utils "^2.0.0" + postcss-value-parser "^4.1.0" -postcss-selector-parser@^3.0.0: +postcss-selector-parser@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== @@ -10067,7 +9216,7 @@ postcss-selector-parser@^3.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.6" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== @@ -10075,29 +9224,23 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== +postcss-svgo@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.0.tgz#c8d806e573394ab24f1e233cac5be4c199e9f1b2" + integrity sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" + postcss-value-parser "^4.1.0" + svgo "^2.3.0" -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== +postcss-unique-selectors@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.0.0.tgz#17856278f6c38d024defc9694d568bb09dd7f771" + integrity sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w== dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" + alphanum-sort "^1.0.2" + postcss-selector-parser "^6.0.2" uniqs "^2.0.0" -postcss-value-parser@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" @@ -10113,7 +9256,7 @@ postcss@^5.2.17: source-map "^0.5.6" supports-color "^3.2.3" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7.0.0, postcss@^7.0.14: version "7.0.35" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== @@ -10122,6 +9265,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.3 source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.2.10, postcss@^8.2.6, postcss@^8.2.9: + version "8.2.15" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.15.tgz#9e66ccf07292817d226fc315cbbf9bc148fbca65" + integrity sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.23" + source-map "^0.6.1" + posthtml-parser@^0.2.0, posthtml-parser@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.2.1.tgz#35d530de386740c2ba24ff2eb2faf39ccdf271dd" @@ -10170,11 +9322,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - prettier-eslint@^12.0.0: version "12.0.0" resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-12.0.0.tgz#b4dab5111aad1c0dca062eb7f92a69d5fb1ac1d3" @@ -10210,12 +9357,12 @@ prettier@^2.0.0, prettier@^2.2.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18" integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== -pretty-bytes@^5.3.0: +pretty-bytes@^5.3.0, pretty-bytes@^5.4.1, pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-error@^2.0.2: +pretty-error@^2.0.2, pretty-error@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== @@ -10231,16 +9378,6 @@ pretty-format@^23.0.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== - dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - pretty-format@^26.0.0, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" @@ -10265,21 +9402,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - prompts@^2.0.1: version "2.4.1" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" @@ -10412,31 +9539,11 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24, psl@^1.1.28: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -10445,25 +9552,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -10484,7 +9577,7 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@^4.1.0, query-string@^4.3.2: +query-string@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= @@ -10492,11 +9585,6 @@ query-string@^4.1.0, query-string@^4.3.2: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -10512,26 +9600,18 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -ramda@0.24.1: - version "0.24.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" - integrity sha1-w7d1UZfzW43DUCIoJixMkd22uFc= +ramda@~0.27.1: + version "0.27.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" + integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -10547,7 +9627,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4: +react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -10565,13 +9645,14 @@ read-pkg-up@^3.0.0: find-up "^2.0.0" read-pkg "^3.0.0" -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" read-pkg@^3.0.0: version "3.0.0" @@ -10582,7 +9663,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^5.1.1: +read-pkg@^5.1.1, read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== @@ -10592,7 +9673,7 @@ read-pkg@^5.1.1: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -10605,7 +9686,7 @@ read-pkg@^5.1.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -10630,12 +9711,12 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== +rechoir@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" + integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== dependencies: - util.promisify "^1.0.0" + resolve "^1.9.0" regenerate-unicode-properties@^8.2.0: version "8.2.0" @@ -10692,11 +9773,6 @@ regexp.prototype.flags@^1.2.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - regexpp@^3.0.0, regexpp@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" @@ -10714,7 +9790,7 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" -register-service-worker@^1.7.1: +register-service-worker@^1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/register-service-worker/-/register-service-worker-1.7.2.tgz#6516983e1ef790a98c4225af1216bc80941a4bd2" integrity sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A== @@ -10731,7 +9807,7 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" -relateurl@0.2.x: +relateurl@0.2.x, relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= @@ -10762,14 +9838,7 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request-progress@3.0.0: +request-progress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= @@ -10783,7 +9852,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.5, request-promise-native@^1.0.7: +request-promise-native@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== @@ -10792,33 +9861,7 @@ request-promise-native@^1.0.5, request-promise-native@^1.0.7: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -request@^2.87.0, request@^2.88.0, request@^2.88.2: +request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -10876,13 +9919,12 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" + resolve-from "^5.0.0" resolve-from@^3.0.0: version "3.0.0" @@ -10894,17 +9936,17 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@1.x, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.3.2: +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -10961,69 +10003,36 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-babel@^4.3.3: - version "4.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" - integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.8.1" - -rollup-plugin-terser@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" - integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== - dependencies: - "@babel/code-frame" "^7.5.5" - jest-worker "^24.9.0" - rollup-pluginutils "^2.8.2" + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" serialize-javascript "^4.0.0" - terser "^4.6.2" + terser "^5.0.0" -rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^1.31.1: - version "1.32.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" - integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== - dependencies: - "@types/estree" "*" - "@types/node" "*" - acorn "^7.1.0" +rollup@^2.43.1: + version "2.48.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.48.0.tgz#fceb01ed771f991f29f7bd2ff7838146e55acb74" + integrity sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A== + optionalDependencies: + fsevents "~2.3.1" rope-sequence@^1.3.0: version "1.3.2" @@ -11047,21 +10056,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^5.0.0-beta.11: - version "5.5.12" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" - integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== - dependencies: - symbol-observable "1.0.1" - -rxjs@^6.6.0: +rxjs@^6.3.3, rxjs@^6.6.6: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -11080,7 +10075,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -11130,17 +10125,17 @@ sass@^1.29.0: dependencies: chokidar ">=3.0.0 <4.0.0" -sax@^1.2.4, sax@~1.2.4: +sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: - xmlchars "^2.1.1" + xmlchars "^2.2.0" schema-utils@2.7.0: version "2.7.0" @@ -11160,7 +10155,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.7.0: +schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -11169,6 +10164,15 @@ schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6 ajv "^6.12.4" ajv-keywords "^3.5.2" +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -11181,7 +10185,7 @@ selfsigned@^1.10.8: dependencies: node-forge "^0.10.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -11191,18 +10195,18 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1, semver@^7.3.2: +semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -11229,6 +10233,13 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -11267,11 +10278,6 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -11282,14 +10288,6 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -11336,7 +10334,7 @@ sigmund@^1.0.1: resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -11348,21 +10346,20 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +sirv@^1.0.7: + version "1.0.11" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.11.tgz#81c19a29202048507d6ec0d8ba8910fda52eb5a4" + integrity sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg== + dependencies: + "@polka/url" "^1.0.0-next.9" + mime "^2.3.1" + totalist "^1.0.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -11373,15 +10370,6 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -11442,19 +10430,12 @@ sockjs@^0.3.21: uuid "^3.4.0" websocket-driver "^0.7.4" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - sortablejs@1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.10.2.tgz#6e40364d913f98b85a14f6678f92b5c1221f5290" integrity sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A== -source-list-map@^2.0.0: +source-list-map@^2.0.0, source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== @@ -11470,7 +10451,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -11483,6 +10464,11 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= + source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -11493,11 +10479,18 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: +source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -11579,13 +10572,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" @@ -11598,10 +10584,10 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== dependencies: escape-string-regexp "^2.0.0" @@ -11628,63 +10614,18 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -stream-to-observable@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" - integrity sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4= - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== - dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" + char-regex "^1.0.2" + strip-ansi "^6.0.0" string-width@^1.0.1: version "1.0.2" @@ -11695,7 +10636,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: +string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -11737,7 +10678,7 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.0.0, string_decoder@^1.1.1: +string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -11793,13 +10734,15 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= -strip-comments@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" - integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw== - dependencies: - babel-extract-comments "^1.0.0" - babel-plugin-transform-object-rest-spread "^6.26.0" +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== strip-eof@^1.0.0: version "1.0.0" @@ -11816,31 +10759,18 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= -strip-json-comments@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== +stylehacks@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.0.tgz#c49b0b2cf9917fe37dc030b96a4c34698b932933" + integrity sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA== dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -supports-color@5.5.0, supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" + browserslist "^4.16.0" + postcss-selector-parser "^6.0.4" supports-color@^2.0.0: version "2.0.0" @@ -11854,6 +10784,13 @@ supports-color@^3.2.3: dependencies: has-flag "^1.0.0" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" @@ -11861,13 +10798,28 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + svg-baker-runtime@^1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz#f4720637f5b6202eef6378d81f1fead0815f8a4e" @@ -11923,7 +10875,7 @@ svg-to-vue@^0.4.0: dependencies: svgo "^1.1.1" -svgo@^1.0.0, svgo@^1.1.1: +svgo@^1.1.1: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== @@ -11942,12 +10894,20 @@ svgo@^1.0.0, svgo@^1.1.1: unquote "~1.1.1" util.promisify "~1.0.0" -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= +svgo@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.3.0.tgz#6b3af81d0cbd1e19c83f5f63cec2cb98c70b5373" + integrity sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q== + dependencies: + "@trysound/sax" "0.1.1" + chalk "^4.1.0" + commander "^7.1.0" + css-select "^3.1.2" + css-tree "^1.1.2" + csso "^4.2.0" + stable "^0.1.8" -symbol-observable@^1.0.2: +symbol-observable@^1.0.2, symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -11957,21 +10917,11 @@ symbol-observable@^2.0.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== -symbol-tree@^3.2.2: +symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - table@^6.0.4: version "6.7.1" resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" @@ -11984,41 +10934,52 @@ table@^6.0.4: string-width "^4.2.0" strip-ansi "^6.0.0" -tapable@^1.0.0, tapable@^1.1.3: +tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== -tempy@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" - integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== - dependencies: - temp-dir "^1.0.0" - type-fest "^0.3.1" - unique-string "^1.0.0" +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== -terser-webpack-plugin@^1.4.3, terser-webpack-plugin@^1.4.4: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz#51d295eb7cc56785a67a372575fdc46e42d5c20c" + integrity sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q== + dependencies: + jest-worker "^26.6.2" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" + terser "^5.7.0" -terser@^4.1.2, terser@^4.6.2: +terser@^4.6.3: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -12027,15 +10988,23 @@ terser@^4.1.2, terser@^4.6.2: source-map "~0.6.1" source-map-support "~0.5.12" -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== +terser@^5.0.0, terser@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" + integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== dependencies: - glob "^7.1.3" + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" text-table@^0.2.0: version "0.2.0" @@ -12056,19 +11025,21 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -thread-loader@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" - integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg== +thread-loader@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-3.0.4.tgz#c392e4c0241fbc80430eb680e4886819b504a31b" + integrity sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA== dependencies: - loader-runner "^2.3.1" - loader-utils "^1.1.0" - neo-async "^2.6.0" + json-parse-better-errors "^1.0.2" + loader-runner "^4.1.0" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== throttle-debounce@^2.1.0: version "2.3.0" @@ -12080,14 +11051,6 @@ throttleit@^1.0.0: resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -12098,13 +11061,6 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" @@ -12117,13 +11073,6 @@ tippy.js@^6.2.3, tippy.js@^6.3.1: dependencies: "@popperjs/core" "^2.8.3" -tmp@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== - dependencies: - rimraf "^2.6.3" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -12131,21 +11080,18 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -12193,7 +11139,12 @@ toposort@^1.0.0: resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= -tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -12201,22 +11152,14 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" + universalify "^0.1.2" tr46@^1.0.1: version "1.0.1" @@ -12225,16 +11168,18 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + traverse@^0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - ts-invariant@^0.4.0: version "0.4.4" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" @@ -12249,37 +11194,32 @@ ts-invariant@^0.7.0: dependencies: tslib "^2.1.0" -ts-jest@^24.2.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869" - integrity sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ== +ts-jest@^26.5.3: + version "26.5.6" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" + integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== dependencies: bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" + jest-util "^26.1.0" json5 "2.x" - lodash.memoize "4.x" + lodash "4.x" make-error "1.x" - mkdirp "0.x" - resolve "1.x" - semver "^5.5" - yargs-parser "10.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "20.x" -ts-loader@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58" - integrity sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ== +ts-loader@^8.0.17: + version "8.3.0" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.3.0.tgz#83360496d6f8004fab35825279132c93412edf33" + integrity sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag== dependencies: - chalk "^2.3.0" + chalk "^4.1.0" enhanced-resolve "^4.0.0" - loader-utils "^1.0.2" + loader-utils "^2.0.0" micromatch "^4.0.0" - semver "^6.0.0" - -ts-pnp@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" - integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + semver "^7.3.4" tsconfig-paths@^3.9.0: version "3.9.0" @@ -12291,52 +11231,16 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" -tsconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" - integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== - dependencies: - "@types/strip-bom" "^3.0.0" - "@types/strip-json-comments" "0.0.30" - strip-bom "^3.0.0" - strip-json-comments "^2.0.0" - -tslib@^1.10.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0: +tslib@^2.0.3, tslib@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== -tslint@^5.20.1: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - tsutils@^3.17.1: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -12344,11 +11248,6 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -12375,6 +11274,16 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -12385,11 +11294,6 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -12408,6 +11312,13 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -12494,28 +11405,14 @@ uniqs@^2.0.0: resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: - unique-slug "^2.0.0" + crypto-random-string "^2.0.0" -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -universalify@^0.1.0: +universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -12543,12 +11440,12 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -untildify@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" - integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA== +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: +upath@^1.1.1, upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== @@ -12570,7 +11467,7 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-loader@^2.0.0, url-loader@^2.2.0: +url-loader@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== @@ -12579,6 +11476,15 @@ url-loader@^2.0.0, url-loader@^2.2.0: mime "^2.4.4" schema-utils "^2.5.0" +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + url-parse@^1.4.3, url-parse@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" @@ -12594,7 +11500,7 @@ url-slug@2.0.0: dependencies: unidecode "0.1.8" -url@0.11.0, url@^0.11.0: +url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -12620,17 +11526,6 @@ util.promisify@1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util.promisify@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" - integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" - util.promisify@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" @@ -12641,20 +11536,6 @@ util.promisify@~1.0.0: has-symbols "^1.0.1" object.getownpropertydescriptors "^2.1.0" -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -12670,6 +11551,11 @@ uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v-tooltip@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/v-tooltip/-/v-tooltip-2.1.3.tgz#281c2015d1e73787f13c8956aa295b8c3a73f261" @@ -12680,11 +11566,20 @@ v-tooltip@^2.1.3: popper.js "^1.16.1" vue-resize "^1.0.1" -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: +v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +v8-to-istanbul@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" + integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -12698,7 +11593,7 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -vendors@^1.0.0: +vendors@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== @@ -12712,11 +11607,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - vue-apollo@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/vue-apollo/-/vue-apollo-3.0.7.tgz#97a031d45641faa4888a6d5a7f71c40834359704" @@ -12742,7 +11632,7 @@ vue-cli-plugin-svg@~0.1.3: url-loader "^2.0.0" vue-svg-loader "^0.12.0" -vue-eslint-parser@^7.0.0: +vue-eslint-parser@^7.0.0, vue-eslint-parser@^7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz#01ea1a2932f581ff244336565d712801f8f72561" integrity sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA== @@ -12787,33 +11677,18 @@ vue-i18n@^8.14.0: resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.24.4.tgz#b158614c1df7db183d9cadddbb73e1d540269492" integrity sha512-RZE94WUAGxEiBAANxQ0pptbRwDkNKNSXl3fnJslpFOxVMF6UkUtMDSuYGuW2blDrVgweIXVpethOVkYoNNT9xw== -vue-jest@^3.0.5: - version "3.0.7" - resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.7.tgz#a6d29758a5cb4d750f5d1242212be39be4296a33" - integrity sha512-PIOxFM+wsBMry26ZpfBvUQ/DGH2hvp5khDQ1n51g3bN0TwFwTy4J85XVfxTRMukqHji/GnAoGUnlZ5Ao73K62w== +vue-jest@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-4.0.1.tgz#683efc351c24456865b1356bae69d5bb663dafb5" + integrity sha512-4jewjN8HVgpIW0ZdEwzCWz5vcRLIs1PxMs+5IqJ/6f9KRbEQ+DEqEKHUzIjoNzW2UJOUYBZzWpBnVHakpc/k5w== dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.26.0" + "@babel/plugin-transform-modules-commonjs" "^7.2.0" + "@vue/component-compiler-utils" "^3.1.0" chalk "^2.1.0" - deasync "^0.1.15" extract-from-css "^0.4.4" - find-babel-config "^1.1.0" - js-beautify "^1.6.14" - node-cache "^4.1.1" - object-assign "^4.1.1" - source-map "^0.5.6" - tsconfig "^7.0.0" - vue-template-es2015-compiler "^1.6.0" + source-map "0.5.6" -"vue-loader-v16@npm:vue-loader@^16.1.0": - version "16.2.0" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-16.2.0.tgz#046a53308dd47e58efe20ddec1edec027ce3b46e" - integrity sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q== - dependencies: - chalk "^4.1.0" - hash-sum "^2.0.0" - loader-utils "^2.0.0" - -vue-loader@^15.9.2: +"vue-loader-v15@npm:vue-loader@^15.9.6": version "15.9.7" resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.7.tgz#15b05775c3e0c38407679393c2ce6df673b01044" integrity sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q== @@ -12824,6 +11699,15 @@ vue-loader@^15.9.2: vue-hot-reload-api "^2.3.0" vue-style-loader "^4.1.0" +vue-loader@^16.1.2: + version "16.2.0" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-16.2.0.tgz#046a53308dd47e58efe20ddec1edec027ce3b46e" + integrity sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q== + dependencies: + chalk "^4.1.0" + hash-sum "^2.0.0" + loader-utils "^2.0.0" + vue-meta@^2.3.1: version "2.4.0" resolved "https://registry.yarnpkg.com/vue-meta/-/vue-meta-2.4.0.tgz#a419fb4b4135ce965dab32ec641d1989c2ee4845" @@ -12855,7 +11739,7 @@ vue-scrollto@^2.17.1: dependencies: bezier-easing "2.1.0" -vue-style-loader@^4.1.0, vue-style-loader@^4.1.2: +vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== @@ -12879,7 +11763,7 @@ vue-template-compiler@^2.6.11: de-indent "^1.0.2" he "^1.1.0" -vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0: +vue-template-es2015-compiler@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== @@ -12901,7 +11785,7 @@ vuedraggable@^2.24.3: dependencies: sortablejs "1.10.2" -w3c-hr-time@^1.0.1: +w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== @@ -12913,13 +11797,11 @@ w3c-keyname@^2.2.0: resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.4.tgz#4ade6916f6290224cdbd1db8ac49eab03d0eef6b" integrity sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw== -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" walker@^1.0.7, walker@~1.0.5: @@ -12929,23 +11811,13 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== +watchpack@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" + integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== dependencies: + glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -12966,26 +11838,32 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-bundle-analyzer@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c" - integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - bfj "^6.1.1" - chalk "^2.4.1" - commander "^2.18.0" - ejs "^2.6.1" - express "^4.16.3" - filesize "^3.6.1" - gzip-size "^5.0.0" - lodash "^4.17.19" - mkdirp "^0.5.1" - opener "^1.5.1" - ws "^6.0.0" +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== -webpack-chain@^6.4.0: +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-bundle-analyzer@^4.4.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz#39898cf6200178240910d629705f0f3493f7d666" + integrity sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^6.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-chain@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== @@ -12993,22 +11871,24 @@ webpack-chain@^6.4.0: deepmerge "^1.5.2" javascript-stringify "^2.0.1" -webpack-cli@^3.3: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== +webpack-cli@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.7.0.tgz#3195a777f1f802ecda732f6c95d24c0004bc5a35" + integrity sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g== dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.0.3" + "@webpack-cli/info" "^1.2.4" + "@webpack-cli/serve" "^1.4.0" + colorette "^1.2.1" + commander "^7.0.0" + execa "^5.0.0" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + v8-compile-cache "^2.2.0" + webpack-merge "^5.7.3" webpack-dev-middleware@^3.7.2: version "3.7.3" @@ -13021,7 +11901,7 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@^3.11.0: +webpack-dev-server@^3.11.2: version "3.11.2" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== @@ -13068,14 +11948,15 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== +webpack-merge@^5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" + integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== dependencies: - lodash "^4.17.15" + clone-deep "^4.0.1" + wildcard "^2.0.0" -webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@^1.1.0, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -13083,34 +11964,47 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.0.0: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== +webpack-sources@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" + integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack-virtual-modules@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz#cd597c6d51d5a5ecb473eea1983a58fa8a17ded9" + integrity sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw== + +webpack@^5.22.0: + version "5.37.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.37.1.tgz#2deb5acd350583c1ab9338471f323381b0b0c14b" + integrity sha512-btZjGy/hSjCAAVHw+cKG+L0M+rstlyxbO2C+BOTaQ5/XAnxkDrP5sVbqWhXgo4pL3X2dcOib6rqCP20Zr9PLow== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.47" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/wasm-edit" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + acorn "^8.2.1" + browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" + enhanced-resolve "^5.8.0" + es-module-lexer "^0.4.0" + eslint-scope "^5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.0.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.1" + watchpack "^2.0.0" + webpack-sources "^2.1.1" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -13126,27 +12020,18 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: +whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: +whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" @@ -13156,6 +12041,15 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" + integrity sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg== + dependencies: + lodash "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -13172,191 +12066,204 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -workbox-background-sync@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz#5ae0bbd455f4e9c319e8d827c055bb86c894fd12" - integrity sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA== +workbox-background-sync@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.1.5.tgz#83904fc6487722db98ed9b19eaa39ab5f826c33e" + integrity sha512-VbUmPLsdz+sLzuNxHvMylzyRTiM4q+q7rwLBk3p2mtRL5NZozI8j/KgoGbno96vs84jx4b9zCZMEOIKEUTPf6w== dependencies: - workbox-core "^5.1.4" + workbox-core "^6.1.5" -workbox-broadcast-update@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz#0eeb89170ddca7f6914fa3523fb14462891f2cfc" - integrity sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA== +workbox-broadcast-update@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.1.5.tgz#49a2a4cc50c7b1cfe86bed6d8f15edf1891d1e79" + integrity sha512-zGrTTs+n4wHpYtqYMqBg6kl/x5j1UrczGCQnODSHTxIDV8GXLb/GtA1BCZdysNxpMmdVSeLmTcgIYAAqWFamrA== dependencies: - workbox-core "^5.1.4" + workbox-core "^6.1.5" -workbox-build@^5.1.3: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-5.1.4.tgz#23d17ed5c32060c363030c8823b39d0eabf4c8c7" - integrity sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow== +workbox-build@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.1.5.tgz#31c3034a38527f1f7697335c15af9c5593168841" + integrity sha512-P+fakR5QFVqJN9l9xHVXtmafga72gh9I+jM3A9HiB/6UNRmOAejXnDgD+RMegOHgQHPwnB44TalMToFaXKWIyA== dependencies: - "@babel/core" "^7.8.4" - "@babel/preset-env" "^7.8.4" - "@babel/runtime" "^7.8.4" - "@hapi/joi" "^15.1.0" - "@rollup/plugin-node-resolve" "^7.1.1" - "@rollup/plugin-replace" "^2.3.1" - "@surma/rollup-plugin-off-main-thread" "^1.1.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@hapi/joi" "^16.1.8" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^1.4.1" common-tags "^1.8.0" fast-json-stable-stringify "^2.1.0" - fs-extra "^8.1.0" + fs-extra "^9.0.1" glob "^7.1.6" - lodash.template "^4.5.0" + lodash "^4.17.20" pretty-bytes "^5.3.0" - rollup "^1.31.1" - rollup-plugin-babel "^4.3.3" - rollup-plugin-terser "^5.3.1" - source-map "^0.7.3" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" source-map-url "^0.4.0" stringify-object "^3.3.0" - strip-comments "^1.0.2" - tempy "^0.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" upath "^1.2.0" - workbox-background-sync "^5.1.4" - workbox-broadcast-update "^5.1.4" - workbox-cacheable-response "^5.1.4" - workbox-core "^5.1.4" - workbox-expiration "^5.1.4" - workbox-google-analytics "^5.1.4" - workbox-navigation-preload "^5.1.4" - workbox-precaching "^5.1.4" - workbox-range-requests "^5.1.4" - workbox-routing "^5.1.4" - workbox-strategies "^5.1.4" - workbox-streams "^5.1.4" - workbox-sw "^5.1.4" - workbox-window "^5.1.4" + workbox-background-sync "^6.1.5" + workbox-broadcast-update "^6.1.5" + workbox-cacheable-response "^6.1.5" + workbox-core "^6.1.5" + workbox-expiration "^6.1.5" + workbox-google-analytics "^6.1.5" + workbox-navigation-preload "^6.1.5" + workbox-precaching "^6.1.5" + workbox-range-requests "^6.1.5" + workbox-recipes "^6.1.5" + workbox-routing "^6.1.5" + workbox-strategies "^6.1.5" + workbox-streams "^6.1.5" + workbox-sw "^6.1.5" + workbox-window "^6.1.5" -workbox-cacheable-response@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz#9ff26e1366214bdd05cf5a43da9305b274078a54" - integrity sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA== +workbox-cacheable-response@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.1.5.tgz#2772e09a333cba47b0923ed91fd022416b69e75c" + integrity sha512-x8DC71lO/JCgiaJ194l9le8wc8lFPLgUpDkLhp2si7mXV6S/wZO+8Osvw1LLgYa8YYTWGbhbFhFTXIkEMknIIA== dependencies: - workbox-core "^5.1.4" + workbox-core "^6.1.5" -workbox-core@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-5.1.4.tgz#8bbfb2362ecdff30e25d123c82c79ac65d9264f4" - integrity sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg== +workbox-core@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.1.5.tgz#424ff600e2c5448b14ebd58b2f5ac8ed91b73fb9" + integrity sha512-9SOEle7YcJzg3njC0xMSmrPIiFjfsFm9WjwGd5enXmI8Lwk8wLdy63B0nzu5LXoibEmS9k+aWF8EzaKtOWjNSA== -workbox-expiration@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-5.1.4.tgz#92b5df461e8126114943a3b15c55e4ecb920b163" - integrity sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ== +workbox-expiration@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.1.5.tgz#a62a4ac953bb654aa969ede13507ca5bd154adc2" + integrity sha512-6cN+FVbh8fNq56LFKPMchGNKCJeyboHsDuGBqmhDUPvD4uDjsegQpDQzn52VaE0cpywbSIsDF/BSq9E9Yjh5oQ== dependencies: - workbox-core "^5.1.4" + workbox-core "^6.1.5" -workbox-google-analytics@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz#b3376806b1ac7d7df8418304d379707195fa8517" - integrity sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA== +workbox-google-analytics@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.1.5.tgz#895fcc50e4976c176b5982e1a8fd08776f18d639" + integrity sha512-LYsJ/VxTkYVLxM1uJKXZLz4cJdemidY7kPyAYtKVZ6EiDG89noASqis75/5lhqM1m3HwQfp2DtoPrelKSpSDBA== dependencies: - workbox-background-sync "^5.1.4" - workbox-core "^5.1.4" - workbox-routing "^5.1.4" - workbox-strategies "^5.1.4" + workbox-background-sync "^6.1.5" + workbox-core "^6.1.5" + workbox-routing "^6.1.5" + workbox-strategies "^6.1.5" -workbox-navigation-preload@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz#30d1b720d26a05efc5fa11503e5cc1ed5a78902a" - integrity sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ== +workbox-navigation-preload@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.1.5.tgz#47a0d3a6d2e74bd3a52b58b72ca337cb5b654310" + integrity sha512-hDbNcWlffv0uvS21jCAC/mYk7NzaGRSWOQXv1p7bj2aONAX5l699D2ZK4D27G8TO0BaLHUmW/1A5CZcsvweQdg== dependencies: - workbox-core "^5.1.4" + workbox-core "^6.1.5" -workbox-precaching@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-5.1.4.tgz#874f7ebdd750dd3e04249efae9a1b3f48285fe6b" - integrity sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA== +workbox-precaching@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.1.5.tgz#9e0fecb5c567192f46783323fccea10bffc9f79e" + integrity sha512-yhm1kb6wgi141JeM5X7z42XJxCry53tbMLB3NgrxktrZbwbrJF8JILzYy+RFKC9tHC6u2bPmL789GPLT2NCDzw== dependencies: - workbox-core "^5.1.4" + workbox-core "^6.1.5" + workbox-routing "^6.1.5" + workbox-strategies "^6.1.5" -workbox-range-requests@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz#7066a12c121df65bf76fdf2b0868016aa2bab859" - integrity sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw== +workbox-range-requests@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.1.5.tgz#047ccd12838bebe51a720256a4ca0cfa7197dfd3" + integrity sha512-iACChSapzB0yuIum3ascP/+cfBNuZi5DRrE+u4u5mCHigPlwfSWtlaY+y8p+a8EwcDTVTZVtnrGrRnF31SiLqQ== dependencies: - workbox-core "^5.1.4" + workbox-core "^6.1.5" -workbox-routing@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-5.1.4.tgz#3e8cd86bd3b6573488d1a2ce7385e547b547e970" - integrity sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw== +workbox-recipes@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.1.5.tgz#bb1f8976bcdb202618d967596e9f248e6077e69a" + integrity sha512-MD1yabHca6O/oj1hrRdfj9cRwhKA5zqIE53rWOAg/dKMMzWQsf9nyRbXRgzK3a13iQvYKuQzURU4Cx58tdnR+Q== dependencies: - workbox-core "^5.1.4" + workbox-cacheable-response "^6.1.5" + workbox-core "^6.1.5" + workbox-expiration "^6.1.5" + workbox-precaching "^6.1.5" + workbox-routing "^6.1.5" + workbox-strategies "^6.1.5" -workbox-strategies@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-5.1.4.tgz#96b1418ccdfde5354612914964074d466c52d08c" - integrity sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA== +workbox-routing@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.1.5.tgz#15884d6152dba03faef83f0b23331846d8b6ef8e" + integrity sha512-uC/Ctz+4GXGL42h1WxUNKxqKRik/38uS0NZ6VY/EHqL2F1ObLFqMHUZ4ZYvyQsKdyI82cxusvhJZHOrY0a2fIQ== dependencies: - workbox-core "^5.1.4" - workbox-routing "^5.1.4" + workbox-core "^6.1.5" -workbox-streams@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-5.1.4.tgz#05754e5e3667bdc078df2c9315b3f41210d8cac0" - integrity sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw== +workbox-strategies@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.1.5.tgz#2549a3e78f0eda371b760c4db21feb0d26143573" + integrity sha512-QhiOn9KT9YGBdbfWOmJT6pXZOIAxaVrs6J6AMYzRpkUegBTEcv36+ZhE/cfHoT0u2fxVtthHnskOQ/snEzaXQw== dependencies: - workbox-core "^5.1.4" - workbox-routing "^5.1.4" + workbox-core "^6.1.5" -workbox-sw@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-5.1.4.tgz#2bb34c9f7381f90d84cef644816d45150011d3db" - integrity sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA== - -workbox-webpack-plugin@5.1.3, workbox-webpack-plugin@^4.3.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.3.tgz#a7070e3ea0eedb6f87e11fd916ec5d4430a6e348" - integrity sha512-gxSkZ9GFLrMNC/8DGNRjcMhrt8iu+MMXhH/Fpo3wo9rKaSMsI7esGq0klTH/UloP9pNvBizVydysrB52eRhI7w== +workbox-streams@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.1.5.tgz#bb7678677275fc23c9627565a1f238e4ca350290" + integrity sha512-OI1kLvRHGFXV+soDvs6aEwfBwdAkvPB0mRryqdh3/K17qUj/1gRXc8QtpgU+83xqx/I/ar2bTCIj0KPzI/ChCQ== dependencies: - "@babel/runtime" "^7.5.5" - fast-json-stable-stringify "^2.0.0" + workbox-core "^6.1.5" + workbox-routing "^6.1.5" + +workbox-sw@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.1.5.tgz#06eb0c91f22e207422175b3f815cd2181c7074a0" + integrity sha512-IMDiqxYbKzPorZLGMUMacLB6r76iVQbdTzYthIZoPfy+uFURJFUtqiWQJKg1L+RMyuYXwKXTahCIGkgFs4jBeg== + +workbox-webpack-plugin@^6.1.0: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.1.5.tgz#d573f959417c3dae49e112dae9c6b82cc1679229" + integrity sha512-tsgeNAYiFP4STNPDxBVT58eiU8nGUmcv7Lq9FFJkQf5MMu6tPw1OLp+KpszhbCWP+R/nEdu85Gjexs6fY647Kg== + dependencies: + fast-json-stable-stringify "^2.1.0" + pretty-bytes "^5.4.1" source-map-url "^0.4.0" - upath "^1.1.2" - webpack-sources "^1.3.0" - workbox-build "^5.1.3" + upath "^1.2.0" + webpack-sources "^1.4.3" + workbox-build "^6.1.5" -workbox-window@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-5.1.4.tgz#2740f7dea7f93b99326179a62f1cc0ca2c93c863" - integrity sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw== +workbox-window@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.1.5.tgz#017b22342e10c6df6b9672326b575ec950b6cd80" + integrity sha512-akL0X6mAegai2yypnq78RgfazeqvKbsllRtEI4dnbhPcRINEY1NmecFmsQk8SD+zWLK1gw5OdwAOX+zHSRVmeA== dependencies: - workbox-core "^5.1.4" + workbox-core "^6.1.5" -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= dependencies: - errno "~0.1.7" - -worker-rpc@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" - integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== - dependencies: - microevent.ts "~0.1.1" + string-width "^2.1.1" + strip-ansi "^4.0.0" wrap-ansi@^5.1.0: version "5.1.0" @@ -13390,37 +12297,24 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: - graceful-fs "^4.1.11" imurmurhash "^0.1.4" + is-typedarray "^1.0.0" signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - dependencies: - async-limiter "~1.0.0" - -ws@^6.0.0, ws@^6.2.1: +ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0" -ws@^7.0.0: +ws@^7.3.1, ws@^7.4.4: version "7.4.5" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== @@ -13435,16 +12329,11 @@ xml@^1.0.1: resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= -xmlchars@^2.1.1: +xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -13460,27 +12349,20 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.7.2: +yaml@^1.10.0, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@10.x: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" +yargs-parser@20.x, yargs-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== yargs-parser@^13.1.2: version "13.1.2" @@ -13490,12 +12372,15 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.2: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" -yargs@^13.3.0, yargs@^13.3.2: +yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== @@ -13511,6 +12396,23 @@ yargs@^13.3.0, yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yargs@^16.0.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -13524,7 +12426,7 @@ yargs@^16.0.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yauzl@2.10.0: +yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= @@ -13532,12 +12434,10 @@ yauzl@2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= - dependencies: - fd-slicer "~1.0.1" +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yorkie@^2.0.0: version "2.0.0" From 5357a7b6e26ae41bd9c5a5a1748243fde00f2bce Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 6 May 2021 17:54:49 +0200 Subject: [PATCH 05/67] Don't inject tiptap editor CSS Signed-off-by: Thomas Citharel --- js/src/components/Editor.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/js/src/components/Editor.vue b/js/src/components/Editor.vue index e14a7d0d..f83b9adc 100644 --- a/js/src/components/Editor.vue +++ b/js/src/components/Editor.vue @@ -255,6 +255,7 @@ export default class EditorComponent extends Vue { }), ...defaultExtensions(), ], + injectCSS: false, content: this.value, onUpdate: () => { this.$emit("input", this.editor?.getHTML()); From 8c6b0003bca1fcccecbfc108b6a6499191815315 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 6 May 2021 18:03:34 +0200 Subject: [PATCH 06/67] Remove setCatchHandler Signed-off-by: Thomas Citharel --- js/src/service-worker.ts | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/js/src/service-worker.ts b/js/src/service-worker.ts index 4a832b06..ea958ccb 100644 --- a/js/src/service-worker.ts +++ b/js/src/service-worker.ts @@ -1,4 +1,4 @@ -import { registerRoute, setCatchHandler } from "workbox-routing"; +import { registerRoute } from "workbox-routing"; import { NetworkFirst, StaleWhileRevalidate, @@ -10,7 +10,7 @@ import { CacheableResponsePlugin } from "workbox-cacheable-response"; // Used to limit entries in cache, remove entries after a certain period of time import { ExpirationPlugin } from "workbox-expiration"; -import { precacheAndRoute, matchPrecache } from "workbox-precaching"; +import { precacheAndRoute } from "workbox-precaching"; // Use with precache injection // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -18,18 +18,6 @@ import { precacheAndRoute, matchPrecache } from "workbox-precaching"; // eslint-disable-next-line no-underscore-dangle precacheAndRoute(self.__WB_MANIFEST); -// Catch routing errors, like if the user is offline -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -setCatchHandler(async ({ event }) => { - // Return the precached offline page if a document is being requested - if (event.request.destination === "document") { - return matchPrecache("/offline.html"); - } - - return Response.error(); -}); - registerRoute( // Check to see if the request is a navigation to a new page ({ request }) => request.mode === "navigate", From 938f698b7ac0e56bce5e74251d7ce52771774eed Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 6 May 2021 18:39:59 +0200 Subject: [PATCH 07/67] Add webpush front-end support Signed-off-by: Thomas Citharel --- js/public/favicon.ico | Bin 4286 -> 15086 bytes .../icons/android-chrome-192x192 (copie).png | Bin 10249 -> 0 bytes .../img/icons/android-chrome-192x192.png | Bin 9416 -> 4370 bytes .../img/icons/android-chrome-512x512.png | Bin 29808 -> 10294 bytes .../icons/android-chrome-maskable-192x192.png | Bin 6401 -> 3735 bytes .../icons/android-chrome-maskable-512x512.png | Bin 23038 -> 11414 bytes .../img/icons/apple-touch-icon-120x120.png | Bin 3369 -> 2771 bytes .../img/icons/apple-touch-icon-152x152.png | Bin 4046 -> 3445 bytes .../img/icons/apple-touch-icon-180x180.png | Bin 4678 -> 4120 bytes .../img/icons/apple-touch-icon-60x60.png | Bin 1491 -> 1579 bytes .../img/icons/apple-touch-icon-76x76.png | Bin 1823 -> 1903 bytes js/public/img/icons/apple-touch-icon.png | Bin 4678 -> 4120 bytes js/public/img/icons/badge-128x128.png | Bin 0 -> 1668 bytes js/public/img/icons/favicon-16x16.png | Bin 799 -> 791 bytes js/public/img/icons/favicon-32x32.png | Bin 1271 -> 1015 bytes js/public/img/icons/favicon.svg | 1 + js/public/img/icons/icon-128x128.png | Bin 668 -> 0 bytes js/public/img/icons/icon-144x144.png | Bin 0 -> 4702 bytes js/public/img/icons/icon-168x168.png | Bin 0 -> 4471 bytes js/public/img/icons/icon-256x256.png | Bin 0 -> 6302 bytes js/public/img/icons/icon-384x384.png | Bin 668 -> 0 bytes js/public/img/icons/icon-48x48.png | Bin 0 -> 1794 bytes js/public/img/icons/icon-512x512.png | Bin 668 -> 0 bytes js/public/img/icons/icon-72x72.png | Bin 0 -> 2429 bytes js/public/img/icons/icon-96x96.png | Bin 668 -> 2847 bytes .../img/icons/msapplication-icon-144x144.png | Bin 1169 -> 3283 bytes js/public/img/icons/mstile-150x150.png | Bin 4282 -> 3442 bytes js/public/img/icons/safari-pinned-tab.svg | 4 +- js/src/graphql/config.ts | 15 +++ js/src/graphql/webPush.ts | 13 ++ js/src/registerServiceWorker.ts | 60 ++++----- js/src/service-worker.ts | 23 ++++ js/src/services/push-subscription.ts | 64 +++++++++ js/src/types/config.model.ts | 4 + js/src/types/push-notification.ts | 7 + js/src/views/Settings/Notifications.vue | 72 ++++++++++ js/tsconfig.json | 2 +- lib/graphql/resolvers/activity.ex | 21 +-- lib/graphql/resolvers/config.ex | 5 + lib/graphql/resolvers/push_subscription.ex | 24 +++- lib/graphql/schema.ex | 3 + lib/graphql/schema/config.ex | 6 + lib/graphql/schema/users/push_subscription.ex | 35 ++--- lib/mobilizon/users/push_subscription.ex | 38 ++---- lib/mobilizon/users/users.ex | 9 +- lib/service/activity/renderer/discussion.ex | 83 ++++++++++++ lib/service/activity/renderer/event.ex | 83 ++++++++++++ lib/service/activity/renderer/group.ex | 58 ++++++++ lib/service/activity/renderer/member.ex | 122 +++++++++++++++++ lib/service/activity/renderer/post.ex | 83 ++++++++++++ lib/service/activity/renderer/renderer.ex | 47 +++++++ lib/service/activity/renderer/resource.ex | 122 +++++++++++++++++ lib/service/activity/utils.ex | 30 +++++ lib/service/notifier/push.ex | 38 ++++-- priv/gettext/activity.pot | 124 ++++++++++-------- priv/gettext/ar/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/ar/LC_MESSAGES/default.po | 16 +-- priv/gettext/be/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/be/LC_MESSAGES/default.po | 16 +-- priv/gettext/ca/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/ca/LC_MESSAGES/default.po | 16 +-- priv/gettext/cs/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/cs/LC_MESSAGES/default.po | 16 +-- priv/gettext/de/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/de/LC_MESSAGES/default.po | 16 +-- priv/gettext/default.pot | 16 +-- priv/gettext/en/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/en/LC_MESSAGES/default.po | 16 +-- priv/gettext/es/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/es/LC_MESSAGES/default.po | 16 +-- priv/gettext/fi/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/fi/LC_MESSAGES/default.po | 16 +-- priv/gettext/fr/LC_MESSAGES/activity.po | 95 ++++++++------ priv/gettext/fr/LC_MESSAGES/default.po | 16 +-- priv/gettext/gl/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/gl/LC_MESSAGES/default.po | 16 +-- priv/gettext/hu/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/hu/LC_MESSAGES/default.po | 16 +-- priv/gettext/it/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/it/LC_MESSAGES/default.po | 16 +-- priv/gettext/ja/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/ja/LC_MESSAGES/default.po | 16 +-- priv/gettext/nl/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/nl/LC_MESSAGES/default.po | 16 +-- priv/gettext/nn/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/nn/LC_MESSAGES/default.po | 16 +-- priv/gettext/oc/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/oc/LC_MESSAGES/default.po | 16 +-- priv/gettext/pl/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/pl/LC_MESSAGES/default.po | 16 +-- priv/gettext/pt/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/pt/LC_MESSAGES/default.po | 16 +-- priv/gettext/pt_BR/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/pt_BR/LC_MESSAGES/default.po | 16 +-- priv/gettext/ru/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/ru/LC_MESSAGES/default.po | 16 +-- priv/gettext/sv/LC_MESSAGES/activity.po | 124 ++++++++++-------- priv/gettext/sv/LC_MESSAGES/default.po | 19 +-- ...6080303_create_user_push_subscriptions.exs | 4 +- 99 files changed, 2594 insertions(+), 1536 deletions(-) delete mode 100644 js/public/img/icons/android-chrome-192x192 (copie).png create mode 100644 js/public/img/icons/badge-128x128.png create mode 100644 js/public/img/icons/favicon.svg delete mode 100644 js/public/img/icons/icon-128x128.png create mode 100644 js/public/img/icons/icon-144x144.png create mode 100644 js/public/img/icons/icon-168x168.png create mode 100644 js/public/img/icons/icon-256x256.png delete mode 100644 js/public/img/icons/icon-384x384.png create mode 100644 js/public/img/icons/icon-48x48.png delete mode 100644 js/public/img/icons/icon-512x512.png create mode 100644 js/public/img/icons/icon-72x72.png create mode 100644 js/src/graphql/webPush.ts create mode 100644 js/src/services/push-subscription.ts create mode 100644 js/src/types/push-notification.ts create mode 100644 lib/service/activity/renderer/discussion.ex create mode 100644 lib/service/activity/renderer/event.ex create mode 100644 lib/service/activity/renderer/group.ex create mode 100644 lib/service/activity/renderer/member.ex create mode 100644 lib/service/activity/renderer/post.ex create mode 100644 lib/service/activity/renderer/renderer.ex create mode 100644 lib/service/activity/renderer/resource.ex create mode 100644 lib/service/activity/utils.ex diff --git a/js/public/favicon.ico b/js/public/favicon.ico index df36fcfb72584e00488330b560ebcf34a41c64c2..1b76c9c2ba1c7a813bac518a6bddddfc89b648c3 100644 GIT binary patch literal 15086 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 ZIi6+Wc;3{_L+*lEC%hi?=JyI`;C}@eHVyy) literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/js/public/img/icons/android-chrome-192x192 (copie).png b/js/public/img/icons/android-chrome-192x192 (copie).png deleted file mode 100644 index 52399911be96c7d859de45e05d40a63c92c41964..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10249 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 b^@3oh5?Ob$6*B@f?ST|NsJ^d~HV*tB%&o!| diff --git a/js/public/img/icons/android-chrome-192x192.png b/js/public/img/icons/android-chrome-192x192.png index b02aa64d97167ad649e496908b35f14c603d9249..61ec17788e8a5593b1697a5f51aae135f9099ffd 100644 GIT binary patch literal 4370 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 X1If3KD5CFh8K9=5ednEmb@=}RU9=6h literal 29808 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 W*sU@;)3Gdoaafw#m{c2Gx&L3|tJ3ZO literal 6401 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�=%g8ig3 zTcRTMY5ik|4bYNt-CKQjlxlA-91_amJ7$c~)Af5#DhM46RN)>Sh&$3v@WO3xFWAF! z!G9W^8d+UnmnYq}tXYN=Yy>z9CGwW!Apqv*%6{n1YHQTg~C0e=l(^)EDC8qu~$L zVnnIW;)9(TX|W8pU~TwM`-XoD1+G`QbFl)xMa%vPJu+CAPt ze>&8jz8R(IoSQZExuOmcve+J{tTJWr&kD1s(Y0lY#atJI)cBt0xU#X8)!RWaJir|JIAp+9z$$4>uZ>g7r1z56pVo8?L`1T3 zVhn5s6{EmZ#l9Qn5%SU#QIA3w%Rt#7?LrO$RraM4n$yHjR06p*u1?AVmNBDH$X0b+ zsG^a9U>ELzK<162%TAI;+Jd@|q$?jlIN~DP9}lnvA=4}eM`E|iig^zg+jX*Z1V_C^ zId@E&I93fx8)8ld_ZX&Eez8)RFzQv<=|+lDTgZQEdm1N~1$uaK^Xep_*FxfRU$1lh zBp@$&k%4H!|KPDGm?HyfAOY|p4L}C`pT{)+O7c4eLMXg|sUqzw^(GH!_@~T>nRLUQ3?x7JXBob2QD*0%ZlX M?;2>7soOpMH$m6Jxc~qF literal 23038 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 diff --git a/js/public/img/icons/apple-touch-icon-120x120.png b/js/public/img/icons/apple-touch-icon-120x120.png index 1427cf62752646ad7217df0a61aa01fdef7475d1..0b79015fc742ef3f339f7fcd7371cf9bd3086991 100644 GIT binary patch delta 2764 zcmV;-3N!Vo8q*b!BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{HBgFsLH8R9M_#It1fLan6XmTB} z^Szxs(KYlKeP7Q&6YBeV9&q*FM@?Z2G=ccepCO>JiD_NMKoeMJ-qXv&NdMHrK>Mu2 z$(R@nG=J+H1MRa;6!PHf&uhs23Ipw%PM5(!|J8-uFEP-*>CARG=)QXlw9jfQg@f+B zgMZvFGtj>2%S<@v`&XHb_B|}LJPE8}*Y$Shb@-k|3gvrl1O4b98X0Jk$nfe{Aj~7^ z$YKVXM6IhKF-!N&U{09^CFmvvI^V=U?)E*&@r3e;0+zi4X}=Dgt>!x~@}9rOUf{zX zzUK~q^#uBAEozdpe6*i>1vN*aPv1nxbAQpPV$@cIPHjae3()89po5N}^_p4Dkb!2P znHXpWnu&pCpc&{uYq(MNpjOdY8F6h#)URdH9pzD2_>bRrM0Hh#ch@OK8X0J)`szb3 z6sta3VO&2q{#CQXq;+alPR(=Ds-5N-F3I93nr}IjW4K(ZeAFOkpvRZTB|pDKwSPS| z&Z6TqW04(K2_~+3srgc=a%iuNfgVHs4WX@hy7>+}jPLVGpJqF~Q9Iz0GtmDCFTGO* z+Ie=t5I?J>iMAiNsDi)$IDaW9@d7vprA+GliCY42}X`8aj1#I$cYKMt13J(mJ0^T zUd^>R#Ps<>L^I7B=lSI?t5wd}7!K1(n`&EhQT;6 z-<@gZi^Zz$TE!?AyqopZDX?o?votnd2Y*n`Z&6Jg(0%oxcqPI>tWSx*{b9uafBxO7 z@RBzyu+LvS#r}AYe1d@fY^@$f!S#-5&?WQHG__@nvJ+7GSx=32acIh$xSA<)T@%LRDZ1pMbP(a!T=fP zL#qt_4}JW-7=ZP7KrL9g%=+bw_!$#6Y(f61yB~rSnFG zVBy)r+Ax)p81y%V8i|2!&C>&FC_Qz8d9wWta;t%OlQ@>IlNjjcEF++j(pMiUVE4%E zct`Mfc(g$8PAAUnB$^!p7CW$;m^Ovjm99^Zl^E#iCB$xQihoT=?}~RrGA(%85(B*> zl^FCw&ORh)T4%)!;)v;kx1p}~lPAY8vEN2!m=+cE2iGeO52aQeYh@f*=J&QP5 zS|T~n+sRGGBBx#0c9v}NDjK$U5(8bCMhyCOyIt5+L*{hi&9F*xn<1cZH$Beb*&`(A zWr@V@9iFztK!3Y4hyxajp6eGbU>SUpl6H`%52Y5cz`B!qcPoUNz@r8^XCwywd9Ge! zpaETtDy8%Ghv7m^pr=j&_@>Wn)JhEWrBWr}K7ZXNSeEieMFb#wcZpheIxWzhmEnNI z|LFq37SzQO73t`B!g$&e1MS%(2ed68%oc1f`XWz9I)6HzFuiU^ipAN?>BR9u(E`B& zGr+rFc)}xeXwYppsDGQ-m44Oi@UbC!+#^1gOtl41j+8EF*y|Lxb_!6?PSjej`uUi9WnBUKc1L0{V*1!%6=`>tR8N}rH7Wvgj+bcg{OKa9(#*#NDMcdLLM zL)~=>?79GoJA;(ZV50uAP;0&purF;}6bEQW$Hu*uJUuHyyT2Hqdv`0Qm^g9VkM=?h zp!MBu;JRxSk_U~|l5GHhHfo*iBn?_W7OP-~xPLWgnnZvg2IwA;-Sm1O2eS?1<{t)J zGW_hDw2;?kokk9ODHG?V`(q$W?G+BD+cs$NE;puK!mIvW@(yaoRI`Tdv&jR za(%jAC)hooCn-;j!%vNVZYGH#6UC93^Wr1%|J6T&# literal 3369 zcmb7Hc{J2t8~Qk{w!5*3fu4c1kWV+f$uhdfm0Yr%@PJy8NU6F}hlE z<1AX3WTJu?$Npcik#7CO?ayV<8`12wv7ZdiDu4XrX_S{y+>=n~7d z9~&9D#2F*oV`RtK8X)8&x@yY(YO;P#O8VrmY|d)|7MBrpa!TRjvt9!rl6&=SCy~c3 z>tM*u-OKjWv%~5yU#iI0Y%ba~ElhEMq>t?o9nPi0c8kOI`nQYO7}ztojdXae;|Ot| z1tkl6Pk(J$XNb`OjhfPtmHxj!*zoW_BOrg>FvxHSkxfFQcjl=iZnZTFXn>+==EinV z-Xmp!-T3sQo#EA%F3G*MX?@bc)XC9Pf^|eg(0!7i!0u2D-+-rICwD+)jlOq8W>J%$ z65NtyPbiD!d?=FWge094u-`xKuC;0f^}W7-ve>-f>=u~k6i473knYXnU3-;)Cy~2T z`>(D&oL!DUa+l&*b$&iEhGb8whwg9eRO2U)=hDrKUVWJeJ6UyMyUN5m$+@3_;7kn7 zK1rGAplVFG%?QnlKP64ZhenV>WFY*0+aDLT@()k0GD2Ab?Ibx8&jJJIZof1m&-#O(8`oI|;xMi!W}KQU8AH(cwfP zRHmA|G89iRdkq&0_Tqn*yZMOg^86f+<cKq5n=7GaAFUPW z`sFW=)ylcF%KE)5yNckwDX*?}pJ`i;dc|{a-aH6&CMeiqs{gkTq3;Rg=VwpRyBUeB zOx7g{vDpp{f0{;_O{DjKtl+kb9iB~c9<}fp>oa;d(-W^XBkD6rsb$5|WqzxHf)Tx4 z&1dhImzRCX0mom>G<}b#e3~c6UvITjsnoU`Ef-{pTk)BLMbhh*pV!<|%q6RKrGS+*c+Wa(S7OJOxr*xa(0equIvspi8v&!kNpn`_~vb26^#YO5^#-KG{gQ6`M( zyXD%si{qrqc=Xg;h2q9M{9D)^HN%dk71S6XLOho3cpaI*6=Q3RWFmjKmQFTf30tuK zf`%LT#6Z}^i)(_RF{2ta@Ctq+7iFmb_op8jj->Qhkq4ZtGan`!LP8(6Wqh6dToGLJ zo#e}RVdI);2R$J7lJ}l{vbsv`n4udjL*>M?{OsI<7~A;o%n-y(BQF9pLJr$B`q->D z60Dto1*#4yMZ@6a| zM$Y@!805V@5#0EsAZxE(7AJDeigN~H6zk*T^We+o(0oD1@(0kSc~SlkIjhH!71i53gD5%O-UWfM5*~QQi)N%Oo_FK!S z^ROYHVo@tP1;yUGb@|29N_)z{u9s6nKU`Xw#3K_TY;~zG2&`zqd&lp~TS7hG*b998 z!bVjQPS+T_EhC!rMg8!sP7xm_Hk-QE*1D*p;)~S1$uZVZ*X~MBq)#qFX@}joCkQFZ zXXkN&Kc_GadVJ)+d)mIsI1`WwHb(N>^tK#gL4qZ|;|ngT#x@{eUXJ7B?;5M1k2PKs zxka3**9)$T4c0{8H^KD1QB0054?U-)ja=(P-9&wLCJL`L<||44#F)U81wQ(}Z`Y?& zh=mCtQ>7jbL8{ZzK1P)1Ca{?49l}Jw8iBrDN6ZUW)tVr?#qTs*xtbT zr+W=Th&)8bfXeGr!~bGOG+of8gULS}rfv>jWIPMJ;(cAVyRg+$|W>A70c`{iX z3&YgP&k1xnrfXu84pv-yp-Wgn{)v`P%2rn`%Bu=KMQ_rn`zwg6Y!5t3nIcGs7$mSV z@dq9xHTkzpT5{&fU;3d-K0r%2uszSfV;5ISKZFIAOD`@y#yWXDe{N6!N|@=<-?1Sk z1~_KEsi4LExBl`fQ2~w$MV@(K0eA1BIx>sN$dl_j?Rz|l@0J=QQ0-!~MQv&^EV~7r z!YYIho@&wxLbF=Ia`Akf332zjMqaV%6p-_0y7g@xX0^B#wb`2zvnwQg(Lzrv72mol zji_aHGo0MSWe!>(xc%=)q#hWoXlF-6H5pL`Z7x+#$Z-#uU`+7c`W?6U zoxg4->_Es21+*D?AJ!@Nj5tA?Gx2r_Pc)(w1;9?z1xJ*QM$8o+_V9Thqm>+sn9=#;-db_4ymFYe{`7$b{Y-W%KRR;za>e=+-D4qGS zRf@HvzI852D}`X=g6ELBcSQDG?|vKyI#@(cto;5yEoK-*M!tEPr<7;DkMoOw4o629 zFeAci>yyiby-nV?wsZbS#Y^b4W#PBP?^uNgE*QTxRKZU)vo$ioi{5{tlgp{SW%0qr z70#Z23&GdmYR6rT{;lOIYC<3PB6G0KjY}0lGNGD+yN+A}M!~Z+X0W*njdsCwo^w90 ze6F@vY1(@Z>B+R_rA*{j4bm*Bj8htRU&UO6;p4YNN)l}e_jCwsm!H7lSdt=Gj%O(n zo;ac94z}kW%h~6F2c!8XHRUQeyH}U|bVAKOp_+ADO5PkH?$E4P**m9VIn|FSjis#H zjCZfWrv!g7hlqQ5xZX@=gxMIHU0?yi@61_j-j=;5_uf58HMDq%i)cj%LB6UQw*Bco zn4*;MC@nDR0fZO${V{q`Tel}Ojw=aX#M*xw!RN(PJmITN@CAqD*?KGr5zjf=Ai?~i zR4lE2I`L8Wq?V+JV4>~NhrJ%Vp{*Xt+qw%C-%Vf9yj+TSPH+h8*8{Iefp6-_? zu5p8;GfK3Rx)Hx>pV0aD?b2N2kWJ=eK|^nX-<4NYI}Nd@mj+J%^0$#Qf~GH@3m{d_9(?C z6OSF?p&cwqYbSP=$`_KJYw&yz4t~*3l=}OLu!Z2Cghc62E?9=B%n|cdWib_MK1hCK zsCd;w3@jz@xwM%%`+U~6IlFyIBsirXFu&;TV46nEmbn-h_kd!bg=Lq^Es2QSTL6tx zN@ ROru=^AazZ3N)e9H{|11FNXq~K diff --git a/js/public/img/icons/apple-touch-icon-152x152.png b/js/public/img/icons/apple-touch-icon-152x152.png index f24d454a2ecb8851bb893192b64ee09386d30e24..db0c5ac09f0090d32184f37c1bcbbe591899d06a 100644 GIT binary patch delta 3443 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 cK^5JQ0?3d{m_4Kdj*tasYV;m8R*6oO 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�MrHbYR_buu=L>f*wO=Er8~{qfkYT+HoHag8)VqJoC-#@ zNT})4xRE%sP-B9?xmL5!2Y8VLa?yj@Y@r1C)6o~9GF9nWG!SI2VJ$>ejtUE%Qv&r_ zYLgZ0h3iIrw7{TyurC(g^$XT%PP5`FB3aFpP&fM-8!J#3I_ujG?;7(Xv5ni%BjYP4 z^+oydy=)_&bdxYJx`X%G5PFkUB%3h6RiOs^F?#ojsB%DbfhqzGhuv4)S1%vw@PDyE z3xWF{Y^0>+=Wg! z{>z@$rD6ej*V- z^$zKIOWOfdN4~7@ndhru01+3cxwD&_Muyja({*O;-5VnF(e$WDALNStE{1{F#ts+VR{o zSlQ*@U=Du8fgKW$lU~)O)b6FS?H1SSnKVIC=DOvbo8IUvM zVf+U4YxG%qLGd%ew7Jp8>@U`ew+A#Q=2oJHNH@_f!WadS20$KZEZ+BHAvU@FB zzRCYN5r+Z#g`C^hrH$yW7ABstwjvMM*CHGzY41bbo2zy$6E8DAOPn zUnHG?e7?u7pQ}Kqbu1jEd+=mcGea4aL6V4g(m*b7x}z|ijsjb3e|tf-3&^JK{=sWz z8sqIu9jy)#J}n}cXqtXmkb-NDVPcAKn=G9uX42zYvufu_OCr>xJ=oTNp8WA5wEqvM z{r~m8;7_C>U68iRr@|rd7UYhON#(-S_+Uf>s)hhPU{{exlxc&eD diff --git a/js/public/img/icons/apple-touch-icon-60x60.png b/js/public/img/icons/apple-touch-icon-60x60.png index cf10a5602e653bb126332934e2b7f34081c19a01..ebf8c0ee75315488831acb00b3007803f02bd0d4 100644 GIT binary patch delta 1563 zcmV+$2ITqE3#$x}BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTT6>nI#^J| zAwzYtAS&XhRVYG*P%E_RU~=gfG-*guTpR`0f`cE6RR`F@J!7#7uoo6w~k=U-$6w z^)A7)ywCkP`jmpn0G~iS%XGsc-XNadv~VylM`-IBnbpxZ2Myb z2<-x`hHZZz+ji>&2s{H100IF}OjJcWI7~Y@ zOglMDJUL80I!r%0OhY_NLp)4KK1)eIOG-aWOh8LcK}%9YOH)HiRYXcxMM_^uN?}S$ zWlTwEPJc;hPDyG{No`R{a8gKdQ%G`CNOM$3bW})oRY-SMNO)FAd|5|*Sx0|bM}S*L zfm=s{Tt9K? zZ$hMSLZ)#-r*T54azUwbL8@~>t8_uFbwRIoK!31zK(l#2w0S?adOx^)KDm58x_v&o zem=Z@KD~ZEy?;Kwe?7i{J-~rI!GS%)f;_{6Jj8=M#e_V@ggnTFJjsST%ZED5h&#=Q zI?jnY&x$(GiaOAXI?;6$X?n=TREc&G^`=u=WrY!xYEB&V{{--Pcs51VkH2$hQ{;NR# zuT%cASpKtM{!+(ta$Cm!eoc_$B{?4cV&#C^vj zm%FjT11z&4?XisU5VLE7v1-j-|Dr4P3bnu^N_M0 zJy&)hR>9IL&}&?|6|oYQmV>r(2d2d=b;c_4&aNeong}>|ySB zWMi(l|1?uaEXJ{8;=X++*l5-3ckHs#CVo@q#yDzzW0Xo=H+rs_yWb;s(dkDlf4TW? z>HGP{=B4VUCY3jX(dq=MZaFie`cC4iD%h8qxi|0p1MlkB&3}>?02I2)6f(P N002ovPDHLkV1gfq`QiWo delta 1474 zcmV;z1wHz!4ATpcBYyw{XF*Lt006O%3;baP0000WV@Og>004R>004l5008;`004mK z004C`008P>0026e000+ooVrmw0005hP)t-s|NsB|{{8&@{rvp>{r&x%*}Q|#tcB36 zgvhFYm6?8tmVSzseTkKdl%VJ7>$v03RK1K%x`#-Hc0*KVnt!9M{{H^={Q8K|uT8s$ zOs|ARXKX`LW>jNz*4o|H@8ev+kx7($Lsn;lj+*%S`kmRmO|^waa&SspY{JLQ=JoDr z#hOZ>eneVmZhVRG@$zWJnX}@|PrHasxrax7bVOBWtFycE`u2ItrAw)TL}6-PY<%M7 z=*a5YRlSW!i+^~Oo~Zl#`}+O-jnlGBv4llxZBt`&q^z~u@#kN`lS-F-Lsw@=S!(|O z|D)T%O}2(cb#dwU@NCAMOQL^7Txq!E&rrLGM}c+q`}ls%s7$PaL}P2s?A}+tj!BMr zLse#z)wWEtg+*;{-}C8W!j(#zeM4AhsNKa*x`$1-hJQzRa_#u@amb%brGP|UX};#u zQoM>tg?9J+`An{ZMP_W$?%`U$kV%nx{r>)#*Sbu!g+_31Ls4bp^z3HDm`a^~L|f2Vn zjgQl_V1L1sq};;l_wjDWox0@EQM`(P&Z*Aq-ebd-HmV8X00001VoOIv0Eh)0NB{r; z2XskIMF-&l69)?{x?>RQ0007+NklM;B#JYAnV|K?dhB~`2 zvAa8F&hF0rvr{-f1`~wK%gytOd(QLy{O;v>E`Jcc*MC$tDBBNQc6w7gG;MY3^s&9< zqqZCzoj$#kvx}>4=<4FE={Y$%@G6PDK6Z1La(T$OJmox-d!prmMec6;*vp&SKE8f} zcBOv+&jS3l4Z+XXhgW%f89a1g5Oi<|=Y)o7CSjp`9TE&16lnO3$-{9=5s@4n6|I>> zM}Ki}WCWIk%MCHbd`5I^97n|`Jogjg`6@0J!Czut?N(wE&yrI(IyLRNotDbMDakxf zN_@T5=^2R5%wnCLLpj-OvoaB!k#6LmG{cE-L2el5Zs( zTwDZPs4#j)m8H;S<^0s&`H9QRU`v(84}W+?CHA7KT9E0NP+f&lWrc~?qox+ob@lpM zsINnCZH>v7tDzAAO$N9L?ZyU^mQ>A%ZfX6ah1M1XH>*rzYHNq?Q0uU|1Gc^G4NEqi zz+K&l7P`BDJ8j;=)YA*y*Uz}W54N|5-mZZ`UO6IK;OISVW;F5yO( zSAMK4<6>#i5=^UWh+f}VNATLJMV4rD3)}S*+qAW5p{4B|+$(aWJKL6G+SUDmaJlbV zY-w-*FTB5JIi`a{1ABNN!jk;R0Dm9J#b7!<(X%JVqAby=?iWegcq-D;*|`p%pNYkE zamn`bLbN5t72_*~cudM`jlEV{VTo=u_{J(rw|CF>?$$a?_YcyCdn+xe9;J^eYcW0j zda~Nm-jkTO>An8Z`VE>Tm}DO!5_tds03~!qSaf7zbY(hYa%Ew3WdJfTF@HBLFflDL zIaDw=Ix#UiG&CzPF*-0X2^rg90000bbVXQnWMOn=I&E)cX=Zr6Cgx@G{a;ABePT>%h=S&#LUDT#0SfO cNT5nC0O}VJbn-$ql>h($07*qoM6N<$f~J7u5C8xG diff --git a/js/public/img/icons/apple-touch-icon-76x76.png b/js/public/img/icons/apple-touch-icon-76x76.png index c500769e3df9d6a6f1977ace8be4e63a8095e36a..5dba221ee9ab059bba3598b53e2cee71112676a5 100644 GIT binary patch delta 1889 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 diff --git a/js/public/img/icons/apple-touch-icon.png b/js/public/img/icons/apple-touch-icon.png index 03c0c5d5ec302ed7b0ee2c401df9427fb9d3c117..214d8df672e6e5904cb235f559a8da8c44add5ac 100644 GIT binary patch literal 4120 zcmaJ^cQ72#x7ICUb&D)^l~}z+StPMav_vn761_!Vt3(OGMp$LB5fW?=Bx>{?HCBmE zkRn(co#;f#^LsPzzu&yMbG|$C&78S&&v))Q=O!2%>M+vt(36poG3x1RnO^O6|1ki? z71mUxxss8Q$9ZaM8tZ9lLi~|_Zl2y(6f7+=?UrtjI{34_jRD47<$-Z8R5PdsBDVD2 z0;YjB7Oz`(K(2vqdg_|mf~jX>V)-!^v>Z)xUy@3D4 z#SD<))zyYjJp%KPy!krR$XTzfWhVPl;F4^tlTr=L^%FJP2SB#e!o}NDSzrS z5>#80&uYX%;IJr+h#GN4?{m7>Tf1+C?}6^pe;bsW@dOH@wIvX7WZXgK#%MHE1&`WpGS1g1;cj#dRs2Ai*`5FM4h_n9*lV2h&Sxla`T_uvgG zfEuNhHNoDCLLUE4NyYjc@WPi8G{bv;o>D3#x=X}PPDqD->;Q!6JmZcu<6G^Z4x9Ng z|LsgUlB{OR;xCP|GSyuJT>JL!wttA z&gcu9c^ki=TWr6vaHvaLb3)ALwOi^2+7-^)AL&P^#RVV&%5pE{K2-SBbHZ#2 zx-pQ7^k0D)M~Q&{FGQazd4lgXwDwn`YTP;J@S4D7?C5VSW#GW2ca3W7CfEH2PrVB- z7$N$!!Ny5%QVZ$!=FgB`exb$cI&)Yny5wnCM9fa**pZ;;yaCW9!^dqxhKmHy>+Y|t z*4TfPe^Cr!&gaLEDCUzGCUD#TjPk+xJ(lhMTUle@h1>qd9{^^I(sP|nQj8bi3uy=XtA_XO%ce*m`gk zozJk-z;4=g5>_D=Ev}10K&6wiuI?YE!TSQ1?Bq}Xeir>Y5Zz7)@%QC2o)XJ)7jjVH zB@AnIC?qen(sO^w|2jD9^T)-)S8bj|S%UdNRFZt|xQshZv+6oGaj`EI`p1h}WPL;Y z>q8^fRRWtfOg+7&2U!l*wAZLwQy3-r2<69PYhrfrLU7mOnE<0IZ=cx!&tgl%4H^;_ zw;d*Im&z6ND03JfBQzfvkqsna0pF~u@J_Dw7{YTdze%+Wa1T^2qp?t7_{6ex)=o_oP0`SF`?h=3B-9*&oQ1hJ}-jGjPKdo8jEK1mUI8s+Dt?Df9+KMG# z2oZ9AFZN<4M|GDTjO^5k6OQHr1ln1@DS_>a_uFS}^5=6zr(9Bl6Aol(Ik`y7zgA_G_yrA2a1% zav79t?eyk@r3Z%(O%|RdYl%mBa&&I)^tHS<_qe0Rd8wF@ON&8zhh0}TkK_k`hN6Cu^R>1EEsB!W$tj^xSM}sVvkzt2>NpSd)q)hkMxDh_m0YVxS zzRn>&vGtLzxhiwjBxOZ{eszLBSiKo$_%^}tw(=OG++1O9x$FL1I;mfXqM9qj!s`)+%nkr(0?8juV zDi`0)L`Woyiq-NVSLPON$4f$2EZ>utVI^pG4(nxM1hd(WF~A$Ii^#&&G+}!mE^oi% z(^eWBaTLIq`1u3&C245hUpJ86NWmk(tLsfLjwoGS^;!nBy1ZSBW_49HlA58QaXV3F zQXQAETyA>6!_f3%+M~^CMz>C4^F5u?T320h@>q@jRdC>o4_xAgV?*@nBj1-i%2uGL z`9@@LE9NclCx25Y4PL?Sgde5=W%FA*^wEavR&AvE(o1(x`N6AOWfNDd3SO zx#WWK-@JEv<@>_b(M)~{VO*jTt{N#rq;ZuhktWjp-ahSZwT zo{cJ<93`ROtqI{>?hLgF)(&G982erWxhQ4`#}N^DTP#hsg=Y@8^hM*W!VDF6$&<-( z43cVHc1<1f3!)Ppi(!154+Jrwc_sSu!NUP>56uzEDl4m|w-&5Um3a*gD-=1&ha@)jL){u8MG8A%AUE z%IGglTZizdeG5*!qewm!pmqmedEE7i2teqT_t;pW-(M6+=c8aK83kh9`!in zR0Y96a^kA8UFd{HTIwu}8N_R|!Hp(A&-pl_U!M?S#@n7%!}QTn&P90k?||Z3NB2<( zBsKR#mXq^hy9`vvj%GQf`s&q8yfX254QzI;szn<@q0+dJfC(#nPagmH&Cxid z+Us@AOq1*b(;cotsp37b2i7VTsdh~|v(zD^?V?RZe+g1Wx7{iBjeWRC3`cbQ`qWu@ zlP;qq)1bwI-^;3QJwVKWFEC{8PM6qN>kmcU*4GzgC|(!m|fZ0#K%V-z0_pAQSa!ds< z&xQ)dePBxpA*o-rv+t4!S&NW%)}y6<-nnbJ$)i~C$Ctr%Wp^4iB#-3(wcMuvlf4#4 zj7Z=ig@)w>;3#W^%FiX=v~gDVY@PE<*!}+eHBx+f5;|GShgq?7eHUuo^T)@sI2;;+rbP|e^IK+ad;!s z%NVZBOoTtk9vHVPi2$K$$7)|)Q@PKde!fFdbp4o%Az@H2McptWOF1^uKi>?WDaS!f z9&G{Rh(jo+a@!cdR?g8ErRraMa@fMgM<#bB3mBmA#K|p*oMBdaB-K(nnz)(o*!M*U z#2`ZbJO%u2$MO%n&=#pAm>u}bMY`)oI2?A>CEbJuW>Xy%FIO)6+)YwIbMvg(P@_BV zxi_VamL=n(44ww{Y6Kv`OR~>H>}}WtTZ=RC;Abj_hi2u-haF$es%q;6OjEWb4B)!I z$X}juayfeS^}cX7H%dLO=A~goz$wm~^c95DoF|jgfS0SLyl>Dvlo~1Ox7(qUPD*l9 zXs)13OscC2E)EAKe=3&x5W9I(mf01rjJvAhTOXLvmW(X$zi!aPoy42jJ$7CCz3=?D zr2`p{T~vDju5dn4WQ%dFOL-3@pHn{F)|{cZp}7D&I&aO|EL zG~{@Edq7s&pw_)@BpJ0AoS{>8SgP=7*dB21+BPo#rO)U-YNc4EVYmi7G&8R7qL(08 z2u>F`n0|qpiu?H?(W5M>rCRE*{*!wK+3V};T!SPz4$`Z7*$NJm#xjBLUfowY)ZOV- tL@q`fgM`5T3jhY6y#@at$aMZAC$?&$twiKXufB|AdfJ9sl^PB){{#6px-b9$ literal 4678 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

+ + + + + +
+

+ <%= @subject %> +

+
+ +
+ + + + + + + + + + + + +
+

+ <%= dngettext("activity", "There has been an activity!", "There has been some activity!", @total_number_activities) %> +

+
+ + + + +
+ +
+
+

+ <%= dgettext "activity", "Don't want to receive activity notifications? You may change frequency or disable them in your settings." %> +

+
+ +
+ + + +
+ +

{{ $t("Participation notifications") }}

@@ -207,9 +252,10 @@ import { Component, Vue, Watch } from "vue-property-decorator"; import { INotificationPendingEnum } from "@/types/enums"; import { - USER_SETTINGS, SET_USER_SETTINGS, FEED_TOKENS_LOGGED_USER, + USER_NOTIFICATIONS, + UPDATE_ACTIVITY_SETTING, } from "../../graphql/user"; import { IUser } from "../../types/current-user.model"; import RouteName from "../../router/name"; @@ -223,10 +269,14 @@ import { REGISTER_PUSH_MUTATION, UNREGISTER_PUSH_MUTATION, } from "@/graphql/webPush"; +import { merge } from "lodash"; + +type NotificationSubType = { label: string; id: string }; +type NotificationType = { label: string; subtypes: NotificationSubType[] }; @Component({ apollo: { - loggedUser: USER_SETTINGS, + loggedUser: USER_NOTIFICATIONS, feedTokens: { query: FEED_TOKENS_LOGGED_USER, update: (data) => @@ -263,6 +313,201 @@ export default class Notifications extends Vue { subscribed = false; + notificationMethods = { + email: this.$t("Email") as string, + push: this.$t("Push") as string, + }; + + defaultNotificationValues = { + participation_event_updated: { + email: true, + push: true, + disabled: true, + }, + participation_event_comment: { + email: true, + push: true, + }, + event_new_pending_participation: { + email: true, + push: true, + }, + event_new_participation: { + email: false, + push: false, + }, + event_created: { + email: false, + push: false, + }, + event_updated: { + email: false, + push: false, + }, + discussion_updated: { + email: false, + push: false, + }, + post_published: { + email: false, + push: false, + }, + post_updated: { + email: false, + push: false, + }, + resource_updated: { + email: false, + push: false, + }, + member_request: { + email: true, + push: true, + }, + member_updated: { + email: false, + push: false, + }, + user_email_password_updated: { + email: true, + push: false, + disabled: true, + }, + event_comment_mention: { + email: true, + push: true, + }, + discussion_mention: { + email: true, + push: false, + }, + event_new_comment: { + email: true, + push: false, + }, + }; + + notificationTypes: NotificationType[] = [ + { + label: this.$t("Mentions") as string, + subtypes: [ + { + id: "event_comment_mention", + label: this.$t( + "I've been mentionned in a comment under an event" + ) as string, + }, + { + id: "discussion_mention", + label: this.$t( + "I've been mentionned in a group discussion" + ) as string, + }, + ], + }, + { + label: this.$t("Participations") as string, + subtypes: [ + { + id: "participation_event_updated", + label: this.$t("An event I'm going to has been updated") as string, + }, + { + id: "participation_event_comment", + label: this.$t( + "An event I'm going to has posted an announcement" + ) as string, + }, + ], + }, + { + label: this.$t("Organizers") as string, + subtypes: [ + { + id: "event_new_pending_participation", + label: this.$t( + "An event I'm organizing has a new pending participation" + ) as string, + }, + { + id: "event_new_participation", + label: this.$t( + "An event I'm organizing has a new participation" + ) as string, + }, + { + id: "event_new_comment", + label: this.$t("An event I'm organizing has a new comment") as string, + }, + ], + }, + { + label: this.$t("Group activity") as string, + subtypes: [ + { + id: "event_created", + label: this.$t( + "An event from one of my groups has been published" + ) as string, + }, + { + id: "event_updated", + label: this.$t( + "An event from one of my groups has been updated or deleted" + ) as string, + }, + { + id: "discussion_updated", + label: this.$t("A discussion has been created or updated") as string, + }, + { + id: "post_published", + label: this.$t("A post has been published") as string, + }, + { + id: "post_updated", + label: this.$t("A post has been updated") as string, + }, + { + id: "resource_updated", + label: this.$t("A resource has been created or updated") as string, + }, + { + id: "member_request", + label: this.$t( + "A member requested to join one of my groups" + ) as string, + }, + { + id: "member_updated", + label: this.$t("A member has been updated") as string, + }, + ], + }, + { + label: this.$t("User settings") as string, + subtypes: [ + { + id: "user_email_password_updated", + label: this.$t("You changed your email or password") as string, + }, + ], + }, + ]; + + get userNotificationValues(): Record> { + return this.loggedUser.activitySettings.reduce((acc, activitySetting) => { + acc[activitySetting.key] = acc[activitySetting.key] || {}; + acc[activitySetting.key][activitySetting.method] = + activitySetting.enabled; + return acc; + }, {} as Record>); + } + + get notificationValues(): Record> { + return merge(this.defaultNotificationValues, this.userNotificationValues); + } + mounted(): void { this.notificationPendingParticipationValues = { [INotificationPendingEnum.NONE]: this.$t("Do not receive any mail"), @@ -290,7 +535,7 @@ export default class Notifications extends Vue { await this.$apollo.mutate<{ setUserSettings: string }>({ mutation: SET_USER_SETTINGS, variables, - refetchQueries: [{ query: USER_SETTINGS }], + refetchQueries: [{ query: USER_NOTIFICATIONS }], }); } @@ -387,6 +632,22 @@ export default class Notifications extends Vue { this.subscribed = await this.isSubscribed(); } + async updateNotificationValue( + key: string, + method: string, + enabled: boolean + ): Promise { + await this.$apollo.mutate({ + mutation: UPDATE_ACTIVITY_SETTING, + variables: { + key, + method, + enabled, + userId: this.loggedUser.id, + }, + }); + } + private async isSubscribed(): Promise { if (!("serviceWorker" in navigator)) return Promise.resolve(false); const registration = await navigator.serviceWorker.getRegistration(); diff --git a/lib/federation/activity_stream/converter/comment.ex b/lib/federation/activity_stream/converter/comment.ex index 16156c1a..d4ec756d 100644 --- a/lib/federation/activity_stream/converter/comment.ex +++ b/lib/federation/activity_stream/converter/comment.ex @@ -69,7 +69,8 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Comment do mentions: mentions, local: is_nil(actor_domain), visibility: if(Visibility.is_public?(object), do: :public, else: :private), - published_at: object["published"] + published_at: object["published"], + is_announcement: Map.get(object, "isAnnouncement", false) } Logger.debug("Converted object before fetching parents") @@ -109,7 +110,8 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Comment do "uuid" => comment.uuid, "id" => comment.url, "tag" => build_mentions(comment.mentions) ++ build_tags(comment.tags), - "published" => comment.published_at |> DateTime.to_iso8601() + "published" => comment.published_at |> DateTime.to_iso8601(), + "isAnnouncement" => comment.is_announcement } object = diff --git a/lib/graphql/resolvers/users/activity_settings.ex b/lib/graphql/resolvers/users/activity_settings.ex new file mode 100644 index 00000000..f3a76e2e --- /dev/null +++ b/lib/graphql/resolvers/users/activity_settings.ex @@ -0,0 +1,26 @@ +defmodule Mobilizon.GraphQL.Resolvers.Users.ActivitySettings do + @moduledoc """ + Handles the user activity settings-related GraphQL calls. + """ + + alias Mobilizon.Users + alias Mobilizon.Users.User + + require Logger + + def user_activity_settings(_parent, _args, %{context: %{current_user: %User{} = user}}) do + {:ok, Users.activity_settings_for_user(user)} + end + + def user_activity_settings(_parent, _args, _context) do + {:error, :unauthenticated} + end + + def upsert_user_activity_setting(_parent, args, %{context: %{current_user: %User{id: user_id}}}) do + Users.create_activity_setting(Map.put(args, :user_id, user_id)) + end + + def upsert_user_activity_setting(_parent, _args, _resolution) do + {:error, :unauthenticated} + end +end diff --git a/lib/graphql/schema.ex b/lib/graphql/schema.ex index 0c620b6a..74f3f9a3 100644 --- a/lib/graphql/schema.ex +++ b/lib/graphql/schema.ex @@ -48,6 +48,7 @@ defmodule Mobilizon.GraphQL.Schema do import_types(Schema.AdminType) import_types(Schema.StatisticsType) import_types(Schema.Users.PushSubscription) + import_types(Schema.Users.ActivitySetting) @desc "A struct containing the id of the deleted object" object :deleted_object do @@ -182,6 +183,7 @@ defmodule Mobilizon.GraphQL.Schema do import_fields(:actor_mutations) import_fields(:follower_mutations) import_fields(:push_mutations) + import_fields(:activity_setting_mutations) end @desc """ diff --git a/lib/graphql/schema/discussions/comment.ex b/lib/graphql/schema/discussions/comment.ex index 779b8e1d..cef5f555 100644 --- a/lib/graphql/schema/discussions/comment.ex +++ b/lib/graphql/schema/discussions/comment.ex @@ -50,6 +50,10 @@ defmodule Mobilizon.GraphQL.Schema.Discussions.CommentType do field(:updated_at, :datetime, description: "When was the comment updated") field(:deleted_at, :datetime, description: "When was the comment deleted") field(:published_at, :datetime, description: "When was the comment published") + + field(:is_announcement, non_null(:boolean), + description: "Whether this comment needs to be announced to participants" + ) end @desc "The list of visibility options for a comment" @@ -86,6 +90,8 @@ defmodule Mobilizon.GraphQL.Schema.Discussions.CommentType do arg(:event_id, non_null(:id), description: "The event under which this comment is") arg(:in_reply_to_comment_id, :id, description: "The comment ID this one replies to") + arg(:is_announcement, :boolean, description: "Should this comment be announced to everyone?") + resolve(&Comment.create_comment/3) end @@ -94,6 +100,8 @@ defmodule Mobilizon.GraphQL.Schema.Discussions.CommentType do arg(:text, non_null(:string), description: "The comment updated body") arg(:comment_id, non_null(:id), description: "The comment ID") + arg(:is_announcement, :boolean, description: "Should this comment be announced to everyone?") + resolve(&Comment.update_comment/3) end diff --git a/lib/graphql/schema/user.ex b/lib/graphql/schema/user.ex index 8d713464..8a5a97af 100644 --- a/lib/graphql/schema/user.ex +++ b/lib/graphql/schema/user.ex @@ -8,6 +8,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do alias Mobilizon.Events alias Mobilizon.GraphQL.Resolvers.{Media, User} + alias Mobilizon.GraphQL.Resolvers.Users.ActivitySettings alias Mobilizon.GraphQL.Schema import_types(Schema.SortType) @@ -131,6 +132,11 @@ defmodule Mobilizon.GraphQL.Schema.UserType do resolve: &Media.user_size/3, description: "The total size of all the media from this user (from all their actors)" ) + + field(:activity_settings, list_of(:activity_setting), + resolve: &ActivitySettings.user_activity_settings/3, + description: "The user's activity settings" + ) end @desc "The list of roles an user can have" diff --git a/lib/graphql/schema/users/activity_setting.ex b/lib/graphql/schema/users/activity_setting.ex new file mode 100644 index 00000000..497b7b19 --- /dev/null +++ b/lib/graphql/schema/users/activity_setting.ex @@ -0,0 +1,23 @@ +defmodule Mobilizon.GraphQL.Schema.Users.ActivitySetting do + @moduledoc """ + Schema representation for PushSubscription + """ + use Absinthe.Schema.Notation + alias Mobilizon.GraphQL.Resolvers.Users.ActivitySettings + + object :activity_setting do + field(:key, :string) + field(:method, :string) + field(:enabled, :boolean) + field(:user, :user) + end + + object :activity_setting_mutations do + field :update_activity_setting, :activity_setting do + arg(:key, non_null(:string)) + arg(:method, non_null(:string)) + arg(:enabled, non_null(:boolean)) + resolve(&ActivitySettings.upsert_user_activity_setting/3) + end + end +end diff --git a/lib/mobilizon/activities/activities.ex b/lib/mobilizon/activities/activities.ex index e38fbc15..71887f2e 100644 --- a/lib/mobilizon/activities/activities.ex +++ b/lib/mobilizon/activities/activities.ex @@ -17,7 +17,7 @@ defmodule Mobilizon.Activities do very_high: 50 ) - @activity_types ["event", "post", "discussion", "resource", "group", "member"] + @activity_types ["event", "post", "discussion", "resource", "group", "member", "comment"] @event_activity_subjects ["event_created", "event_updated", "event_deleted", "comment_posted"] @post_activity_subjects ["post_created", "post_updated", "post_deleted"] @discussion_activity_subjects [ diff --git a/lib/mobilizon/discussions/comment.ex b/lib/mobilizon/discussions/comment.ex index 391ffb4f..bba59586 100644 --- a/lib/mobilizon/discussions/comment.ex +++ b/lib/mobilizon/discussions/comment.ex @@ -45,6 +45,7 @@ defmodule Mobilizon.Discussions.Comment do :attributed_to_id, :deleted_at, :local, + :is_announcement, :discussion_id ] @attrs @required_attrs ++ @optional_attrs @@ -58,6 +59,7 @@ defmodule Mobilizon.Discussions.Comment do field(:total_replies, :integer, virtual: true, default: 0) field(:deleted_at, :utc_datetime) field(:published_at, :utc_datetime) + field(:is_announcement, :boolean, default: false) belongs_to(:actor, Actor, foreign_key: :actor_id) belongs_to(:attributed_to, Actor, foreign_key: :attributed_to_id) diff --git a/lib/mobilizon/users/activity_setting.ex b/lib/mobilizon/users/activity_setting.ex new file mode 100644 index 00000000..12f956c5 --- /dev/null +++ b/lib/mobilizon/users/activity_setting.ex @@ -0,0 +1,34 @@ +defmodule Mobilizon.Users.ActivitySetting do + @moduledoc """ + Module to manage users settings + """ + + use Ecto.Schema + import Ecto.Changeset + alias Mobilizon.Users.User + + @type t :: %__MODULE__{ + key: String.t(), + method: String.t(), + enabled: boolean() + } + + @attrs [:key, :method, :enabled, :user_id] + + @primary_key {:user_id, :id, autogenerate: false} + schema "user_activity_settings" do + field(:key, :string) + field(:method, :string) + field(:enabled, :boolean) + + belongs_to(:user, User, primary_key: true, type: :id, foreign_key: :id, define_field: false) + end + + @doc false + def changeset(activity_setting, attrs) do + activity_setting + |> cast(attrs, @attrs) + |> validate_required(@attrs) + |> unique_constraint([:key, :method], name: :user_activity_settings_user_id_key_method_index) + end +end diff --git a/lib/mobilizon/users/users.ex b/lib/mobilizon/users/users.ex index b20166ae..d747c06d 100644 --- a/lib/mobilizon/users/users.ex +++ b/lib/mobilizon/users/users.ex @@ -13,7 +13,7 @@ defmodule Mobilizon.Users do alias Mobilizon.{Crypto, Events} alias Mobilizon.Events.FeedToken alias Mobilizon.Storage.{Page, Repo} - alias Mobilizon.Users.{PushSubscription, Setting, User} + alias Mobilizon.Users.{ActivitySetting, PushSubscription, Setting, User} defenum(UserRole, :user_role, [:administrator, :moderator, :user]) @@ -478,6 +478,48 @@ defmodule Mobilizon.Users do Repo.delete(push_subscription) end + @doc """ + Lists the activity settings for an user + + ## Examples + + iex> activity_settings_for_user(user) + [%ActivitySetting{}] + + iex> activity_settings_for_user(user) + [] + + """ + def activity_settings_for_user(%User{id: user_id}) do + ActivitySetting + |> where([a], a.user_id == ^user_id) + |> Repo.all() + end + + def activity_setting(%User{id: user_id}, key, method) do + ActivitySetting + |> where([a], a.user_id == ^user_id and a.key == ^key and a.method == ^method) + |> Repo.one() + end + + @doc """ + Creates an activity setting. Overrides existing values if present + + ## Examples + + iex> create_activity_setting(%{field: value}) + {:ok, %ActivitySetting{}} + + iex> create_activity_setting(%{field: bad_value}) + {:error, %Ecto.Changeset{}} + + """ + def create_activity_setting(attrs \\ %{}) do + %ActivitySetting{} + |> ActivitySetting.changeset(attrs) + |> Repo.insert(on_conflict: :replace_all, conflict_target: [:user_id, :key, :method]) + end + @spec user_by_email_query(String.t(), boolean | nil, boolean()) :: Ecto.Query.t() defp user_by_email_query(email, activated, unconfirmed) do User diff --git a/lib/service/activity/comment.ex b/lib/service/activity/comment.ex index 85c7a596..af0cd7a1 100644 --- a/lib/service/activity/comment.ex +++ b/lib/service/activity/comment.ex @@ -2,12 +2,12 @@ defmodule Mobilizon.Service.Activity.Comment do @moduledoc """ Insert a comment activity """ - alias Mobilizon.{Actors, Discussions, Events} + alias Mobilizon.{Discussions, Events} alias Mobilizon.Actors.Actor alias Mobilizon.Discussions.Comment alias Mobilizon.Events.Event alias Mobilizon.Service.Activity - alias Mobilizon.Service.Workers.ActivityBuilder + alias Mobilizon.Service.Workers.{ActivityBuilder, LegacyNotifierBuilder} @behaviour Activity @@ -17,33 +17,21 @@ defmodule Mobilizon.Service.Activity.Comment do def insert_activity( %Comment{ actor_id: actor_id, - event_id: event_id, - in_reply_to_comment_id: in_reply_to_comment_id + event_id: event_id } = comment, options ) when not is_nil(actor_id) and not is_nil(event_id) do - with {:ok, %Event{attributed_to: %Actor{type: :Group} = group} = event} <- - Events.get_event_with_preload(event_id), - %Actor{id: actor_id} <- Actors.get_actor(actor_id), - subject <- Keyword.fetch!(options, :subject) do - ActivityBuilder.enqueue(:build_activity, %{ - "type" => "event", - "subject" => subject, - "subject_params" => %{ - event_title: event.title, - event_uuid: event.uuid, - comment_reply_to: !is_nil(in_reply_to_comment_id) - }, - "group_id" => group.id, - "author_id" => actor_id, - "object_type" => "comment", - "object_id" => to_string(comment.id), - "inserted_at" => DateTime.utc_now() - }) - else - # Event not from group - {:ok, %Event{}} -> {:ok, nil} + with {:ok, %Event{} = event} <- + Events.get_event_with_preload(event_id) do + # Notify the actors mentionned + notify_mentionned(comment, event) + + # Notify participants if there's a new announcement + notify_announcement(comment, event) + + # Notify event organizer or group that there's new comments + notify_organizer(comment, event, options) end end @@ -53,4 +41,116 @@ defmodule Mobilizon.Service.Activity.Comment do def get_object(comment_id) do Discussions.get_comment(comment_id) end + + defp notify_mentionned(%Comment{actor_id: actor_id, id: comment_id, mentions: mentions}, %Event{ + uuid: uuid, + title: title + }) + when length(mentions) > 0 do + LegacyNotifierBuilder.enqueue(:legacy_notify, %{ + "type" => :comment, + "subject" => :event_comment_mention, + "subject_params" => %{ + event_uuid: uuid, + event_title: title + }, + "author_id" => actor_id, + "object_type" => :comment, + "object_id" => to_string(comment_id), + "inserted_at" => DateTime.utc_now(), + "mentions" => Enum.map(mentions, & &1.actor_id) + }) + end + + defp notify_mentionned(_, _), do: {:ok, :skipped} + + defp notify_announcement( + %Comment{actor_id: actor_id, is_announcement: true, id: comment_id}, + %Event{ + id: event_id, + uuid: uuid, + title: title + } + ) do + LegacyNotifierBuilder.enqueue(:legacy_notify, %{ + "type" => :comment, + "subject" => :participation_event_comment, + "subject_params" => %{ + event_id: event_id, + event_uuid: uuid, + event_title: title + }, + "author_id" => actor_id, + "object_type" => :comment, + "object_id" => to_string(comment_id), + "inserted_at" => DateTime.utc_now() + }) + end + + defp notify_announcement(_, _), do: {:ok, :skipped} + + @spec notify_organizer(Comment.t(), Event.t(), Keyword.t()) :: + {:ok, Oban.Job.t()} | {:ok, :skipped} + defp notify_organizer( + %Comment{ + actor_id: actor_id, + is_announcement: true, + in_reply_to_comment_id: in_reply_to_comment_id, + id: comment_id + }, + %Event{ + uuid: uuid, + title: title, + attributed_to: %Actor{type: :Group, id: group_id} + }, + options + ) do + ActivityBuilder.enqueue(:build_activity, %{ + "type" => "event", + "subject" => Keyword.fetch!(options, :subject), + "subject_params" => %{ + event_title: title, + event_uuid: uuid, + comment_reply_to: !is_nil(in_reply_to_comment_id) + }, + "group_id" => group_id, + "author_id" => actor_id, + "object_type" => "comment", + "object_id" => to_string(comment_id), + "inserted_at" => DateTime.utc_now() + }) + end + + defp notify_organizer( + %Comment{ + actor_id: actor_id, + is_announcement: true, + in_reply_to_comment_id: in_reply_to_comment_id, + id: comment_id + }, + %Event{ + uuid: uuid, + title: title, + attributed_to: nil, + organizer_actor_id: organizer_actor_id + }, + _options + ) + when actor_id !== organizer_actor_id do + LegacyNotifierBuilder.enqueue(:legacy_notify, %{ + "type" => :comment, + "subject" => :event_new_comment, + "subject_params" => %{ + event_title: title, + event_uuid: uuid, + comment_reply_to: !is_nil(in_reply_to_comment_id) + }, + "author_id" => actor_id, + "object_type" => :comment, + "object_id" => to_string(comment_id), + "inserted_at" => DateTime.utc_now() + }) + end + + defp notify_organizer(_, _, _), do: {:ok, :skipped} end diff --git a/lib/service/activity/renderer/comment.ex b/lib/service/activity/renderer/comment.ex new file mode 100644 index 00000000..31febd36 --- /dev/null +++ b/lib/service/activity/renderer/comment.ex @@ -0,0 +1,111 @@ +defmodule Mobilizon.Service.Activity.Renderer.Comment do + @moduledoc """ + Insert a comment activity + """ + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Activity.Renderer + alias Mobilizon.Web.{Endpoint, Gettext} + alias Mobilizon.Web.Router.Helpers, as: Routes + import Mobilizon.Web.Gettext, only: [dgettext: 3] + + @behaviour Renderer + + @impl Renderer + def render(%Activity{} = activity, options) do + locale = Keyword.get(options, :locale, "en") + Gettext.put_locale(locale) + profile = profile(activity) + + case activity.subject do + :event_comment_mention -> + %{ + body: + dgettext( + "activity", + "%{profile} mentionned you in a comment under event %{event}.", + %{ + profile: profile, + event: event_title(activity) + } + ), + url: event_url(activity) + } + + :participation_event_comment -> + %{ + body: + dgettext( + "activity", + "%{profile} has posted an announcement under event %{event}.", + %{ + profile: profile, + event: event_title(activity) + } + ), + url: event_url(activity) + } + + :discussion_mention -> + %{ + body: + dgettext("activity", "%{profile} mentionned you in the discussion %{discussion}.", %{ + profile: profile, + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_renamed -> + %{ + body: + dgettext("activity", "%{profile} renamed the discussion %{discussion}.", %{ + profile: profile, + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_archived -> + %{ + body: + dgettext("activity", "%{profile} archived the discussion %{discussion}.", %{ + profile: profile, + discussion: title(activity) + }), + url: discussion_url(activity) + } + + :discussion_deleted -> + %{ + body: + dgettext("activity", "%{profile} deleted the discussion %{discussion}.", %{ + profile: profile, + discussion: title(activity) + }), + url: nil + } + end + end + + defp discussion_url(activity) do + Routes.page_url( + Endpoint, + :discussion, + Actor.preferred_username_and_domain(activity.group), + activity.subject_params["discussion_slug"] + ) + end + + defp event_url(activity) do + Routes.page_url( + Endpoint, + :event, + activity.subject_params["event_uuid"] + ) + end + + defp profile(activity), do: Actor.display_name_and_username(activity.author) + defp event_title(activity), do: activity.subject_params["event_title"] + defp title(activity), do: activity.subject_params["discussion_title"] +end diff --git a/lib/service/activity/renderer/renderer.ex b/lib/service/activity/renderer/renderer.ex index 5a56edb5..475db67b 100644 --- a/lib/service/activity/renderer/renderer.ex +++ b/lib/service/activity/renderer/renderer.ex @@ -5,7 +5,17 @@ defmodule Mobilizon.Service.Activity.Renderer do alias Mobilizon.Config alias Mobilizon.Activities.Activity - alias Mobilizon.Service.Activity.Renderer.{Discussion, Event, Group, Member, Post, Resource} + + alias Mobilizon.Service.Activity.Renderer.{ + Comment, + Discussion, + Event, + Group, + Member, + Post, + Resource + } + require Logger import Mobilizon.Web.Gettext, only: [dgettext: 3] @@ -41,6 +51,7 @@ defmodule Mobilizon.Service.Activity.Renderer do :member -> Member.render(activity, options) :post -> Post.render(activity, options) :resource -> Resource.render(activity, options) + :comment -> Comment.render(activity, options) _ -> nil end end diff --git a/lib/service/notifier/email.ex b/lib/service/notifier/email.ex index 2db6aa0b..f182e02e 100644 --- a/lib/service/notifier/email.ex +++ b/lib/service/notifier/email.ex @@ -5,7 +5,7 @@ defmodule Mobilizon.Service.Notifier.Email do alias Mobilizon.Activities.Activity alias Mobilizon.{Config, Users} alias Mobilizon.Service.Notifier - alias Mobilizon.Service.Notifier.Email + alias Mobilizon.Service.Notifier.{Email, Filter} alias Mobilizon.Users.{NotificationPendingNotificationDelay, Setting, User} alias Mobilizon.Web.Email.Activity, as: EmailActivity alias Mobilizon.Web.Email.Mailer @@ -17,6 +17,8 @@ defmodule Mobilizon.Service.Notifier.Email do Config.get(__MODULE__, :enabled) end + def send(user, activity, options \\ []) + @impl Notifier def send(%User{} = user, %Activity{} = activity, options) do Email.send(user, [activity], options) @@ -25,7 +27,9 @@ defmodule Mobilizon.Service.Notifier.Email do @impl Notifier def send(%User{email: email, locale: locale} = user, activities, options) when is_list(activities) do - if can_send?(user) do + activities = Enum.filter(activities, &can_send_activity?(&1, user)) + + if can_send?(user) && length(activities) > 0 do email |> EmailActivity.direct_activity(activities, Keyword.put(options, :locale, locale)) |> Mailer.send_email() @@ -37,6 +41,34 @@ defmodule Mobilizon.Service.Notifier.Email do end end + @spec can_send_activity?(Activity.t(), User.t()) :: boolean() + defp can_send_activity?(%Activity{} = activity, %User{} = user) do + Filter.can_send_activity?(activity, "email", user, &default_activity_behavior/1) + end + + @spec default_activity_behavior(String.t()) :: boolean() + defp default_activity_behavior(activity_setting) do + case activity_setting do + "participation_event_updated" -> true + "participation_event_comment" -> true + "event_new_pending_participation" -> true + "event_new_participation" -> false + "event_created" -> false + "event_updated" -> false + "discussion_updated" -> false + "post_published" -> false + "post_updated" -> false + "resource_updated" -> false + "member_request" -> true + "member_updated" -> false + "user_email_password_updated" -> true + "event_comment_mention" -> true + "discussion_mention" -> true + "event_new_comment" -> true + _ -> false + end + end + @type notification_type :: :group_notifications | :notification_pending_participation diff --git a/lib/service/notifier/filter.ex b/lib/service/notifier/filter.ex new file mode 100644 index 00000000..c763c4d6 --- /dev/null +++ b/lib/service/notifier/filter.ex @@ -0,0 +1,60 @@ +defmodule Mobilizon.Service.Notifier.Filter do + alias Mobilizon.Users + alias Mobilizon.Activities.Activity + alias Mobilizon.Users.{ActivitySetting, User} + + @type method :: String.t() + + @spec can_send_activity?(Activity.t(), method(), User.t(), function()) :: boolean() + def can_send_activity?(%Activity{} = activity, method, %User{} = user, get_default) do + case map_activity_to_activity_setting(activity) do + false -> false + key -> user |> Users.activity_setting(key, method) |> enabled?(key, get_default) + end + end + + @spec enabled?(ActivitySetting.t() | nil, String.t(), function()) :: boolean() + defp enabled?(nil, activity_setting, get_default), do: get_default.(activity_setting) + defp enabled?(%ActivitySetting{enabled: enabled}, _activity_setting, _get_default), do: enabled + + # Comment mention + defp map_activity_to_activity_setting(%Activity{subject: :event_comment_mention}), + do: "event_comment_mention" + + # Participation + @spec map_activity_to_activity_setting(Activity.t()) :: String.t() | false + defp map_activity_to_activity_setting(%Activity{subject: :participation_event_updated}), + do: "participation_event_updated" + + defp map_activity_to_activity_setting(%Activity{subject: :participation_event_comment}), + do: "participation_event_comment" + + # Organizers + defp map_activity_to_activity_setting(%Activity{subject: :event_new_pending_participation}), + do: "event_new_pending_participation" + + defp map_activity_to_activity_setting(%Activity{subject: :event_new_participation}), + do: "event_new_participation" + + # Event + defp map_activity_to_activity_setting(%Activity{subject: :event_created}), do: "event_created" + defp map_activity_to_activity_setting(%Activity{type: :event}), do: "event_updated" + + # Post + defp map_activity_to_activity_setting(%Activity{subject: :post_created}), do: "post_published" + defp map_activity_to_activity_setting(%Activity{type: :post}), do: "post_updated" + + # Discussion + defp map_activity_to_activity_setting(%Activity{type: :discussion}), do: "discussion_updated" + + # Resource + defp map_activity_to_activity_setting(%Activity{type: :resource}), do: "resource_updated" + + # Member + defp map_activity_to_activity_setting(%Activity{subject: :member_request}), + do: "member_request" + + defp map_activity_to_activity_setting(%Activity{type: :member}), do: "member" + + defp map_activity_to_activity_setting(_), do: false +end diff --git a/lib/service/notifier/push.ex b/lib/service/notifier/push.ex index 6043e0eb..e604fa01 100644 --- a/lib/service/notifier/push.ex +++ b/lib/service/notifier/push.ex @@ -6,7 +6,7 @@ defmodule Mobilizon.Service.Notifier.Push do alias Mobilizon.{Config, Users} alias Mobilizon.Service.Activity.{Renderer, Utils} alias Mobilizon.Service.Notifier - alias Mobilizon.Service.Notifier.Push + alias Mobilizon.Service.Notifier.{Filter, Push} alias Mobilizon.Storage.Page alias Mobilizon.Users.{PushSubscription, User} @@ -20,11 +20,16 @@ defmodule Mobilizon.Service.Notifier.Push do @impl Notifier def send(user, activity, options \\ []) - def send(%User{id: user_id, locale: locale} = _user, %Activity{} = activity, options) do - options = Keyword.put_new(options, :locale, locale) + def send(%User{id: user_id, locale: locale} = user, %Activity{} = activity, options) do + if can_send_activity?(activity, user) do + options = Keyword.put_new(options, :locale, locale) - %Page{elements: subscriptions} = Users.list_user_push_subscriptions(user_id, 1, 100) - Enum.map(subscriptions, &send_subscription(activity, convert_subscription(&1), options)) + %Page{elements: subscriptions} = Users.list_user_push_subscriptions(user_id, 1, 100) + Enum.each(subscriptions, &send_subscription(activity, convert_subscription(&1), options)) + {:ok, :sent} + else + {:ok, :skipped} + end end @impl Notifier @@ -32,6 +37,34 @@ defmodule Mobilizon.Service.Notifier.Push do Enum.map(activities, &Push.send(user, &1, options)) end + @spec can_send_activity?(Activity.t(), User.t()) :: boolean() + defp can_send_activity?(%Activity{} = activity, %User{} = user) do + Filter.can_send_activity?(activity, "push", user, &default_activity_behavior/1) + end + + @spec default_activity_behavior(String.t()) :: boolean() + defp default_activity_behavior(activity_setting) do + case activity_setting do + "participation_event_updated" -> true + "participation_event_comment" -> true + "event_new_pending_participation" -> true + "event_new_participation" -> false + "event_created" -> false + "event_updated" -> false + "discussion_updated" -> false + "post_published" -> false + "post_updated" -> false + "resource_updated" -> false + "member_request" -> true + "member_updated" -> false + "user_email_password_updated" -> false + "event_comment_mention" -> true + "discussion_mention" -> false + "event_new_comment" -> false + _ -> false + end + end + defp send_subscription(activity, subscription, options) do activity |> payload(options) diff --git a/lib/service/workers/legacy_notifier_builder.ex b/lib/service/workers/legacy_notifier_builder.ex new file mode 100644 index 00000000..af4305e8 --- /dev/null +++ b/lib/service/workers/legacy_notifier_builder.ex @@ -0,0 +1,71 @@ +defmodule Mobilizon.Service.Workers.LegacyNotifierBuilder do + @moduledoc """ + Worker to push legacy notifications + """ + + alias Mobilizon.{Actors, Events, Users} + alias Mobilizon.Activities.Activity + alias Mobilizon.Service.Notifier + + use Mobilizon.Service.Workers.Helper, queue: "activity" + + @impl Oban.Worker + def perform(%Job{args: args}) do + with {"legacy_notify", args} <- Map.pop(args, "op") do + activity = build_activity(args) + + args + |> users_to_notify(args["author_id"]) + |> Enum.each(&Notifier.notify(&1, activity, single_activity: true)) + end + end + + def build_activity(args) do + author = Actors.get_actor(args["author_id"]) + + %Activity{ + type: String.to_existing_atom(args["type"]), + subject: String.to_existing_atom(args["subject"]), + subject_params: args["subject_params"], + inserted_at: DateTime.utc_now(), + object_type: String.to_existing_atom(args["object_type"]), + object_id: args["object_id"], + group: nil, + author: author + } + end + + @spec users_to_notify(map(), integer() | String.t()) :: list(Users.t()) + defp users_to_notify( + %{"subject" => "event_comment_mention", "mentions" => mentionned_actor_ids}, + author_id + ) do + users_from_actor_ids(mentionned_actor_ids, author_id) + end + + defp users_to_notify( + %{ + "subject" => "participation_event_comment", + "subject_params" => subject_params + }, + author_id + ) do + subject_params + |> Map.get("event_id") + |> Events.list_actors_participants_for_event() + |> Enum.map(& &1.id) + |> users_from_actor_ids(author_id) + end + + @spec users_from_actor_ids(list(), integer() | String.t()) :: list(Users.t()) + defp users_from_actor_ids(actor_ids, author_id) do + actor_ids + |> Enum.filter(&(&1 != author_id)) + |> Enum.map(&Actors.get_actor/1) + |> Enum.filter(& &1) + |> Enum.map(& &1.user_id) + |> Enum.filter(& &1) + |> Enum.uniq() + |> Enum.map(&Users.get_user_with_settings!/1) + end +end diff --git a/lib/web/email/activity.ex b/lib/web/email/activity.ex index fecdc0d5..d520d75b 100644 --- a/lib/web/email/activity.ex +++ b/lib/web/email/activity.ex @@ -43,8 +43,15 @@ defmodule Mobilizon.Web.Email.Activity do @spec chunk_activities(list()) :: map() defp chunk_activities(activities) do activities - |> Enum.reduce(%{}, fn %Activity{group: %Actor{id: group_id}} = activity, acc -> - Map.update(acc, group_id, [activity], fn activities -> activities ++ [activity] end) + |> Enum.reduce(%{}, fn activity, acc -> + case activity do + %Activity{group: %Actor{id: group_id}} -> + Map.update(acc, group_id, [activity], fn activities -> activities ++ [activity] end) + + # Not a group activity + %Activity{} -> + Map.update(acc, nil, [activity], fn activities -> activities ++ [activity] end) + end end) |> Enum.map(fn {key, value} -> {key, Enum.sort(value, &(&1.inserted_at <= &2.inserted_at))} @@ -57,20 +64,34 @@ defmodule Mobilizon.Web.Email.Activity do # so it will probably not catch much things @spec filter_duplicates(list()) :: list() defp filter_duplicates(activities) do - Enum.uniq_by(activities, fn %Activity{ - author: %Actor{id: author_id}, - group: %Actor{id: group_id}, - type: type, - subject: subject, - subject_params: subject_params - } -> - %{ - author_id: author_id, - group_id: group_id, - type: type, - subject: subject, - subject_params: subject_params - } + Enum.uniq_by(activities, fn activity -> + case activity do + %Activity{ + author: %Actor{id: author_id}, + group: %Actor{id: group_id}, + type: type, + subject: subject, + subject_params: subject_params + } -> + %{ + author_id: author_id, + group_id: group_id, + type: type, + subject: subject, + subject_params: subject_params + } + + %Activity{ + type: type, + subject: subject, + subject_params: subject_params + } -> + %{ + type: type, + subject: subject, + subject_params: subject_params + } + end end) end end diff --git a/lib/web/templates/email/activity/_comment_activity_item.html.eex b/lib/web/templates/email/activity/_comment_activity_item.html.eex index 9b779ea4..135a194e 100644 --- a/lib/web/templates/email/activity/_comment_activity_item.html.eex +++ b/lib/web/templates/email/activity/_comment_activity_item.html.eex @@ -67,4 +67,35 @@ discussion: "#{@activity.subject_params["discussion_title"]}" } ) |> raw %> + + <% :event_comment_mention -> %> + <%= + dgettext("activity", "%{profile} mentionned you in a comment under event %{event}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + event: " URI.decode()}\"> + #{@activity.subject_params["event_title"]} + " + } + ) |> raw %> + <% :participation_event_comment -> %> + <%= + dgettext("activity", "%{profile} has posted an announcement under event %{event}.", + %{ + profile: "#{Mobilizon.Actors.Actor.display_name_and_username(@activity.author)}", + event: " URI.decode()}\"> + #{@activity.subject_params["event_title"]} + " + } + ) |> raw %> <% end %> \ No newline at end of file diff --git a/lib/web/templates/email/activity/_comment_activity_item.text.eex b/lib/web/templates/email/activity/_comment_activity_item.text.eex index 463fbde4..a3fdd1a0 100644 --- a/lib/web/templates/email/activity/_comment_activity_item.text.eex +++ b/lib/web/templates/email/activity/_comment_activity_item.text.eex @@ -27,4 +27,17 @@ profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), discussion: @activity.subject_params["discussion_title"] } -) %><% end %> \ No newline at end of file +) %> +<%= page_url(Mobilizon.Web.Endpoint, :discussion, Mobilizon.Actors.Actor.preferred_username_and_domain(@activity.group), @activity.subject_params["discussion_slug"]) |> URI.decode() %><% :event_comment_mention -> %><%= dgettext("activity", "%{profile} mentionned you in a comment under %{event}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + event: @activity.subject_params["event_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :event, @activity.subject_params["event_uuid"]) |> URI.decode() %><% :participation_event_comment -> %><%= dgettext("activity", "%{profile} has posted an announcement under event %{event}.", + %{ + profile: Mobilizon.Actors.Actor.display_name_and_username(@activity.author), + event: @activity.subject_params["event_title"] + } +) %> +<%= page_url(Mobilizon.Web.Endpoint, :event, @activity.subject_params["event_uuid"]) |> URI.decode() %><% end %> \ No newline at end of file diff --git a/lib/web/templates/email/email_direct_activity.html.eex b/lib/web/templates/email/email_direct_activity.html.eex index 109cd37e..36de7130 100644 --- a/lib/web/templates/email/email_direct_activity.html.eex +++ b/lib/web/templates/email/email_direct_activity.html.eex @@ -47,43 +47,45 @@
    <%= for {_, group_activities} <- @activities do %>
  • - - - + +
    - - - <%= if hd(group_activities).group.avatar do %> - - <% end %> - + + + <% end %> +
    - - - - - - - - - <%= if hd(group_activities).group.name do %> + <%= if hd(group_activities).group do %> +
    - - <%= hd(group_activities).group.name || "@#{Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)}" %> - -
    + + - -
    + + + <%= if hd(group_activities).group.avatar do %> + + <% end %> + - -
    + + + + + - <% end %> -
    - - @<%= Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group) %> + + <%= hd(group_activities).group.name || "@#{Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)}" %>
    -
    -
    + <%= if hd(group_activities).group.name do %> +
    + + @<%= Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group) %> + +
    +
    + + + + <% end %>
      <%= for activity <- Enum.take(group_activities, 5) do %>
    • diff --git a/lib/web/templates/email/email_direct_activity.text.eex b/lib/web/templates/email/email_direct_activity.text.eex index 4b8a6580..49fb3a60 100644 --- a/lib/web/templates/email/email_direct_activity.text.eex +++ b/lib/web/templates/email/email_direct_activity.text.eex @@ -6,7 +6,9 @@ <%= for {_, group_activities} <- @activities do %> == +<%= if hd(group_activities).group do %> <%= hd(group_activities).group.name || "@#{Mobilizon.Actors.Actor.preferred_username_and_domain(hd(group_activities).group)}" %> +<% end %> <%= for activity <- Enum.take(group_activities, 5) do %> * <%= case activity.type do %><% :discussion -> %><%= render("activity/_discussion_activity_item.text", activity: activity) %><% :event -> %><%= render("activity/_event_activity_item.text", activity: activity) %><% :group -> %><%= render("activity/_group_activity_item.text", activity: activity) %> diff --git a/priv/repo/migrations/20210505172402_add_group_notification_and_last_notification_date_settings.exs b/priv/repo/migrations/20210505172402_add_group_notification_and_last_notification_date_settings.exs index bd22dc9e..f5261b79 100644 --- a/priv/repo/migrations/20210505172402_add_group_notification_and_last_notification_date_settings.exs +++ b/priv/repo/migrations/20210505172402_add_group_notification_and_last_notification_date_settings.exs @@ -3,8 +3,8 @@ defmodule Mobilizon.Storage.Repo.Migrations.AddGroupNotificationAndLastNotificat def change do alter table(:user_settings) do - add(:group_notifications, :integer, default: 10, nullable: false) - add(:last_notification_sent, :utc_datetime, nullable: true) + add(:group_notifications, :integer, default: 10, null: false) + add(:last_notification_sent, :utc_datetime, null: true) end end end diff --git a/priv/repo/migrations/20210526203337_add_user_activity_settings.exs b/priv/repo/migrations/20210526203337_add_user_activity_settings.exs new file mode 100644 index 00000000..2d28de0c --- /dev/null +++ b/priv/repo/migrations/20210526203337_add_user_activity_settings.exs @@ -0,0 +1,15 @@ +defmodule Mobilizon.Storage.Repo.Migrations.AddUserActivitySettings do + use Ecto.Migration + + def change do + create table(:user_activity_settings) do + add(:key, :string, nulla: false) + add(:method, :string, null: false) + add(:enabled, :boolean, null: false) + + add(:user_id, references(:users, on_delete: :delete_all), null: false) + end + + create(unique_index(:user_activity_settings, [:user_id, :key, :method])) + end +end diff --git a/priv/repo/migrations/20210601082412_add_is_announcement_to_comments.exs b/priv/repo/migrations/20210601082412_add_is_announcement_to_comments.exs new file mode 100644 index 00000000..b3e1d312 --- /dev/null +++ b/priv/repo/migrations/20210601082412_add_is_announcement_to_comments.exs @@ -0,0 +1,9 @@ +defmodule Mobilizon.Storage.Repo.Migrations.AddIsAnnouncementToComments do + use Ecto.Migration + + def change do + alter table(:comments) do + add(:is_announcement, :boolean, default: false, null: false) + end + end +end diff --git a/priv/repo/migrations/20210601082613_fix_user_settings_nullable_fields.exs b/priv/repo/migrations/20210601082613_fix_user_settings_nullable_fields.exs new file mode 100644 index 00000000..46438b83 --- /dev/null +++ b/priv/repo/migrations/20210601082613_fix_user_settings_nullable_fields.exs @@ -0,0 +1,10 @@ +defmodule Mobilizon.Storage.Repo.Migrations.FixUserSettingsNullableFields do + use Ecto.Migration + + def change do + alter table(:user_settings) do + modify(:group_notifications, :integer, default: 10, null: false) + modify(:last_notification_sent, :utc_datetime, null: true) + end + end +end From 57c07836aabf22a0d03d85b002bc83f93e277d8b Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Wed, 2 Jun 2021 11:55:50 +0200 Subject: [PATCH 54/67] Add a test to LegacyNotifierBuilder Signed-off-by: Thomas Citharel --- config/test.exs | 5 + .../workers/legacy_notifier_builder.ex | 4 +- .../workers/legacy_notifier_builder_test.exs | 182 ++++++++++++++++++ test/support/data_case.ex | 7 +- 4 files changed, 195 insertions(+), 3 deletions(-) create mode 100644 test/service/workers/legacy_notifier_builder_test.exs diff --git a/config/test.exs b/config/test.exs index 4f024d17..271ad1b6 100644 --- a/config/test.exs +++ b/config/test.exs @@ -82,3 +82,8 @@ config :junit_formatter, report_dir: "." if System.get_env("DOCKER", "false") == "false" && File.exists?("./config/test.secret.exs") do import_config "test.secret.exs" end + +config :mobilizon, Mobilizon.Service.Notifier, + notifiers: [ + Mobilizon.Service.Notifier.Mock + ] diff --git a/lib/service/workers/legacy_notifier_builder.ex b/lib/service/workers/legacy_notifier_builder.ex index af4305e8..80f4c25c 100644 --- a/lib/service/workers/legacy_notifier_builder.ex +++ b/lib/service/workers/legacy_notifier_builder.ex @@ -3,8 +3,8 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilder do Worker to push legacy notifications """ - alias Mobilizon.{Actors, Events, Users} alias Mobilizon.Activities.Activity + alias Mobilizon.{Actors, Events, Users} alias Mobilizon.Service.Notifier use Mobilizon.Service.Workers.Helper, queue: "activity" @@ -20,7 +20,7 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilder do end end - def build_activity(args) do + defp build_activity(args) do author = Actors.get_actor(args["author_id"]) %Activity{ diff --git a/test/service/workers/legacy_notifier_builder_test.exs b/test/service/workers/legacy_notifier_builder_test.exs new file mode 100644 index 00000000..35ae41ff --- /dev/null +++ b/test/service/workers/legacy_notifier_builder_test.exs @@ -0,0 +1,182 @@ +defmodule Mobilizon.Service.Workers.LegacyNotifierBuilderTest do + @moduledoc """ + Test the ActivityBuilder module + """ + + alias Mobilizon.Activities.Activity + alias Mobilizon.Actors.Actor + alias Mobilizon.Discussions.Comment + alias Mobilizon.Events.Event + alias Mobilizon.Service.Notifier.Mock, as: NotifierMock + alias Mobilizon.Service.Workers.LegacyNotifierBuilder + alias Mobilizon.Users.User + + use Mobilizon.DataCase, async: true + import Mox + import Mobilizon.Factory + + @mentionned %{ + "type" => "comment", + "subject" => "event_comment_mention", + "object_type" => "comment", + "inserted_at" => DateTime.utc_now(), + "op" => "legacy_notify" + } + + @announcement %{ + "type" => "comment", + "subject" => "participation_event_comment", + "object_type" => "comment", + "inserted_at" => DateTime.utc_now(), + "op" => "legacy_notify" + } + + setup :verify_on_exit! + + describe "Generates a comment mention notification " do + test "not if the actor is remote" do + %User{} = user1 = insert(:user) + + %Actor{id: actor_id} = actor = insert(:actor, user: user1) + %Actor{id: actor_id_2} = insert(:actor, domain: "remote.tld", user: nil) + + %Event{title: title, uuid: uuid} = event = insert(:event) + %Comment{id: comment_id} = insert(:comment, event: event, actor: actor) + + args = + Map.merge(@mentionned, %{ + "subject_params" => %{ + event_uuid: uuid, + event_title: title + }, + "author_id" => actor_id, + "object_id" => to_string(comment_id), + "mentions" => [actor_id_2] + }) + + NotifierMock + |> expect(:ready?, 0, fn -> true end) + |> expect(:send, 0, fn %User{}, + %Activity{ + type: :comment, + subject: :event_comment_mention, + object_type: :comment + }, + [single_activity: true] -> + {:ok, :sent} + end) + + assert :ok == LegacyNotifierBuilder.perform(%Oban.Job{args: args}) + end + + test "if the actor mentionned is local" do + %User{} = user1 = insert(:user) + %User{} = user2 = insert(:user) + + %Actor{id: actor_id} = actor = insert(:actor, user: user1) + %Actor{id: actor_id_2} = insert(:actor, user: user2) + + %Event{title: title, uuid: uuid} = event = insert(:event) + %Comment{id: comment_id} = insert(:comment, event: event, actor: actor) + + args = + Map.merge(@mentionned, %{ + "subject_params" => %{ + event_uuid: uuid, + event_title: title + }, + "author_id" => actor_id, + "object_id" => to_string(comment_id), + "mentions" => [actor_id_2] + }) + + NotifierMock + |> expect(:ready?, fn -> true end) + |> expect(:send, fn %User{}, + %Activity{ + type: :comment, + subject: :event_comment_mention, + object_type: :comment + }, + [single_activity: true] -> + {:ok, :sent} + end) + + assert :ok == LegacyNotifierBuilder.perform(%Oban.Job{args: args}) + end + end + + describe "Generates an announcement comment notification" do + test "not if there's no participants" do + %User{} = user1 = insert(:user) + + %Actor{id: actor_id} = actor = insert(:actor, user: user1) + %Actor{} = insert(:actor, domain: "remote.tld", user: nil) + + %Event{title: title, uuid: uuid, id: event_id} = event = insert(:event) + %Comment{id: comment_id} = insert(:comment, event: event, actor: actor) + + args = + Map.merge(@announcement, %{ + "subject_params" => %{ + "event_uuid" => uuid, + "event_title" => title, + "event_id" => event_id + }, + "author_id" => actor_id, + "object_id" => to_string(comment_id) + }) + + NotifierMock + |> expect(:ready?, 0, fn -> true end) + |> expect(:send, 0, fn %User{}, + %Activity{ + type: :comment, + subject: :participation_event_comment, + object_type: :comment + }, + [single_activity: true] -> + {:ok, :sent} + end) + + assert :ok == LegacyNotifierBuilder.perform(%Oban.Job{args: args}) + end + + test "if there's some participants" do + %User{} = user1 = insert(:user) + %User{} = user2 = insert(:user) + + %Actor{id: actor_id} = actor = insert(:actor, user: user1) + %Actor{} = actor2 = insert(:actor, user: user2) + + %Event{title: title, uuid: uuid, id: event_id} = event = insert(:event) + %Comment{id: comment_id} = insert(:comment, event: event, actor: actor) + insert(:participant, event: event, actor: actor2) + + args = + Map.merge(@announcement, %{ + "subject_params" => %{ + "event_uuid" => uuid, + "event_title" => title, + "event_id" => event_id + }, + "author_id" => actor_id, + "object_id" => to_string(comment_id) + }) + + NotifierMock + |> expect(:ready?, fn -> true end) + |> expect(:send, fn %User{}, + %Activity{ + type: :comment, + subject: :participation_event_comment, + object_type: :comment + }, + [single_activity: true] -> + {:ok, :sent} + end) + + assert :ok == LegacyNotifierBuilder.perform(%Oban.Job{args: args}) + end + end +end diff --git a/test/support/data_case.ex b/test/support/data_case.ex index 575d7839..e8e6c05c 100644 --- a/test/support/data_case.ex +++ b/test/support/data_case.ex @@ -75,5 +75,10 @@ defmodule Mobilizon.DataCase do end Mox.defmock(Mobilizon.Service.HTTP.ActivityPub.Mock, for: Tesla.Adapter) - Mox.defmock(Mobilizon.Service.HTTP.GeospatialClient.Mock, for: Tesla.Adapter) + + Mox.defmock(Mobilizon.Service.HTTP.GeospatialClient.Mock, + for: Tesla.Adapter + ) + + Mox.defmock(Mobilizon.Service.Notifier.Mock, for: Mobilizon.Service.Notifier) end From 37c179027300e4a680edf0eaf389431601332617 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Wed, 2 Jun 2021 18:37:17 +0200 Subject: [PATCH 55/67] Test CommentActivity legacy notifications Signed-off-by: Thomas Citharel --- lib/service/activity/activity.ex | 3 +- lib/service/activity/comment.ex | 117 ++++++++++++++-------- test/service/activity/comment_test.exs | 131 +++++++++++++++++++++++++ test/support/factory.ex | 1 + 4 files changed, 212 insertions(+), 40 deletions(-) create mode 100644 test/service/activity/comment_test.exs diff --git a/lib/service/activity/activity.ex b/lib/service/activity/activity.ex index e62facd3..3435f44e 100644 --- a/lib/service/activity/activity.ex +++ b/lib/service/activity/activity.ex @@ -6,7 +6,8 @@ defmodule Mobilizon.Service.Activity do alias Mobilizon.Activities.Activity alias Mobilizon.Service.Activity.{Comment, Discussion, Event, Group, Member, Post, Resource} - @callback insert_activity(entity :: struct(), options :: map()) :: {:ok, Oban.Job.t()} + @callback insert_activity(entity :: struct(), options :: map()) :: + {:ok, Oban.Job.t()} | {:ok, any()} @callback get_object(object_id :: String.t() | integer()) :: struct() diff --git a/lib/service/activity/comment.ex b/lib/service/activity/comment.ex index af0cd7a1..dc08b2fb 100644 --- a/lib/service/activity/comment.ex +++ b/lib/service/activity/comment.ex @@ -2,8 +2,8 @@ defmodule Mobilizon.Service.Activity.Comment do @moduledoc """ Insert a comment activity """ - alias Mobilizon.{Discussions, Events} alias Mobilizon.Actors.Actor + alias Mobilizon.{Discussions, Events} alias Mobilizon.Discussions.Comment alias Mobilizon.Events.Event alias Mobilizon.Service.Activity @@ -24,14 +24,16 @@ defmodule Mobilizon.Service.Activity.Comment do when not is_nil(actor_id) and not is_nil(event_id) do with {:ok, %Event{} = event} <- Events.get_event_with_preload(event_id) do - # Notify the actors mentionned - notify_mentionned(comment, event) + res = + [] + # Notify the actors mentionned + |> handle_notification(:mentionned, comment, event, options) + # Notify participants if there's a new announcement + |> handle_notification(:announcement, comment, event, options) + # Notify event organizer or group that there's new comments + |> handle_notification(:organizer, comment, event, options) - # Notify participants if there's a new announcement - notify_announcement(comment, event) - - # Notify event organizer or group that there's new comments - notify_organizer(comment, event, options) + {:ok, res} end end @@ -42,38 +44,76 @@ defmodule Mobilizon.Service.Activity.Comment do Discussions.get_comment(comment_id) end - defp notify_mentionned(%Comment{actor_id: actor_id, id: comment_id, mentions: mentions}, %Event{ - uuid: uuid, - title: title - }) + @common_params %{ + "type" => :comment, + "object_type" => :comment + } + + defp handle_notification(global_res, function, comment, event, options) do + case notify(function, comment, event, options) do + {:ok, res} -> Keyword.put(global_res, function, res) + _ -> Keyword.put(global_res, function, :error) + end + end + + @spec legacy_notifier_enqueue(map()) :: :ok + defp legacy_notifier_enqueue(args) do + LegacyNotifierBuilder.enqueue( + :legacy_notify, + @common_params |> Map.merge(maybe_inserted_at()) |> Map.merge(args) + ) + end + + @spec maybe_inserted_at :: map() + defp maybe_inserted_at do + if Application.fetch_env!(:mobilizon, :env) == :test do + %{} + else + %{"inserted_at" => DateTime.utc_now()} + end + end + + @type notification_type :: atom() + + # An actor is mentionned + @spec notify(notification_type(), Comment.t(), Event.t(), Keyword.t()) :: + {:ok, Oban.Job.t()} | {:ok, :skipped} + defp notify( + :mentionned, + %Comment{actor_id: actor_id, id: comment_id, mentions: mentions}, + %Event{ + uuid: uuid, + title: title + }, + _options + ) when length(mentions) > 0 do - LegacyNotifierBuilder.enqueue(:legacy_notify, %{ - "type" => :comment, + legacy_notifier_enqueue(%{ "subject" => :event_comment_mention, "subject_params" => %{ event_uuid: uuid, event_title: title }, "author_id" => actor_id, - "object_type" => :comment, "object_id" => to_string(comment_id), - "inserted_at" => DateTime.utc_now(), "mentions" => Enum.map(mentions, & &1.actor_id) }) + + {:ok, :enqueued} end - defp notify_mentionned(_, _), do: {:ok, :skipped} - - defp notify_announcement( + # An event has a new announcement, send it to the participants + defp notify( + :announcement, %Comment{actor_id: actor_id, is_announcement: true, id: comment_id}, %Event{ id: event_id, uuid: uuid, title: title - } + }, + _options ) do - LegacyNotifierBuilder.enqueue(:legacy_notify, %{ - "type" => :comment, + legacy_notifier_enqueue(%{ "subject" => :participation_event_comment, "subject_params" => %{ event_id: event_id, @@ -81,20 +121,17 @@ defmodule Mobilizon.Service.Activity.Comment do event_title: title }, "author_id" => actor_id, - "object_type" => :comment, - "object_id" => to_string(comment_id), - "inserted_at" => DateTime.utc_now() + "object_id" => to_string(comment_id) }) + + {:ok, :enqueued} end - defp notify_announcement(_, _), do: {:ok, :skipped} - - @spec notify_organizer(Comment.t(), Event.t(), Keyword.t()) :: - {:ok, Oban.Job.t()} | {:ok, :skipped} - defp notify_organizer( + # A group event has a new comment, send it as an activity + defp notify( + :announcement, %Comment{ actor_id: actor_id, - is_announcement: true, in_reply_to_comment_id: in_reply_to_comment_id, id: comment_id }, @@ -119,12 +156,15 @@ defmodule Mobilizon.Service.Activity.Comment do "object_id" => to_string(comment_id), "inserted_at" => DateTime.utc_now() }) + + {:ok, :enqueued} end - defp notify_organizer( + # An event has a new comment, send it to the organizer + defp notify( + :organizer, %Comment{ actor_id: actor_id, - is_announcement: true, in_reply_to_comment_id: in_reply_to_comment_id, id: comment_id }, @@ -137,8 +177,7 @@ defmodule Mobilizon.Service.Activity.Comment do _options ) when actor_id !== organizer_actor_id do - LegacyNotifierBuilder.enqueue(:legacy_notify, %{ - "type" => :comment, + legacy_notifier_enqueue(%{ "subject" => :event_new_comment, "subject_params" => %{ event_title: title, @@ -146,11 +185,11 @@ defmodule Mobilizon.Service.Activity.Comment do comment_reply_to: !is_nil(in_reply_to_comment_id) }, "author_id" => actor_id, - "object_type" => :comment, - "object_id" => to_string(comment_id), - "inserted_at" => DateTime.utc_now() + "object_id" => to_string(comment_id) }) + + {:ok, :enqueued} end - defp notify_organizer(_, _, _), do: {:ok, :skipped} + defp notify(_, _, _, _), do: {:ok, :skipped} end diff --git a/test/service/activity/comment_test.exs b/test/service/activity/comment_test.exs new file mode 100644 index 00000000..93b7de8c --- /dev/null +++ b/test/service/activity/comment_test.exs @@ -0,0 +1,131 @@ +defmodule Mobilizon.Service.Activity.CommentTest do + @moduledoc """ + Test the Comment activity provider module + """ + + alias Mobilizon.Actors.Actor + alias Mobilizon.Discussions.Comment + alias Mobilizon.Events.Event + alias Mobilizon.Mention + alias Mobilizon.Service.Activity.Comment, as: CommentActivity + alias Mobilizon.Service.Workers.LegacyNotifierBuilder + alias Mobilizon.Users.User + + use Mobilizon.DataCase, async: true + use Oban.Testing, repo: Mobilizon.Storage.Repo + import Mobilizon.Factory + + describe "handle comment with mentions" do + test "with no mentions" do + %Event{title: event_title, uuid: event_uuid} = event = insert(:event) + %Comment{id: comment_id, actor_id: author_id} = comment = insert(:comment, event: event) + + assert [organizer: :enqueued, announcement: :skipped, mentionned: :skipped] == + CommentActivity.insert_activity(comment) + + refute_enqueued( + worker: LegacyNotifierBuilder, + args: %{op: :event_comment_mention} + ) + + assert_enqueued( + worker: LegacyNotifierBuilder, + args: %{ + "author_id" => author_id, + "object_id" => to_string(comment_id), + "object_type" => "comment", + "op" => "legacy_notify", + "subject" => "event_new_comment", + "subject_params" => %{ + "event_title" => event_title, + "event_uuid" => event_uuid, + "comment_reply_to" => false + }, + "type" => "comment" + } + ) + end + + test "with some mentions" do + %User{} = user = insert(:user) + %Actor{id: actor_id} = actor = insert(:actor, user: user) + %Event{uuid: event_uuid, title: event_title} = event = insert(:event) + + %Comment{id: comment_id, actor_id: author_id} = + comment = insert(:comment, text: "Hey @you", event: event) + + comment = %Comment{ + comment + | mentions: [ + %Mention{actor: actor, event: event, comment: comment, actor_id: actor_id} + ] + } + + assert [organizer: :enqueued, announcement: :skipped, mentionned: :enqueued] == + CommentActivity.insert_activity(comment) + + assert_enqueued( + worker: LegacyNotifierBuilder, + args: %{ + "author_id" => author_id, + "mentions" => [actor_id], + "object_id" => to_string(comment_id), + "object_type" => "comment", + "op" => "legacy_notify", + "subject" => "event_comment_mention", + "subject_params" => %{ + "event_title" => event_title, + "event_uuid" => event_uuid + }, + "type" => "comment" + } + ) + + assert_enqueued( + worker: LegacyNotifierBuilder, + args: %{ + "author_id" => author_id, + "object_id" => to_string(comment_id), + "object_type" => "comment", + "op" => "legacy_notify", + "subject" => "event_new_comment", + "subject_params" => %{ + "event_title" => event_title, + "event_uuid" => event_uuid, + "comment_reply_to" => false + }, + "type" => "comment" + } + ) + end + end + + describe "handle comment which is an announcement" do + test "schedules a notification for the participants" do + %Event{uuid: event_uuid, title: event_title, id: event_id} = event = insert(:event) + + %Comment{id: comment_id, actor_id: author_id} = + comment = insert(:comment, text: "Hey you", event: event, is_announcement: true) + + assert [organizer: :enqueued, announcement: :enqueued, mentionned: :skipped] == + CommentActivity.insert_activity(comment) + + assert_enqueued( + worker: LegacyNotifierBuilder, + args: %{ + "author_id" => author_id, + "object_id" => to_string(comment_id), + "object_type" => "comment", + "op" => "legacy_notify", + "subject" => "participation_event_comment", + "subject_params" => %{ + "event_title" => event_title, + "event_uuid" => event_uuid, + "event_id" => event_id + }, + "type" => "comment" + } + ) + end + end +end diff --git a/test/support/factory.ex b/test/support/factory.ex index e956f255..cd8bd784 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -156,6 +156,7 @@ defmodule Mobilizon.Factory do deleted_at: nil, tags: build_list(3, :tag), in_reply_to_comment: nil, + is_announcement: false, published_at: DateTime.utc_now(), url: Routes.page_url(Endpoint, :comment, uuid) } From c0ab3d99058235cf20fd0f2b90ab1fe02849fce6 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 3 Jun 2021 15:00:49 +0200 Subject: [PATCH 56/67] Fix credo warnings Signed-off-by: Thomas Citharel --- lib/graphql/resolvers/push_subscription.ex | 2 +- lib/mobilizon/users/push_subscription.ex | 3 + lib/service/activity/renderer/member.ex | 118 +++++++-------------- lib/service/activity/renderer/renderer.ex | 2 +- lib/service/notifier/email.ex | 39 +++---- lib/service/notifier/filter.ex | 5 +- lib/service/notifier/push.ex | 39 +++---- 7 files changed, 85 insertions(+), 123 deletions(-) diff --git a/lib/graphql/resolvers/push_subscription.ex b/lib/graphql/resolvers/push_subscription.ex index 30be6482..dd2018db 100644 --- a/lib/graphql/resolvers/push_subscription.ex +++ b/lib/graphql/resolvers/push_subscription.ex @@ -3,8 +3,8 @@ defmodule Mobilizon.GraphQL.Resolvers.PushSubscription do Handles the push subscriptions-related GraphQL calls. """ - alias Mobilizon.Users alias Mobilizon.Storage.Page + alias Mobilizon.Users alias Mobilizon.Users.{PushSubscription, User} @doc """ diff --git a/lib/mobilizon/users/push_subscription.ex b/lib/mobilizon/users/push_subscription.ex index 2dc8c24c..737139f2 100644 --- a/lib/mobilizon/users/push_subscription.ex +++ b/lib/mobilizon/users/push_subscription.ex @@ -1,4 +1,7 @@ defmodule Mobilizon.Users.PushSubscription do + @moduledoc """ + Represents informations about a push subscription for a specific user + """ use Ecto.Schema alias Mobilizon.Users.User import Ecto.Changeset diff --git a/lib/service/activity/renderer/member.ex b/lib/service/activity/renderer/member.ex index 4e804229..39d468fb 100644 --- a/lib/service/activity/renderer/member.ex +++ b/lib/service/activity/renderer/member.ex @@ -16,96 +16,50 @@ defmodule Mobilizon.Service.Activity.Renderer.Member do locale = Keyword.get(options, :locale, "en") Gettext.put_locale(locale) - case activity.subject do - :member_request -> - %{ - body: - dgettext("activity", "%{member} requested to join the group.", %{ - profile: profile(activity), - member: title(activity) - }), - url: member_url(activity) - } + %{ + body: + text(activity.subject, %{ + profile: profile(activity), + member: title(activity) + }), + url: member_url(activity) + } + end - :member_invited -> - %{ - body: - dgettext("activity", "%{member} was invited by %{profile}.", %{ - profile: profile(activity), - member: title(activity) - }), - url: member_url(activity) - } + defp text(:member_request, args) do + dgettext("activity", "%{member} requested to join the group.", args) + end - :member_accepted_invitation -> - %{ - body: - dgettext("activity", "%{member} accepted the invitation to join the group.", %{ - profile: profile(activity), - member: title(activity) - }), - url: member_url(activity) - } + defp text(:member_invited, args) do + dgettext("activity", "%{member} was invited by %{profile}.", args) + end - :member_rejected_invitation -> - %{ - body: - dgettext("activity", "%{member} rejected the invitation to join the group.", %{ - profile: profile(activity), - member: title(activity) - }), - url: member_url(activity) - } + defp text(:member_accepted_invitation, args) do + dgettext("activity", "%{member} accepted the invitation to join the group.", args) + end - :member_joined -> - %{ - body: - dgettext("activity", "%{member} joined the group.", %{ - member: title(activity) - }), - url: member_url(activity) - } + defp text(:member_rejected_invitation, args) do + dgettext("activity", "%{member} rejected the invitation to join the group.", args) + end - :member_added -> - %{ - body: - dgettext("activity", "%{profile} added the member %{member}.", %{ - profile: profile(activity), - member: title(activity) - }), - url: member_url(activity) - } + defp text(:member_joined, args) do + dgettext("activity", "%{member} joined the group.", args) + end - :member_updated -> - %{ - body: - dgettext("activity", "%{profile} updated the member %{member}.", %{ - profile: profile(activity), - member: title(activity) - }), - url: member_url(activity) - } + defp text(:member_added, args) do + dgettext("activity", "%{profile} added the member %{member}.", args) + end - :member_removed -> - %{ - body: - dgettext("activity", "%{profile} excluded member %{member}.", %{ - profile: profile(activity), - member: title(activity) - }), - url: member_url(activity) - } + defp text(:member_updated, args) do + dgettext("activity", "%{profile} updated the member %{member}.", args) + end - :member_quit -> - %{ - body: - dgettext("activity", "%{profile} quit the group.", %{ - profile: profile(activity), - member: title(activity) - }), - url: member_url(activity) - } - end + defp text(:member_removed, args) do + dgettext("activity", "%{profile} excluded member %{member}.", args) + end + + defp text(:member_quit, args) do + dgettext("activity", "%{profile} quit the group.", args) end defp member_url(activity) do diff --git a/lib/service/activity/renderer/renderer.ex b/lib/service/activity/renderer/renderer.ex index 475db67b..87e1d56d 100644 --- a/lib/service/activity/renderer/renderer.ex +++ b/lib/service/activity/renderer/renderer.ex @@ -3,8 +3,8 @@ defmodule Mobilizon.Service.Activity.Renderer do Behavior for Activity renderers """ - alias Mobilizon.Config alias Mobilizon.Activities.Activity + alias Mobilizon.Config alias Mobilizon.Service.Activity.Renderer.{ Comment, diff --git a/lib/service/notifier/email.ex b/lib/service/notifier/email.ex index f182e02e..eceaa49b 100644 --- a/lib/service/notifier/email.ex +++ b/lib/service/notifier/email.ex @@ -46,27 +46,28 @@ defmodule Mobilizon.Service.Notifier.Email do Filter.can_send_activity?(activity, "email", user, &default_activity_behavior/1) end + @default_behavior %{ + "participation_event_updated" => true, + "participation_event_comment" => true, + "event_new_pending_participation" => true, + "event_new_participation" => false, + "event_created" => false, + "event_updated" => false, + "discussion_updated" => false, + "post_published" => false, + "post_updated" => false, + "resource_updated" => false, + "member_request" => true, + "member_updated" => false, + "user_email_password_updated" => true, + "event_comment_mention" => true, + "discussion_mention" => true, + "event_new_comment" => true + } + @spec default_activity_behavior(String.t()) :: boolean() defp default_activity_behavior(activity_setting) do - case activity_setting do - "participation_event_updated" -> true - "participation_event_comment" -> true - "event_new_pending_participation" -> true - "event_new_participation" -> false - "event_created" -> false - "event_updated" -> false - "discussion_updated" -> false - "post_published" -> false - "post_updated" -> false - "resource_updated" -> false - "member_request" -> true - "member_updated" -> false - "user_email_password_updated" -> true - "event_comment_mention" -> true - "discussion_mention" -> true - "event_new_comment" -> true - _ -> false - end + Map.get(@default_behavior, activity_setting, false) end @type notification_type :: diff --git a/lib/service/notifier/filter.ex b/lib/service/notifier/filter.ex index c763c4d6..c3708a93 100644 --- a/lib/service/notifier/filter.ex +++ b/lib/service/notifier/filter.ex @@ -1,6 +1,9 @@ defmodule Mobilizon.Service.Notifier.Filter do - alias Mobilizon.Users + @moduledoc """ + Module to filter activities to notify according to user's activity settings + """ alias Mobilizon.Activities.Activity + alias Mobilizon.Users alias Mobilizon.Users.{ActivitySetting, User} @type method :: String.t() diff --git a/lib/service/notifier/push.ex b/lib/service/notifier/push.ex index e604fa01..6cec1d92 100644 --- a/lib/service/notifier/push.ex +++ b/lib/service/notifier/push.ex @@ -42,27 +42,28 @@ defmodule Mobilizon.Service.Notifier.Push do Filter.can_send_activity?(activity, "push", user, &default_activity_behavior/1) end + @default_behavior %{ + "participation_event_updated" => true, + "participation_event_comment" => true, + "event_new_pending_participation" => true, + "event_new_participation" => false, + "event_created" => false, + "event_updated" => false, + "discussion_updated" => false, + "post_published" => false, + "post_updated" => false, + "resource_updated" => false, + "member_request" => true, + "member_updated" => false, + "user_email_password_updated" => false, + "event_comment_mention" => true, + "discussion_mention" => false, + "event_new_comment" => false + } + @spec default_activity_behavior(String.t()) :: boolean() defp default_activity_behavior(activity_setting) do - case activity_setting do - "participation_event_updated" -> true - "participation_event_comment" -> true - "event_new_pending_participation" -> true - "event_new_participation" -> false - "event_created" -> false - "event_updated" -> false - "discussion_updated" -> false - "post_published" -> false - "post_updated" -> false - "resource_updated" -> false - "member_request" -> true - "member_updated" -> false - "user_email_password_updated" -> false - "event_comment_mention" -> true - "discussion_mention" -> false - "event_new_comment" -> false - _ -> false - end + Map.get(@default_behavior, activity_setting, false) end defp send_subscription(activity, subscription, options) do From d3164899f32f8cb3ca898abd8a6660c60978488a Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 3 Jun 2021 17:17:13 +0200 Subject: [PATCH 57/67] Fix tests Signed-off-by: Thomas Citharel --- config/config.exs | 4 + lib/mobilizon/users/user.ex | 3 +- lib/service/notifier/email.ex | 2 +- lib/service/notifier/filter.ex | 7 +- lib/service/notifier/push.ex | 2 +- test/service/activity/comment_test.exs | 6 +- test/service/notifier/email_test.exs | 93 +++++++++++++++++++ test/service/notifier/push_test.exs | 64 +++++++++++++ .../service/workers/activity_builder_test.exs | 42 ++++++--- test/support/factory.ex | 25 ++++- 10 files changed, 224 insertions(+), 24 deletions(-) create mode 100644 test/service/notifier/email_test.exs create mode 100644 test/service/notifier/push_test.exs diff --git a/config/config.exs b/config/config.exs index 8808913f..a73bba6a 100644 --- a/config/config.exs +++ b/config/config.exs @@ -309,6 +309,10 @@ config :mobilizon, Mobilizon.Service.Notifier, Mobilizon.Service.Notifier.Push ] +config :mobilizon, Mobilizon.Service.Notifier.Email, enabled: true + +config :mobilizon, Mobilizon.Service.Notifier.Push, enabled: true + # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{config_env()}.exs" diff --git a/lib/mobilizon/users/user.ex b/lib/mobilizon/users/user.ex index c5bf94e5..77110041 100644 --- a/lib/mobilizon/users/user.ex +++ b/lib/mobilizon/users/user.ex @@ -10,7 +10,7 @@ defmodule Mobilizon.Users.User do alias Mobilizon.Actors.Actor alias Mobilizon.Crypto alias Mobilizon.Events.FeedToken - alias Mobilizon.Users.{Setting, UserRole} + alias Mobilizon.Users.{ActivitySetting, Setting, UserRole} alias Mobilizon.Web.Email.Checker import Mobilizon.Web.Gettext @@ -90,6 +90,7 @@ defmodule Mobilizon.Users.User do has_many(:actors, Actor) has_many(:feed_tokens, FeedToken, foreign_key: :user_id) has_one(:settings, Setting) + has_many(:activity_settings, ActivitySetting) timestamps() end diff --git a/lib/service/notifier/email.ex b/lib/service/notifier/email.ex index eceaa49b..4b7ad583 100644 --- a/lib/service/notifier/email.ex +++ b/lib/service/notifier/email.ex @@ -14,7 +14,7 @@ defmodule Mobilizon.Service.Notifier.Email do @impl Notifier def ready? do - Config.get(__MODULE__, :enabled) + Config.get([__MODULE__, :enabled]) end def send(user, activity, options \\ []) diff --git a/lib/service/notifier/filter.ex b/lib/service/notifier/filter.ex index c3708a93..8370247d 100644 --- a/lib/service/notifier/filter.ex +++ b/lib/service/notifier/filter.ex @@ -11,8 +11,11 @@ defmodule Mobilizon.Service.Notifier.Filter do @spec can_send_activity?(Activity.t(), method(), User.t(), function()) :: boolean() def can_send_activity?(%Activity{} = activity, method, %User{} = user, get_default) do case map_activity_to_activity_setting(activity) do - false -> false - key -> user |> Users.activity_setting(key, method) |> enabled?(key, get_default) + false -> + false + + key when is_binary(key) -> + user |> Users.activity_setting(key, method) |> enabled?(key, get_default) end end diff --git a/lib/service/notifier/push.ex b/lib/service/notifier/push.ex index 6cec1d92..36a0cfc9 100644 --- a/lib/service/notifier/push.ex +++ b/lib/service/notifier/push.ex @@ -14,7 +14,7 @@ defmodule Mobilizon.Service.Notifier.Push do @impl Notifier def ready? do - Config.get(__MODULE__, :enabled) + Config.get([__MODULE__, :enabled]) end @impl Notifier diff --git a/test/service/activity/comment_test.exs b/test/service/activity/comment_test.exs index 93b7de8c..95118a46 100644 --- a/test/service/activity/comment_test.exs +++ b/test/service/activity/comment_test.exs @@ -20,7 +20,7 @@ defmodule Mobilizon.Service.Activity.CommentTest do %Event{title: event_title, uuid: event_uuid} = event = insert(:event) %Comment{id: comment_id, actor_id: author_id} = comment = insert(:comment, event: event) - assert [organizer: :enqueued, announcement: :skipped, mentionned: :skipped] == + assert {:ok, [organizer: :enqueued, announcement: :skipped, mentionned: :skipped]} == CommentActivity.insert_activity(comment) refute_enqueued( @@ -61,7 +61,7 @@ defmodule Mobilizon.Service.Activity.CommentTest do ] } - assert [organizer: :enqueued, announcement: :skipped, mentionned: :enqueued] == + assert {:ok, [organizer: :enqueued, announcement: :skipped, mentionned: :enqueued]} == CommentActivity.insert_activity(comment) assert_enqueued( @@ -107,7 +107,7 @@ defmodule Mobilizon.Service.Activity.CommentTest do %Comment{id: comment_id, actor_id: author_id} = comment = insert(:comment, text: "Hey you", event: event, is_announcement: true) - assert [organizer: :enqueued, announcement: :enqueued, mentionned: :skipped] == + assert {:ok, [organizer: :enqueued, announcement: :enqueued, mentionned: :skipped]} == CommentActivity.insert_activity(comment) assert_enqueued( diff --git a/test/service/notifier/email_test.exs b/test/service/notifier/email_test.exs new file mode 100644 index 00000000..049b178f --- /dev/null +++ b/test/service/notifier/email_test.exs @@ -0,0 +1,93 @@ +defmodule Mobilizon.Service.Notifier.EmailTest do + @moduledoc """ + Test the Email notifier module + """ + + alias Mobilizon.Activities.Activity + alias Mobilizon.Config + alias Mobilizon.Service.Notifier.Email + alias Mobilizon.Users.{ActivitySetting, Setting, User} + alias Mobilizon.Web.Email.Activity, as: EmailActivity + + use Mobilizon.DataCase + use Bamboo.Test + + import Mobilizon.Factory + + describe "Returns if the module is loaded" do + test "Loaded by default" do + assert Email.ready?() == true + end + + test "If disabled" do + Config.put([Email, :enabled], false) + assert Email.ready?() == false + Config.put([Email, :enabled], true) + end + end + + describe "sending email for activities" do + test "when the user doesn't allow it" do + %Activity{} = activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now()) + %User{} = user = insert(:user) + %Setting{} = user_settings = insert(:settings, user_id: user.id, group_notifications: :none) + user = %User{user | settings: user_settings} + + assert {:ok, :skipped} == Email.send(user, activity) + + refute_delivered_email( + EmailActivity.direct_activity( + user.email, + [activity] + ) + ) + end + + test "when the user allows it" do + %Activity{} = activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now()) + %User{} = user = insert(:user) + %Setting{} = user_settings = insert(:settings, user_id: user.id) + + %ActivitySetting{} = + activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user) + + user = %User{user | settings: user_settings, activity_settings: [activity_setting]} + + assert {:ok, :sent} == Email.send(user, activity) + + assert_delivered_email( + EmailActivity.direct_activity( + user.email, + [activity] + ) + ) + end + + test "not if we already have sent notifications" do + %Activity{} = activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now()) + %User{} = user = insert(:user) + + %Setting{} = + user_settings = + insert(:settings, + user_id: user.id, + group_notifications: :one_day, + last_notification_sent: DateTime.add(DateTime.utc_now(), 3600) + ) + + %ActivitySetting{} = + activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user) + + user = %User{user | settings: user_settings, activity_settings: [activity_setting]} + + assert {:ok, :skipped} == Email.send(user, activity) + + refute_delivered_email( + EmailActivity.direct_activity( + user.email, + [activity] + ) + ) + end + end +end diff --git a/test/service/notifier/push_test.exs b/test/service/notifier/push_test.exs new file mode 100644 index 00000000..ff2c6a08 --- /dev/null +++ b/test/service/notifier/push_test.exs @@ -0,0 +1,64 @@ +defmodule Mobilizon.Service.Notifier.PushTest do + @moduledoc """ + Test the Push notifier module + """ + + alias Mobilizon.Activities.Activity + alias Mobilizon.Config + alias Mobilizon.Service.Notifier.Push + alias Mobilizon.Users.{ActivitySetting, Setting, User} + + use Mobilizon.DataCase + use Bamboo.Test + + import Mobilizon.Factory + + describe "Returns if the module is loaded" do + test "Loaded by default" do + assert Push.ready?() == true + end + + test "If disabled" do + Config.put([Push, :enabled], false) + assert Push.ready?() == false + Config.put([Push, :enabled], true) + end + end + + describe "sending push notification for activities" do + test "when the user doesn't allow it" do + %Activity{} = activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now()) + %User{} = user = insert(:user) + %Setting{} = user_settings = insert(:settings, user_id: user.id) + user = %User{user | settings: user_settings} + + assert {:ok, :skipped} == Push.send(user, activity) + end + + test "when the user allows it" do + event = insert(:event) + + %Activity{} = + activity = + insert(:mobilizon_activity, + inserted_at: DateTime.utc_now(), + object_id: to_string(event.id), + subject_params: %{ + "event_title" => event.title, + "event_uuid" => event.uuid, + "event_id" => event.id + } + ) + + %User{} = user = insert(:user) + %Setting{} = user_settings = insert(:settings, user_id: user.id) + + %ActivitySetting{} = + activity_setting = + insert(:mobilizon_activity_setting, user_id: user.id, user: user, method: "push") + + user = %User{user | settings: user_settings, activity_settings: [activity_setting]} + assert {:ok, :sent} == Push.send(user, activity) + end + end +end diff --git a/test/service/workers/activity_builder_test.exs b/test/service/workers/activity_builder_test.exs index 955f989b..e73a9a68 100644 --- a/test/service/workers/activity_builder_test.exs +++ b/test/service/workers/activity_builder_test.exs @@ -5,14 +5,16 @@ defmodule Mobilizon.Service.Workers.ActivityBuilderTest do alias Mobilizon.Activities.Activity alias Mobilizon.Actors.Actor + alias Mobilizon.Service.Notifier.Mock, as: NotifierMock alias Mobilizon.Service.Workers.ActivityBuilder alias Mobilizon.Users.User - alias Mobilizon.Web.Email.Activity, as: EmailActivity use Mobilizon.DataCase - use Bamboo.Test import Mobilizon.Factory + import Mox + + setup :verify_on_exit! describe "Sends direct email notification to users" do test "if the user has a profile member of a group" do @@ -26,14 +28,19 @@ defmodule Mobilizon.Service.Workers.ActivityBuilderTest do %Activity{} = activity = insert(:mobilizon_activity, group: group, inserted_at: DateTime.utc_now()) - assert :ok == ActivityBuilder.notify_activity(activity) + NotifierMock + |> expect(:ready?, 1, fn -> true end) + |> expect(:send, 1, fn %User{}, + %Activity{ + type: :event, + subject: :event_created, + object_type: :event + }, + [single_activity: true] -> + {:ok, :sent} + end) - assert_delivered_email( - EmailActivity.direct_activity( - user.email, - [activity] - ) - ) + assert :ok == ActivityBuilder.notify_activity(activity) end test "unless if the user has a profile member of a group" do @@ -50,12 +57,17 @@ defmodule Mobilizon.Service.Workers.ActivityBuilderTest do assert :ok == ActivityBuilder.notify_activity(activity) - refute_delivered_email( - EmailActivity.direct_activity( - user.email, - [activity] - ) - ) + NotifierMock + |> expect(:ready?, 0, fn -> true end) + |> expect(:send, 0, fn %User{}, + %Activity{ + type: :event, + subject: :event_created, + object_type: :event + }, + [single_activity: true] -> + {:ok, :sent} + end) end end end diff --git a/test/support/factory.ex b/test/support/factory.ex index cd8bd784..c55039ac 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -418,11 +418,34 @@ defmodule Mobilizon.Factory do %Mobilizon.Activities.Activity{ type: :event, subject: :event_created, - subject_params: %{event_title: event.title}, + subject_params: %{ + "event_title" => event.title, + "event_uuid" => event.uuid, + "event_id" => event.id + }, author: actor, group: group, object_type: :event, object_id: to_string(event.id) } end + + def mobilizon_activity_setting_factory do + %Mobilizon.Users.ActivitySetting{ + key: "event_created", + method: "email", + enabled: true, + user: build(:user) + } + end + + def push_subscription_factory do + %Mobilizon.Users.PushSubscription{ + digest: "", + endpoint: "", + auth: "", + p256dh: "", + user: build(:user) + } + end end From f699efe10901299cdf08596102fa104915dc54af Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 3 Jun 2021 18:58:47 +0200 Subject: [PATCH 58/67] Add the isAnnouncement comment property to test data Signed-off-by: Thomas Citharel --- test/federation/activity_pub/utils_test.exs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/federation/activity_pub/utils_test.exs b/test/federation/activity_pub/utils_test.exs index 40468d91..d62f00d5 100644 --- a/test/federation/activity_pub/utils_test.exs +++ b/test/federation/activity_pub/utils_test.exs @@ -34,7 +34,8 @@ defmodule Mobilizon.Federation.ActivityPub.UtilsTest do "inReplyTo" => comment.url, "attributedTo" => reply.actor.url, "mediaType" => "text/html", - "published" => reply.published_at |> DateTime.to_iso8601() + "published" => reply.published_at |> DateTime.to_iso8601(), + "isAnnouncement" => false } == Converter.Comment.model_to_as(reply) end From 96511ea4bce3f00d0cc60e581b0d3551ac234b04 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 4 Jun 2021 09:00:59 +0200 Subject: [PATCH 59/67] Fix report resolver test Signed-off-by: Thomas Citharel --- test/graphql/resolvers/report_test.exs | 103 +++++++++---------------- 1 file changed, 37 insertions(+), 66 deletions(-) diff --git a/test/graphql/resolvers/report_test.exs b/test/graphql/resolvers/report_test.exs index 8d74659f..370cb477 100644 --- a/test/graphql/resolvers/report_test.exs +++ b/test/graphql/resolvers/report_test.exs @@ -182,34 +182,38 @@ defmodule Mobilizon.GraphQL.Resolvers.ReportTest do end describe "Resolver: Get list of reports" do + @reports_query """ + query ListReports($page: Int, $limit: Int) { + reports(page: $page, limit: $limit) { + elements { + id + reported { + id + preferredUsername + } + content, + updatedAt + } + total + } + } + """ + test "get an empty list of reports", %{conn: conn} do %User{} = user_moderator = insert(:user, role: :moderator) - query = """ - { - reports { - id, - reported { - preferredUsername - } - } - } - """ + res = AbsintheHelpers.graphql_query(conn, query: @reports_query) - res = - conn - |> get("/api", AbsintheHelpers.query_skeleton(query, "report")) - - assert json_response(res, 200)["errors"] |> hd |> Map.get("message") == + assert hd(res["errors"])["message"] == "You need to be logged-in and a moderator to list reports" res = conn |> auth_conn(user_moderator) - |> get("/api", AbsintheHelpers.query_skeleton(query, "report")) + |> AbsintheHelpers.graphql_query(query: @reports_query) - assert json_response(res, 200)["errors"] == nil - assert json_response(res, 200)["data"]["reports"] == [] + assert res["errors"] == nil + assert res["data"]["reports"]["elements"] == [] end test "get a list of reports", %{conn: conn} do @@ -224,67 +228,34 @@ defmodule Mobilizon.GraphQL.Resolvers.ReportTest do %Report{id: report_3_id} = insert(:report, content: "My content 3") %Report{} = insert(:report, status: :closed) - query = """ - { - reports { - id, - reported { - preferredUsername - }, - content, - updatedAt - } - } - """ - res = conn |> auth_conn(user_moderator) - |> get("/api", AbsintheHelpers.query_skeleton(query, "report")) + |> AbsintheHelpers.graphql_query(query: @reports_query) - assert json_response(res, 200)["errors"] == nil + assert res["errors"] == nil + assert res["data"]["reports"]["total"] == 3 - assert json_response(res, 200)["data"]["reports"] + assert res["data"]["reports"]["elements"] |> Enum.map(fn report -> Map.get(report, "id") end) == Enum.map([report_3_id, report_2_id, report_1_id], &to_string/1) - query = """ - { - reports(page: 2, limit: 2) { - id, - reported { - preferredUsername - } - } - } - """ + res = + conn + |> auth_conn(user_moderator) + |> AbsintheHelpers.graphql_query(query: @reports_query, variables: %{page: 2, limit: 2}) + + assert res["errors"] == nil + assert res["data"]["reports"]["total"] == 3 + assert res["data"]["reports"]["elements"] |> length == 1 res = conn |> auth_conn(user_moderator) - |> get("/api", AbsintheHelpers.query_skeleton(query, "report")) + |> AbsintheHelpers.graphql_query(query: @reports_query, variables: %{page: 3, limit: 2}) - assert json_response(res, 200)["errors"] == nil - assert json_response(res, 200)["data"]["reports"] |> length == 1 - - query = """ - { - reports(page: 3, limit: 2) { - id, - reported { - preferredUsername - } - } - } - """ - - res = - conn - |> auth_conn(user_moderator) - |> get("/api", AbsintheHelpers.query_skeleton(query, "report")) - - assert json_response(res, 200)["errors"] == nil - assert json_response(res, 200)["data"]["reports"] |> length == 0 + assert res["errors"] == nil + assert res["data"]["reports"]["elements"] |> length == 0 end end From 8d87cd12a9e8431e80cd7398f207ed7bc6f5b27d Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 4 Jun 2021 10:01:12 +0200 Subject: [PATCH 60/67] Fix an activity test related to Notifier mock Signed-off-by: Thomas Citharel --- test/graphql/resolvers/activity_test.exs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/graphql/resolvers/activity_test.exs b/test/graphql/resolvers/activity_test.exs index 437c0e55..5b2053f6 100644 --- a/test/graphql/resolvers/activity_test.exs +++ b/test/graphql/resolvers/activity_test.exs @@ -13,6 +13,12 @@ defmodule Mobilizon.GraphQL.Resolvers.ActivityTest do setup %{conn: conn} do group = insert(:group) + + Mobilizon.Config.put([Mobilizon.Service.Notifier, :notifiers], [ + Mobilizon.Service.Notifier.Email, + Mobilizon.Service.Notifier.Push + ]) + {:ok, conn: conn, group: group} end From 71cecb5b2c09ae9ab52993b165051443c2a72171 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 4 Jun 2021 13:08:05 +0200 Subject: [PATCH 61/67] Fix tests Signed-off-by: Thomas Citharel --- config/test.exs | 5 ----- test/graphql/resolvers/activity_test.exs | 5 ----- test/service/workers/activity_builder_test.exs | 12 +++++++++++- .../service/workers/legacy_notifier_builder_test.exs | 10 ++++++++++ test/support/data_case.ex | 2 -- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/config/test.exs b/config/test.exs index 271ad1b6..4f024d17 100644 --- a/config/test.exs +++ b/config/test.exs @@ -82,8 +82,3 @@ config :junit_formatter, report_dir: "." if System.get_env("DOCKER", "false") == "false" && File.exists?("./config/test.secret.exs") do import_config "test.secret.exs" end - -config :mobilizon, Mobilizon.Service.Notifier, - notifiers: [ - Mobilizon.Service.Notifier.Mock - ] diff --git a/test/graphql/resolvers/activity_test.exs b/test/graphql/resolvers/activity_test.exs index 5b2053f6..3555f6fc 100644 --- a/test/graphql/resolvers/activity_test.exs +++ b/test/graphql/resolvers/activity_test.exs @@ -14,11 +14,6 @@ defmodule Mobilizon.GraphQL.Resolvers.ActivityTest do setup %{conn: conn} do group = insert(:group) - Mobilizon.Config.put([Mobilizon.Service.Notifier, :notifiers], [ - Mobilizon.Service.Notifier.Email, - Mobilizon.Service.Notifier.Push - ]) - {:ok, conn: conn, group: group} end diff --git a/test/service/workers/activity_builder_test.exs b/test/service/workers/activity_builder_test.exs index e73a9a68..480ddaa5 100644 --- a/test/service/workers/activity_builder_test.exs +++ b/test/service/workers/activity_builder_test.exs @@ -5,7 +5,7 @@ defmodule Mobilizon.Service.Workers.ActivityBuilderTest do alias Mobilizon.Activities.Activity alias Mobilizon.Actors.Actor - alias Mobilizon.Service.Notifier.Mock, as: NotifierMock + alias Mobilizon.Service.Notifier.Mock2, as: NotifierMock alias Mobilizon.Service.Workers.ActivityBuilder alias Mobilizon.Users.User @@ -14,6 +14,16 @@ defmodule Mobilizon.Service.Workers.ActivityBuilderTest do import Mobilizon.Factory import Mox + setup_all do + Mox.defmock(NotifierMock, for: Mobilizon.Service.Notifier) + + Mobilizon.Config.put([Mobilizon.Service.Notifier, :notifiers], [ + NotifierMock + ]) + + :ok + end + setup :verify_on_exit! describe "Sends direct email notification to users" do diff --git a/test/service/workers/legacy_notifier_builder_test.exs b/test/service/workers/legacy_notifier_builder_test.exs index 35ae41ff..e6ffb6d2 100644 --- a/test/service/workers/legacy_notifier_builder_test.exs +++ b/test/service/workers/legacy_notifier_builder_test.exs @@ -15,6 +15,16 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilderTest do import Mox import Mobilizon.Factory + setup_all do + Mox.defmock(Mobilizon.Service.Notifier.Mock, for: Mobilizon.Service.Notifier) + + Mobilizon.Config.put([Mobilizon.Service.Notifier, :notifiers], [ + Mobilizon.Service.Notifier.Mock + ]) + + :ok + end + @mentionned %{ "type" => "comment", "subject" => "event_comment_mention", diff --git a/test/support/data_case.ex b/test/support/data_case.ex index e8e6c05c..0423a977 100644 --- a/test/support/data_case.ex +++ b/test/support/data_case.ex @@ -79,6 +79,4 @@ defmodule Mobilizon.DataCase do Mox.defmock(Mobilizon.Service.HTTP.GeospatialClient.Mock, for: Tesla.Adapter ) - - Mox.defmock(Mobilizon.Service.Notifier.Mock, for: Mobilizon.Service.Notifier) end From f480936eb4385e37a6c10d51cf101fc5618c0629 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 4 Jun 2021 13:30:05 +0200 Subject: [PATCH 62/67] Upgrade deps The `quietDeps` sass option isn't working yet Signed-off-by: Thomas Citharel --- js/package.json | 4 +- js/vue.config.js | 3 + js/yarn.lock | 895 +++++++++++++++++++++++++++-------------------- mix.lock | 14 +- 4 files changed, 520 insertions(+), 396 deletions(-) diff --git a/js/package.json b/js/package.json index 84673d98..33ae1076 100644 --- a/js/package.json +++ b/js/package.json @@ -93,8 +93,8 @@ "mock-apollo-client": "^1.1.0", "prettier": "^2.2.1", "prettier-eslint": "^12.0.0", - "sass": "~1.32.0", - "sass-loader": "^11.0.1", + "sass": "^1.34.1", + "sass-loader": "^12.0.0", "ts-jest": "^26.5.3", "typescript": "~4.1.5", "vue-cli-plugin-svg": "~0.1.3", diff --git a/js/vue.config.js b/js/vue.config.js index 9b9e8022..d55ed6fc 100644 --- a/js/vue.config.js +++ b/js/vue.config.js @@ -22,6 +22,9 @@ module.exports = { loaderOptions: { scss: { additionalData: `@import "@/variables.scss";`, + sassOptions: { + quietDeps: true, + }, }, }, }, diff --git a/js/yarn.lock b/js/yarn.lock index 1aa1e912..812eddff 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -60,10 +60,10 @@ dependencies: "@babel/highlight" "^7.12.13" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" - integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58" + integrity sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ== "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.16", "@babel/core@^7.7.5": version "7.14.3" @@ -110,26 +110,26 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.12.16", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" - integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== +"@babel/helper-compilation-targets@^7.12.16", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz#33ebd0ffc34248051ee2089350a929ab02f2a516" + integrity sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA== dependencies: - "@babel/compat-data" "^7.13.15" + "@babel/compat-data" "^7.14.4" "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" + browserslist "^4.16.6" semver "^6.3.0" "@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.2", "@babel/helper-create-class-features-plugin@^7.14.3": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz#832111bcf4f57ca57a4c5b1a000fc125abc6554a" - integrity sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ== + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz#abf888d836a441abee783c75229279748705dc42" + integrity sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" "@babel/helper-function-name" "^7.14.2" "@babel/helper-member-expression-to-functions" "^7.13.12" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.14.3" + "@babel/helper-replace-supers" "^7.14.4" "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-create-regexp-features-plugin@^7.12.13": @@ -140,10 +140,10 @@ "@babel/helper-annotate-as-pure" "^7.12.13" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.1.tgz#e6f5f4a6edc3722152c21359190de67fc6cf664d" - integrity sha512-x3AUTVZNPunaw1opRTa5OwVA5N0YxGlIad9xQ5QflK1uIS7PnAGGU5O2Dj/G183fR//N8AzTq+Q8+oiu9m0VFg== +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -234,15 +234,15 @@ "@babel/helper-wrap-function" "^7.13.0" "@babel/types" "^7.13.0" -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12", "@babel/helper-replace-supers@^7.14.3": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz#ca17b318b859d107f0e9b722d58cf12d94436600" - integrity sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA== +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12", "@babel/helper-replace-supers@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz#b2ab16875deecfff3ddfcd539bc315f72998d836" + integrity sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ== dependencies: "@babel/helper-member-expression-to-functions" "^7.13.12" "@babel/helper-optimise-call-expression" "^7.12.13" "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" + "@babel/types" "^7.14.4" "@babel/helper-simple-access@^7.13.12": version "7.13.12" @@ -304,9 +304,9 @@ js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.3.tgz#9b530eecb071fd0c93519df25c5ff9f14759f298" - integrity sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ== + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18" + integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA== "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": version "7.13.12" @@ -334,7 +334,7 @@ "@babel/helper-create-class-features-plugin" "^7.13.0" "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-proposal-class-static-block@^7.13.11": +"@babel/plugin-proposal-class-static-block@^7.14.3": version "7.14.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz#5a527e2cae4a4753119c3a3e7f64ecae8ccf1360" integrity sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ== @@ -400,13 +400,13 @@ "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz#e17d418f81cc103fedd4ce037e181c8056225abc" - integrity sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw== +"@babel/plugin-proposal-object-rest-spread@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz#0e2b4de419915dc0b409378e829412e2031777c4" + integrity sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA== dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" + "@babel/compat-data" "^7.14.4" + "@babel/helper-compilation-targets" "^7.14.4" "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.14.2" @@ -603,23 +603,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-block-scoping@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz#761cb12ab5a88d640ad4af4aa81f820e6b5fdf5c" - integrity sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg== +"@babel/plugin-transform-block-scoping@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz#caf140b0b2e2462c509553d140e6d0abefb61ed8" + integrity sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g== dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-classes@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz#3f1196c5709f064c252ad056207d87b7aeb2d03d" - integrity sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg== +"@babel/plugin-transform-classes@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz#a83c15503fc71a0f99e876fdce7dadbc6575ec3a" + integrity sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" "@babel/helper-function-name" "^7.14.2" "@babel/helper-optimise-call-expression" "^7.12.13" "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-replace-supers" "^7.14.4" "@babel/helper-split-export-declaration" "^7.12.13" globals "^11.1.0" @@ -630,10 +630,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-destructuring@^7.13.17": - version "7.13.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" - integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== +"@babel/plugin-transform-destructuring@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz#acbec502e9951f30f4441eaca1d2f29efade59ed" + integrity sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA== dependencies: "@babel/helper-plugin-utils" "^7.13.0" @@ -841,25 +841,25 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.16": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.2.tgz#e80612965da73579c84ad2f963c2359c71524ed5" - integrity sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ== + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.4.tgz#73fc3228c59727e5e974319156f304f0d6685a2d" + integrity sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA== dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" + "@babel/compat-data" "^7.14.4" + "@babel/helper-compilation-targets" "^7.14.4" "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" "@babel/plugin-proposal-async-generator-functions" "^7.14.2" "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-class-static-block" "^7.13.11" + "@babel/plugin-proposal-class-static-block" "^7.14.3" "@babel/plugin-proposal-dynamic-import" "^7.14.2" "@babel/plugin-proposal-export-namespace-from" "^7.14.2" "@babel/plugin-proposal-json-strings" "^7.14.2" "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" "@babel/plugin-proposal-numeric-separator" "^7.14.2" - "@babel/plugin-proposal-object-rest-spread" "^7.14.2" + "@babel/plugin-proposal-object-rest-spread" "^7.14.4" "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" "@babel/plugin-proposal-optional-chaining" "^7.14.2" "@babel/plugin-proposal-private-methods" "^7.13.0" @@ -882,10 +882,10 @@ "@babel/plugin-transform-arrow-functions" "^7.13.0" "@babel/plugin-transform-async-to-generator" "^7.13.0" "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.14.2" - "@babel/plugin-transform-classes" "^7.14.2" + "@babel/plugin-transform-block-scoping" "^7.14.4" + "@babel/plugin-transform-classes" "^7.14.4" "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.17" + "@babel/plugin-transform-destructuring" "^7.14.4" "@babel/plugin-transform-dotall-regex" "^7.12.13" "@babel/plugin-transform-duplicate-keys" "^7.12.13" "@babel/plugin-transform-exponentiation-operator" "^7.12.13" @@ -912,7 +912,7 @@ "@babel/plugin-transform-unicode-escapes" "^7.12.13" "@babel/plugin-transform-unicode-regex" "^7.12.13" "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.2" + "@babel/types" "^7.14.4" babel-plugin-polyfill-corejs2 "^0.2.0" babel-plugin-polyfill-corejs3 "^0.2.0" babel-plugin-polyfill-regenerator "^0.2.0" @@ -967,10 +967,10 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3" - integrity sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw== +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.14.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.4.tgz#bfd6980108168593b38b3eb48a24aa026b919bc0" + integrity sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw== dependencies: "@babel/helper-validator-identifier" "^7.14.0" to-fast-properties "^2.0.0" @@ -1135,6 +1135,18 @@ jest-util "^26.6.2" slash "^3.0.0" +"@jest/console@^27.0.2": + version "27.0.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.2.tgz#b8eeff8f21ac51d224c851e1729d2630c18631e6" + integrity sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w== + dependencies: + "@jest/types" "^27.0.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.0.2" + jest-util "^27.0.2" + slash "^3.0.0" + "@jest/core@^26.6.3": version "26.6.3" resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" @@ -1251,6 +1263,16 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" +"@jest/test-result@^27.0.2": + version "27.0.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.2.tgz#0451049e32ceb609b636004ccc27c8fa22263f10" + integrity sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA== + dependencies: + "@jest/console" "^27.0.2" + "@jest/types" "^27.0.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + "@jest/test-sequencer@^26.6.3": version "26.6.3" resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" @@ -1294,6 +1316,17 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jest/types@^27.0.2": + version "27.0.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.2.tgz#e153d6c46bda0f2589f0702b071f9898c7bbd37e" + integrity sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@jumpn/utils-array@0.3.4": version "0.3.4" resolved "https://registry.yarnpkg.com/@jumpn/utils-array/-/utils-array-0.3.4.tgz#fb4310120108f659dab54075ef93abc56137de5e" @@ -1328,25 +1361,25 @@ resolved "https://registry.yarnpkg.com/@mdi/font/-/font-5.9.55.tgz#41acd50b88073ded7095fc3029d8712b6e12f38e" integrity sha512-jswRF6q3eq8NWpWiqct6q+6Fg/I7nUhrxYJfiEM8JJpap0wVJLQdbKtyS65GdlK7S7Ytnx3TTi/bmw+tBhkGmg== -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@nodelib/fs.stat" "2.0.4" + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" + integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" "@polka/url@^1.0.0-next.15": @@ -1457,10 +1490,10 @@ ejs "^2.6.1" magic-string "^0.25.0" -"@tiptap/core@^2.0.0-beta.41", "@tiptap/core@^2.0.0-beta.68": - version "2.0.0-beta.68" - resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.68.tgz#25dd7b31bb222a4988cccb08ccd00e4c7f9de080" - integrity sha512-mCz+HnTHlDDK9VGWKkkCpUIAa4EUDl7X74VQLFRxJgjbZLJCZjifhQEc6EW3TO+FBA6qwCp/2cTa3lGIpulA8Q== +"@tiptap/core@^2.0.0-beta.41", "@tiptap/core@^2.0.0-beta.80": + version "2.0.0-beta.80" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.80.tgz#6cf70fa1e9f1a398af3d0a35cedb90e6fde87e90" + integrity sha512-hsE69neVEf5UDUTrYz4wr2OaXNIZ7E3t9jSja8h5V6JXKlITH65X0MNvKjskRUNpe2kHILVER+tIQkE9gv3SLA== dependencies: "@types/prosemirror-commands" "^1.0.4" "@types/prosemirror-inputrules" "^1.0.4" @@ -1470,14 +1503,14 @@ "@types/prosemirror-state" "^1.2.6" "@types/prosemirror-transform" "^1.1.3" "@types/prosemirror-view" "^1.17.1" - prosemirror-commands "^1.1.7" + prosemirror-commands "^1.1.8" prosemirror-inputrules "^1.1.3" prosemirror-keymap "^1.1.3" prosemirror-model "^1.14.1" prosemirror-schema-list "^1.1.4" prosemirror-state "^1.3.4" prosemirror-transform "^1.3.2" - prosemirror-view "^1.18.6" + prosemirror-view "^1.18.7" "@tiptap/extension-blockquote@^2.0.0-beta.13", "@tiptap/extension-blockquote@^2.0.0-beta.6": version "2.0.0-beta.13" @@ -1491,13 +1524,13 @@ resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.13.tgz#d6b8f3797a6f7932ae38b9d761cc1effa886b715" integrity sha512-hMA6GItX/cWN1K9TBI1LeEPo8bFhX9JrE1flr6dxGJ9q58XVbzb2/ojZzcRFVdUp7oxNyQaFe6yP1JhTVcIrog== -"@tiptap/extension-bubble-menu@^2.0.0-beta.19", "@tiptap/extension-bubble-menu@^2.0.0-beta.9": - version "2.0.0-beta.19" - resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.19.tgz#85fcee42e4fb2a366aa58eebd7c09712c5a5c271" - integrity sha512-kT9NaxYEVj5B/kp1mdnEgiQ3kcyrnFCWzOQLhQOyvLIiL4ysp807mYiUfWyUWlCaDjDtfkC7F5mbku985UC7kQ== +"@tiptap/extension-bubble-menu@^2.0.0-beta.20", "@tiptap/extension-bubble-menu@^2.0.0-beta.9": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.20.tgz#248c70910bf232ed5fb9eb3a7c084bc592d2341d" + integrity sha512-eomoCnZBGuPBWvacMHtaLJ2EqTrA0OZoLEwMKiPy4Y3eD2/Us9nLVFWq2DqaB7nXxG0BCN1ZnaKTtpoJtdEgSQ== dependencies: prosemirror-state "^1.3.4" - prosemirror-view "^1.18.6" + prosemirror-view "^1.18.7" tippy.js "^6.3.1" "@tiptap/extension-bullet-list@^2.0.0-beta.13": @@ -1529,21 +1562,21 @@ resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.0.0-beta.12.tgz#dfbc7e686075a38662a43708903cd2047cf7f4b2" integrity sha512-i5anc2n98Jg1gi6WDLTaS76jLIUe41FHuMHgL4DCIDXv8m2q0qnktfmOvh9AMF7cPzJ2NVAR9xYw0Pxm3qXY4w== -"@tiptap/extension-dropcursor@^2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.13.tgz#2cec03275e23a5394af9da98e7ce1b6c77bbfef7" - integrity sha512-We80k3r//ujjboF2/8H07Y8TStP/U2Nw1nOwTPgWHX5CkrFN2Y9Q0Tdofc8SME8REql+osw8CcSB34iLU+kIcA== +"@tiptap/extension-dropcursor@^2.0.0-beta.14": + version "2.0.0-beta.14" + resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.14.tgz#b5e4137d4be1afe14a8f67d932af5e6d3df7cb56" + integrity sha512-F6sbclgoWPiindx/g1Hxf7jfimne7mrxeCBXvI8xfbcHwTubFhR+nZ+tiIfttcxdM4FNusSsLsDJo7rfE/kiUg== dependencies: "@types/prosemirror-dropcursor" "^1.0.1" - prosemirror-dropcursor "^1.3.4" + prosemirror-dropcursor "^1.3.5" -"@tiptap/extension-floating-menu@^2.0.0-beta.15": - version "2.0.0-beta.15" - resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.15.tgz#876526535a2329e27374bd09775d8981c94bfd47" - integrity sha512-ioBegoCx3N6E2MPLsOgbAWeQEz01I91CLRdRQMorGRx+4Q+mAarlGJV11sNeW2rCV9ZQ/LWTw/QzLuBnyESzrA== +"@tiptap/extension-floating-menu@^2.0.0-beta.16": + version "2.0.0-beta.16" + resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.16.tgz#109226c060351b83916441cd58d631eff47d6bb2" + integrity sha512-ByiBBZHOhVH2SslWjc/rwo/aQFJpAfMJAELw1Q8CaUqzTCbgQzvuyM+y6dGL/uLuZuvtncLyPYcGhnK87mZb2Q== dependencies: prosemirror-state "^1.3.4" - prosemirror-view "^1.18.6" + prosemirror-view "^1.18.7" tippy.js "^6.3.1" "@tiptap/extension-gapcursor@^2.0.0-beta.17": @@ -1604,11 +1637,11 @@ integrity sha512-5nvrCvcV35J6WjLd8xQCQWnj2HIDsfTalr0D57jMwym3ZCIEvLwf23DQQ1nNsOHhopmS/Emixh+RQpXUZjH8lQ== "@tiptap/extension-mention@^2.0.0-beta.42": - version "2.0.0-beta.56" - resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.0.0-beta.56.tgz#6c113ec84488d982400bf826779d3888fe88d1f3" - integrity sha512-4o3Y8zjmflJJmr6uLOaYVtur1VISWf5rvSl6QNR2UaLVFYofEx0JanMZ83qlv5GchDDNvB1tQ2tqE/jhphAOPg== + version "2.0.0-beta.57" + resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.0.0-beta.57.tgz#54ba7d331778e574c10161af8ddb64c63cff84e2" + integrity sha512-2x8mxh3mUyjZXUM72HLN+abfn0m9AKh+1GaAIZU77mnVx1zJHfnEdGJhosYuaNO2ngFXUEc/YJ9vBamaRCHLpA== dependencies: - "@tiptap/suggestion" "^2.0.0-beta.56" + "@tiptap/suggestion" "^2.0.0-beta.57" "@tiptap/extension-ordered-list@^2.0.0-beta.13", "@tiptap/extension-ordered-list@^2.0.0-beta.6": version "2.0.0-beta.13" @@ -1622,10 +1655,10 @@ resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.14.tgz#6b8c64166f3b581a1f8e1ae415b895e5bd2952d1" integrity sha512-IFc2/WMgmpPTRS/h++5vNCiSyT4yTj/NGG9L+x35aPCDQutTYW2V2i1Lwe2lcxpPVF4ofDX50skjdIiWZoGEqA== -"@tiptap/extension-strike@^2.0.0-beta.14": - version "2.0.0-beta.14" - resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.14.tgz#409ec292368d65ba8b4e55fb9825f4e44cc075ad" - integrity sha512-25D+neKErB8svQ8TOkUqUq9Nln+O62Kp5doR/aATVtNCohWOqeAF/Q439QL4GsCkAAhXMdh2yQIF/mCSxFsdTQ== +"@tiptap/extension-strike@^2.0.0-beta.15": + version "2.0.0-beta.15" + resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.15.tgz#c274ae85b1067f80d45a1cb30d0cad24733c9be7" + integrity sha512-8R6L4jVxeGabItZ2a4B8lvcy60yhD95nRkO4ruH4iBQ5qlyGwShRbvuJQQGT/2j2RY7W793nXZ/Uohcd/5gJCw== "@tiptap/extension-text@^2.0.0-beta.12": version "2.0.0-beta.12" @@ -1638,18 +1671,18 @@ integrity sha512-x/XN12gKrKwNx4RB5/h8bC474fpacivnM2F5A5zUWKIviS+kYJ8pZgAPhQBvMjeJoFrn5oLgUc5f+HEjJaLJJw== "@tiptap/starter-kit@^2.0.0-beta.37": - version "2.0.0-beta.65" - resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.65.tgz#54f4e1f00697f84fbb931c077682cc99ad689638" - integrity sha512-2yYaQBgrhxLb9G9ve8x2llYA6jtySvND7m4D08OXxkmWdIgTJVS/6FeAtwSD5ALD55FCzNlHbu4omvElqbrSSQ== + version "2.0.0-beta.76" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.76.tgz#97342f45c123a1cf39a9738fe19847986f7b069c" + integrity sha512-LIaGUdBQe4PW4OHE83ZKEpoL+tGgT+xw+qCuGGNr29s8O0K+LzSSnWFOgtjl6PSAcA9pKEZhmRLrMGfP01cEdg== dependencies: - "@tiptap/core" "^2.0.0-beta.68" + "@tiptap/core" "^2.0.0-beta.80" "@tiptap/extension-blockquote" "^2.0.0-beta.13" "@tiptap/extension-bold" "^2.0.0-beta.13" "@tiptap/extension-bullet-list" "^2.0.0-beta.13" "@tiptap/extension-code" "^2.0.0-beta.13" "@tiptap/extension-code-block" "^2.0.0-beta.15" "@tiptap/extension-document" "^2.0.0-beta.12" - "@tiptap/extension-dropcursor" "^2.0.0-beta.13" + "@tiptap/extension-dropcursor" "^2.0.0-beta.14" "@tiptap/extension-gapcursor" "^2.0.0-beta.17" "@tiptap/extension-hard-break" "^2.0.0-beta.13" "@tiptap/extension-heading" "^2.0.0-beta.13" @@ -1659,26 +1692,26 @@ "@tiptap/extension-list-item" "^2.0.0-beta.13" "@tiptap/extension-ordered-list" "^2.0.0-beta.13" "@tiptap/extension-paragraph" "^2.0.0-beta.14" - "@tiptap/extension-strike" "^2.0.0-beta.14" + "@tiptap/extension-strike" "^2.0.0-beta.15" "@tiptap/extension-text" "^2.0.0-beta.12" -"@tiptap/suggestion@^2.0.0-beta.56": - version "2.0.0-beta.56" - resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.0.0-beta.56.tgz#cbf52f698d78de83a8dd72b781d4d4011731cd5e" - integrity sha512-pImKbVHqWyv3L73PRwGks9sP2VykqacXXt3FqKM417T9KSdAfMjjt0i++yedxpxlTFeWhXEZonhTunDvXVjSbw== +"@tiptap/suggestion@^2.0.0-beta.57": + version "2.0.0-beta.57" + resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.0.0-beta.57.tgz#7da90521098a323bfc55ad380a06599a566d027f" + integrity sha512-dZKwo7zGTCV1wH5M5k/ZhDIIs1cJgxK48scddxu/Ine6ZlGCQyFdUYFkhhiS8eC5Z4Mkgixogr60AfJ/g+Tu1Q== dependencies: prosemirror-model "^1.14.1" prosemirror-state "^1.3.4" - prosemirror-view "^1.18.6" + prosemirror-view "^1.18.7" "@tiptap/vue-2@^2.0.0-beta.21": - version "2.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@tiptap/vue-2/-/vue-2-2.0.0-beta.32.tgz#bd0960562869437ae9e3c1a9e93dbfc38cf87a7f" - integrity sha512-VOwkxkxxLEDqaR6Fj54vDGh+SMUY6jJ+jTDLYIErl6BPKtKYTehTYAomfFjl/Ho3EkoUwD4yWU6MQn/JALhSvQ== + version "2.0.0-beta.34" + resolved "https://registry.yarnpkg.com/@tiptap/vue-2/-/vue-2-2.0.0-beta.34.tgz#df9309eb812b50a85315c4623ac222db751fc97a" + integrity sha512-gt45v1GgTWDh/cVcWHW3Nn80pLi/qQMInn1bv/zVUTGZxay5kstLJ5eD7yQ3SfS9oOS3ubRDkdYdhbUKUYH0hw== dependencies: - "@tiptap/extension-bubble-menu" "^2.0.0-beta.19" - "@tiptap/extension-floating-menu" "^2.0.0-beta.15" - prosemirror-view "^1.18.6" + "@tiptap/extension-bubble-menu" "^2.0.0-beta.20" + "@tiptap/extension-floating-menu" "^2.0.0-beta.16" + prosemirror-view "^1.18.7" "@tootallnate/once@1": version "1.1.2" @@ -1760,36 +1793,41 @@ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== "@types/eslint@*", "@types/eslint@^7.2.4": - version "7.2.11" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.11.tgz#180b58f5bb7d7376e39d22496e2b08901aa52fd2" - integrity sha512-WYhv//5K8kQtsSc9F1Kn2vHzhYor6KpwPbARH7hwYe3C3ETD0EVx/3P5qQybUoaBEuUa9f/02JjBiXFWalYUmw== + version "7.2.13" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.13.tgz#e0ca7219ba5ded402062ad6f926d491ebb29dd53" + integrity sha512-LKmQCWAlnVHvvXq4oasNUMTJJb2GwSyTY8+1C7OH5ILR8mPLaljv1jxL1bXW3xB3jFbQxTKxJAvI8PyjB09aBg== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^0.0.47": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== +"@types/estree@*": + version "0.0.48" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" + integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@^0.0.47": + version "0.0.47" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" + integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.19" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz#00acfc1632e729acac4f1530e9e16f6dd1508a1d" - integrity sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA== + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.21.tgz#a427278e106bca77b83ad85221eae709a3414d42" + integrity sha512-gwCiEZqW6f7EoR8TTEfalyEhb1zA5jQJnRngr97+3pzMaO1RKoI1w2bw07TK72renMUVWcWS5mLI6rk1NqN0nA== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/express@*": - version "4.17.11" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" - integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.12.tgz#4bc1bf3cd0cfe6d3f6f2853648b40db7d54de350" + integrity sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.18" @@ -1841,9 +1879,9 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" - integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" @@ -1855,7 +1893,7 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== @@ -1873,9 +1911,9 @@ "@types/leaflet" "*" "@types/leaflet@*", "@types/leaflet@^1.5.2": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.7.0.tgz#3700fb5d29a8214fbd496565b08ec28e40cee808" - integrity sha512-ltv5jR+VjKSMtoDkxH61Rsbo0zLU7iqyOXpVPkAX4F+79fg2eymC7t0msWsfNaEZO1FGTIQATCCCQe+ijWoicg== + version "1.7.1" + resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.7.1.tgz#6128b27ee3ec9eb2d130705044ed2a5e8291c709" + integrity sha512-Wi51IivrMUsBkcAc2spSnFnlJ6oMpAXC/bCUd/Jtzy/sww1A8xtsmLYj6vxnc2kgC53PyC2g4gduWv3esNxWig== dependencies: "@types/geojson" "*" @@ -1905,14 +1943,14 @@ integrity sha512-6nlq2eEh75JegDGUXis9wGTYIJpUvbori4qx++PRKQsV3YRkaqUNPNykzphniqPSZADXCouBuAnyptjUkMkhvw== "@types/node@*": - version "15.6.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08" - integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA== + version "15.12.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.0.tgz#6a459d261450a300e6865faeddb5af01c3389bb3" + integrity sha512-+aHJvoCsVhO2ZCuT4o5JtcPrCPyDE3+1nvbDprYes+pPkEsbjH7AGUCNtjMOXS0fqH14t+B7yLzaqSz92FPWyw== "@types/node@^14.14.31": - version "14.17.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.1.tgz#5e07e0cb2ff793aa7a1b41deae76221e6166049f" - integrity sha512-/tpUyFD7meeooTRwl3sYlihx2BrJE7q9XF71EguPFIySj9B7qgnRtHsHTho+0AUm4m1SvWGm6uSncrR94q6Vtw== + version "14.17.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.2.tgz#1e94476db57ec93a372c7f7d29aa5707cfb92339" + integrity sha512-sld7b/xmFum66AAKuz/rp/CUO8+98fMpyQ3SBfzzBNGMd/1iHBTAg9oyAvcYlAj46bpc74r91jSw2iFdnx29nw== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -2143,6 +2181,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^16.0.0": + version "16.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01" + integrity sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ== + dependencies: + "@types/yargs-parser" "*" + "@types/yauzl@^2.9.1": version "2.9.1" resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" @@ -2156,18 +2201,18 @@ integrity sha512-HrCIVMLjE1MOozVoD86622S7aunluLb2PJdPfb3nYiEtohm8mIB/vyv0Fd37AdeMFrTUQXEunw78YloMA3Qilg== "@typescript-eslint/eslint-plugin@^4.18.0": - version "4.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.25.0.tgz#d82657b6ab4caa4c3f888ff923175fadc2f31f2a" - integrity sha512-Qfs3dWkTMKkKwt78xp2O/KZQB8MPS1UQ5D3YW2s6LQWBE1074BE+Rym+b1pXZIX3M3fSvPUDaCvZLKV2ylVYYQ== + version "4.26.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz#12bbd6ebd5e7fabd32e48e1e60efa1f3554a3242" + integrity sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg== dependencies: - "@typescript-eslint/experimental-utils" "4.25.0" - "@typescript-eslint/scope-manager" "4.25.0" - debug "^4.1.1" + "@typescript-eslint/experimental-utils" "4.26.0" + "@typescript-eslint/scope-manager" "4.26.0" + debug "^4.3.1" functional-red-black-tree "^1.0.1" - lodash "^4.17.15" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" + lodash "^4.17.21" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" "@typescript-eslint/experimental-utils@3.10.1": version "3.10.1" @@ -2180,17 +2225,17 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/experimental-utils@4.25.0": - version "4.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.25.0.tgz#b2febcfa715d2c1806fd5f0335193a6cd270df54" - integrity sha512-f0doRE76vq7NEEU0tw+ajv6CrmPelw5wLoaghEHkA2dNLFb3T/zJQqGPQ0OYt5XlZaS13MtnN+GTPCuUVg338w== +"@typescript-eslint/experimental-utils@4.26.0": + version "4.26.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz#ba7848b3f088659cdf71bce22454795fc55be99a" + integrity sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw== dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.25.0" - "@typescript-eslint/types" "4.25.0" - "@typescript-eslint/typescript-estree" "4.25.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.26.0" + "@typescript-eslint/types" "4.26.0" + "@typescript-eslint/typescript-estree" "4.26.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" "@typescript-eslint/parser@^3.0.0": version "3.10.1" @@ -2204,32 +2249,32 @@ eslint-visitor-keys "^1.1.0" "@typescript-eslint/parser@^4.18.0": - version "4.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.25.0.tgz#6b2cb6285aa3d55bfb263c650739091b0f19aceb" - integrity sha512-OZFa1SKyEJpAhDx8FcbWyX+vLwh7OEtzoo2iQaeWwxucyfbi0mT4DijbOSsTgPKzGHr6GrF2V5p/CEpUH/VBxg== + version "4.26.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.0.tgz#31b6b732c9454f757b020dab9b6754112aa5eeaf" + integrity sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg== dependencies: - "@typescript-eslint/scope-manager" "4.25.0" - "@typescript-eslint/types" "4.25.0" - "@typescript-eslint/typescript-estree" "4.25.0" - debug "^4.1.1" + "@typescript-eslint/scope-manager" "4.26.0" + "@typescript-eslint/types" "4.26.0" + "@typescript-eslint/typescript-estree" "4.26.0" + debug "^4.3.1" -"@typescript-eslint/scope-manager@4.25.0": - version "4.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.25.0.tgz#9d86a5bcc46ef40acd03d85ad4e908e5aab8d4ca" - integrity sha512-2NElKxMb/0rya+NJG1U71BuNnp1TBd1JgzYsldsdA83h/20Tvnf/HrwhiSlNmuq6Vqa0EzidsvkTArwoq+tH6w== +"@typescript-eslint/scope-manager@4.26.0": + version "4.26.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz#60d1a71df162404e954b9d1c6343ff3bee496194" + integrity sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg== dependencies: - "@typescript-eslint/types" "4.25.0" - "@typescript-eslint/visitor-keys" "4.25.0" + "@typescript-eslint/types" "4.26.0" + "@typescript-eslint/visitor-keys" "4.26.0" "@typescript-eslint/types@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== -"@typescript-eslint/types@4.25.0": - version "4.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.25.0.tgz#0e444a5c5e3c22d7ffa5e16e0e60510b3de5af87" - integrity sha512-+CNINNvl00OkW6wEsi32wU5MhHti2J25TJsJJqgQmJu3B3dYDBcmOxcE5w9cgoM13TrdE/5ND2HoEnBohasxRQ== +"@typescript-eslint/types@4.26.0": + version "4.26.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.0.tgz#7c6732c0414f0a69595f4f846ebe12616243d546" + integrity sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A== "@typescript-eslint/typescript-estree@3.10.1": version "3.10.1" @@ -2245,18 +2290,18 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/typescript-estree@4.25.0": - version "4.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.25.0.tgz#942e4e25888736bff5b360d9b0b61e013d0cfa25" - integrity sha512-1B8U07TGNAFMxZbSpF6jqiDs1cVGO0izVkf18Q/SPcUAc9LhHxzvSowXDTvkHMWUVuPpagupaW63gB6ahTXVlg== +"@typescript-eslint/typescript-estree@4.26.0": + version "4.26.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz#aea17a40e62dc31c63d5b1bbe9a75783f2ce7109" + integrity sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg== dependencies: - "@typescript-eslint/types" "4.25.0" - "@typescript-eslint/visitor-keys" "4.25.0" - debug "^4.1.1" - globby "^11.0.1" + "@typescript-eslint/types" "4.26.0" + "@typescript-eslint/visitor-keys" "4.26.0" + debug "^4.3.1" + globby "^11.0.3" is-glob "^4.0.1" - semver "^7.3.2" - tsutils "^3.17.1" + semver "^7.3.5" + tsutils "^3.21.0" "@typescript-eslint/visitor-keys@3.10.1": version "3.10.1" @@ -2265,12 +2310,12 @@ dependencies: eslint-visitor-keys "^1.1.0" -"@typescript-eslint/visitor-keys@4.25.0": - version "4.25.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.25.0.tgz#863e7ed23da4287c5b469b13223255d0fde6aaa7" - integrity sha512-AmkqV9dDJVKP/TcZrbf6s6i1zYXt5Hl8qOLrRDTFfRNae4+LB8A4N3i+FLZPW85zIxRy39BgeWOfMS3HoH5ngg== +"@typescript-eslint/visitor-keys@4.26.0": + version "4.26.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz#26d2583169222815be4dcd1da4fe5459bc3bcc23" + integrity sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg== dependencies: - "@typescript-eslint/types" "4.25.0" + "@typescript-eslint/types" "4.26.0" eslint-visitor-keys "^2.0.0" "@vue/babel-helper-vue-jsx-merge-props@^1.2.1": @@ -2836,9 +2881,9 @@ acorn@^7.1.1, acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.0.4, acorn@^8.0.5, acorn@^8.2.1, acorn@^8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.4.tgz#caba24b08185c3b56e3168e97d15ed17f4d31fd0" - integrity sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg== + version "8.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88" + integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw== address@^1.1.2: version "1.1.2" @@ -2953,6 +2998,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" @@ -3150,14 +3200,14 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^10.2.4: - version "10.2.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.5.tgz#096a0337dbc96c0873526d7fef5de4428d05382d" - integrity sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA== + version "10.2.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.6.tgz#aadd9ec34e1c98d403e01950038049f0eb252949" + integrity sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg== dependencies: - browserslist "^4.16.3" - caniuse-lite "^1.0.30001196" + browserslist "^4.16.6" + caniuse-lite "^1.0.30001230" colorette "^1.2.2" - fraction.js "^4.0.13" + fraction.js "^4.1.1" normalize-range "^0.1.2" postcss-value-parser "^4.1.0" @@ -3224,28 +3274,28 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__traverse" "^7.0.6" babel-plugin-polyfill-corejs2@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.1.tgz#ae2cf6d6f1aa7c0edcf04a25180e8856a6d1184f" - integrity sha512-hXGSPbr6IbjeMyGew+3uGIAkRjBFSOJ9FLDZNOfHuyJZCcoia4nd/72J0bSgvfytcVfUcP/dxEVcUhVJuQRtSw== + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.1" + "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" babel-plugin-polyfill-corejs3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.1.tgz#786f40218040030f0edecfd48e6e59f1ee9bef53" - integrity sha512-WZCqF3DLUhdTD/P381MDJfuP18hdCZ+iqJ+wHtzhWENpsiof284JJ1tMQg1CE+hfCWyG48F7e5gDMk2c3Laz7w== + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz#7424a1682ee44baec817327710b1b094e5f8f7f5" + integrity sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.1" + "@babel/helper-define-polyfill-provider" "^0.2.2" core-js-compat "^3.9.1" babel-plugin-polyfill-regenerator@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.1.tgz#ca9595d7d5f3afefec2d83126148b90db751a091" - integrity sha512-T3bYyL3Sll2EtC94v3f+fA8M28q7YPTOZdB++SRHjvYZTvtd+WorMUq3tDTD4Q7Kjk1LG0gGromslKjcO5p2TA== + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.1" + "@babel/helper-define-polyfill-provider" "^0.2.2" babel-polyfill@6.26.0: version "6.26.0" @@ -3611,10 +3661,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001196, caniuse-lite@^1.0.30001219: - version "1.0.30001228" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" - integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001230: + version "1.0.30001234" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001234.tgz#8fc2e709e3b0679d7af7f073a1c661155c39b975" + integrity sha512-a3gjUVKkmwLdNysa1xkUAwN2VfJUJyVW47rsi3aCbkRCtbHAfo+rOsCqVw29G6coQ8gzAPb5XBXwiGHwme3isA== capture-exit@^2.0.0: version "2.0.0" @@ -3726,9 +3776,9 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.1.1.tgz#9a32fcefdf7bcdb6f0a7e1c0f8098ec57897b80a" - integrity sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ== + version "3.2.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" + integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== cjs-module-lexer@^0.6.0: version "0.6.0" @@ -3924,10 +3974,10 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colord@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.0.0.tgz#f8c19f2526b7dc5b22d6e57ef102f03a2a43a3d8" - integrity sha512-WMDFJfoY3wqPZNpKUFdse3HhD5BHCbE9JCdxRzoVH+ywRITGOeWAHNkGEmyxLlErEpN9OLMWgdM9dWQtDk5dog== +colord@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.0.1.tgz#1e7fb1f9fa1cf74f42c58cb9c20320bab8435aa0" + integrity sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA== colorette@^1.2.1, colorette@^1.2.2: version "1.2.2" @@ -4031,9 +4081,9 @@ condense-newlines@^0.2.1: kind-of "^3.0.2" config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -4098,9 +4148,9 @@ copy-webpack-plugin@^8.0.0: serialize-javascript "^5.0.1" core-js-compat@^3.8.3, core-js-compat@^3.9.0, core-js-compat@^3.9.1: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.12.1.tgz#2c302c4708505fa7072b0adb5156d26f7801a18b" - integrity sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ== + version "3.13.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.13.1.tgz#05444caa8f153be0c67db03cf8adb8ec0964e58e" + integrity sha512-mdrcxc0WznfRd8ZicEZh1qVeJ2mu6bwQFh8YVUK48friy/FOwFV5EJj9/dlh+nMQ74YusdVfBFDuomKgUspxWQ== dependencies: browserslist "^4.16.6" semver "7.0.0" @@ -4116,9 +4166,9 @@ core-js@^2.4.0, core-js@^2.5.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.6.4, core-js@^3.8.3: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.1.tgz#6b5af4ff55616c08a44d386f1f510917ff204112" - integrity sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw== + version "3.13.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.13.1.tgz#30303fabd53638892062d8b4e802cac7599e9fb7" + integrity sha512-JqveUc4igkqwStL2RTRn/EPFGBOfEZHxJl/8ej1mXJR75V3go2mFF4bmUYkEIT1rveHKnkUlcJX/c+f1TyIovQ== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -4294,22 +4344,22 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.1.1.tgz#5cd783caed942cc94159aeb10583af4691445b8c" - integrity sha512-kAhR71Tascmnjlhl4UegGA3KGGbMLXHkkqVpA9idsRT1JmIhIsz1C3tDpBeQMUw5EX5Rfb1HGc/PRqD2AFk3Vg== +cssnano-preset-default@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.1.2.tgz#5d4877a91769823c5da6bcebd54996ecdf8aca12" + integrity sha512-spilp8LRw0sacuxiN9A/dyyPr6G/WISKMBKcBD4NMoPV0ENx4DeuWvIIrSx9PII2nJIDCO3kywkqTPreECBVOg== dependencies: css-declaration-sorter "^6.0.3" cssnano-utils "^2.0.1" postcss-calc "^8.0.0" - postcss-colormin "^5.1.1" + postcss-colormin "^5.2.0" postcss-convert-values "^5.0.1" postcss-discard-comments "^5.0.1" postcss-discard-duplicates "^5.0.1" postcss-discard-empty "^5.0.1" postcss-discard-overridden "^5.0.1" postcss-merge-longhand "^5.0.2" - postcss-merge-rules "^5.0.1" + postcss-merge-rules "^5.0.2" postcss-minify-font-values "^5.0.1" postcss-minify-gradients "^5.0.1" postcss-minify-params "^5.0.1" @@ -4326,7 +4376,7 @@ cssnano-preset-default@^5.1.1: postcss-ordered-values "^5.0.1" postcss-reduce-initial "^5.0.1" postcss-reduce-transforms "^5.0.1" - postcss-svgo "^5.0.1" + postcss-svgo "^5.0.2" postcss-unique-selectors "^5.0.1" cssnano-utils@^2.0.1: @@ -4335,12 +4385,12 @@ cssnano-utils@^2.0.1: integrity sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ== cssnano@^5.0.0: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.4.tgz#5ca90729c94c71c4bc3d45abb543be10740bf381" - integrity sha512-I+fDW74CJ4yb31765ov9xXe70XLZvFTXjwhmA//VgAAuSAU34Oblbe94Q9zffiCX1VhcSfQWARQnwhz+Nqgb4Q== + version "5.0.5" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.5.tgz#6b8787123bf4cd5a220a2fa6cb5bc036b0854b48" + integrity sha512-L2VtPXnq6rmcMC9vkBOP131sZu3ccRQI27ejKZdmQiPDpUlFkUbpXHgKN+cibeO1U4PItxVZp1zTIn5dHsXoyg== dependencies: cosmiconfig "^7.0.0" - cssnano-preset-default "^5.1.1" + cssnano-preset-default "^5.1.2" is-resolvable "^1.1.0" csso@^4.0.2, csso@^4.2.0: @@ -4434,14 +4484,14 @@ date-fns@^1.27.2: integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== date-fns@^2.16.0: - version "2.21.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.21.3.tgz#8f5f6889d7a96bbcc1f0ea50239b397a83357f9b" - integrity sha512-HeYdzCaFflc1i4tGbj7JKMjM4cKGYoyxwcIIkHzNgCkX8xXDNJDZXgDDVchIWpN4eQc3lH37WarduXFZJOtxfw== + version "2.22.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.22.1.tgz#1e5af959831ebb1d82992bf67b765052d8f0efc4" + integrity sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg== dayjs@^1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2" - integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw== + version "1.10.5" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.5.tgz#5600df4548fc2453b3f163ebb2abbe965ccfb986" + integrity sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g== de-indent@^1.0.2: version "1.0.2" @@ -4455,7 +4505,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -4640,9 +4690,9 @@ dns-equal@^1.0.0: integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= dns-packet@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.2.tgz#8d50e580b952161a7ac57eb4e38471aad9d42a59" - integrity sha512-qH/MS6fDOeNBTsF3k/v/SrwaXlDeewxgddXGUUfwauEBZkz7u59oF+3ZNSzcZeCuPWOfkqmcAnXW1gliiFW+1A== + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== dependencies: ip "^1.1.0" safe-buffer "^5.0.1" @@ -4815,9 +4865,9 @@ ejs@^2.6.1: integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== electron-to-chromium@^1.3.723: - version "1.3.737" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.737.tgz#196f2e9656f4f3c31930750e1899c091b72d36b5" - integrity sha512-P/B84AgUSQXaum7a8m11HUsYL8tj9h/Pt5f7Hg7Ty6bm5DxlFq+e5+ouHUoNQMsKDJ7u4yGfI8mOErCmSH9wyg== + version "1.3.748" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.748.tgz#16638a8130f407ae5bf2fc168f2173574deb36c5" + integrity sha512-fmIKfYALVeEybk/L2ucdgt7jN3JsbGtg3K9pmF/MRWgkeADBI1VSAa5IzdG2gZwTxsnsrFtdMpOTSM5mrBRKVQ== elegant-spinner@^1.0.1: version "1.0.1" @@ -4921,10 +4971,10 @@ error-stack-parser@^2.0.2: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== +es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -4934,14 +4984,14 @@ es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: has-symbols "^1.0.2" is-callable "^1.2.3" is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" object-keys "^1.1.1" object.assign "^4.1.2" string.prototype.trimend "^1.0.4" string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" + unbox-primitive "^1.0.1" es-module-lexer@^0.4.0: version "0.4.1" @@ -5025,9 +5075,9 @@ eslint-plugin-cypress@^2.10.3, eslint-plugin-cypress@^2.11.2: globals "^11.12.0" eslint-plugin-import@^2.20.2: - version "2.23.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.3.tgz#8a1b073289fff03c4af0f04b6df956b7d463e191" - integrity sha512-wDxdYbSB55F7T5CC7ucDjY641VvKmlRwT0Vxh7PkY1mI4rclVRFWYfsrjDgZvwYYDZ5ee0ZtfFKXowWjqvEoRQ== + version "2.23.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97" + integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ== dependencies: array-includes "^3.1.3" array.prototype.flat "^1.2.4" @@ -5053,16 +5103,16 @@ eslint-plugin-prettier@^3.3.1: prettier-linter-helpers "^1.0.0" eslint-plugin-vue@^7.6.0: - version "7.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz#f8e83a2a908f4c43fc8304f5401d4ff671f3d560" - integrity sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw== + version "7.10.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.10.0.tgz#251749aa99e089e085275f011042c6e74189f89a" + integrity sha512-xdr6e4t/L2moRAeEQ9HKgge/hFq+w9v5Dj+BA54nTAzSFdUyKLiSOdZaRQjCHMY0Pk2WaQBFH9QiWG60xiC+6A== dependencies: eslint-utils "^2.1.0" natural-compare "^1.4.0" semver "^7.3.2" vue-eslint-parser "^7.6.0" -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -5077,6 +5127,13 @@ eslint-utils@^2.0.0, eslint-utils@^2.1.0: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" @@ -5279,9 +5336,9 @@ execa@^1.0.0: strip-eof "^1.0.0" execa@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.0.tgz#3ea50ee863d226bfa323528cce1684e7481dfe46" + integrity sha512-CkdUB7s2y6S+d4y+OM/+ZtQcJCiKUCth4cNImGMqrt2zEVtW2rfHGspQBE1GDo6LjeNIQmTPKXqTCKjqFKyu3A== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.0" @@ -5703,12 +5760,12 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.0.13: +fraction.js@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.1.tgz#ac4e520473dae67012d618aab91eda09bcb400ff" integrity sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg== @@ -5897,13 +5954,13 @@ globals@^12.1.0: type-fest "^0.8.1" globals@^13.6.0: - version "13.8.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" - integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== + version "13.9.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" + integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== dependencies: type-fest "^0.20.2" -globby@^11.0.1, globby@^11.0.2, globby@^11.0.3: +globby@^11.0.2, globby@^11.0.3: version "11.0.3" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== @@ -6071,9 +6128,9 @@ hex-color-regex@^1.1.0: integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== highlight.js@^10.7.1: - version "10.7.2" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.2.tgz#89319b861edc66c48854ed1e6da21ea89f847360" - integrity sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg== + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== hoist-non-react-statics@^3.3.2: version "3.3.2" @@ -6768,7 +6825,7 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-regex@^1.0.4, is-regex@^1.1.2: +is-regex@^1.0.4, is-regex@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== @@ -6796,7 +6853,7 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-string@^1.0.5: +is-string@^1.0.5, is-string@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== @@ -7079,9 +7136,9 @@ jest-jasmine2@^26.6.3: throat "^5.0.0" jest-junit@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-12.0.0.tgz#3ebd4a6a84b50c4ab18323a8f7d9cceb9d845df6" - integrity sha512-+8K35LlboWiPuCnXSyiid7rFdxNlpCWWM20WEYe6IZH6psfUWKZmSpSRQ5tk0C0cBeDsvsnIzcef5mYhyJsbug== + version "12.1.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-12.1.0.tgz#f27173529e7f8f10eac37beb30f8b9bc97e8f3c3" + integrity sha512-Z45INyzEAqTkCHX/hGCPgVFfZP3hQVgI68CgoEwkCiBuxETsPsniq5yPd8oxbMMHtDCpUlxXzoq7jY35dcuLKw== dependencies: mkdirp "^1.0.4" strip-ansi "^5.2.0" @@ -7121,6 +7178,21 @@ jest-message-util@^26.6.2: slash "^3.0.0" stack-utils "^2.0.2" +jest-message-util@^27.0.2: + version "27.0.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.2.tgz#181c9b67dff504d8f4ad15cba10d8b80f272048c" + integrity sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.0.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.4" + pretty-format "^27.0.2" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-mock@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" @@ -7139,6 +7211,11 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +jest-regex-util@^27.0.0: + version "27.0.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz#69d4b1bf5b690faa3490113c47486ed85dd45b68" + integrity sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ== + jest-resolve-dependencies@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" @@ -7275,6 +7352,18 @@ jest-util@^26.1.0, jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" +jest-util@^27.0.2: + version "27.0.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.2.tgz#fc2c7ace3c75ae561cf1e5fdb643bf685a5be7c7" + integrity sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA== + dependencies: + "@jest/types" "^27.0.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^3.0.0" + picomatch "^2.2.3" + jest-validate@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" @@ -7288,19 +7377,19 @@ jest-validate@^26.6.2: pretty-format "^26.6.2" jest-watch-typeahead@^0.6.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.3.tgz#26efa37da39a46d8ff417b9e4badc8176a698016" - integrity sha512-rM+2m2U/7o4VeXxA3rcEWbbKq8K/aGjAwCgmqsthPV1AqLb5NNACzS+tDCD11bdQ8MrN+H3uN61Y9qFiJgtZPw== + version "0.6.4" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.4.tgz#ea70bf1bec34bd4f55b5b72d471b02d997899c3e" + integrity sha512-tGxriteVJqonyrDj/xZHa0E2glKMiglMLQqISLCjxLUfeueRBh9VoRF2FKQyYO2xOqrWDTg7781zUejx411ZXA== dependencies: ansi-escapes "^4.3.1" chalk "^4.0.0" - jest-regex-util "^26.0.0" - jest-watcher "^26.3.0" + jest-regex-util "^27.0.0" + jest-watcher "^27.0.0" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" -jest-watcher@^26.3.0, jest-watcher@^26.6.2: +jest-watcher@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== @@ -7313,6 +7402,19 @@ jest-watcher@^26.3.0, jest-watcher@^26.6.2: jest-util "^26.6.2" string-length "^4.0.1" +jest-watcher@^27.0.0: + version "27.0.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.2.tgz#dab5f9443e2d7f52597186480731a8c6335c5deb" + integrity sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA== + dependencies: + "@jest/test-result" "^27.0.2" + "@jest/types" "^27.0.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.0.2" + string-length "^4.0.1" + jest-worker@^26.2.1, jest-worker@^26.3.0, jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -7322,6 +7424,15 @@ jest-worker@^26.2.1, jest-worker@^26.3.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^27.0.2: + version "27.0.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05" + integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" @@ -7998,7 +8109,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2: +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== @@ -8006,17 +8117,17 @@ micromatch@^4.0.0, micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.2.3" -mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== +mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": + version "1.48.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== + version "2.1.31" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== dependencies: - mime-db "1.47.0" + mime-db "1.48.0" mime@1.6.0: version "1.6.0" @@ -8367,7 +8478,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.9.0: +object-inspect@^1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== @@ -8419,14 +8530,13 @@ object.pick@^1.3.0: isobject "^3.0.1" object.values@^1.1.0, object.values@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" - integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + es-abstract "^1.18.2" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -8751,9 +8861,9 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" @@ -8881,13 +8991,14 @@ postcss-calc@^8.0.0: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.0.2" -postcss-colormin@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.1.1.tgz#834d262f6021f832d9085e355f08ade288a92a1d" - integrity sha512-SyTmqKKN6PyYNeeKEC0hqIP5CDuprO1hHurdW1aezDyfofDUOn7y7MaxcolbsW3oazPwFiGiY30XRiW1V4iZpA== +postcss-colormin@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.2.0.tgz#2b620b88c0ff19683f3349f4cf9e24ebdafb2c88" + integrity sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw== dependencies: - browserslist "^4.16.0" - colord "^2.0.0" + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.0.1" postcss-value-parser "^4.1.0" postcss-convert-values@^5.0.1: @@ -8935,12 +9046,12 @@ postcss-merge-longhand@^5.0.2: postcss-value-parser "^4.1.0" stylehacks "^5.0.1" -postcss-merge-rules@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.0.1.tgz#4ff61c5089d86845184a0f149e88d687028bef7e" - integrity sha512-UR6R5Ph0c96QB9TMBH3ml8/kvPCThPHepdhRqAbvMRDRHQACPC8iM5NpfIC03+VRMZTGXy4L/BvFzcDFCgb+fA== +postcss-merge-rules@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz#d6e4d65018badbdb7dcc789c4f39b941305d410a" + integrity sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg== dependencies: - browserslist "^4.16.0" + browserslist "^4.16.6" caniuse-api "^3.0.0" cssnano-utils "^2.0.1" postcss-selector-parser "^6.0.5" @@ -9115,10 +9226,10 @@ postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.1.tgz#6ed5e01e164e59204978994d844c653a331a8100" - integrity sha512-cD7DFo6tF9i5eWvwtI4irKOHCpmASFS0xvZ5EQIgEdA1AWfM/XiHHY/iss0gcKHhkqwgYmuo2M0KhJLd5Us6mg== +postcss-svgo@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.2.tgz#bc73c4ea4c5a80fbd4b45e29042c34ceffb9257f" + integrity sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A== dependencies: postcss-value-parser "^4.1.0" svgo "^2.3.0" @@ -9279,6 +9390,16 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" +pretty-format@^27.0.2: + version "27.0.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.2.tgz#9283ff8c4f581b186b2d4da461617143dca478a4" + integrity sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig== + dependencies: + "@jest/types" "^27.0.2" + ansi-regex "^5.0.0" + ansi-styles "^5.0.0" + react-is "^17.0.1" + pretty@2.0.0, pretty@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" @@ -9315,7 +9436,7 @@ prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" -prosemirror-commands@^1.1.7: +prosemirror-commands@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.1.8.tgz#61aec59ac101b7990ec59726199f2a31ef0cd8ca" integrity sha512-EIj/WAlrK2rVugxNxsFG6pI4430RL63ka2QKB9dO7vvStsLO//nq/oMjmd3VXp08+QNrmmLE23utqBUZwbS9Jg== @@ -9324,7 +9445,7 @@ prosemirror-commands@^1.1.7: prosemirror-state "^1.0.0" prosemirror-transform "^1.0.0" -prosemirror-dropcursor@^1.3.4: +prosemirror-dropcursor@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.3.5.tgz#d2808c17089df0e441ad66016aecc2b6457c8a1f" integrity sha512-tNUwcF2lPAkwKBZPZRtbxpwljnODRNZ3eiYloN1DSUqDjMT1nBZm0nejaEMS1TvNQ+3amibUSAiV4hX+jpASFA== @@ -9398,7 +9519,7 @@ prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transfor dependencies: prosemirror-model "^1.0.0" -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.18.6: +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.18.7: version "1.18.7" resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.18.7.tgz#d9843337a1649f532401589899b724e7e87e83c0" integrity sha512-pUCxoyuWnbVfJ/ukhQ+7+bfDMArG3wu6hHnnTFi61C7Teb5OILUhkkhEhF2/RsppBFWrkwsNcf8rQm8SSoSKRg== @@ -9413,11 +9534,11 @@ proto-list@~1.2.1: integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" prr@~1.0.1: @@ -9664,7 +9785,7 @@ regexp.prototype.flags@^1.2.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.0.0, regexpp@^3.1.0: +regexpp@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== @@ -9877,9 +9998,9 @@ rollup-plugin-terser@^7.0.0: terser "^5.0.0" rollup@^2.43.1: - version "2.49.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.49.0.tgz#f0e5bb2b770ddf1be8cc30d4cce3457574c8c871" - integrity sha512-UnrCjMXICx9q0jF8L7OYs7LPk95dW0U5UYp/VANnWqfuhyr66FWi/YVlI34Oy8Tp4ZGLcaUDt4APJm80b9oPWQ== + version "2.50.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.50.6.tgz#24e2211caf9031081656e98a5e5e94d3b5e786e2" + integrity sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg== optionalDependencies: fsevents "~2.3.1" @@ -9956,18 +10077,18 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sass-loader@^11.0.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-11.1.1.tgz#0db441bbbe197b2af96125bebb7f4be6476b13a7" - integrity sha512-fOCp/zLmj1V1WHDZbUbPgrZhA7HKXHEqkslzB+05U5K9SbSbcmH91C7QLW31AsXikxUMaxXRhhcqWZAxUMLDyA== +sass-loader@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.0.0.tgz#ba91df5725cb9676c8e0937002a647ab011eb94a" + integrity sha512-LJQMyDdNdhcvoO2gJFw7KpTaioVFDeRJOuatRDUNgCIqyu4s4kgDsNofdGzAZB1zFOgo/p3fy+aR/uGXamcJBg== dependencies: klona "^2.0.4" neo-async "^2.6.2" -sass@~1.32.0: - version "1.32.13" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.13.tgz#8d29c849e625a415bce71609c7cf95e15f74ed00" - integrity sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA== +sass@^1.34.1: + version "1.34.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.34.1.tgz#30f45c606c483d47b634f1e7371e13ff773c96ef" + integrity sha512-scLA7EIZM+MmYlej6sdVr0HRbZX5caX5ofDT9asWnUJj21oqgsC+1LuNfm0eg+vM0fCTZHhwImTiCU0sx9h9CQ== dependencies: chokidar ">=3.0.0 <4.0.0" @@ -10428,7 +10549,7 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stack-utils@^2.0.2: +stack-utils@^2.0.2, stack-utils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== @@ -10644,7 +10765,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.1.1: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -10807,11 +10928,11 @@ terminal-link@^2.0.0: supports-hyperlinks "^2.0.0" terser-webpack-plugin@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz#51d295eb7cc56785a67a372575fdc46e42d5c20c" - integrity sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q== + version "5.1.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af" + integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A== dependencies: - jest-worker "^26.6.2" + jest-worker "^27.0.2" p-limit "^3.1.0" schema-utils "^3.0.0" serialize-javascript "^5.0.1" @@ -11080,7 +11201,7 @@ tslib@^2.0.3, tslib@^2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== -tsutils@^3.17.1: +tsutils@^3.17.1, tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== @@ -11176,7 +11297,7 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" -unbox-primitive@^1.0.0: +unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== @@ -11585,9 +11706,9 @@ vue-svg-loader@^0.12.0: svg-to-vue "^0.4.0" vue-template-compiler@^2.6.11: - version "2.6.12" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e" - integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg== + version "2.6.13" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.13.tgz#a735b8974e013ce829e7f77e08e4ee5aecbd3005" + integrity sha512-latKAqpUjCkovB8XppW5gnZbSdYQzkf8pavsMBZYZrQcG6lAnj0EH4Ty7jMwAwFw5Cf4mybKBHlp1UTjnLPOWw== dependencies: de-indent "^1.0.2" he "^1.1.0" @@ -11603,9 +11724,9 @@ vue2-leaflet@^2.0.3: integrity sha512-uT7lpFoVEDhINMyTpiAthh6aiKFGHuYWLoVH8JJ0YNNSch+XMZFl4YBQ0S2hHYDquQIsh8zx+yINeUI01y9ugw== vue@^2.6.11: - version "2.6.12" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123" - integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg== + version "2.6.13" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.13.tgz#94b2c1b31fddf1dfcc34f28ec848ba8f01ea4c5b" + integrity sha512-O+pAdJkce1ooYS1XyoQtpBQr9An+Oys3w39rkqxukVO3ZD1ilYJkWBGoRuadiQEm2LLJnCL2utV4TMSf52ubjw== vuedraggable@*, vuedraggable@^2.24.3: version "2.24.3" @@ -11640,7 +11761,7 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -watchpack@^2.0.0: +watchpack@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== @@ -11793,10 +11914,10 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.3: source-list-map "^2.0.0" source-map "~0.6.1" -webpack-sources@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" - integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== +webpack-sources@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa" + integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ== dependencies: source-list-map "^2.0.1" source-map "^0.6.1" @@ -11807,9 +11928,9 @@ webpack-virtual-modules@^0.4.2: integrity sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw== webpack@^5.22.0: - version "5.37.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.37.1.tgz#2deb5acd350583c1ab9338471f323381b0b0c14b" - integrity sha512-btZjGy/hSjCAAVHw+cKG+L0M+rstlyxbO2C+BOTaQ5/XAnxkDrP5sVbqWhXgo4pL3X2dcOib6rqCP20Zr9PLow== + version "5.38.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.38.1.tgz#5224c7f24c18e729268d3e3bc97240d6e880258e" + integrity sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.47" @@ -11821,7 +11942,7 @@ webpack@^5.22.0: chrome-trace-event "^1.0.2" enhanced-resolve "^5.8.0" es-module-lexer "^0.4.0" - eslint-scope "^5.1.1" + eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.4" @@ -11832,8 +11953,8 @@ webpack@^5.22.0: schema-utils "^3.0.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.1" - watchpack "^2.0.0" - webpack-sources "^2.1.1" + watchpack "^2.2.0" + webpack-sources "^2.3.0" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -12137,16 +12258,16 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" ws@^7.3.1, ws@^7.4.5: - version "7.4.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== xml-name-validator@^3.0.0: version "3.0.0" diff --git a/mix.lock b/mix.lock index 4a379c7b..801e420a 100644 --- a/mix.lock +++ b/mix.lock @@ -8,7 +8,7 @@ "bamboo_phoenix": {:hex, :bamboo_phoenix, "1.0.0", "f3cc591ffb163ed0bf935d256f1f4645cd870cf436545601215745fb9cc9953f", [:mix], [{:bamboo, ">= 2.0.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.3.0", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "6db88fbb26019c84a47994bb2bd879c0887c29ce6c559bc6385fd54eb8b37dee"}, "bamboo_smtp": {:hex, :bamboo_smtp, "4.0.1", "7e48188663f6164a81183688bb263be4c3952648fcd3ce52164f44d68777f9cd", [:mix], [{:bamboo, "~> 2.1.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:gen_smtp, "~> 1.1.1", [hex: :gen_smtp, repo: "hexpm", optional: false]}], "hexpm", "7ff1d62ae39bfb1c14f6d3cddba0fa1482a45c2a2b497a2da601eff7099605c8"}, "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, - "cachex": {:hex, :cachex, "3.3.0", "6f2ebb8f27491fe39121bd207c78badc499214d76c695658b19d6079beeca5c2", [: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", "d90e5ee1dde14cef33f6b187af4335b88748b72b30c038969176cd4e6ccc31a1"}, + "cachex": {:hex, :cachex, "3.4.0", "868b2959ea4aeb328c6b60ff66c8d5123c083466ad3c33d3d8b5f142e13101fb", [: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", "370123b1ab4fba4d2965fb18f87fd758325709787c8c5fce35b3fe80645ccbe5"}, "certifi": {:hex, :certifi, "2.6.1", "dbab8e5e155a0763eea978c913ca280a6b544bfa115633fa20249c3d396d9493", [:rebar3], [], "hexpm", "524c97b4991b3849dd5c17a631223896272c6b0af446778ba4675a1dff53bb7e"}, "cldr_utils": {:hex, :cldr_utils, "2.15.1", "1136987437ac4821f3ec7d46ff150f1c020a1f79730ff1252bfa7681ed577f31", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: true]}, {:decimal, "~> 1.9 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "ca3c8da0aab18b4d944541392e9548422e30854e3a9d7768dc629c8123f8efb8"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, @@ -18,18 +18,18 @@ "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"}, "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, - "credo": {:hex, :credo, "1.5.5", "e8f422026f553bc3bebb81c8e8bf1932f498ca03339856c7fec63d3faac8424b", [:mix], [{:bunt, "~> 0.2.0", [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", "dd8623ab7091956a855dc9f3062486add9c52d310dfd62748779c4315d8247de"}, + "credo": {:hex, :credo, "1.5.6", "e04cc0fdc236fefbb578e0c04bd01a471081616e741d386909e527ac146016c6", [:mix], [{:bunt, "~> 0.2.0", [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", "4b52a3e558bd64e30de62a648518a5ea2b6e3e5d2b164ef5296244753fc7eb17"}, "dataloader": {:hex, :dataloader, "1.0.8", "114294362db98a613f231589246aa5b0ce847412e8e75c4c94f31f204d272cbf", [:mix], [{:ecto, ">= 3.4.3 and < 4.0.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "eaf3c2aa2bc9dbd2f1e960561d616b7f593396c4754185b75904f6d66c82a667"}, "db_connection": {:hex, :db_connection, "2.4.0", "d04b1b73795dae60cead94189f1b8a51cc9e1f911c234cc23074017c43c031e5", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ad416c21ad9f61b3103d254a71b63696ecadb6a917b36f563921e0de00d7d7c8"}, "decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, "dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"}, "earmark": {:hex, :earmark, "1.4.15", "2c7f924bf495ec1f65bd144b355d0949a05a254d0ec561740308a54946a67888", [:mix], [{:earmark_parser, ">= 1.4.13", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "3b1209b85bc9f3586f370f7c363f6533788fb4e51db23aa79565875e7f9999ee"}, "earmark_parser": {:hex, :earmark_parser, "1.4.13", "0c98163e7d04a15feb62000e1a891489feb29f3d10cb57d4f845c405852bbef8", [:mix], [], "hexpm", "d602c26af3a0af43d2f2645613f65841657ad6efc9f0e361c3b6c06b578214ba"}, - "ecto": {:hex, :ecto, "3.6.1", "7bb317e3fd0179ad725069fd0fe8a28ebe48fec6282e964ea502e4deccb0bd0f", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cbb3294a990447b19f0725488a749f8cf806374e0d9d0dffc45d61e7aeaf6553"}, + "ecto": {:hex, :ecto, "3.6.2", "efdf52acfc4ce29249bab5417415bd50abd62db7b0603b8bab0d7b996548c2bc", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "efad6dfb04e6f986b8a3047822b0f826d9affe8e4ebdd2aeedbfcb14fd48884e"}, "ecto_autoslug_field": {:hex, :ecto_autoslug_field, "2.0.1", "2177c1c253f6dd3efd4b56d1cb76104d0a6ef044c6b9a7a0ad6d32665c4111e5", [:mix], [{:ecto, ">= 2.1.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:slugger, ">= 0.2.0", [hex: :slugger, repo: "hexpm", optional: false]}], "hexpm", "a3cc73211f2e75b89a03332183812ebe1ac08be2e25a1df5aa3d1422f92c45c3"}, "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_shortuuid": {:hex, :ecto_shortuuid, "0.1.3", "d36aede64edf256e4b769be2ad15a8ad5d9d1ff8ad46befe39e8cb4489abcd05", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:shortuuid, "~> 2.1.1", [hex: :shortuuid, repo: "hexpm", optional: false]}], "hexpm", "d215c8ced7125265de94d55abc696125942caef33439cf281fafded9744a4294"}, - "ecto_sql": {:hex, :ecto_sql, "3.6.1", "8774dc3fc0ff7b6be510858b99883640f990c0736b8ab54588f9a0c91807f909", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.6.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.4.0 or ~> 0.5.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "66f35c3f2d5978b6bffebd1e6351ab8c9d6b68650d62abd1ab8d149de40e0779"}, + "ecto_sql": {:hex, :ecto_sql, "3.6.2", "9526b5f691701a5181427634c30655ac33d11e17e4069eff3ae1176c764e0ba3", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.6.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.4.0 or ~> 0.5.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5ec9d7e6f742ea39b63aceaea9ac1d1773d574ea40df5a53ef8afbd9242fdb6b"}, "elixir_feed_parser": {:hex, :elixir_feed_parser, "2.1.0", "bb96fb6422158dc7ad59de62ef211cc69d264acbbe63941a64a5dce97bbbc2e6", [:mix], [{:timex, "~> 3.4", [hex: :timex, repo: "hexpm", optional: false]}], "hexpm", "2d3c62fe7b396ee3b73d7160bc8fadbd78bfe9597c98c7d79b3f1038d9cba28f"}, "elixir_make": {:hex, :elixir_make, "0.6.2", "7dffacd77dec4c37b39af867cedaabb0b59f6a871f89722c25b28fcd4bd70530", [:mix], [], "hexpm", "03e49eadda22526a7e5279d53321d1cced6552f344ba4e03e619063de75348d9"}, "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, @@ -81,7 +81,7 @@ "jose": {:hex, :jose, "1.11.1", "59da64010c69aad6cde2f5b9248b896b84472e99bd18f246085b7b9fe435dcdb", [:mix, :rebar3], [], "hexpm", "078f6c9fb3cd2f4cfafc972c814261a7d1e8d2b3685c0a76eb87e158efff1ac5"}, "jsx": {:hex, :jsx, "2.8.3", "a05252d381885240744d955fbe3cf810504eb2567164824e19303ea59eef62cf", [:mix, :rebar3], [], "hexpm", "fc3499fed7a726995aa659143a248534adc754ebd16ccd437cd93b649a95091f"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, - "junit_formatter": {:hex, :junit_formatter, "3.2.0", "6a64d6327c48472e983af7645aeb1d756cad4b33c5ab3a5db820f13d6d2b85fe", [:mix], [], "hexpm", "043d6f660667ee64c6d7e5edb867b7900c395356346e77185879449b50486681"}, + "junit_formatter": {:hex, :junit_formatter, "3.3.0", "bd7914d92885f7cf949dbe1dc6bacf76badfb2c1f5f7b3f9433c20e5b6ec42c8", [:mix], [], "hexpm", "4d040410925324b155ae4c7d41e884a0cdebe53b917bee4f22adf152e987a666"}, "linkify": {:hex, :linkify, "0.5.0", "e0ea8de73ff44742d6a889721221f4c4eccaad5284957ee9832ffeb347602d54", [:mix], [], "hexpm", "4ccd958350aee7c51c89e21f05b15d30596ebbba707e051d21766be1809df2d7"}, "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.15.1", "b5888c880d17d1cc3e598f05cdb5b5a91b7b17ac4eaf5f297cb697663a1094dd", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "db68c173234b07ab2a07f645a5acdc117b9f99d69ebf521821d89690ae6c6ec8"}, @@ -91,7 +91,7 @@ "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, "mimetype_parser": {:hex, :mimetype_parser, "0.1.3", "628ac9fe56aa7edcedb534d68397dd66674ab82493c8ebe39acb9a19b666099d", [:mix], [], "hexpm", "7d8f80c567807ce78cd93c938e7f4b0a20b1aaaaab914bf286f68457d9f7a852"}, - "mix_test_watch": {:hex, :mix_test_watch, "1.0.2", "34900184cbbbc6b6ed616ed3a8ea9b791f9fd2088419352a6d3200525637f785", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "47ac558d8b06f684773972c6d04fcc15590abdb97aeb7666da19fcbfdc441a07"}, + "mix_test_watch": {:hex, :mix_test_watch, "1.0.3", "63d5b21e9278abf519f359e6d59aed704ed3c72ec38be6ab22306ae5dc9a2e06", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "7352e91952d9748fb4f8aebe0a60357cdaf4bd6d6c42b5139c78fbcda6a0d7a2"}, "mmdb2_decoder": {:hex, :mmdb2_decoder, "3.0.0", "54828676a36e75e9a25bc9a0bb0598d4c7fcc767bf0b40674850b22e05b7b6cc", [:mix], [], "hexpm", "359dc9242915538d1dceb9f6d96c72201dca76ce62e49d22e2ed1e86f20bea8e"}, "mock": {:hex, :mock, "0.3.7", "75b3bbf1466d7e486ea2052a73c6e062c6256fb429d6797999ab02fa32f29e03", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "4da49a4609e41fd99b7836945c26f373623ea968cfb6282742bcb94440cf7e5c"}, "mogrify": {:hex, :mogrify, "0.8.0", "3506f3ca3f7b95a155f3b4ef803b5db176f5a0633723e3fe85e0d6399e3b11c8", [:mix], [], "hexpm", "2278d245f07056ea3b586e98801e933695147066fa4cf563f552c1b4f0ff8ad9"}, @@ -100,7 +100,7 @@ "nimble_pool": {:hex, :nimble_pool, "0.1.0", "ffa9d5be27eee2b00b0c634eb649aa27f97b39186fec3c493716c2a33e784ec6", [:mix], [], "hexpm", "343a1eaa620ddcf3430a83f39f2af499fe2370390d4f785cd475b4df5acaf3f9"}, "oauth2": {:hex, :oauth2, "2.0.0", "338382079fe16c514420fa218b0903f8ad2d4bfc0ad0c9f988867dfa246731b0", [:mix], [{:hackney, "~> 1.13", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "881b8364ac7385f9fddc7949379cbe3f7081da37233a1aa7aab844670a91e7e7"}, "oauther": {:hex, :oauther, "1.1.1", "7d8b16167bb587ecbcddd3f8792beb9ec3e7b65c1f8ebd86b8dd25318d535752", [:mix], [], "hexpm", "9374f4302045321874cccdc57eb975893643bd69c3b22bf1312dab5f06e5788e"}, - "oban": {:hex, :oban, "2.6.1", "7466e25934be6c3f696c624ed0779459dd2add03d19f9865a478d3b47b77e814", [:mix], [{:ecto_sql, ">= 3.4.3", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3e86eaab8fdd1c1af64f7cfd46ad4352d19696709eb2068de239e40894a254ea"}, + "oban": {:hex, :oban, "2.7.1", "db538317a5458a7be2023c09b9a89572578532debb0cd60b9c83d88a27cd7d78", [:mix], [{:ecto_sql, ">= 3.4.3", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ed107db5cb00a631ff76cdcc99e90e63c015f1855443914b35fa9ba82df8d925"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, "phoenix": {:hex, :phoenix, "1.5.9", "a6368d36cfd59d917b37c44386e01315bc89f7609a10a45a22f47c007edf2597", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7e4bce20a67c012f1fbb0af90e5da49fa7bf0d34e3a067795703b74aef75427d"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.2.1", "13f124cf0a3ce0f1948cf24654c7b9f2347169ff75c1123f44674afee6af3b03", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 2.15", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "478a1bae899cac0a6e02be1deec7e2944b7754c04e7d4107fc5a517f877743c0"}, From f100fce0da57d21f77b4bdd7713ed2e8d5bf2a05 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 4 Jun 2021 16:32:26 +0200 Subject: [PATCH 63/67] Finally fix backend tests Signed-off-by: Thomas Citharel --- lib/mix/tasks/mobilizon/common.ex | 2 +- test/graphql/resolvers/activity_test.exs | 1 + .../service/workers/activity_builder_test.exs | 3 ++- .../workers/legacy_notifier_builder_test.exs | 23 +++++++++++-------- test/support/factory.ex | 4 +++- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/lib/mix/tasks/mobilizon/common.ex b/lib/mix/tasks/mobilizon/common.ex index b46fe3d2..4ee5d96f 100644 --- a/lib/mix/tasks/mobilizon/common.ex +++ b/lib/mix/tasks/mobilizon/common.ex @@ -12,7 +12,7 @@ defmodule Mix.Tasks.Mobilizon.Common do def start_mobilizon do if mix_task?(), do: Mix.Task.run("app.config") - unless System.get_env("DEBUG") do + unless System.get_env("DEBUG") || Application.fetch_env!(:mobilizon, :env) == :test do Logger.configure(level: :error) end diff --git a/test/graphql/resolvers/activity_test.exs b/test/graphql/resolvers/activity_test.exs index 3555f6fc..7dd8f3bb 100644 --- a/test/graphql/resolvers/activity_test.exs +++ b/test/graphql/resolvers/activity_test.exs @@ -260,6 +260,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ActivityTest do group: %Actor{preferred_username: preferred_username, id: group_id} = group } do user = insert(:user) + insert(:settings, user_id: user.id, user: user) actor = insert(:actor, user: user) insert(:member, diff --git a/test/service/workers/activity_builder_test.exs b/test/service/workers/activity_builder_test.exs index 480ddaa5..7bf7912e 100644 --- a/test/service/workers/activity_builder_test.exs +++ b/test/service/workers/activity_builder_test.exs @@ -10,6 +10,7 @@ defmodule Mobilizon.Service.Workers.ActivityBuilderTest do alias Mobilizon.Users.User use Mobilizon.DataCase + use Mobilizon.Tests.Helpers import Mobilizon.Factory import Mox @@ -17,7 +18,7 @@ defmodule Mobilizon.Service.Workers.ActivityBuilderTest do setup_all do Mox.defmock(NotifierMock, for: Mobilizon.Service.Notifier) - Mobilizon.Config.put([Mobilizon.Service.Notifier, :notifiers], [ + clear_config([Mobilizon.Service.Notifier, :notifiers], [ NotifierMock ]) diff --git a/test/service/workers/legacy_notifier_builder_test.exs b/test/service/workers/legacy_notifier_builder_test.exs index e6ffb6d2..754657a0 100644 --- a/test/service/workers/legacy_notifier_builder_test.exs +++ b/test/service/workers/legacy_notifier_builder_test.exs @@ -9,17 +9,18 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilderTest do alias Mobilizon.Events.Event alias Mobilizon.Service.Notifier.Mock, as: NotifierMock alias Mobilizon.Service.Workers.LegacyNotifierBuilder - alias Mobilizon.Users.User + alias Mobilizon.Users.{Setting, User} - use Mobilizon.DataCase, async: true + use Mobilizon.DataCase + use Mobilizon.Tests.Helpers import Mox import Mobilizon.Factory setup_all do - Mox.defmock(Mobilizon.Service.Notifier.Mock, for: Mobilizon.Service.Notifier) + Mox.defmock(NotifierMock, for: Mobilizon.Service.Notifier) - Mobilizon.Config.put([Mobilizon.Service.Notifier, :notifiers], [ - Mobilizon.Service.Notifier.Mock + clear_config([Mobilizon.Service.Notifier, :notifiers], [ + NotifierMock ]) :ok @@ -56,8 +57,8 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilderTest do args = Map.merge(@mentionned, %{ "subject_params" => %{ - event_uuid: uuid, - event_title: title + "event_uuid" => uuid, + "event_title" => title }, "author_id" => actor_id, "object_id" => to_string(comment_id), @@ -82,6 +83,8 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilderTest do test "if the actor mentionned is local" do %User{} = user1 = insert(:user) %User{} = user2 = insert(:user) + %Setting{} = settings2 = insert(:settings, user: user2, user_id: user2.id) + user2 = %User{user2 | settings: settings2} %Actor{id: actor_id} = actor = insert(:actor, user: user1) %Actor{id: actor_id_2} = insert(:actor, user: user2) @@ -92,8 +95,8 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilderTest do args = Map.merge(@mentionned, %{ "subject_params" => %{ - event_uuid: uuid, - event_title: title + "event_uuid" => uuid, + "event_title" => title }, "author_id" => actor_id, "object_id" => to_string(comment_id), @@ -155,6 +158,8 @@ defmodule Mobilizon.Service.Workers.LegacyNotifierBuilderTest do test "if there's some participants" do %User{} = user1 = insert(:user) %User{} = user2 = insert(:user) + %Setting{} = settings2 = insert(:settings, user: user2, user_id: user2.id) + user2 = %User{user2 | settings: settings2} %Actor{id: actor_id} = actor = insert(:actor, user: user1) %Actor{} = actor2 = insert(:actor, user: user2) diff --git a/test/support/factory.ex b/test/support/factory.ex index c55039ac..585376cb 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -31,7 +31,9 @@ defmodule Mobilizon.Factory do notification_before_event: false, notification_pending_participation: :one_day, notification_pending_membership: :one_day, - user_id: nil + group_notifications: :one_day, + last_notification_sent: nil, + user: build(:user) } end From 51106841ab3a3e3e8131b54c9e1799ba5a1e87da Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 4 Jun 2021 20:24:43 +0200 Subject: [PATCH 64/67] Fix Vue unit tests Signed-off-by: Thomas Citharel --- js/src/components/Comment/CommentTree.vue | 5 +- .../ParticipationWithoutAccount.vue | 21 ++-- js/src/views/User/PasswordReset.vue | 4 +- js/src/vue-apollo.ts | 1 + js/tests/unit/specs/common.ts | 19 ++++ .../components/Comment/CommentTree.spec.ts | 37 +++--- .../__snapshots__/CommentTree.spec.ts.snap | 4 +- .../ParticipationSection.spec.ts | 27 ++--- .../ParticipationWithoutAccount.spec.ts | 13 +-- .../components/Post/PostListItem.spec.ts | 4 + .../components/Report/ReportModal.spec.ts | 2 +- .../components/User/PasswordReset.spec.ts | 105 ++++++++++++++++++ .../__snapshots__/PasswordReset.spec.ts.snap | 74 ++++++++++++ .../unit/specs/components/User/login.spec.ts | 2 +- js/tests/unit/specs/components/navbar.spec.ts | 2 +- js/tests/unit/specs/mocks/auth.ts | 14 +++ js/tests/unit/specs/mocks/config.ts | 5 + js/tests/unit/specs/mocks/event.ts | 10 ++ 18 files changed, 283 insertions(+), 66 deletions(-) create mode 100644 js/tests/unit/specs/common.ts create mode 100644 js/tests/unit/specs/components/User/PasswordReset.spec.ts create mode 100644 js/tests/unit/specs/components/User/__snapshots__/PasswordReset.spec.ts.snap diff --git a/js/src/components/Comment/CommentTree.vue b/js/src/components/Comment/CommentTree.vue index 54767486..2c51b673 100644 --- a/js/src/components/Comment/CommentTree.vue +++ b/js/src/components/Comment/CommentTree.vue @@ -99,9 +99,7 @@ import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; @Component({ apollo: { - currentActor: { - query: CURRENT_ACTOR_CLIENT, - }, + currentActor: CURRENT_ACTOR_CLIENT, comments: { query: COMMENTS_THREADS_WITH_REPLIES, variables() { @@ -152,7 +150,6 @@ export default class CommentTree extends Vue { } async createCommentForEvent(comment: IComment): Promise { - console.log("creating comment", comment); this.emptyCommentError = ["", "

      "].includes(comment.text); if (this.emptyCommentError) return; try { diff --git a/js/src/components/Participation/ParticipationWithoutAccount.vue b/js/src/components/Participation/ParticipationWithoutAccount.vue index 1b86c7a4..e7ec2393 100644 --- a/js/src/components/Participation/ParticipationWithoutAccount.vue +++ b/js/src/components/Participation/ParticipationWithoutAccount.vue @@ -217,25 +217,24 @@ export default class ParticipationWithoutAccount extends Vue { ); return; } - const { event } = cachedData; - if (event === null) { - console.error( - "Cannot update event participant cache, because of null value." - ); - return; - } + const participantStats = { ...cachedData.event.participantStats }; if (updateData.joinEvent.role === ParticipantRole.NOT_CONFIRMED) { - event.participantStats.notConfirmed += 1; + participantStats.notConfirmed += 1; } else { - event.participantStats.going += 1; - event.participantStats.participant += 1; + participantStats.going += 1; + participantStats.participant += 1; } store.writeQuery({ query: FETCH_EVENT_BASIC, variables: { uuid: this.event.uuid }, - data: { event }, + data: { + event: { + ...cachedData.event, + participantStats, + }, + }, }); }, }); diff --git a/js/src/views/User/PasswordReset.vue b/js/src/views/User/PasswordReset.vue index 9243ca6a..5b142932 100644 --- a/js/src/views/User/PasswordReset.vue +++ b/js/src/views/User/PasswordReset.vue @@ -93,9 +93,9 @@ export default class PasswordReset extends Vue { } saveUserData(data.resetPassword); - await this.$router.push({ name: RouteName.HOME }); + this.$router.push({ name: RouteName.HOME }); + return; } catch (err) { - console.error(err); err.graphQLErrors.forEach(({ message }: { message: any }) => { this.errors.push(message); }); diff --git a/js/src/vue-apollo.ts b/js/src/vue-apollo.ts index 65a23ac4..f3c4d93d 100644 --- a/js/src/vue-apollo.ts +++ b/js/src/vue-apollo.ts @@ -136,6 +136,7 @@ const errorLink = onError( const fullLink = authMiddleware.concat(errorLink).concat(link); const cache = new InMemoryCache({ + addTypename: true, typePolicies, possibleTypes, dataIdFromObject: (object: any) => { diff --git a/js/tests/unit/specs/common.ts b/js/tests/unit/specs/common.ts new file mode 100644 index 00000000..2fa8f83a --- /dev/null +++ b/js/tests/unit/specs/common.ts @@ -0,0 +1,19 @@ +import { ICurrentUserRole } from "@/types/enums"; + +export const defaultResolvers = { + Query: { + currentUser: (): Record => ({ + email: "user@mail.com", + id: "2", + role: ICurrentUserRole.USER, + isLoggedIn: true, + __typename: "CurrentUser", + }), + currentActor: (): Record => ({ + id: "67", + preferredUsername: "someone", + name: "Personne", + __typename: "CurrentActor", + }), + }, +}; diff --git a/js/tests/unit/specs/components/Comment/CommentTree.spec.ts b/js/tests/unit/specs/components/Comment/CommentTree.spec.ts index 004158bc..6c0568aa 100644 --- a/js/tests/unit/specs/components/Comment/CommentTree.spec.ts +++ b/js/tests/unit/specs/components/Comment/CommentTree.spec.ts @@ -6,9 +6,11 @@ import { MockApolloClient, RequestHandler, } from "mock-apollo-client"; -import buildCurrentUserResolver from "@/apollo/user"; import VueApollo from "vue-apollo"; -import { COMMENTS_THREADS, CREATE_COMMENT_FROM_EVENT } from "@/graphql/comment"; +import { + COMMENTS_THREADS_WITH_REPLIES, + CREATE_COMMENT_FROM_EVENT, +} from "@/graphql/comment"; import { CommentModeration } from "@/types/enums"; import { IEvent } from "@/types/event.model"; import { @@ -16,8 +18,9 @@ import { newCommentForEventMock, newCommentForEventResponse, } from "../../mocks/event"; -import { InMemoryCache } from "@apollo/client/cache"; - +import flushPromises from "flush-promises"; +import { InMemoryCache } from "@apollo/client/core"; +import { defaultResolvers } from "../../common"; const localVue = createLocalVue(); localVue.use(Buefy); localVue.use(VueApollo); @@ -35,13 +38,12 @@ describe("CommentTree", () => { let mockClient: MockApolloClient; let apolloProvider; let requestHandlers: Record; + const cache = new InMemoryCache({ addTypename: false }); const generateWrapper = (handlers = {}, baseData = {}) => { - const cache = new InMemoryCache({ addTypename: true }); - mockClient = createMockClient({ cache, - resolvers: buildCurrentUserResolver(cache), + resolvers: defaultResolvers, }); requestHandlers = { @@ -55,14 +57,13 @@ describe("CommentTree", () => { }; mockClient.setRequestHandler( - COMMENTS_THREADS, + COMMENTS_THREADS_WITH_REPLIES, requestHandlers.eventCommentThreadsQueryHandler ); mockClient.setRequestHandler( CREATE_COMMENT_FROM_EVENT, requestHandlers.createCommentForEventMutationHandler ); - apolloProvider = new VueApollo({ defaultClient: mockClient, }); @@ -76,16 +77,13 @@ describe("CommentTree", () => { stubs: ["editor"], data() { return { - currentActor: { - id: "76", - }, ...baseData, }; }, }); }; - it("renders a comment tree", async () => { + it("renders an empty comment tree", async () => { generateWrapper(); expect(wrapper.exists()).toBe(true); @@ -98,7 +96,7 @@ describe("CommentTree", () => { expect(wrapper.html()).toMatchSnapshot(); }); - it("renders a comment tree", async () => { + it("renders a comment tree with comments", async () => { generateWrapper(); await wrapper.vm.$nextTick(); @@ -124,14 +122,7 @@ describe("CommentTree", () => { } ); - wrapper.setData({ - currentActor: { - id: "67", - }, - }); - - await wrapper.vm.$nextTick(); - await wrapper.vm.$nextTick(); // because of the + await flushPromises(); expect(wrapper.find("form.new-comment").isVisible()).toBe(true); expect(wrapper.findAll(".comment-list .root-comment").length).toBe(2); @@ -147,7 +138,7 @@ describe("CommentTree", () => { if (mockClient) { const cachedData = mockClient.cache.readQuery<{ event: IEvent }>({ - query: COMMENTS_THREADS, + query: COMMENTS_THREADS_WITH_REPLIES, variables: { eventUUID: eventData.uuid, }, diff --git a/js/tests/unit/specs/components/Comment/__snapshots__/CommentTree.spec.ts.snap b/js/tests/unit/specs/components/Comment/__snapshots__/CommentTree.spec.ts.snap index f0000571..e8311c62 100644 --- a/js/tests/unit/specs/components/Comment/__snapshots__/CommentTree.spec.ts.snap +++ b/js/tests/unit/specs/components/Comment/__snapshots__/CommentTree.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`CommentTree renders a comment tree 1`] = ` +exports[`CommentTree renders a comment tree with comments 1`] = `
      @@ -13,7 +13,7 @@ exports[`CommentTree renders a comment tree 1`] = `
      `; -exports[`CommentTree renders a comment tree 2`] = ` +exports[`CommentTree renders an empty comment tree 1`] = `
      diff --git a/js/tests/unit/specs/components/Participation/ParticipationSection.spec.ts b/js/tests/unit/specs/components/Participation/ParticipationSection.spec.ts index 7bf40017..e9e137b1 100644 --- a/js/tests/unit/specs/components/Participation/ParticipationSection.spec.ts +++ b/js/tests/unit/specs/components/Participation/ParticipationSection.spec.ts @@ -9,11 +9,11 @@ import { MockApolloClient, RequestHandler, } from "mock-apollo-client"; -import buildCurrentUserResolver from "@/apollo/user"; import { CONFIG } from "@/graphql/config"; import VueApollo from "vue-apollo"; import { configMock } from "../../mocks/config"; import { InMemoryCache } from "@apollo/client/cache"; +import { defaultResolvers } from "../../common"; const localVue = createLocalVue(); localVue.use(Buefy); @@ -42,11 +42,11 @@ describe("ParticipationSection", () => { customProps: Record = {}, baseData: Record = {} ) => { - const cache = new InMemoryCache({ addTypename: true }); + const cache = new InMemoryCache({ addTypename: false }); mockClient = createMockClient({ cache, - resolvers: buildCurrentUserResolver(cache), + resolvers: defaultResolvers, }); requestHandlers = { configQueryHandler: jest.fn().mockResolvedValue(configMock), @@ -62,6 +62,9 @@ describe("ParticipationSection", () => { localVue, router, apolloProvider, + stubs: { + ParticipationButton: true, + }, propsData: { participation: null, event: eventData, @@ -70,9 +73,6 @@ describe("ParticipationSection", () => { }, data() { return { - currentActor: { - id: "76", - }, ...baseData, }; }, @@ -89,14 +89,15 @@ describe("ParticipationSection", () => { expect(wrapper.find(".event-participation").exists()).toBeTruthy(); - const participationButton = wrapper.find( - ".event-participation .participation-button a.button.is-large.is-primary" - ); - expect(participationButton.attributes("href")).toBe( - `/events/${eventData.uuid}/participate/with-account` - ); + // TODO: Move to participation button test + // const participationButton = wrapper.find( + // ".event-participation .participation-button a.button.is-large.is-primary" + // ); + // expect(participationButton.attributes("href")).toBe( + // `/events/${eventData.uuid}/participate/with-account` + // ); - expect(participationButton.text()).toBe("Participate"); + // expect(participationButton.text()).toBe("Participate"); }); it("renders the participation section with existing confimed anonymous participation", async () => { diff --git a/js/tests/unit/specs/components/Participation/ParticipationWithoutAccount.spec.ts b/js/tests/unit/specs/components/Participation/ParticipationWithoutAccount.spec.ts index 047cb595..bbda6f50 100644 --- a/js/tests/unit/specs/components/Participation/ParticipationWithoutAccount.spec.ts +++ b/js/tests/unit/specs/components/Participation/ParticipationWithoutAccount.spec.ts @@ -13,7 +13,6 @@ import { MockApolloClient, RequestHandler, } from "mock-apollo-client"; -import buildCurrentUserResolver from "@/apollo/user"; import { CONFIG } from "@/graphql/config"; import VueApollo from "vue-apollo"; import { FETCH_EVENT_BASIC, JOIN_EVENT } from "@/graphql/event"; @@ -26,6 +25,8 @@ import { joinEventResponseMock, } from "../../mocks/event"; import { InMemoryCache } from "@apollo/client/cache"; +import { defaultResolvers } from "../../common"; +import flushPromises from "flush-promises"; const localVue = createLocalVue(); localVue.use(Buefy); @@ -65,11 +66,11 @@ describe("ParticipationWithoutAccount", () => { customProps: Record = {}, baseData: Record = {} ) => { - const cache = new InMemoryCache({ addTypename: true }); + const cache = new InMemoryCache({ addTypename: false }); mockClient = createMockClient({ cache, - resolvers: buildCurrentUserResolver(cache), + resolvers: defaultResolvers, }); requestHandlers = { configQueryHandler: jest.fn().mockResolvedValue(configMock), @@ -155,11 +156,7 @@ describe("ParticipationWithoutAccount", () => { eventData.participantStats.participant + 1 ); } - // lots of things to await - await wrapper.vm.$nextTick(); - await wrapper.vm.$nextTick(); - await wrapper.vm.$nextTick(); - await wrapper.vm.$nextTick(); + await flushPromises(); expect(wrapper.find("form").exists()).toBeFalsy(); expect(wrapper.find("h1.title").text()).toBe( "Request for participation confirmation sent" diff --git a/js/tests/unit/specs/components/Post/PostListItem.spec.ts b/js/tests/unit/specs/components/Post/PostListItem.spec.ts index 60397d59..cf52cb29 100644 --- a/js/tests/unit/specs/components/Post/PostListItem.spec.ts +++ b/js/tests/unit/specs/components/Post/PostListItem.spec.ts @@ -3,10 +3,14 @@ import PostListItem from "@/components/Post/PostListItem.vue"; import Buefy from "buefy"; import VueRouter from "vue-router"; import { routes } from "@/router"; +import { enUS } from "date-fns/locale"; const localVue = createLocalVue(); localVue.use(Buefy); localVue.use(VueRouter); +localVue.use((vue) => { + vue.prototype.$dateFnsLocale = enUS; +}); const router = new VueRouter({ routes, mode: "history" }); config.mocks.$t = (key: string): string => key; diff --git a/js/tests/unit/specs/components/Report/ReportModal.spec.ts b/js/tests/unit/specs/components/Report/ReportModal.spec.ts index 0f3944b8..75f6846c 100644 --- a/js/tests/unit/specs/components/Report/ReportModal.spec.ts +++ b/js/tests/unit/specs/components/Report/ReportModal.spec.ts @@ -98,7 +98,7 @@ describe("ReportModal", () => { ); const switchButton = wrapper.find('input[type="checkbox"]'); - switchButton.trigger("click"); + switchButton.setChecked(); const submit = wrapper.find("footer.modal-card-foot button.is-primary"); submit.trigger("click"); diff --git a/js/tests/unit/specs/components/User/PasswordReset.spec.ts b/js/tests/unit/specs/components/User/PasswordReset.spec.ts new file mode 100644 index 00000000..d6b24689 --- /dev/null +++ b/js/tests/unit/specs/components/User/PasswordReset.spec.ts @@ -0,0 +1,105 @@ +import { config, createLocalVue, mount } from "@vue/test-utils"; +import PasswordReset from "@/views/User/PasswordReset.vue"; +import Buefy from "buefy"; +import { createMockClient, RequestHandler } from "mock-apollo-client"; +import { RESET_PASSWORD } from "@/graphql/auth"; +import VueApollo from "vue-apollo"; +import { resetPasswordResponseMock } from "../../mocks/auth"; +import RouteName from "@/router/name"; +import flushPromises from "flush-promises"; + +const localVue = createLocalVue(); +localVue.use(Buefy); +config.mocks.$t = (key: string): string => key; +const $router = { push: jest.fn() }; + +let requestHandlers: Record; + +const generateWrapper = ( + customRequestHandlers: Record = {}, + customMocks = {} +) => { + const mockClient = createMockClient(); + + requestHandlers = { + resetPasswordMutationHandler: jest + .fn() + .mockResolvedValue(resetPasswordResponseMock), + ...customRequestHandlers, + }; + + mockClient.setRequestHandler( + RESET_PASSWORD, + requestHandlers.resetPasswordMutationHandler + ); + + const apolloProvider = new VueApollo({ + defaultClient: mockClient, + }); + + return mount(PasswordReset, { + localVue, + mocks: { + $route: { query: {} }, + $router, + ...customMocks, + }, + apolloProvider, + propsData: { + token: "some-token", + }, + }); +}; + +describe("Reset page", () => { + it("renders correctly", () => { + const wrapper = generateWrapper(); + expect(wrapper.findAll('input[type="password"').length).toBe(2); + expect(wrapper.html()).toMatchSnapshot(); + }); + + it("shows error if token is invalid", async () => { + const wrapper = generateWrapper({ + resetPasswordMutationHandler: jest.fn().mockResolvedValue({ + errors: [{ message: "The token you provided is invalid." }], + }), + }); + + wrapper.findAll('input[type="password"').setValue("my password"); + wrapper.find("form").trigger("submit"); + + await wrapper.vm.$nextTick(); + + expect(requestHandlers.resetPasswordMutationHandler).toBeCalledTimes(1); + expect(requestHandlers.resetPasswordMutationHandler).toBeCalledWith({ + password: "my password", + token: "some-token", + }); + + await wrapper.vm.$nextTick(); + await wrapper.vm.$nextTick(); + + expect(wrapper.find("article.message.is-danger").text()).toContain( + "The token you provided is invalid" + ); + expect(wrapper.html()).toMatchSnapshot(); + }); + + it("redirects to homepage if token is valid", async () => { + const wrapper = generateWrapper(); + + wrapper.findAll('input[type="password"').setValue("my password"); + wrapper.find("form").trigger("submit"); + + await wrapper.vm.$nextTick(); + + expect(requestHandlers.resetPasswordMutationHandler).toBeCalledTimes(1); + expect(requestHandlers.resetPasswordMutationHandler).toBeCalledWith({ + password: "my password", + token: "some-token", + }); + expect(jest.isMockFunction(wrapper.vm.$router.push)).toBe(true); + await flushPromises(); + expect($router.push).toHaveBeenCalledWith({ name: RouteName.HOME }); + }); +}); diff --git a/js/tests/unit/specs/components/User/__snapshots__/PasswordReset.spec.ts.snap b/js/tests/unit/specs/components/User/__snapshots__/PasswordReset.spec.ts.snap new file mode 100644 index 00000000..c9657457 --- /dev/null +++ b/js/tests/unit/specs/components/User/__snapshots__/PasswordReset.spec.ts.snap @@ -0,0 +1,74 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Reset page renders correctly 1`] = ` +
      +
      +
      +

      + Password reset +

      +
      +
      +
      + + +
      + +
      +
      +
      + + +
      + +
      +
      +
      +
      +
      +`; + +exports[`Reset page shows error if token is invalid 1`] = ` +
      +
      +
      +

      + Password reset +

      + +
      +
      +

      Error

      +
      +
      +
      + +
      The token you provided is invalid.
      +
      +
      +
      +
      +
      +
      +
      + + +
      + +
      +
      +
      + + +
      + +
      +
      +
      +
      +
      +`; diff --git a/js/tests/unit/specs/components/User/login.spec.ts b/js/tests/unit/specs/components/User/login.spec.ts index 600d1484..13a6e8e5 100644 --- a/js/tests/unit/specs/components/User/login.spec.ts +++ b/js/tests/unit/specs/components/User/login.spec.ts @@ -36,7 +36,7 @@ describe("Render login form", () => { baseData: Record = {}, customMocks: Record = {} ) => { - const cache = new InMemoryCache({ addTypename: true }); + const cache = new InMemoryCache({ addTypename: false }); mockClient = createMockClient({ cache, diff --git a/js/tests/unit/specs/components/navbar.spec.ts b/js/tests/unit/specs/components/navbar.spec.ts index cd729749..54cd4d36 100644 --- a/js/tests/unit/specs/components/navbar.spec.ts +++ b/js/tests/unit/specs/components/navbar.spec.ts @@ -25,7 +25,7 @@ describe("App component", () => { let requestHandlers: Record; const createComponent = (handlers = {}, baseData = {}) => { - const cache = new InMemoryCache({ addTypename: true }); + const cache = new InMemoryCache({ addTypename: false }); mockClient = createMockClient({ cache, diff --git a/js/tests/unit/specs/mocks/auth.ts b/js/tests/unit/specs/mocks/auth.ts index 3caba280..53a604e8 100644 --- a/js/tests/unit/specs/mocks/auth.ts +++ b/js/tests/unit/specs/mocks/auth.ts @@ -18,3 +18,17 @@ export const loginResponseMock = { }, }, }; + +export const resetPasswordResponseMock = { + data: { + resetPassword: { + __typename: "Login", + accessToken: "some access token", + refreshToken: "some refresh token", + user: { + __typename: "User", + id: "1", + }, + }, + }, +}; diff --git a/js/tests/unit/specs/mocks/config.ts b/js/tests/unit/specs/mocks/config.ts index 8c581e6c..3a174d34 100644 --- a/js/tests/unit/specs/mocks/config.ts +++ b/js/tests/unit/specs/mocks/config.ts @@ -113,6 +113,11 @@ export const configMock = { __typename: "InstanceFeeds", enabled: false, }, + webPush: { + __typename: "WebPush", + enabled: true, + publicKey: "", + }, }, }, }; diff --git a/js/tests/unit/specs/mocks/event.ts b/js/tests/unit/specs/mocks/event.ts index abe00d4a..55c3dc42 100644 --- a/js/tests/unit/specs/mocks/event.ts +++ b/js/tests/unit/specs/mocks/event.ts @@ -80,6 +80,9 @@ export const eventCommentThreadsMock = { visibility: "PUBLIC", totalReplies: 5, updatedAt: "2020-12-03T09:02:00Z", + inReplyToComment: null, + originComment: null, + replies: [], actor: { __typename: "Person", avatar: { @@ -94,6 +97,7 @@ export const eventCommentThreadsMock = { summary: "I am the senate", }, deletedAt: null, + isAnnouncement: false, }, { __typename: "Comment", @@ -105,6 +109,9 @@ export const eventCommentThreadsMock = { visibility: "PUBLIC", totalReplies: 0, updatedAt: "2020-12-03T11:02:00Z", + inReplyToComment: null, + originComment: null, + replies: [], actor: { __typename: "Person", avatar: { @@ -119,6 +126,7 @@ export const eventCommentThreadsMock = { summary: "I am the senate", }, deletedAt: null, + isAnnouncement: false, }, ], }, @@ -129,6 +137,7 @@ export const newCommentForEventMock = { eventId: "1", text: "my new comment", inReplyToCommentId: null, + isAnnouncement: false, }; export const newCommentForEventResponse: DataMock = { @@ -160,6 +169,7 @@ export const newCommentForEventResponse: DataMock = { summary: "I am the senate", }, deletedAt: null, + isAnnouncement: false, }, }, }; From f2d2dc1620780df8a7621f41ccf215fd1beb76f3 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sun, 6 Jun 2021 16:51:38 +0200 Subject: [PATCH 65/67] Update locales Signed-off-by: Thomas Citharel --- js/src/i18n/en_US.json | 29 +- js/src/i18n/fr_FR.json | 29 +- priv/gettext/activity.pot | 74 ++-- priv/gettext/ar/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/ar/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/be/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/be/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/ca/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/ca/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/cs/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/cs/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/de/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/de/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/en/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/en/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/errors.pot | 92 ++-- priv/gettext/es/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/es/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/fi/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/fi/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/fr/LC_MESSAGES/activity.po | 203 +++++---- priv/gettext/fr/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/gl/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/gl/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/hu/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/hu/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/it/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/it/LC_MESSAGES/default.po | 10 +- priv/gettext/it/LC_MESSAGES/errors.po | 176 ++++---- priv/gettext/ja/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/ja/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/nl/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/nl/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/nn/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/nn/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/oc/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/oc/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/pl/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/pl/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/pt/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/pt/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/pt_BR/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/pt_BR/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/ru/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/ru/LC_MESSAGES/errors.po | 92 ++-- priv/gettext/sv/LC_MESSAGES/activity.po | 74 ++-- priv/gettext/sv/LC_MESSAGES/default.po | 481 ++++++++++----------- priv/gettext/sv/LC_MESSAGES/errors.po | 92 ++-- 48 files changed, 2475 insertions(+), 1939 deletions(-) diff --git a/js/src/i18n/en_US.json b/js/src/i18n/en_US.json index ed80ed2a..3e55750f 100644 --- a/js/src/i18n/en_US.json +++ b/js/src/i18n/en_US.json @@ -1014,5 +1014,32 @@ "General settings": "General settings", "Unsubscribe to WebPush": "Unsubscribe to WebPush", "WebPush": "WebPush", - "You can't use webpush in this browser.": "You can't use webpush in this browser." + "You can't use webpush in this browser.": "You can't use webpush in this browser.", + "Notify participants": "Notify participants", + "Browser notifications": "Browser notifications", + "Unsubscribe to browser notifications": "Unsubscribe to browser notifications", + "Activate browser notification": "Activate browser notification", + "You can't use notifications in this browser.": "You can't use notifications in this browser.", + "Notification settings": "Notification settings", + "Select the activities for which you wish to receive an email or a push notification.": "Select the activities for which you wish to receive an email or a push notification.", + "Push": "Push", + "Mentions": "Mentions", + "I've been mentionned in a comment under an event": "I've been mentionned in a comment under an event", + "I've been mentionned in a group discussion": "I've been mentionned in a group discussion", + "An event I'm going to has been updated": "An event I'm going to has been updated", + "An event I'm going to has posted an announcement": "An event I'm going to has posted an announcement", + "An event I'm organizing has a new pending participation": "An event I'm organizing has a new pending participation", + "An event I'm organizing has a new participation": "An event I'm organizing has a new participation", + "An event I'm organizing has a new comment": "An event I'm organizing has a new comment", + "Group activity": "Group activity", + "An event from one of my groups has been published": "An event from one of my groups has been published", + "An event from one of my groups has been updated or deleted": "An event from one of my groups has been updated or deleted", + "A discussion has been created or updated": "A discussion has been created or updated", + "A post has been published": "A post has been published", + "A post has been updated": "A post has been updated", + "A resource has been created or updated": "A resource has been created or updated", + "A member requested to join one of my groups": "A member requested to join one of my groups", + "A member has been updated": "A member has been updated", + "User settings": "User settings", + "You changed your email or password": "You changed your email or password" } diff --git a/js/src/i18n/fr_FR.json b/js/src/i18n/fr_FR.json index 4b568397..95e3723a 100644 --- a/js/src/i18n/fr_FR.json +++ b/js/src/i18n/fr_FR.json @@ -1105,5 +1105,32 @@ "General settings": "Paramètres généraux", "Unsubscribe to WebPush": "Se désinscrire de WebPush", "WebPush": "WebPush", - "You can't use webpush in this browser.": "Vous ne pouvez pas utiliser webpush dans ce navigateur." + "You can't use webpush in this browser.": "Vous ne pouvez pas utiliser webpush dans ce navigateur.", + "Notify participants": "Notifier les participant⋅es", + "Browser notifications": "Notifications du navigateur", + "Unsubscribe to browser notifications": "Se désabonner des notifications du navigateur", + "Activate browser notification": "Activer le notifications du navigateur", + "You can't use notifications in this browser.": "Vous ne pouvez pas utiliser les notifications dans ce navigateur.", + "Notification settings": "Paramètres des notifications", + "Select the activities for which you wish to receive an email or a push notification.": "Sélectionnez les activités pour lesquelles vous souhaitez recevoir un email ou une notification push.", + "Push": "Push", + "Mentions": "Mentions", + "I've been mentionned in a comment under an event": "J'ai été mentionné⋅e dans un commentaire sous un événement", + "I've been mentionned in a group discussion": "J'ai été mentionné⋅e dans une discussion d'un groupe", + "An event I'm going to has been updated": "Un événement auquel je participe a été mis à jour", + "An event I'm going to has posted an announcement": "Un événement auquel je participe a posté une mise à jour", + "An event I'm organizing has a new pending participation": "Un événement que j'organise a une nouvelle participation en attente", + "An event I'm organizing has a new participation": "Un événement que j'organise a une nouvelle participation", + "An event I'm organizing has a new comment": "Un événement que j'organise a un nouveau commentaire", + "Group activity": "Activité des groupes", + "An event from one of my groups has been published": "Un événement d'un de mes groupes a été publié", + "An event from one of my groups has been updated or deleted": "Un événement d'un de mes groupes a été mis à jour ou supprimé", + "A discussion has been created or updated": "Une discussion a été créée ou mise à jour", + "A post has been published": "Un billet a été publié", + "A post has been updated": "Un billet a été mis à jour", + "A resource has been created or updated": "Une resource a été créée ou mise à jour", + "A member requested to join one of my groups": "Un membre a demandé a rejoindre l'un de mes groupes", + "A member has been updated": "Un membre a été mis à jour", + "User settings": "Paramètres utilisateur⋅ices", + "You changed your email or password": "Vous avez modifié votre email ou votre mot de passe" } diff --git a/priv/gettext/activity.pot b/priv/gettext/activity.pot index 3dcd2c33..bd0a8f40 100644 --- a/priv/gettext/activity.pot +++ b/priv/gettext/activity.pot @@ -11,40 +11,40 @@ msgid "" msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -75,10 +75,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -95,7 +95,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -113,16 +113,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -153,7 +153,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -195,7 +195,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -213,14 +213,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -235,6 +235,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/ar/LC_MESSAGES/activity.po b/priv/gettext/ar/LC_MESSAGES/activity.po index 496fa0dd..59de48dc 100644 --- a/priv/gettext/ar/LC_MESSAGES/activity.po +++ b/priv/gettext/ar/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=6\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -244,6 +244,28 @@ msgstr[4] "" msgstr[5] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/ar/LC_MESSAGES/errors.po b/priv/gettext/ar/LC_MESSAGES/errors.po index fb6d0cd8..02ea3704 100644 --- a/priv/gettext/ar/LC_MESSAGES/errors.po +++ b/priv/gettext/ar/LC_MESSAGES/errors.po @@ -135,7 +135,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "" @@ -161,18 +161,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -180,49 +180,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -232,17 +232,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -267,12 +267,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -282,7 +282,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -307,47 +307,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -397,8 +397,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -526,7 +526,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -592,7 +592,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -652,7 +652,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -672,7 +672,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -697,7 +697,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -722,17 +722,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -802,12 +802,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -837,7 +837,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -863,7 +863,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -873,6 +873,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/activity.po b/priv/gettext/be/LC_MESSAGES/activity.po index acf443d6..c3c277e9 100644 --- a/priv/gettext/be/LC_MESSAGES/activity.po +++ b/priv/gettext/be/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -238,6 +238,28 @@ msgstr[1] "" msgstr[2] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/errors.po b/priv/gettext/be/LC_MESSAGES/errors.po index 3776146f..7ae1e0af 100644 --- a/priv/gettext/be/LC_MESSAGES/errors.po +++ b/priv/gettext/be/LC_MESSAGES/errors.po @@ -109,7 +109,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "" @@ -135,18 +135,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -154,49 +154,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -206,17 +206,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -241,12 +241,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -256,7 +256,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -281,47 +281,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -371,8 +371,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -500,7 +500,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -566,7 +566,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -626,7 +626,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -646,7 +646,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -671,7 +671,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -696,17 +696,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -776,12 +776,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -811,7 +811,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -837,7 +837,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -847,6 +847,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/activity.po b/priv/gettext/ca/LC_MESSAGES/activity.po index f02a0410..25c4bd24 100644 --- a/priv/gettext/ca/LC_MESSAGES/activity.po +++ b/priv/gettext/ca/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/errors.po b/priv/gettext/ca/LC_MESSAGES/errors.po index fa2a6bbc..1bbc59ec 100644 --- a/priv/gettext/ca/LC_MESSAGES/errors.po +++ b/priv/gettext/ca/LC_MESSAGES/errors.po @@ -110,7 +110,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "El perfil actual no administra el grup seleccionat" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "No s'han pogut desar les preferències" @@ -136,18 +136,18 @@ msgid "Member not found" msgstr "No s'ha trobat el/la membre" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -155,49 +155,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -207,17 +207,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -242,12 +242,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -257,7 +257,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -282,47 +282,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -372,8 +372,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -501,7 +501,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -567,7 +567,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -627,7 +627,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -647,7 +647,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -672,7 +672,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -697,17 +697,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -777,12 +777,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -812,7 +812,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -838,7 +838,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -848,6 +848,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/activity.po b/priv/gettext/cs/LC_MESSAGES/activity.po index b1d9bc2f..25f5115e 100644 --- a/priv/gettext/cs/LC_MESSAGES/activity.po +++ b/priv/gettext/cs/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -238,6 +238,28 @@ msgstr[1] "" msgstr[2] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/errors.po b/priv/gettext/cs/LC_MESSAGES/errors.po index 0c2d0a70..aa7bf3d8 100644 --- a/priv/gettext/cs/LC_MESSAGES/errors.po +++ b/priv/gettext/cs/LC_MESSAGES/errors.po @@ -109,7 +109,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "" @@ -135,18 +135,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -154,49 +154,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -206,17 +206,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -241,12 +241,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -256,7 +256,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -281,47 +281,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -371,8 +371,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -500,7 +500,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -566,7 +566,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -626,7 +626,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -646,7 +646,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -671,7 +671,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -696,17 +696,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -776,12 +776,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -811,7 +811,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -837,7 +837,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -847,6 +847,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/activity.po b/priv/gettext/de/LC_MESSAGES/activity.po index db677c96..ed1caefd 100644 --- a/priv/gettext/de/LC_MESSAGES/activity.po +++ b/priv/gettext/de/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/errors.po b/priv/gettext/de/LC_MESSAGES/errors.po index 3aaf076c..42f54daa 100644 --- a/priv/gettext/de/LC_MESSAGES/errors.po +++ b/priv/gettext/de/LC_MESSAGES/errors.po @@ -110,7 +110,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "Aktuelles Profil ist kein Administrator der ausgewählten Gruppe" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Fehler beim Speichern von Benutzereinstellungen" @@ -138,19 +138,19 @@ msgid "Member not found" msgstr "Mitglied wurde nicht gefunden" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Kein Profil für den Moderator-Benutzer gefunden" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" "Es wurde kein Benutzer gefunden, der mit dieser E-Mail validiert werden kann" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Es wurde kein Benutzer mit dieser E-Mail gefunden" @@ -158,51 +158,51 @@ msgstr "Es wurde kein Benutzer mit dieser E-Mail gefunden" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "Profil ist nicht im Besitz des authentifizierten Benutzers" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "Registrierungen sind nicht geöffnet" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "Das aktuelle Passwort ist ungültig" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "Die neue E-Mail scheint nicht gültig zu sein" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "Die neue E-Mail muss anders lauten" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "Das neue Passwort muss anders lauten" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "Das angegebene Passwort ist ungültig" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "Das von Ihnen gewählte Passwort ist zu kurz. Bitte stellen Sie sicher, dass " "Ihr Passwort mindestens 6 Zeichen enthält." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Dieser Benutzer kann sein Passwort nicht zurücksetzen" @@ -212,17 +212,17 @@ msgid "This user has been disabled" msgstr "Dieser Benutzer wurde deaktiviert" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Benutzer kann nicht validiert werden" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "Benutzer bereits deaktiviert" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "Angeforderter Benutzer ist nicht eingeloggt" @@ -249,12 +249,12 @@ msgid "You may not list groups unless moderator." msgstr "Sie dürfen keine Gruppen auflisten, es sei denn, Sie sind Moderator." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "Sie müssen eingeloggt sein, um Ihre E-Mail zu ändern" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Sie müssen eingeloggt sein, um Ihr Passwort zu ändern" @@ -264,7 +264,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Sie müssen eingeloggt sein, um eine Gruppe zu löschen" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Sie müssen eingeloggt sein, um Ihr Konto zu löschen" @@ -290,47 +290,47 @@ msgstr "" "Sie müssen ein bestehendes Token haben, um ein Refresh-Token zu erhalten" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Sie haben erneut eine Bestätigungs-E-Mail zu früh angefordert" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "Ihre E-Mail ist nicht in der Zulassungsliste enthalten" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Fehler beim Ausführen einer Hintergrundaufgabe" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Kein Profil mit dieser ID gefunden" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Kein entferntes Profil mit dieser ID gefunden" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Nur Moderatoren und Administratoren können ein Profil sperren" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Nur Moderatoren und Administratoren können ein Profil unsuspendieren" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Nur entfernte Profile können aufgefrischt werden" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Profil bereits gesperrt" @@ -380,8 +380,8 @@ msgid "Event id not found" msgstr "Veranstaltungs-ID nicht gefunden" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Veranstaltung nicht gefunden" @@ -511,7 +511,7 @@ msgid "Token is not a valid UUID" msgstr "Token ist keine gültige UUID" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "User nicht gefunden" @@ -582,7 +582,7 @@ msgid "You cannot delete this comment" msgstr "Sie können diesen Kommentar nicht löschen" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "Sie können diese Veranstaltung nicht löschen" @@ -652,7 +652,7 @@ msgid "You need to be logged-in to access resources" msgstr "Sie müssen eingeloggt sein, um auf Ressourcen zugreifen zu können" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "Sie müssen eingeloggt sein, um Ereignisse zu erstellen" @@ -672,7 +672,7 @@ msgid "You need to be logged-in to create resources" msgstr "Sie müssen eingeloggt sein, um Ressourcen zu erstellen" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "Sie müssen eingeloggt sein, um ein Ereignis zu löschen" @@ -697,7 +697,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Sie müssen eingeloggt sein, um eine Veranstaltung zu verlassen" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Sie müssen eingeloggt sein, um ein Ereignis zu aktualisieren" @@ -722,19 +722,19 @@ msgid "Parent resource doesn't belong to this group" msgstr "Die übergeordnete Ressource gehört nicht zu dieser Gruppe" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "Das gewählte Passwort ist zu kurz." #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Das Registrierungs-Token ist bereits in Gebrauch, dies sieht nach einem " "Problem auf unserer Seite aus." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Diese E-Mail wird bereits verwendet." @@ -804,12 +804,12 @@ msgid "Profile is not administrator for the group" msgstr "Profil ist nicht Administrator für die Gruppe" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "Sie können dieses Ereignis nicht bearbeiten." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "Sie können dieses Ereignis nicht diesem Profil zuordnen." @@ -841,7 +841,7 @@ msgstr "" "zuzugreifen" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "Organizer-Profil ist nicht im Besitz des Benutzers" @@ -867,7 +867,7 @@ msgid "Error while creating resource" msgstr "Fehler beim Speichern des Reports" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -877,6 +877,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Dieses Moderatorenprofil hat keine Berechtigung für diese Veranstaltung" diff --git a/priv/gettext/en/LC_MESSAGES/activity.po b/priv/gettext/en/LC_MESSAGES/activity.po index 5f762726..bbecb050 100644 --- a/priv/gettext/en/LC_MESSAGES/activity.po +++ b/priv/gettext/en/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/errors.po b/priv/gettext/en/LC_MESSAGES/errors.po index c563dff5..42dd920f 100644 --- a/priv/gettext/en/LC_MESSAGES/errors.po +++ b/priv/gettext/en/LC_MESSAGES/errors.po @@ -113,7 +113,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "" @@ -139,18 +139,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -158,49 +158,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -210,17 +210,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -245,12 +245,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -260,7 +260,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -285,47 +285,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -375,8 +375,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -504,7 +504,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -570,7 +570,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -630,7 +630,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -650,7 +650,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -675,7 +675,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -700,17 +700,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -780,12 +780,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -815,7 +815,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -841,7 +841,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -851,6 +851,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot index 8cc4bf0f..3cde34de 100644 --- a/priv/gettext/errors.pot +++ b/priv/gettext/errors.pot @@ -110,7 +110,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "" @@ -136,18 +136,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -155,49 +155,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -207,17 +207,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -242,12 +242,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -257,7 +257,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -282,47 +282,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -372,8 +372,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -501,7 +501,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -567,7 +567,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -627,7 +627,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -647,7 +647,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -672,7 +672,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -697,17 +697,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -777,12 +777,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -812,7 +812,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -838,7 +838,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -848,6 +848,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/activity.po b/priv/gettext/es/LC_MESSAGES/activity.po index 7aac461c..1c76b867 100644 --- a/priv/gettext/es/LC_MESSAGES/activity.po +++ b/priv/gettext/es/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/errors.po b/priv/gettext/es/LC_MESSAGES/errors.po index f3d57ba7..2625a108 100644 --- a/priv/gettext/es/LC_MESSAGES/errors.po +++ b/priv/gettext/es/LC_MESSAGES/errors.po @@ -110,7 +110,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "El perfil actual no es un administrador del grupo seleccionado" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Error al guardar los parámetros del usuario" @@ -137,18 +137,18 @@ msgid "Member not found" msgstr "Miembro no encontrado" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "No se encontró el perfil del usuario moderador" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "No se encontró ningún usuario para validar con este correo electrónico" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "No se encontró ningún usuario con este correo electrónico" @@ -156,51 +156,51 @@ msgstr "No se encontró ningún usuario con este correo electrónico" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "El perfil no es propiedad del usuario autenticado" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "Las inscripciones no están abiertas" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "La contraseña actual no es válida" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "El nuevo correo electrónico no parece ser válido" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "El nuevo correo electrónico debe ser diferente" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "La nueva contraseña debe ser diferente" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "La contraseña proporcionada no es válida" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "La contraseña que ha elegido es demasiado corta. Asegúrese de que su " "contraseña contenga al menos 6 caracteres." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Este usuario no puede restablecer su contraseña" @@ -210,17 +210,17 @@ msgid "This user has been disabled" msgstr "Este usuario ha sido inhabilitado" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "No se puede validar al usuario" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "El usuario ya está inhabilitado" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "El usuario solicitado no ha iniciado sesión" @@ -245,12 +245,12 @@ msgid "You may not list groups unless moderator." msgstr "No puedes enumerar grupos a menos que seas moderador." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "Debes iniciar sesión para cambiar tu correo electrónico" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Debes iniciar sesión para cambiar tu contraseña" @@ -260,7 +260,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Debes iniciar sesión para eliminar un grupo" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Debes iniciar sesión para eliminar su cuenta" @@ -285,50 +285,50 @@ msgid "You need to have an existing token to get a refresh token" msgstr "Debes tener un token existente para obtener un token de actualización" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" "Solicitó de nuevo un correo electrónico de confirmación demasiado pronto" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "Tu correo electrónico no está en la lista de permitidos" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Error al realizar la tarea en segundo plano" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "No se encontró ningún perfil con este ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "No se encontró ningún perfil remoto con este ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Solo los moderadores y administradores pueden suspender un perfil" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" "Solo los moderadores y administradores pueden anular la suspensión de un " "perfil" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Solo se pueden actualizar los perfiles remotos" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Perfil ya suspendido" @@ -378,8 +378,8 @@ msgid "Event id not found" msgstr "ID de evento no encontrado" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Evento no encontrado" @@ -507,7 +507,7 @@ msgid "Token is not a valid UUID" msgstr "El token no es un UUID válido" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "Usuario no encontrado" @@ -577,7 +577,7 @@ msgid "You cannot delete this comment" msgstr "No puedes borrar este comentario" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "No puedes borrar este evento" @@ -644,7 +644,7 @@ msgid "You need to be logged-in to access resources" msgstr "Debes iniciar sesión para acceder a los recursos" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "Debes iniciar sesión para crear eventos" @@ -664,7 +664,7 @@ msgid "You need to be logged-in to create resources" msgstr "Debe iniciar sesión para crear recursos" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "Debe iniciar sesión para eliminar un evento" @@ -689,7 +689,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Debes iniciar sesión para salir de un evento" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Debe iniciar sesión para actualizar un evento" @@ -714,19 +714,19 @@ msgid "Parent resource doesn't belong to this group" msgstr "El recurso principal no pertenece a este grupo" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "La contraseña elegida es demasiado corta." #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "El token de registro ya está en uso, esto parece un problema de nuestra " "parte." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Este correo electrónico ya está en uso." @@ -796,12 +796,12 @@ msgid "Profile is not administrator for the group" msgstr "El perfil no es miembro del grupo" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "No puedes borrar este evento." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "No puedes rechazar esta invitación con este perfil." @@ -832,7 +832,7 @@ msgstr "" "Debe proporcionar una identificación o un slug para acceder a una discusión" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "El perfil del organizador no es propiedad del usuario" @@ -858,7 +858,7 @@ msgid "Error while creating resource" msgstr "Error al crear el recurso" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "Token de activación no válido" @@ -868,6 +868,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "No se pueden recuperar los detalles del recurso de esta URL." #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "El perfil de moderador proporcionado no tiene permiso para este evento" diff --git a/priv/gettext/fi/LC_MESSAGES/activity.po b/priv/gettext/fi/LC_MESSAGES/activity.po index d1183024..ffe1634f 100644 --- a/priv/gettext/fi/LC_MESSAGES/activity.po +++ b/priv/gettext/fi/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/fi/LC_MESSAGES/errors.po b/priv/gettext/fi/LC_MESSAGES/errors.po index 28632770..eaea5669 100644 --- a/priv/gettext/fi/LC_MESSAGES/errors.po +++ b/priv/gettext/fi/LC_MESSAGES/errors.po @@ -110,7 +110,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "Nykyinen profiili ei ole valitun ryhmän ylläpitäjä" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Käyttäjän asetusten tallennuksessa tapahtui virhe" @@ -137,18 +137,18 @@ msgid "Member not found" msgstr "Jäsentä ei löydy" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Moderaattorikäyttäjän profiilia ei löydy" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "Käyttäjää tämän sähköpostin vahvistamiseksi ei löydy" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Käyttäjää, jolla on tämä sähköpostiosoite ei löydy" @@ -156,51 +156,51 @@ msgstr "Käyttäjää, jolla on tämä sähköpostiosoite ei löydy" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "Profiili ei ole tunnistautuneen käyttäjän omistuksessa" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "Ei voi rekisteröityä" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "Nykyinen salasana ei kelpaa" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "Uusi sähköpostiosoite ei vaikuta kelvolliselta" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "Uuden sähköpostiosoitteen on poikettava vanhasta" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "Uuden salasanan on poikettava vanhasta" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "Annettu salasana on epäkelpo" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "Valitsemasi salasana on liian lyhyt. Käytä vähintään kuuden merkin mittaista " "salasanaa." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Käyttäjä ei voi palauttaa salasanaansa" @@ -210,17 +210,17 @@ msgid "This user has been disabled" msgstr "Käyttäjä on poistettu käytöstä" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Käyttäjää ei voi vahvistaa" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "Käyttäjä on jo poistettu käytöstä" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "Pyydetty käyttäjä ei ole kirjautuneena sisään" @@ -245,12 +245,12 @@ msgid "You may not list groups unless moderator." msgstr "Voit nähdä ryhmäluettelon vain, jos olet moderaattori." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "Sähköpostiosoitteen voi vaihtaa vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Salasanan voi vaihtaa vain sisäänkirjautuneena" @@ -260,7 +260,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Ryhmän voi poistaa vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Voit poistaa tilisi vain sisäänkirjautuneena" @@ -285,47 +285,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "Voit saada uuden merkin vain, jos sinulla on jo merkki" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Pyysit uutta vahvistussähköpostia liian aikaisin" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "Sähköpostiosoitteesi ei ole sallittujen luettelossa" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Virhe taustatehtävää suoritettaessa" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Tällä tunnisteella ei löytynyt profiilia" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Tällä tunnisteella ei löytynyt etäprofiilia" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Vain moderaattorit ja ylläpitäjät voivat hyllyttää profiilin" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Vain moderaattorit ja ylläpitäjät voivat palauttaa hyllytetyn profiilin" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Vain etäprofiilit voi ladata uudelleen" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Profiili on jo hyllytetty" @@ -375,8 +375,8 @@ msgid "Event id not found" msgstr "Tapahtumatunnistetta ei löydy" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Tapahtumaa ei löydy" @@ -504,7 +504,7 @@ msgid "Token is not a valid UUID" msgstr "Merkki ei ole kelvollinen UUID" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "Käyttäjää ei löydy" @@ -573,7 +573,7 @@ msgid "You cannot delete this comment" msgstr "Et voi poistaa kommenttia" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "Et voi poistaa tapahtumaa" @@ -633,7 +633,7 @@ msgid "You need to be logged-in to access resources" msgstr "Pääsy resursseihin vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "Tapahtumien luonti vain sisäänkirjautuneena" @@ -653,7 +653,7 @@ msgid "You need to be logged-in to create resources" msgstr "Resurssien luonti vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "Tapahtuman poisto vain sisäänkirjautuneena" @@ -678,7 +678,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Tapahtumasta poistuminen vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Tapahtuman päivittäminen vain sisäänkirjautuneena" @@ -703,17 +703,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "Ylätason resurssi ei kuulu tähän ryhmään" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "Valittu salasana on liian lyhyt." #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "Rekisteröintimerkki on jo käytössä. Vaikuttaa palvelinpään virheeltä." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Sähköpostiosoite on jo käytössä." @@ -783,12 +783,12 @@ msgid "Profile is not administrator for the group" msgstr "Profiili ei ole ryhmän ylläpitäjä" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "Et voi muokata tapahtumaa." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "Et voi yhdistää tapahtumaa tähän profiiliin." @@ -818,7 +818,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "Keskusteluun pääsemiseen vaaditaan tunniste tai polkutunnus" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "Järjestäjän profiili ei ole käyttäjän hallussa" @@ -844,7 +844,7 @@ msgid "Error while creating resource" msgstr "Virhe raporttia tallennettaessa" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -854,6 +854,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Annetulla moderaattoriprofiililla ei ole oikeuksia tähän tapahtumaan" diff --git a/priv/gettext/fr/LC_MESSAGES/activity.po b/priv/gettext/fr/LC_MESSAGES/activity.po index 16a9d04b..7885e035 100644 --- a/priv/gettext/fr/LC_MESSAGES/activity.po +++ b/priv/gettext/fr/LC_MESSAGES/activity.po @@ -20,223 +20,223 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.3\n" -#: lib/service/activity/renderer/member.ex:43 -#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:12 +#, elixir-format +#: lib/service/activity/renderer/member.ex:38 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "%{member} a accepté l'invitation à rejoindre le groupe." -#: lib/service/activity/renderer/member.ex:53 -#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:17 +#, elixir-format +#: lib/service/activity/renderer/member.ex:42 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "%{member} a refusé l'invitation à rejoindre le groupe." -#: lib/service/activity/renderer/member.ex:23 -#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:1 +#, elixir-format +#: lib/service/activity/renderer/member.ex:30 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "%{member} a demandé à rejoindre le groupe." -#: lib/service/activity/renderer/member.ex:33 -#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:6 +#, elixir-format +#: lib/service/activity/renderer/member.ex:34 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "%{member} a été invité⋅e par %{profile}." -#: lib/service/activity/renderer/member.ex:72 -#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:27 +#, elixir-format +#: lib/service/activity/renderer/member.ex:50 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "%{profile} a ajouté le ou la membre %{membre}." -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 -#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#, elixir-format +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "%{profile} a archivé la discussion %{discussion}." +#, elixir-format #: lib/service/activity/renderer/discussion.ex:23 -#: lib/service/activity/renderer/post.ex:23 -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 -#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 +#: lib/service/activity/renderer/post.ex:23 lib/web/templates/email/activity/_comment_activity_item.html.eex:4 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1 lib/web/templates/email/activity/_discussion_activity_item.html.eex:4 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1 msgid "%{profile} created the discussion %{discussion}." msgstr "%{profile} a créé la discussion %{discussion}." +#, elixir-format #: lib/service/activity/renderer/resource.ex:24 -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2 msgid "%{profile} created the folder %{resource}." msgstr "%{profile} a créé le dossier %{resource}." +#, elixir-format #: lib/web/templates/email/activity/_group_activity_item.html.eex:4 #: lib/web/templates/email/activity/_group_activity_item.text.eex:1 msgid "%{profile} created the group %{group}." msgstr "%{profile} a créé le groupe %{group}." +#, elixir-format #: lib/service/activity/renderer/resource.ex:33 -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8 msgid "%{profile} created the resource %{resource}." msgstr "%{profile} a créé la resource %{resource}." -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 -#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#, elixir-format +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "%{profile} a créé la discussion %{discussion}." +#, elixir-format #: lib/service/activity/renderer/resource.ex:97 -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40 msgid "%{profile} deleted the folder %{resource}." msgstr "%{profile} a supprimé le dossier %{resource}." +#, elixir-format #: lib/service/activity/renderer/resource.ex:106 -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45 msgid "%{profile} deleted the resource %{resource}." msgstr "%{profile} a supprimé la resource %{resource}." -#: lib/service/activity/renderer/member.ex:92 -#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:39 +#, elixir-format +#: lib/service/activity/renderer/member.ex:58 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "%{profile} a exclu le ou la membre %{membre}." +#, elixir-format #: lib/service/activity/renderer/resource.ex:76 -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28 msgid "%{profile} moved the folder %{resource}." msgstr "%{profile} a déplacé le dossier %{resource}." +#, elixir-format #: lib/service/activity/renderer/resource.ex:85 -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34 msgid "%{profile} moved the resource %{resource}." msgstr "%{profile} a déplacé la ressource %{resource}." -#: lib/service/activity/renderer/member.ex:102 -#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:45 +#, elixir-format +#: lib/service/activity/renderer/member.ex:62 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "%{profile} a quitté le groupe." -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 -#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#, elixir-format +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "%{profile} a renommé la discussion %{discussion}." +#, elixir-format #: lib/service/activity/renderer/resource.ex:45 -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14 msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}." msgstr "%{profile} a renommé le dossier %{old_resource_title} en %{resource}." +#, elixir-format #: lib/service/activity/renderer/resource.ex:59 -#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 -#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21 +#: lib/web/templates/email/activity/_resource_activity_item.html.eex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21 msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}." msgstr "%{profile} a renommé la resource %{old_resource_title} en %{resource}." +#, elixir-format #: lib/service/activity/renderer/discussion.ex:33 -#: lib/service/activity/renderer/post.ex:33 -#: lib/web/templates/email/activity/_comment_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 -#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 +#: lib/service/activity/renderer/post.ex:33 lib/web/templates/email/activity/_comment_activity_item.html.eex:19 +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/activity/_discussion_activity_item.html.eex:18 #: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7 msgid "%{profile} replied to the discussion %{discussion}." msgstr "%{profile} a répondu à la discussion %{discussion}." +#, elixir-format #: lib/web/templates/email/activity/_group_activity_item.html.eex:19 #: lib/web/templates/email/activity/_group_activity_item.text.eex:7 msgid "%{profile} updated the group %{group}." msgstr "%{profile} a mis à jour le groupe %{group}." -#: lib/service/activity/renderer/member.ex:82 -#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:33 +#, elixir-format +#: lib/service/activity/renderer/member.ex:54 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "%{profile} a mis à jour le membre %{member}." +#, elixir-format #: lib/service/activity/renderer/event.ex:23 -#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:1 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1 msgid "The event %{event} was created by %{profile}." msgstr "L'événement %{event} a été créé par %{profile}." +#, elixir-format #: lib/service/activity/renderer/event.ex:43 -#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13 msgid "The event %{event} was deleted by %{profile}." msgstr "L'événement %{event} a été supprimé par %{profile}." +#, elixir-format #: lib/service/activity/renderer/event.ex:33 -#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:7 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7 msgid "The event %{event} was updated by %{profile}." msgstr "L'événement %{event} a été mis à jour par %{profile}." +#, elixir-format #: lib/service/activity/renderer/group.ex:23 -#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:1 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1 msgid "The post %{post} was created by %{profile}." msgstr "Le billet %{post} a été créé par %{profile}." +#, elixir-format #: lib/service/activity/renderer/group.ex:43 -#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13 msgid "The post %{post} was deleted by %{profile}." msgstr "Le billet %{post} a été supprimé par %{profile}." +#, elixir-format #: lib/service/activity/renderer/group.ex:33 -#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 -#: lib/web/templates/email/activity/_post_activity_item.text.eex:7 +#: lib/web/templates/email/activity/_post_activity_item.html.eex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7 msgid "The post %{post} was updated by %{profile}." msgstr "Le billet %{post} a été mis à jour par %{profile}." -#: lib/service/activity/renderer/member.ex:63 -#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 -#: lib/web/templates/email/activity/_member_activity_item.text.eex:22 +#, elixir-format +#: lib/service/activity/renderer/member.ex:46 +#: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "%{member} a rejoint le groupe." +#, elixir-format #: lib/service/activity/renderer/event.ex:63 -#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25 msgid "%{profile} posted a comment on the event %{event}." msgstr "%{profile} a posté un commentaire sur l'événement %{event}." +#, elixir-format #: lib/service/activity/renderer/event.ex:54 -#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 -#: lib/web/templates/email/activity/_event_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_event_activity_item.html.eex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19 msgid "%{profile} replied to a comment on the event %{event}." msgstr "%{profile} a répondu à un commentaire sur l'événement %{event}." -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "Vous ne voulez pas recevoir de notifications d'activité ? Vous pouvez changer leur fréquence ou les désactiver dans vos préférences." -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#, elixir-format +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "Voir une activité de plus" msgstr[1] "Voir %{count} activités de plus" +#, elixir-format #: lib/web/templates/email/email_direct_activity.html.eex:38 #: lib/web/templates/email/email_direct_activity.text.eex:4 msgid "There has been an activity!" @@ -244,6 +244,29 @@ msgid_plural "There has been some activity!" msgstr[0] "Il y a eu une activité !" msgstr[1] "Il y a eu de l'activité !" -#: lib/service/activity/renderer/renderer.ex:28 +#, elixir-format +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "Activité sur %{instance}" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "%{profile} a posté un commentaire sur l'événement %{event}." + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "%{profile} a répondu à un commentaire sur l'événement %{event}." + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "%{profile} a répondu à la discussion %{discussion}." diff --git a/priv/gettext/fr/LC_MESSAGES/errors.po b/priv/gettext/fr/LC_MESSAGES/errors.po index ff5dc003..6e2d2c8d 100644 --- a/priv/gettext/fr/LC_MESSAGES/errors.po +++ b/priv/gettext/fr/LC_MESSAGES/errors.po @@ -112,7 +112,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "Le profil actuel n'est pas un·e administrateur·ice du groupe sélectionné" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Erreur lors de la sauvegarde des paramètres utilisateur" @@ -138,18 +138,18 @@ msgid "Member not found" msgstr "Membre non trouvé" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Aucun profil trouvé pour l'utilisateur modérateur" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "Aucun·e utilisateur·ice à valider avec cet email n'a été trouvé·e" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Aucun·e utilisateur·ice avec cette adresse e-mail n'a été trouvé·e" @@ -157,51 +157,51 @@ msgstr "Aucun·e utilisateur·ice avec cette adresse e-mail n'a été trouvé·e #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "Le profil n'est pas possédé par l'utilisateur connecté" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "Les inscriptions ne sont pas ouvertes" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "Le mot de passe actuel est invalid" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "La nouvelle adresse e-mail ne semble pas être valide" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "La nouvelle adresse e-mail doit être différente" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "Le nouveau mot de passe doit être différent" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "Le mot de passe fourni est invalide" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "Le mot de passe que vous avez choisi est trop court. Merci de vous assurer que votre mot de passe contienne au moins " "6 caractères." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Cet·te utilisateur·ice ne peut pas réinitialiser son mot de passe" @@ -211,17 +211,17 @@ msgid "This user has been disabled" msgstr "Cet·te utilisateur·ice a été désactivé·e" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Impossible de valider l'utilisateur·ice" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "L'utilisateur·ice est déjà désactivé·e" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "L'utilisateur·ice demandé·e n'est pas connecté·e" @@ -246,12 +246,12 @@ msgid "You may not list groups unless moderator." msgstr "Vous ne pouvez pas lister les groupes sauf à être modérateur·ice." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "Vous devez être connecté·e pour changer votre adresse e-mail" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Vous devez être connecté·e pour changer votre mot de passe" @@ -261,7 +261,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Vous devez être connecté·e pour supprimer un groupe" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Vous devez être connecté·e pour supprimer votre compte" @@ -286,47 +286,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "Vous devez avoir un jeton existant pour obtenir un jeton de rafraîchissement" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Vous avez à nouveau demandé un email de confirmation trop vite" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "Votre adresse e-mail n'est pas sur la liste d'autorisations" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Erreur lors de l'exécution d'une tâche d'arrière-plan" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Aucun profil trouvé avec cet ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Aucun profil distant trouvé avec cet ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Seul·es les modérateur·ice et les administrateur·ices peuvent suspendre un profil" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Seul·es les modérateur·ice et les administrateur·ices peuvent annuler la suspension d'un profil" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Seuls les profils distants peuvent être rafraîchis" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Le profil est déjà suspendu" @@ -376,8 +376,8 @@ msgid "Event id not found" msgstr "ID de l'événement non trouvé" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Événement non trouvé" @@ -505,7 +505,7 @@ msgid "Token is not a valid UUID" msgstr "Ce jeton n'est pas un UUID valide" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "Utilisateur·ice non trouvé·e" @@ -573,7 +573,7 @@ msgid "You cannot delete this comment" msgstr "Vous ne pouvez pas supprimer ce commentaire" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "Vous ne pouvez pas supprimer cet événement" @@ -633,7 +633,7 @@ msgid "You need to be logged-in to access resources" msgstr "Vous devez être connecté·e pour supprimer un groupe" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "Vous devez être connecté·e pour créer des événements" @@ -653,7 +653,7 @@ msgid "You need to be logged-in to create resources" msgstr "Vous devez être connecté·e pour quitter un groupe" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "Vous devez être connecté·e pour supprimer un groupe" @@ -678,7 +678,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Vous devez être connecté·e pour quitter un groupe" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Vous devez être connecté·e pour mettre à jour un groupe" @@ -703,17 +703,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "La ressource parente n'appartient pas à ce groupe" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "Le mot de passe choisi est trop court." #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "Le jeton d'inscription est déjà utilisé, cela ressemble à un problème de notre côté." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Cette adresse e-mail est déjà utilisée." @@ -783,12 +783,12 @@ msgid "Profile is not administrator for the group" msgstr "Le profil n'est pas administrateur·ice pour le groupe" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "Vous ne pouvez pas éditer cet événement." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "Vous ne pouvez pas attribuer cet événement à ce profil." @@ -818,7 +818,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "Vous devez fournir un ID ou bien un slug pour accéder à une discussion" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "Le profil de l'organisateur·ice n'appartient pas à l'utilisateur·ice" @@ -844,7 +844,7 @@ msgid "Error while creating resource" msgstr "Erreur lors de la création de la resource" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "Jeton d'activation invalide" @@ -854,6 +854,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "Impossible de récupérer les détails de la ressource depuis cette URL." #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Le profil modérateur fourni n'a pas de permissions sur cet événement" diff --git a/priv/gettext/gl/LC_MESSAGES/activity.po b/priv/gettext/gl/LC_MESSAGES/activity.po index 9dd50f7a..64ff03b5 100644 --- a/priv/gettext/gl/LC_MESSAGES/activity.po +++ b/priv/gettext/gl/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/gl/LC_MESSAGES/errors.po b/priv/gettext/gl/LC_MESSAGES/errors.po index cb9eed82..ffbe563a 100644 --- a/priv/gettext/gl/LC_MESSAGES/errors.po +++ b/priv/gettext/gl/LC_MESSAGES/errors.po @@ -110,7 +110,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "O perfil actual non é administrador do grupo seleccionado" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Erro ó gardar os axustes de usuaria" @@ -137,18 +137,18 @@ msgid "Member not found" msgstr "Membro non atopado" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Non se atopou o perfil para a usuaria moderadora" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "Non se atopou unha usuaria con este email para validar" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Non se atopa ningunha usuaria con este email" @@ -156,51 +156,51 @@ msgstr "Non se atopa ningunha usuaria con este email" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "O perfil non pertence a unha usuaria autenticada" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "O rexistro está pechado" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "O contrasinal actual non é válido" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "O novo email non semella ser válido" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "O novo email ten que ser diferente" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "O novo contrasinal ten que ser diferente" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "O contrasinal escrito non é válido" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "O contrasinal escollido é demasiado curto, ten que ter 6 caracteres polo " "menos." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Esta usuaria non pode restablecer o seu contrasinal" @@ -210,17 +210,17 @@ msgid "This user has been disabled" msgstr "Estab usuaria foi desactivada" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Non se puido validar a usuaria" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "A usuaria xa está desactivada" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "A usuaria solicitada non está conectada" @@ -245,12 +245,12 @@ msgid "You may not list groups unless moderator." msgstr "Non podes facer listas de grupos porque non es moderadora." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "Tes que estar conectada para poder cambiar o email" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Tes que estar conectada para poder cambiar o contrasinal" @@ -260,7 +260,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Tes que estar conectada para poder eleminar un grupo" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Tes que estar conectada para poder eliminar a conta" @@ -285,47 +285,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "Tes que ter un token existente para obter un token actualizado" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Solicitaches demasiado pronto un email de confirmación" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "O teu email non está na lista dos permitidos" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Erro ó executar a tarefa en segundo plano" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Non se atopa o perfil con este ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Non se atopa o perfil remoto con este ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Só moderadoras e administradoras poden suspender un perfil" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Só moderadoras e administradoras pode restablecer un perfil" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Só os perfís remotos poderían ser actualizdos" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "O perfil xa está suspendido" @@ -375,8 +375,8 @@ msgid "Event id not found" msgstr "Non se atopou o ID do evento" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Evento non atopado" @@ -504,7 +504,7 @@ msgid "Token is not a valid UUID" msgstr "O token non é un UUID válido" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "Usuaria non atopada" @@ -573,7 +573,7 @@ msgid "You cannot delete this comment" msgstr "Non podes eliminar este comentario" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "Non podes eliminar este evento" @@ -641,7 +641,7 @@ msgid "You need to be logged-in to access resources" msgstr "Tes que estar conectada para acceder ós recursos" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "Tes que estar conectada para crear eventos" @@ -661,7 +661,7 @@ msgid "You need to be logged-in to create resources" msgstr "Tes que estar conectada para crear recursos" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "Tes que estar conectada para eliminar un evento" @@ -686,7 +686,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Tes que estar conectada para saír dun evento" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Tes que estar conectada para actualizar un evento" @@ -711,18 +711,18 @@ msgid "Parent resource doesn't belong to this group" msgstr "O recurso relacionado non pertence a este grupo" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "O contrasinal elexido é demasiado curto." #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "O token de rexistro xa está a ser usado, semella un problema pola nosa parte." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Este email xa se está a usar." @@ -792,12 +792,12 @@ msgid "Profile is not administrator for the group" msgstr "O perfil non é administrador do grupo" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "Non podes editar este evento." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "Non podes atribuír este evento a este perfil." @@ -827,7 +827,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "Debes proporcionar ou ben un ID ou nome para acceder á conversa" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "O perfil da organización non pertence á usuaria" @@ -853,7 +853,7 @@ msgid "Error while creating resource" msgstr "Erro ao crear o recurso" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "O token de activación non é válido" @@ -863,6 +863,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "Non se puideron obter os detalles do recurso desde o URL." #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "O perfil da moderadora proporcionado non ten permisos neste evento" diff --git a/priv/gettext/hu/LC_MESSAGES/activity.po b/priv/gettext/hu/LC_MESSAGES/activity.po index 0762eb83..fe7154fe 100644 --- a/priv/gettext/hu/LC_MESSAGES/activity.po +++ b/priv/gettext/hu/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/hu/LC_MESSAGES/errors.po b/priv/gettext/hu/LC_MESSAGES/errors.po index 4bed746a..0e6de57d 100644 --- a/priv/gettext/hu/LC_MESSAGES/errors.po +++ b/priv/gettext/hu/LC_MESSAGES/errors.po @@ -126,7 +126,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "A jelenlegi profil nem adminisztrátora a kijelölt csoportnak" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Hiba a felhasználói beállítások mentésekor" @@ -152,18 +152,18 @@ msgid "Member not found" msgstr "Nem található a tag" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Nem található profil a moderátor felhasználóhoz" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "Nem található ezzel az e-mail-címmel ellenőrzendő felhasználó" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Nem található ezzel az e-mail-címmel rendelkező felhasználó" @@ -171,51 +171,51 @@ msgstr "Nem található ezzel az e-mail-címmel rendelkező felhasználó" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "A profilt nem hitelesített felhasználó birtokolja" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "A regisztrációk nincsenek nyitva" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "A jelenlegi jelszó érvénytelen" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "Az új e-mail-cím nem tűnik érvényesnek" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "Az új e-mail-címnek eltérőnek kell lennie" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "Az új jelszónak eltérőnek kell lennie" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "A megadott jelszó érvénytelen" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "A választott jelszó túl rövid. Győződjön meg arról, hogy a jelszava " "tartalmazzon legalább 6 karaktert." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Ez a felhasználó nem tudja visszaállítani a jelszavát" @@ -225,17 +225,17 @@ msgid "This user has been disabled" msgstr "Ez a felhasználó le lett tiltva" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Nem lehet ellenőrizni a felhasználót" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "A felhasználó már le van tiltva" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "A kért felhasználó nincs bejelentkezve" @@ -260,12 +260,12 @@ msgid "You may not list groups unless moderator." msgstr "Lehet, hogy nem sorolhatja fel a csoportokat, hacsak nem moderátor." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "Bejelentkezve kell lennie az e-mail-címe megváltoztatásához" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Bejelentkezve kell lennie a jelszava megváltoztatásához" @@ -275,7 +275,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Bejelentkezve kell lennie egy csoport törléséhez" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Bejelentkezve kell lennie a fiókja törléséhez" @@ -300,49 +300,49 @@ msgid "You need to have an existing token to get a refresh token" msgstr "Szüksége van egy meglévő tokenre egy frissítési token beszerzéséhez" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Túl hamar kért újra egy megerősítő e-mailt" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "Az e-mail-címe nincs rajta az engedélyezési listán" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Hiba a háttérfeladat végrehajtásakor" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Nem található profil ezzel az azonosítóval" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Nem található távoli profil ezzel az azonosítóval" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Csak moderátorok és adminisztrátorok függeszthetnek fel egy profilt" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" "Csak moderátorok és adminisztrátorok szüntethetik meg egy profil " "felfüggesztését" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Csak távoli profilokat lehet frissíteni" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "A profil már fel van függesztve" @@ -392,8 +392,8 @@ msgid "Event id not found" msgstr "Nem található az eseményazonosító" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Nem található az esemény" @@ -521,7 +521,7 @@ msgid "Token is not a valid UUID" msgstr "A token nem érvényes UUID" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "Nem található a felhasználó" @@ -590,7 +590,7 @@ msgid "You cannot delete this comment" msgstr "Nem tudja törölni ezt a hozzászólást" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "Nem tudja törölni ezt az eseményt" @@ -664,7 +664,7 @@ msgid "You need to be logged-in to access resources" msgstr "Bejelentkezve kell lennie az erőforrásokhoz való hozzáféréshez" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "Bejelentkezve kell lennie az események létrehozásához" @@ -684,7 +684,7 @@ msgid "You need to be logged-in to create resources" msgstr "Bejelentkezve kell lennie az erőforrások létrehozásához" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "Bejelentkezve kell lennie egy esemény törléséhez" @@ -709,7 +709,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Bejelentkezve kell lennie egy esemény elhagyásához" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Bejelentkezve kell lennie egy esemény frissítéséhez" @@ -734,18 +734,18 @@ msgid "Parent resource doesn't belong to this group" msgstr "A szülőerőforrás nem tartozik ehhez a csoporthoz" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "A választott jelszó túl rövid." #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "A regisztrációs token már használatban van. Ez hibának tűnik a mi oldalunkon." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Ez az e-mail-cím már használatban van." @@ -815,12 +815,12 @@ msgid "Profile is not administrator for the group" msgstr "A profil nem adminisztrátor ennél a csoportnál" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "Nem tudja szerkeszteni ezt az eseményt." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "Nem tudja ezt az eseményt ennek a profilnak tulajdonítani." @@ -852,7 +852,7 @@ msgstr "" "megbeszéléshez való hozzáféréshez" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "A szervező profilját nem a felhasználó birtokolja" @@ -878,7 +878,7 @@ msgid "Error while creating resource" msgstr "Hiba az erőforrás létrehozáskor" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "Érvénytelen aktiválási token" @@ -888,6 +888,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "Nem lehet lekérni az erőforrás részleteit erről az URL-ről." #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "A megadott moderátorprofilnak nincs jogosultsága ezen az eseményen" diff --git a/priv/gettext/it/LC_MESSAGES/activity.po b/priv/gettext/it/LC_MESSAGES/activity.po index 4f768988..d378b4c3 100644 --- a/priv/gettext/it/LC_MESSAGES/activity.po +++ b/priv/gettext/it/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/it/LC_MESSAGES/default.po b/priv/gettext/it/LC_MESSAGES/default.po index 7155537f..a55eeba0 100644 --- a/priv/gettext/it/LC_MESSAGES/default.po +++ b/priv/gettext/it/LC_MESSAGES/default.po @@ -1039,9 +1039,9 @@ msgstr "" "Ciao! Solo una breve nota per confermare che l'indirizzo email collegato al " "tuo account su% {host} è stato cambiato da questo a:" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:62 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "If you did not trigger this change yourself, it is likely that someone has gained access to your %{host} account. Please log in and change your password immediately. If you cannot login, contact the admin on %{host}." msgstr "" "Se non hai attivato tu stesso questa modifica, è probabile che qualcuno " @@ -1702,18 +1702,18 @@ msgstr "Questo è un sito di prova per testare Mobilizon." msgid "%{name}'s feed" msgstr "Flusso di %{name}" -#: lib/service/export/feed.ex:120 #, elixir-format +#: lib/service/export/feed.ex:120 msgid "%{actor}'s private events feed on %{instance}" msgstr "Flusso privato degli eventi di %{actor} su %{instance}" -#: lib/service/export/feed.ex:115 #, elixir-format +#: lib/service/export/feed.ex:115 msgid "%{actor}'s public events feed on %{instance}" msgstr "Flusso pubblico degli eventi di %{actor} su %{instance}" -#: lib/service/export/feed.ex:220 #, elixir-format +#: lib/service/export/feed.ex:220 msgid "Feed for %{email} on %{instance}" msgstr "Flusso per %{email} su %{instance}" @@ -1740,8 +1740,8 @@ msgstr "Dettagli tecnici" msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Il server Mobilizon sembra essere temporaneamente inattivo." -#: lib/service/export/feed.ex:73 #, elixir-format +#: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "Feed pubblico per %{instance}" diff --git a/priv/gettext/it/LC_MESSAGES/errors.po b/priv/gettext/it/LC_MESSAGES/errors.po index dae83d66..7dd4c8a4 100644 --- a/priv/gettext/it/LC_MESSAGES/errors.po +++ b/priv/gettext/it/LC_MESSAGES/errors.po @@ -99,29 +99,29 @@ msgstr "dev'essere uguale a %{number}" msgid "Cannot refresh the token" msgstr "Il token non può essere aggiornato" -#: lib/graphql/resolvers/group.ex:206 #, elixir-format +#: lib/graphql/resolvers/group.ex:206 msgid "Current profile is not a member of this group" msgstr "Il profilo corrente non è membro di questo gruppo" -#: lib/graphql/resolvers/group.ex:210 #, elixir-format +#: lib/graphql/resolvers/group.ex:210 msgid "Current profile is not an administrator of the selected group" msgstr "Il profilo corrente non è amministratore del gruppo selezionato" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Errore nel salvare le preferenze utente" +#, elixir-format #: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:203 #: lib/graphql/resolvers/group.ex:234 lib/graphql/resolvers/group.ex:269 lib/graphql/resolvers/member.ex:80 -#, elixir-format msgid "Group not found" msgstr "Gruppo non trovato" -#: lib/graphql/resolvers/group.ex:68 #, elixir-format +#: lib/graphql/resolvers/group.ex:68 msgid "Group with ID %{id} not found" msgstr "Gruppo con ID %{id} non trovato" @@ -130,24 +130,24 @@ msgstr "Gruppo con ID %{id} non trovato" msgid "Impossible to authenticate, either your email or password are invalid." msgstr "Impossibile autenticarsi: email e/o password non validi." -#: lib/graphql/resolvers/group.ex:266 #, elixir-format +#: lib/graphql/resolvers/group.ex:266 msgid "Member not found" msgstr "Membro non trovato" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Nessun profilo trovato per l'utente moderatore" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "Nessun utente da convalidare trovato con questa email" -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 #, elixir-format +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Nessun utente con questa email" @@ -155,49 +155,49 @@ msgstr "Nessun utente con questa email" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "L'utente autenticato non è propietario di questo profilo" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "Le registrazioni non sono aperte" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "la password corrente non è valida" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "La nuova email sembra non valida" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "La nuova email dev'essere diversa" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "La nuova password deve essere diversa" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "La password assegnata non è valida" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "la password scelta è troppo corta, deve avere almeno 6 caratteri." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Questo utente non può resettare la password" @@ -207,72 +207,72 @@ msgid "This user has been disabled" msgstr "L'utente è stato disabilitato" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Impossibile convalidare l'utente" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "Utente già disabilitato" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "L'utente richiesto non è loggato" -#: lib/graphql/resolvers/group.ex:240 #, elixir-format +#: lib/graphql/resolvers/group.ex:240 msgid "You are already a member of this group" msgstr "Sei già un membro di questo gruppo" -#: lib/graphql/resolvers/group.ex:273 #, elixir-format +#: lib/graphql/resolvers/group.ex:273 msgid "You can't leave this group because you are the only administrator" msgstr "Non puoi lasciare questo gruppo perchè sei l'unico amministratore" -#: lib/graphql/resolvers/group.ex:237 #, elixir-format +#: lib/graphql/resolvers/group.ex:237 msgid "You cannot join this group" msgstr "Non puoi unirti a questo gruppo" -#: lib/graphql/resolvers/group.ex:96 #, elixir-format +#: lib/graphql/resolvers/group.ex:96 msgid "You may not list groups unless moderator." msgstr "Non è possibile elencare i gruppi a meno che non sia un moderatore." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "È necessario effettuare il login per modificare la tua email" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "È necessario effettuare il login per modificare la tua password" -#: lib/graphql/resolvers/group.ex:215 #, elixir-format +#: lib/graphql/resolvers/group.ex:215 msgid "You need to be logged-in to delete a group" msgstr "È necessario effettuare il login per eliminare un gruppo" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "È necessario effettuare il login per eliminare il tuo account" -#: lib/graphql/resolvers/group.ex:245 #, elixir-format +#: lib/graphql/resolvers/group.ex:245 msgid "You need to be logged-in to join a group" msgstr "È necessario effettuare il login per entrare a far parte di un gruppo" -#: lib/graphql/resolvers/group.ex:278 #, elixir-format +#: lib/graphql/resolvers/group.ex:278 msgid "You need to be logged-in to leave a group" msgstr "È necessario effettuare il login per lasciare un gruppo" -#: lib/graphql/resolvers/group.ex:180 #, elixir-format +#: lib/graphql/resolvers/group.ex:180 msgid "You need to be logged-in to update a group" msgstr "È necessario effettuare il login per aggiornare un gruppo" @@ -284,47 +284,47 @@ msgstr "" "aggiornamento" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Hai richiesto di nuovo un'e-mail di conferma troppo presto" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "La tua mail non è nella lista delle autorizzazioni" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Errore nell'eseguire un processo in background" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Nessun profilo trovato con questo ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Nessun profilo remoto trovato con questo ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Solo i moderatori e gli amministratori possono sospendere un profilo" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Solo i moderatori e gli amministratori possono riattivare un profilo" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "È possibile aggiornare solo i profili remoti" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Profilo già sospeso" @@ -338,13 +338,13 @@ msgstr "Un'email valida è richiesta dalla vostra istanza" msgid "Anonymous participation is not enabled" msgstr "La partecipazione anonima non è abilitata" -#: lib/graphql/resolvers/person.ex:196 #, elixir-format +#: lib/graphql/resolvers/person.ex:196 msgid "Cannot remove the last administrator of a group" msgstr "Impossibile rimuovere l'ultimo amministratore di un gruppo" -#: lib/graphql/resolvers/person.ex:193 #, elixir-format +#: lib/graphql/resolvers/person.ex:193 msgid "Cannot remove the last identity of a user" msgstr "Impossibile rimuovere l'ultima identità di un utente" @@ -374,8 +374,8 @@ msgid "Event id not found" msgstr "ID evento non trovato" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Evento non trovato" @@ -390,8 +390,8 @@ msgstr "L'evento con questo ID %{id} non esiste" msgid "Internal Error" msgstr "Errore Interno" -#: lib/graphql/resolvers/discussion.ex:202 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:202 msgid "No discussion with ID %{id}" msgstr "Nessuna discussione con l'ID %{id}" @@ -400,8 +400,8 @@ msgstr "Nessuna discussione con l'ID %{id}" msgid "No profile found for user" msgstr "Nessuno profilo trovato per l'utente" -#: lib/graphql/resolvers/feed_token.ex:64 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:64 msgid "No such feed token" msgstr "Nessun token di rifornimento corrispondente" @@ -417,13 +417,13 @@ msgstr "Il partecipante ha già il ruolo %{role}" msgid "Participant not found" msgstr "Partecipante non trovato" -#: lib/graphql/resolvers/person.ex:30 #, elixir-format +#: lib/graphql/resolvers/person.ex:30 msgid "Person with ID %{id} not found" msgstr "La persona con l'ID %{id} non è stata trovata" -#: lib/graphql/resolvers/person.ex:52 #, elixir-format +#: lib/graphql/resolvers/person.ex:52 msgid "Person with username %{username} not found" msgstr "La persona con il nome utente %{username} non è stata trovata" @@ -456,13 +456,13 @@ msgstr "Il profilo è già un membro diquesto gruppo" msgid "Profile is not member of group" msgstr "Il profilo non è membro del gruppo" -#: lib/graphql/resolvers/person.ex:162 lib/graphql/resolvers/person.ex:190 #, elixir-format +#: lib/graphql/resolvers/person.ex:162 lib/graphql/resolvers/person.ex:190 msgid "Profile not found" msgstr "Profilo non trovato" -#: lib/graphql/resolvers/report.ex:36 #, elixir-format +#: lib/graphql/resolvers/report.ex:36 msgid "Report not found" msgstr "Segnalazione non trovata" @@ -492,23 +492,23 @@ msgstr "L'elemento to-do non esiste" msgid "Todo list doesn't exist" msgstr "la lista non esiste" -#: lib/graphql/resolvers/feed_token.ex:73 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:73 msgid "Token does not exist" msgstr "Il token non esiste" -#: lib/graphql/resolvers/feed_token.ex:67 lib/graphql/resolvers/feed_token.ex:70 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:67 lib/graphql/resolvers/feed_token.ex:70 msgid "Token is not a valid UUID" msgstr "Il token non è un UUID valido" -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 #, elixir-format +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "Utente non trovato" -#: lib/graphql/resolvers/person.ex:257 #, elixir-format +#: lib/graphql/resolvers/person.ex:257 msgid "You already have a profile for this user" msgstr "Hai già un profilo per questo utente" @@ -522,8 +522,8 @@ msgstr "Se già un partecipante di questo evento" msgid "You are not a member of this group" msgstr "Non sei un membro di questo gruppo" -#: lib/graphql/resolvers/member.ex:149 #, elixir-format +#: lib/graphql/resolvers/member.ex:149 msgid "You are not a moderator or admin for this group" msgstr "Non sei un moderatore o amministratore di questo gruppo" @@ -542,8 +542,8 @@ msgstr "Non puoi creare un token di rifornimento senza connessione" msgid "You are not allowed to delete a comment if not connected" msgstr "Non è consentito eliminare un commento se non si è collegati" -#: lib/graphql/resolvers/feed_token.ex:82 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:82 msgid "You are not allowed to delete a feed token if not connected" msgstr "Non puoi eliminare un token di rifornimento senza connettersi" @@ -559,8 +559,8 @@ msgid "You can't leave event because you're the only event creator participant" msgstr "" "Non puoi lasciare l'evento perchè sei l'unico partecipante creatore di eventi" -#: lib/graphql/resolvers/member.ex:153 #, elixir-format +#: lib/graphql/resolvers/member.ex:153 msgid "You can't set yourself to a lower member role for this group because you are the only administrator" msgstr "" "Non puoi impostare te stesso per un ruolo di membro inferiore per questo " @@ -572,7 +572,7 @@ msgid "You cannot delete this comment" msgstr "Non puoi eliminare questo commento" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "Non puoi eliminare questo evento" @@ -581,13 +581,13 @@ msgstr "Non puoi eliminare questo evento" msgid "You cannot invite to this group" msgstr "Non puoi invitare in questo gruppo" -#: lib/graphql/resolvers/feed_token.ex:76 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:76 msgid "You don't have permission to delete this token" msgstr "Non hai il permesso di cancellare questo token" -#: lib/graphql/resolvers/admin.ex:53 #, elixir-format +#: lib/graphql/resolvers/admin.ex:53 msgid "You need to be logged-in and a moderator to list action logs" msgstr "Devi essere connesso e un moderatore per elencare i log delle azioni" @@ -606,29 +606,29 @@ msgstr "Devi essere connesso e un moderatore per aggiornare un rapporto" msgid "You need to be logged-in and a moderator to view a report" msgstr "Devi essere connesso e un moderatore per visualizzare un rapporto" -#: lib/graphql/resolvers/admin.ex:237 #, elixir-format +#: lib/graphql/resolvers/admin.ex:237 msgid "You need to be logged-in and an administrator to access admin settings" msgstr "" "Devi essere connesso e un moderatore per accedere alle opzioni " "dell'amministratore" -#: lib/graphql/resolvers/admin.ex:222 #, elixir-format +#: lib/graphql/resolvers/admin.ex:222 msgid "You need to be logged-in and an administrator to access dashboard statistics" msgstr "" "Devi essere connesso e un moderatore per accedere alle statistiche del " "dashboard" -#: lib/graphql/resolvers/admin.ex:261 #, elixir-format +#: lib/graphql/resolvers/admin.ex:261 msgid "You need to be logged-in and an administrator to save admin settings" msgstr "" "Devi essere connesso e un moderatore per salvare le impostazioni " "dell'amministratore" -#: lib/graphql/resolvers/discussion.ex:77 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:77 msgid "You need to be logged-in to access discussions" msgstr "Devi essere connesso per accedere alle discussioni" @@ -638,7 +638,7 @@ msgid "You need to be logged-in to access resources" msgstr "Devi essere connesso per accedere alle risorse" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "Devi essere connesso per creare eventi" @@ -658,7 +658,7 @@ msgid "You need to be logged-in to create resources" msgstr "Devi essere connesso per creare risorse" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "Devi essere connesso per eliminare un evento" @@ -683,7 +683,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Devi essere connesso per lasciare un evento" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Devi essere connesso per aggiornare un evento" @@ -708,19 +708,19 @@ msgid "Parent resource doesn't belong to this group" msgstr "La risorsa principale non appartiene a questo gruppo" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "La password scelta è troppo corta." #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Il token di registrazione è già in uso, questo sembra un problema dalla " "nostra parte." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Questa email è già in uso." @@ -769,13 +769,13 @@ msgstr "Non hai il permesso di farlo" msgid "You need to be logged in" msgstr "Devi essere connesso" -#: lib/graphql/resolvers/member.ex:114 #, elixir-format +#: lib/graphql/resolvers/member.ex:114 msgid "You can't accept this invitation with this profile." msgstr "Non puoi accettare l'invito con questo profilo." -#: lib/graphql/resolvers/member.ex:132 #, elixir-format +#: lib/graphql/resolvers/member.ex:132 msgid "You can't reject this invitation with this profile." msgstr "Non puoi rifiutare l'invito con questo profilo." @@ -784,33 +784,33 @@ msgstr "Non puoi rifiutare l'invito con questo profilo." msgid "File doesn't have an allowed MIME type." msgstr "Il file non ha un tipo MIME consentito." -#: lib/graphql/resolvers/group.ex:175 #, elixir-format +#: lib/graphql/resolvers/group.ex:175 msgid "Profile is not administrator for the group" msgstr "Il profilo non è amministratore del gruppo" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "Non puoi modificare questo evento." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "Non puo iattribuire questo evento a questo profilo." -#: lib/graphql/resolvers/member.ex:135 #, elixir-format +#: lib/graphql/resolvers/member.ex:135 msgid "This invitation doesn't exist." msgstr "Questo invito non esiste." -#: lib/graphql/resolvers/member.ex:177 #, elixir-format +#: lib/graphql/resolvers/member.ex:177 msgid "This member already has been rejected." msgstr "Questo memebro è già stato rifiutato." -#: lib/graphql/resolvers/member.ex:184 #, elixir-format +#: lib/graphql/resolvers/member.ex:184 msgid "You don't have the right to remove this member." msgstr "Non hai il diritto di rimuovere questo membro." @@ -819,15 +819,15 @@ msgstr "Non hai il diritto di rimuovere questo membro." msgid "This username is already taken." msgstr "Questo nome utente è già in uso." -#: lib/graphql/resolvers/discussion.ex:74 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:74 msgid "You must provide either an ID or a slug to access a discussion" msgstr "" "Devi fornire un ID o la stringa utente (ad es. utente@mobilizon.sm) " "per accedere ad una discussione" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "Il profilo dell'organizzatore non è di proprietà dell'utente" @@ -836,9 +836,9 @@ msgstr "Il profilo dell'organizzatore non è di proprietà dell'utente" msgid "Profile ID provided is not the anonymous profile one" msgstr "L'ID profilo fornito non è quello del profilo anonimo" +#, elixir-format #: lib/graphql/resolvers/group.ex:136 lib/graphql/resolvers/group.ex:169 #: lib/graphql/resolvers/person.ex:132 lib/graphql/resolvers/person.ex:159 lib/graphql/resolvers/person.ex:251 -#, elixir-format msgid "The provided picture is too heavy" msgstr "L'immagine inserita è troppo pesante" @@ -847,13 +847,13 @@ msgstr "L'immagine inserita è troppo pesante" msgid "Index file not found. You need to recompile the front-end." msgstr "Il file di indice non è stato trovato. Devi ricompilare il front-end." -#: lib/graphql/resolvers/resource.ex:122 #, elixir-format +#: lib/graphql/resolvers/resource.ex:122 msgid "Error while creating resource" msgstr "Errore durante la creazione della risorsa" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "Token di attivazione non valido" @@ -862,8 +862,8 @@ msgstr "Token di attivazione non valido" msgid "Unable to fetch resource details from this URL." msgstr "Impossibile recuperare i dettagli della risorsa da questa URL." -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 #, elixir-format +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" "Il profilo del moderatore fornito non dispone dell'autorizzazione per questo " diff --git a/priv/gettext/ja/LC_MESSAGES/activity.po b/priv/gettext/ja/LC_MESSAGES/activity.po index f912b116..8d5b55b7 100644 --- a/priv/gettext/ja/LC_MESSAGES/activity.po +++ b/priv/gettext/ja/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=1\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -234,6 +234,28 @@ msgid_plural "There has been some activity!" msgstr[0] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/ja/LC_MESSAGES/errors.po b/priv/gettext/ja/LC_MESSAGES/errors.po index a9fd66f7..170182f2 100644 --- a/priv/gettext/ja/LC_MESSAGES/errors.po +++ b/priv/gettext/ja/LC_MESSAGES/errors.po @@ -97,7 +97,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "" @@ -123,18 +123,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -142,49 +142,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -194,17 +194,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -229,12 +229,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -244,7 +244,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -269,47 +269,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -359,8 +359,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -488,7 +488,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -554,7 +554,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -614,7 +614,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -634,7 +634,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -659,7 +659,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -684,17 +684,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -764,12 +764,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -799,7 +799,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -825,7 +825,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -835,6 +835,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/activity.po b/priv/gettext/nl/LC_MESSAGES/activity.po index 4145c0eb..4319392c 100644 --- a/priv/gettext/nl/LC_MESSAGES/activity.po +++ b/priv/gettext/nl/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/errors.po b/priv/gettext/nl/LC_MESSAGES/errors.po index bdb41f56..a13bc6d9 100644 --- a/priv/gettext/nl/LC_MESSAGES/errors.po +++ b/priv/gettext/nl/LC_MESSAGES/errors.po @@ -103,7 +103,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "" @@ -129,18 +129,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -148,49 +148,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -200,17 +200,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -235,12 +235,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -250,7 +250,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -275,47 +275,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -365,8 +365,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -494,7 +494,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -560,7 +560,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -620,7 +620,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -640,7 +640,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -665,7 +665,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -690,17 +690,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -770,12 +770,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -805,7 +805,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -831,7 +831,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -841,6 +841,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/nn/LC_MESSAGES/activity.po b/priv/gettext/nn/LC_MESSAGES/activity.po index d2e1ac97..753b5690 100644 --- a/priv/gettext/nn/LC_MESSAGES/activity.po +++ b/priv/gettext/nn/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/nn/LC_MESSAGES/errors.po b/priv/gettext/nn/LC_MESSAGES/errors.po index 4cb5e014..359c2132 100644 --- a/priv/gettext/nn/LC_MESSAGES/errors.po +++ b/priv/gettext/nn/LC_MESSAGES/errors.po @@ -126,7 +126,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "Denne brukaren er ikkje styrar av gruppa" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Greidde ikkje lagra brukarinnstillingane" @@ -152,18 +152,18 @@ msgid "Member not found" msgstr "Fann ikkje medlemen" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Fann ingen profil for moderator-brukaren" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "Fann ingen brukar med denne eposten å godkjenna" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Fann ingen brukar med denne eposten" @@ -171,49 +171,49 @@ msgstr "Fann ingen brukar med denne eposten" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "Ingen godkjent brukar eig denne profilen" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "Det er ikkje opna for å registrera seg" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "Dette passordet er ugyldig" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "Den nye epostadressa ser ut til å vera feil" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "Den nye epostadressa må vera annleis" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "Det nye passordet må vera annleis" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "Dette passordet er ugyldig" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "Dette passordet er for kort. Passord må ha minst 6 teikn." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Denne brukaren kan ikkje nullstilla passordet sitt" @@ -223,17 +223,17 @@ msgid "This user has been disabled" msgstr "Denne brukaren er avskrudd" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Greier ikkje godkjenna brukaren" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "Brukaren er allereie inaktiv" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "Den førespurte brukaren er ikkje innlogga" @@ -258,12 +258,12 @@ msgid "You may not list groups unless moderator." msgstr "Du kan ikkje lista opp grupper med mindre du er moderator." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "Du må vera innlogga for å endra epostadressa di" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Du må vera innlogga for å endra passordet ditt" @@ -273,7 +273,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Du må vera innlogga for å sletta ei gruppe" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Du må vera innlogga for å sletta kontoen din" @@ -298,47 +298,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "Du treng eit eksisterande teikn for å få eit fornyingsteikn" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Du ba om ny stadfestingsepost for snøgt" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "Epostadressa di er ikkje på lista over godkjende adresser" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Greidde ikkje utføra ei bakgrunnsoppgåve" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Fann ingen profil med denne ID-en" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Fann ingen fjern profil med denne ID-en" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Berre moderatorar og styrarar kan sperra ein profil" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Berre moderatorar og styrarar kan oppheva sperring av profilar" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Du kan berre lasta fjerne profilar på nytt" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Profilen er allereie sperra" @@ -388,8 +388,8 @@ msgid "Event id not found" msgstr "Fann ikkje ID-en til hendinga" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Fann ikkje hendinga" @@ -517,7 +517,7 @@ msgid "Token is not a valid UUID" msgstr "Teiknet er ikkje ein gyldig UUID" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "Fann ikkje brukaren" @@ -588,7 +588,7 @@ msgid "You cannot delete this comment" msgstr "Du kan ikkje sletta denne kommentaren" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "Du kan ikkje sletta denne hendinga" @@ -655,7 +655,7 @@ msgid "You need to be logged-in to access resources" msgstr "Du må vera innlogga for å sjå ressursane" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "Du må vera innlogga for å laga hendingar" @@ -675,7 +675,7 @@ msgid "You need to be logged-in to create resources" msgstr "Du må vera innlogga for å laga ressursar" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "Du må vera innlogga for å sletta ei hending" @@ -700,7 +700,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Du må vera innlogga for å melda deg av ei hending" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Du må vera innlogga for å oppdatera hendingar" @@ -725,19 +725,19 @@ msgid "Parent resource doesn't belong to this group" msgstr "Opphavsressursen høyrer ikkje til denne gruppa" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "Dette passordet er for kort." #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Registreringsteiknet er allereie i bruk, dette ser ut som ein feil frå vår " "side." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Denne eposten er allereie i bruk." @@ -807,12 +807,12 @@ msgid "Profile is not administrator for the group" msgstr "Profilen er ikkje administrator for gruppa" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "Du kan ikkje endra denne hendinga." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "Du kan ikkje kopla denne hendinga til denne profilen." @@ -843,7 +843,7 @@ msgstr "" "Du må gje anten ein ID eller ei stuttadresse for å få tilgang til ordskiftet" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "Brukaren eig ikkje arrangørprofilen" @@ -869,7 +869,7 @@ msgid "Error while creating resource" msgstr "Greidde ikkje laga ressursen" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "Ugyldig aktiveringslykjel" @@ -879,6 +879,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "Greidde ikkje henta ressursdetaljane frå denne adressa." #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Moderatorprofilen har ikkje tilgang til denne hendinga" diff --git a/priv/gettext/oc/LC_MESSAGES/activity.po b/priv/gettext/oc/LC_MESSAGES/activity.po index 3531e9da..d22ecd21 100644 --- a/priv/gettext/oc/LC_MESSAGES/activity.po +++ b/priv/gettext/oc/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/errors.po b/priv/gettext/oc/LC_MESSAGES/errors.po index b9176f18..a1d37534 100644 --- a/priv/gettext/oc/LC_MESSAGES/errors.po +++ b/priv/gettext/oc/LC_MESSAGES/errors.po @@ -110,7 +110,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "Lo perfil actual es pas administrator del grop seleccionat" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Error en salvagardant los paramètres utilizaire" @@ -138,18 +138,18 @@ msgid "Member not found" msgstr "Membre pas trobat" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Cap de perfil pas trobat per l’utilizaire moderator" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "Cap d’utilizaire de validar amb aqueste email pas trobat" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Degun trobat d'amb aquesta email" @@ -157,51 +157,51 @@ msgstr "Degun trobat d'amb aquesta email" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "Lo perhiu es pas proprietat del utilizator autenticat" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "Las inscripciones sèn pas obèrtas" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "Lo mòt de santa clara actuau es invalid" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "Lo email nau sèm invalid" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "Lo email nau deb esser different" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "Lo mòt de santa clara nau deb esser different" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "Lo mòt de santa clara aprovedit es invalid" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "Lo mòt de santa clara que avetz causit es tròp cort. Merci de vos assegurar " "que vostre mòt de santa clara contienga au mèns 6 caracteres." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Aquest utilizator pod pas reinicializar lo sèn mòt de santa clara" @@ -211,17 +211,17 @@ msgid "This user has been disabled" msgstr "Aquest utilizator a essat dasactivat" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Es impossible de validar l'utilizator" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "Utilizator déjà desactivat" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "L'utilizator demandat es pas conectat" @@ -246,12 +246,12 @@ msgid "You may not list groups unless moderator." msgstr "Podetz listar los grops sonque se essetz moderator." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "Debetz esser conectat per cambiar lo voste email" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Debetz d'esser conectat per cambiar lo voste mòt de santa clara" @@ -261,7 +261,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Debetz d'esser conectat per suprimir un grop" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Devetz d'esser conectat per suprimir lo voste compte" @@ -286,48 +286,48 @@ msgid "You need to have an existing token to get a refresh token" msgstr "Devetz aver un senhau existant per obtiéner un senhau nau" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Demandatz de nau un email de confirmacion tròp lèu" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "Vòstre email es pas en la lista d'autorizacions" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Error mentre que efectuant ua tasca de plan darrèr" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Cap de profiu trobat d'amb aquesta ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Cap de profiu distant trobat d'amb aquesta ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Sonque moderators e administrators pòden suspendre un profiu" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" "Sonque moderators e administrators pòden annular la suspension d'un profiu" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Sonque profius distants pòden esser refrescats" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Profiu déjà suspendut" @@ -377,8 +377,8 @@ msgid "Event id not found" msgstr "ID d'eveniment non trobat" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Eveniment non trobat" @@ -506,7 +506,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -572,7 +572,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -632,7 +632,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -652,7 +652,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -677,7 +677,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -702,17 +702,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -782,12 +782,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -817,7 +817,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -843,7 +843,7 @@ msgid "Error while creating resource" msgstr "Error mentre que sauvant lo rapòrt" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -853,6 +853,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/activity.po b/priv/gettext/pl/LC_MESSAGES/activity.po index 7fca2979..058f96f2 100644 --- a/priv/gettext/pl/LC_MESSAGES/activity.po +++ b/priv/gettext/pl/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -238,6 +238,28 @@ msgstr[1] "" msgstr[2] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/errors.po b/priv/gettext/pl/LC_MESSAGES/errors.po index 1faef75e..54d6830e 100644 --- a/priv/gettext/pl/LC_MESSAGES/errors.po +++ b/priv/gettext/pl/LC_MESSAGES/errors.po @@ -117,7 +117,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "Obecny profil nie jest administratorem zaznaczonej grupy" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Błąd zapisywania ustawień użytkownika" @@ -144,19 +144,19 @@ msgid "Member not found" msgstr "Nie odnaleziono użytkownika" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Nie znaleziono profilu dla konta moderatora" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" "Nie znaleziono użytkownika do zatwierdzenia z użyciem tego adresu e-mail" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Nie znaleziono użytkownika o tym adresie e-mail" @@ -164,51 +164,51 @@ msgstr "Nie znaleziono użytkownika o tym adresie e-mail" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "Profil nie należy do uwierzytelnionego użytkownika" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "Rejestracje nie są otwarte" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "Obecne hasło jest nieprawidłowe" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "Nowy adres e-mail nie wydaje się być prawidłowy" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "Nowy adres e-mail musi się różnić od obecnego" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "Nowe hasło musi różnić się od obecnego" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "Wprowadzone hasło jest nieprawidłowe" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "Wprowadzone hasło jest zbyt krótkie. Upewnij się, że Twoje hasło składa się " "z przynajmniej 6 znaków." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Ten użytkownik nie może resetować swojego hasła" @@ -218,17 +218,17 @@ msgid "This user has been disabled" msgstr "Ten użytkownik jest wyłączony" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Nie udało się zwalidować użytkownika" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "Użytkownik jest już wyłączony" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "Żądany użytkownik nie jest zalogowany" @@ -254,12 +254,12 @@ msgid "You may not list groups unless moderator." msgstr "Nie masz dostępu do listy grup, jeżeli nie jesteś moderatorem." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "Musisz być zalogowany(-a), aby zmienić adres e-mail" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Musisz być zalogowany(-a), aby zmienić hasło" @@ -269,7 +269,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Musisz być zalogowany(-a), aby usunąć grupę" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Musisz być zalogowany(-a), aby usunąć konto" @@ -294,47 +294,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "Musisz mieć istniejący token, aby uzyskać token odświeżający" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Zbyt wcześnie poprosiłeś(-aś) o nową wiadomość potwierdzającą" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "Twój adres e-mail nie jest na białej liście" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Błąd podczas przetwarzania zadań w tle" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Nie ma profilu o tym ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Nie ma zdalnego profilu o tym ID" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Tylko moderatorzy i administratorzy mogą zawiesić profil" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Tylko moderatorzy i administratorzy mogą cofnąć zawieszenie profilu" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Tylko zdalne profile mogą być odświeżane" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Już zawieszono profil" @@ -384,8 +384,8 @@ msgid "Event id not found" msgstr "Nie znaleziono id wydarzenia" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Nie znaleziono wydarzenia" @@ -513,7 +513,7 @@ msgid "Token is not a valid UUID" msgstr "Token nie jest prawidłowym UUID" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "Nie znaleziono użytkownika" @@ -581,7 +581,7 @@ msgid "You cannot delete this comment" msgstr "Nie możesz usunąć tego komentarza" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "Nie możesz usunąć tego wydarzenia" @@ -647,7 +647,7 @@ msgid "You need to be logged-in to access resources" msgstr "Musisz być zalogowany(-a), aby uzyskać dostęp do zasobów" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "Musisz być zalogowany(-a), aby móc utworzyć wydarzenia" @@ -667,7 +667,7 @@ msgid "You need to be logged-in to create resources" msgstr "Musisz być zalogowany(-a), aby utworzyć zasób" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "Musisz być zalogowany(-a), aby usunąć wydarzenie" @@ -692,7 +692,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Musisz być zalogowany(-a), aby opuścić wydarzenie" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Musisz być zalogowany(-a), aby zaktualizować wydarzenie" @@ -717,19 +717,19 @@ msgid "Parent resource doesn't belong to this group" msgstr "Nadrzędny zasób nie należy do tej grupy" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "Wybrane hasło jest zbyt krótkie" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Token rejestracyjny jest już w użyciu, to wygląda na problem po naszej " "stronie." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Ten adres e-mail jest już w użyciu." @@ -799,12 +799,12 @@ msgid "Profile is not administrator for the group" msgstr "Profil nie jest administratorem grupy" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "Nie możesz edytować tego wydarzenia." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "Nie możesz przypisać tego wydarzenia do tego profilu." @@ -834,7 +834,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -860,7 +860,7 @@ msgid "Error while creating resource" msgstr "Wystąpił błąd podczas zapisywania zgłoszenia" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -870,6 +870,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Wskazany profil moderatora nie ma uprawnień dla tego wydarzenia" diff --git a/priv/gettext/pt/LC_MESSAGES/activity.po b/priv/gettext/pt/LC_MESSAGES/activity.po index 2bf2bb1c..5bac3502 100644 --- a/priv/gettext/pt/LC_MESSAGES/activity.po +++ b/priv/gettext/pt/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/errors.po b/priv/gettext/pt/LC_MESSAGES/errors.po index 4cc4c6f7..0ad4164a 100644 --- a/priv/gettext/pt/LC_MESSAGES/errors.po +++ b/priv/gettext/pt/LC_MESSAGES/errors.po @@ -103,7 +103,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "" @@ -129,18 +129,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -148,49 +148,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -200,17 +200,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -235,12 +235,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -250,7 +250,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -275,47 +275,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -365,8 +365,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -494,7 +494,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -560,7 +560,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -620,7 +620,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -640,7 +640,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -665,7 +665,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -690,17 +690,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -770,12 +770,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -805,7 +805,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -831,7 +831,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -841,6 +841,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/activity.po b/priv/gettext/pt_BR/LC_MESSAGES/activity.po index 6412a93a..6590e373 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/activity.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/errors.po b/priv/gettext/pt_BR/LC_MESSAGES/errors.po index 538063b0..8cb11f0a 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/errors.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/errors.po @@ -103,7 +103,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "" @@ -129,18 +129,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -148,49 +148,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -200,17 +200,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -235,12 +235,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -250,7 +250,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -275,47 +275,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -365,8 +365,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -494,7 +494,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -560,7 +560,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -620,7 +620,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -640,7 +640,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -665,7 +665,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -690,17 +690,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -770,12 +770,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -805,7 +805,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -831,7 +831,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -841,6 +841,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/activity.po b/priv/gettext/ru/LC_MESSAGES/activity.po index acb893cd..e792e233 100644 --- a/priv/gettext/ru/LC_MESSAGES/activity.po +++ b/priv/gettext/ru/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=3\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -238,6 +238,28 @@ msgstr[1] "" msgstr[2] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/errors.po b/priv/gettext/ru/LC_MESSAGES/errors.po index f33f46ed..13ddaea6 100644 --- a/priv/gettext/ru/LC_MESSAGES/errors.po +++ b/priv/gettext/ru/LC_MESSAGES/errors.po @@ -117,7 +117,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "Текущий профиль не является администратором выбранной группы" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Ошибка при сохранении пользовательских настроек" @@ -145,20 +145,20 @@ msgid "Member not found" msgstr "Участник не найден" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "Профиль модератора не найден" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" "Не найдено ни одного пользователя для подтверждения с этим адресом " "электронной почты" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "Пользователя с этим адресом электронной почты не найдено" @@ -166,51 +166,51 @@ msgstr "Пользователя с этим адресом электронно #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "Профиль не принадлежит аутентифицированному пользователю" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "Регистрация не открыта" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "Текущий пароль неверен" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "Новый адрес электронной почты недействителен" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "Новый адрес электронной почты должен отличаться от текущего" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "Новый пароль должен отличаться от текущего" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "Введён неверный пароль" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "Введенный пароль слишком короткий. Убедитесь, что ваш пароль состоит не " "менее чем из 6 символов." #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "Этот пользователь не может сбросить свой пароль" @@ -220,17 +220,17 @@ msgid "This user has been disabled" msgstr "Этот пользователь отключен" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "Невозможно проверить пользователя" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "Пользователь уже отключен" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "Запрошенный пользователь не авторизован" @@ -256,13 +256,13 @@ msgid "You may not list groups unless moderator." msgstr "Только модератор может просматривать список групп." #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" "Вам необходимо войти в систему, чтобы изменить свой адрес электронной почты" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "Вам необходимо войти в систему, чтобы изменить свой пароль" @@ -272,7 +272,7 @@ msgid "You need to be logged-in to delete a group" msgstr "Вам необходимо войти в систему, чтобы удалить группу" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "Вам необходимо войти в систему, чтобы удалить свою учетную запись" @@ -297,47 +297,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "У вас должен быть существующий токен, чтобы получить токен обновления" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "Вы слишком рано запросили новое письмо с подтверждением" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "Ваш адрес электронной почты отсутствует в белом списке" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "Ошибка при выполнении фоновой задачи" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "Профиль с этим ID не найден" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "Удалённый профиль с этим ID не найден" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Только модераторы и администраторы могут заблокировать профиль" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Только модераторы и администраторы могут разблокировать профиль" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "Обновлять можно только удаленные профили" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Профиль уже заблокирован" @@ -387,8 +387,8 @@ msgid "Event id not found" msgstr "Не найден id мероприятия" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "Мероприятие не найдено" @@ -518,7 +518,7 @@ msgid "Token is not a valid UUID" msgstr "Токен не является допустимым UUID" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "Пользователь не найден" @@ -588,7 +588,7 @@ msgid "You cannot delete this comment" msgstr "Вы не можете удалить этот комментарий" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "Вы не можете удалить это мероприятие" @@ -658,7 +658,7 @@ msgid "You need to be logged-in to access resources" msgstr "Вам необходимо войти в систему, чтобы получить доступ к ресурсам" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность создавать мероприятия" @@ -682,7 +682,7 @@ msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность создавать ресурсы" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность удалить мероприятие" @@ -709,7 +709,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Вам необходимо войти в систему, чтобы покинуть мероприятие" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "Вам необходимо войти в систему, чтобы обновить мероприятие" @@ -738,18 +738,18 @@ msgid "Parent resource doesn't belong to this group" msgstr "Родительский ресурс не принадлежит к этой группе" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "Выбран слишком короткий пароль." #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Регистрационный токен уже используется. Похоже, что проблема с нашей стороны." #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "Этот электронный адрес уже используется." @@ -819,12 +819,12 @@ msgid "Profile is not administrator for the group" msgstr "Профиль не является администратором группы" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "Вы не можете редактировать это мероприятие." #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "Вы не можете назначить это мероприятие этому профилю." @@ -855,7 +855,7 @@ msgstr "" "Вы должны предоставить либо ID, либо короткое имя для доступа к обсуждению" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "Профиль организатора не принадлежит пользователю" @@ -881,7 +881,7 @@ msgid "Error while creating resource" msgstr "При создании ресурса произошла ошибка" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "Неверный токен активации" @@ -891,6 +891,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "Невозможно получить сведения о ресурсе по этому URL-адресу." #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Указанный профиль модератора не имеет доступа к этому событию" diff --git a/priv/gettext/sv/LC_MESSAGES/activity.po b/priv/gettext/sv/LC_MESSAGES/activity.po index 627afa7b..a2db59b8 100644 --- a/priv/gettext/sv/LC_MESSAGES/activity.po +++ b/priv/gettext/sv/LC_MESSAGES/activity.po @@ -12,40 +12,40 @@ msgstr "" "Plural-Forms: nplurals=2\n" #, elixir-format -#: lib/service/activity/renderer/member.ex:43 +#: lib/service/activity/renderer/member.ex:38 #: lib/web/templates/email/activity/_member_activity_item.html.eex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12 msgid "%{member} accepted the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:53 +#: lib/service/activity/renderer/member.ex:42 #: lib/web/templates/email/activity/_member_activity_item.html.eex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17 msgid "%{member} rejected the invitation to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:23 +#: lib/service/activity/renderer/member.ex:30 #: lib/web/templates/email/activity/_member_activity_item.html.eex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1 msgid "%{member} requested to join the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:33 +#: lib/service/activity/renderer/member.ex:34 #: lib/web/templates/email/activity/_member_activity_item.html.eex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6 msgid "%{member} was invited by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:72 +#: lib/service/activity/renderer/member.ex:50 #: lib/web/templates/email/activity/_member_activity_item.html.eex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27 msgid "%{profile} added the member %{member}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:53 -#: lib/service/activity/renderer/post.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.eex:49 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19 lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 +#: lib/service/activity/renderer/comment.ex:72 +#: lib/service/activity/renderer/discussion.ex:53 lib/service/activity/renderer/post.ex:53 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:49 lib/web/templates/email/activity/_comment_activity_item.text.eex:19 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19 msgid "%{profile} archived the discussion %{discussion}." msgstr "" @@ -76,10 +76,10 @@ msgid "%{profile} created the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:63 -#: lib/service/activity/renderer/post.ex:63 lib/web/templates/email/activity/_comment_activity_item.html.eex:64 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:25 lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 +#: lib/service/activity/renderer/comment.ex:82 +#: lib/service/activity/renderer/discussion.ex:63 lib/service/activity/renderer/post.ex:63 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:64 lib/web/templates/email/activity/_comment_activity_item.text.eex:25 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25 msgid "%{profile} deleted the discussion %{discussion}." msgstr "" @@ -96,7 +96,7 @@ msgid "%{profile} deleted the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:92 +#: lib/service/activity/renderer/member.ex:58 #: lib/web/templates/email/activity/_member_activity_item.html.eex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39 msgid "%{profile} excluded member %{member}." msgstr "" @@ -114,16 +114,16 @@ msgid "%{profile} moved the resource %{resource}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:102 +#: lib/service/activity/renderer/member.ex:62 #: lib/web/templates/email/activity/_member_activity_item.html.eex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45 msgid "%{profile} quit the group." msgstr "" #, elixir-format -#: lib/service/activity/renderer/discussion.ex:43 -#: lib/service/activity/renderer/post.ex:43 lib/web/templates/email/activity/_comment_activity_item.html.eex:34 -#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13 lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 -#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 +#: lib/service/activity/renderer/comment.ex:62 +#: lib/service/activity/renderer/discussion.ex:43 lib/service/activity/renderer/post.ex:43 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:34 lib/web/templates/email/activity/_comment_activity_item.text.eex:13 +#: lib/web/templates/email/activity/_discussion_activity_item.html.eex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13 msgid "%{profile} renamed the discussion %{discussion}." msgstr "" @@ -154,7 +154,7 @@ msgid "%{profile} updated the group %{group}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:82 +#: lib/service/activity/renderer/member.ex:54 #: lib/web/templates/email/activity/_member_activity_item.html.eex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33 msgid "%{profile} updated the member %{member}." msgstr "" @@ -196,7 +196,7 @@ msgid "The post %{post} was updated by %{profile}." msgstr "" #, elixir-format -#: lib/service/activity/renderer/member.ex:63 +#: lib/service/activity/renderer/member.ex:46 #: lib/web/templates/email/activity/_member_activity_item.html.eex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22 msgid "%{member} joined the group." msgstr "" @@ -214,14 +214,14 @@ msgid "%{profile} replied to a comment on the event %{event}." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:142 -#: lib/web/templates/email/email_direct_activity.text.eex:21 +#: lib/web/templates/email/email_direct_activity.html.eex:144 +#: lib/web/templates/email/email_direct_activity.text.eex:23 msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings." msgstr "" #, elixir-format -#: lib/web/templates/email/email_direct_activity.html.eex:122 -#: lib/web/templates/email/email_direct_activity.text.eex:17 +#: lib/web/templates/email/email_direct_activity.html.eex:124 +#: lib/web/templates/email/email_direct_activity.text.eex:19 msgid "View one more activity" msgid_plural "View %{count} more activities" msgstr[0] "" @@ -236,6 +236,28 @@ msgstr[0] "" msgstr[1] "" #, elixir-format -#: lib/service/activity/renderer/renderer.ex:28 +#: lib/service/activity/renderer/renderer.ex:38 msgid "Activity on %{instance}" msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:38 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:88 lib/web/templates/email/activity/_comment_activity_item.text.eex:37 +msgid "%{profile} has posted an announcement under event %{event}." +msgstr "" + +#, elixir-format +#: lib/web/templates/email/activity/_comment_activity_item.text.eex:31 +msgid "%{profile} mentionned you in a comment under %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:24 +#: lib/web/templates/email/activity/_comment_activity_item.html.eex:73 +msgid "%{profile} mentionned you in a comment under event %{event}." +msgstr "" + +#, elixir-format, fuzzy +#: lib/service/activity/renderer/comment.ex:52 +msgid "%{profile} mentionned you in the discussion %{discussion}." +msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/default.po b/priv/gettext/sv/LC_MESSAGES/default.po index b7ae50d6..e2f642ea 100644 --- a/priv/gettext/sv/LC_MESSAGES/default.po +++ b/priv/gettext/sv/LC_MESSAGES/default.po @@ -14,132 +14,132 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.6.2\n" -#: lib/web/templates/email/password_reset.html.eex:48 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:48 msgid "If you didn't request this, please ignore this email. Your password won't change until you access the link below and create a new one." msgstr "" "Du kan ignorera det här meddelandet om du inte frågade efter det. Ditt " "lösenord kommer inte ändras förrän du har öppnat länken nedan och skapat ett " "nytt." -#: lib/web/templates/email/report.html.eex:74 #, elixir-format +#: lib/web/templates/email/report.html.eex:74 msgid "%{title} by %{creator}" msgstr "%{title} av %{creator}" -#: lib/web/templates/email/registration_confirmation.html.eex:58 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:58 msgid "Activate my account" msgstr "Aktivera mitt konto" +#, elixir-format #: lib/web/templates/email/email.html.eex:118 #: lib/web/templates/email/email.text.eex:9 -#, elixir-format msgid "Ask the community on Framacolibri" msgstr "Fråga människorna på Framacolibri" -#: lib/web/templates/email/report.text.eex:15 #, elixir-format +#: lib/web/templates/email/report.text.eex:15 msgid "Comments" msgstr "Kommentarer" +#, elixir-format #: lib/web/templates/email/report.html.eex:72 #: lib/web/templates/email/report.text.eex:11 -#, elixir-format msgid "Event" msgstr "Evenemang" -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Instruktioner för att återställa ditt lösenord på %{instance}" -#: lib/web/templates/email/report.text.eex:21 #, elixir-format +#: lib/web/templates/email/report.text.eex:21 msgid "Reason" msgstr "Motivering" -#: lib/web/templates/email/password_reset.html.eex:61 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:61 msgid "Reset Password" msgstr "Återställ lösenordet" -#: lib/web/templates/email/password_reset.html.eex:41 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:41 msgid "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." msgstr "" "Det är enkelt att återställa ditt lösenord, klicka bara på knappen nedan och " "följ instruktionerna. Du kommer vara igång igen på nolltid." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Instruktioner för att bekräfta ditt Mobilizon-konto på %{instance}" -#: lib/web/email/admin.ex:24 #, elixir-format +#: lib/web/email/admin.ex:24 msgid "New report on Mobilizon instance %{instance}" msgstr "Ny anmälan på Mobilizon-instansen %{instance}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:51 #: lib/web/templates/email/before_event_notification.text.eex:4 -#, elixir-format msgid "Go to event page" msgstr "Gå till evenemangets sida" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Ny anmälan från %{reporter} på %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Ditt deltagande har godkänts" +#, elixir-format #: lib/web/templates/email/password_reset.html.eex:13 #: lib/web/templates/email/password_reset.text.eex:1 -#, elixir-format msgid "Password reset" msgstr "Återställ lösenord" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "" "Det är enkelt att återställa ditt lösenord, klicka bara på knappen nedan och " "följ instruktionerna. Du kommer vara igång igen på nolltid." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "" "Du har skapat ett konto på %{host} med den här e-postadressen. Det återstår " "bara ett klick för att aktivera den. Om det inte var du som gjorde det kan " "du strunta i det här meddelandet." -#: lib/web/email/participation.ex:112 #, elixir-format +#: lib/web/email/participation.ex:112 msgid "Your participation to event %{title} has been approved" msgstr "Din förfrågan om att få delta i evenemanget %{title} har godkännts" -#: lib/web/email/participation.ex:70 #, elixir-format +#: lib/web/email/participation.ex:70 msgid "Your participation to event %{title} has been rejected" msgstr "Din förfrågan om att få delta i evenemanget %{title} har fått avslag" -#: lib/web/email/event.ex:37 #, elixir-format +#: lib/web/email/event.ex:37 msgid "Event %{title} has been updated" msgstr "Evenemanget %{title} har uppdaterats" -#: lib/web/templates/email/event_updated.text.eex:15 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:15 msgid "New title: %{title}" msgstr "Ny titel: %{title}" -#: lib/web/templates/email/password_reset.text.eex:5 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:5 msgid "You requested a new password for your account on %{instance}." msgstr "Du har bett om ett nytt lösenord för ditt konto på %{instance}." @@ -148,634 +148,633 @@ msgstr "Du har bett om ett nytt lösenord för ditt konto på %{instance}." msgid "Warning" msgstr "Varning" -#: lib/web/email/participation.ex:135 #, elixir-format +#: lib/web/email/participation.ex:135 msgid "Confirm your participation to event %{title}" msgstr "Bekräfta ditt deltagande i eventet %{title}" -#: lib/web/templates/api/privacy.html.eex:75 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:75 msgctxt "terms" msgid "An internal ID for your current selected identity" msgstr "Ett internt ID för din nuvarande vald identitet" -#: lib/web/templates/api/privacy.html.eex:74 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:74 msgctxt "terms" msgid "An internal user ID" msgstr "Ett internt användar-ID" -#: lib/web/templates/api/privacy.html.eex:37 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:37 msgctxt "terms" msgid "Any of the information we collect from you may be used in the following ways:" msgstr "All information som vi samlar från dig kan användas på följande sätt:" -#: lib/web/templates/api/privacy.html.eex:9 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:9 msgctxt "terms" msgid "Basic account information" msgstr "Grundläggande kontoinformation" -#: lib/web/templates/api/privacy.html.eex:25 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:25 msgctxt "terms" msgid "Do not share any dangerous information over Mobilizon." msgstr "Dela inte farlig information över Mobilizon." -#: lib/web/templates/api/privacy.html.eex:90 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:90 msgctxt "terms" msgid "Do we disclose any information to outside parties?" msgstr "Utlämnar vi någon information till utanståender parter?" -#: lib/web/templates/api/privacy.html.eex:68 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:68 msgctxt "terms" msgid "Do we use cookies?" msgstr "Använder vi kakor?" -#: lib/web/templates/api/privacy.html.eex:51 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:51 msgctxt "terms" msgid "How do we protect your information?" msgstr "Hur skyddar vi din information?" -#: lib/web/templates/api/privacy.html.eex:29 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:29 msgctxt "terms" msgid "IPs and other metadata" msgstr "IP-adresser och andra metadata" -#: lib/web/templates/api/privacy.html.eex:17 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:17 msgctxt "terms" msgid "Published events and comments" msgstr "Publicerade evenemang och kommentarer" -#: lib/web/templates/api/privacy.html.eex:64 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:64 msgctxt "terms" msgid "Retain the IP addresses associated with registered users no more than 12 months." msgstr "" "Behåll inte IP-adresser kopplade till registrerade användare mer än 12 " "månader." -#: lib/web/templates/api/privacy.html.eex:76 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:76 msgctxt "terms" msgid "Tokens to authenticate you" msgstr "Nycklar för att identifiera dig" -#: lib/web/templates/api/privacy.html.eex:31 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:31 msgctxt "terms" msgid "We also may retain server logs which include the IP address of every request to our server." msgstr "" "Vi kan även behålla serverloggar med IP-adress för varje förfrågan till vår " "server." -#: lib/web/templates/api/privacy.html.eex:70 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:70 msgctxt "terms" msgid "We store the following information on your device when you connect:" msgstr "Vi sparar följande information på din enhet när du ansluter:" -#: lib/web/templates/api/privacy.html.eex:58 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:58 msgctxt "terms" msgid "We will make a good faith effort to:" msgstr "" -#: lib/web/templates/api/privacy.html.eex:35 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:35 msgctxt "terms" msgid "What do we use your information for?" msgstr "" -#: lib/web/templates/api/privacy.html.eex:57 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:57 msgctxt "terms" msgid "What is our data retention policy?" msgstr "" -#: lib/web/templates/api/privacy.html.eex:67 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:67 msgctxt "terms" msgid "You may irreversibly delete your account at any time." msgstr "" -#: lib/web/templates/api/privacy.html.eex:115 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:115 msgctxt "terms" msgid "Changes to our Privacy Policy" msgstr "" -#: lib/web/templates/api/privacy.html.eex:106 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:106 msgctxt "terms" msgid "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (General Data Protection Regulation) do not use this site." msgstr "" -#: lib/web/templates/api/privacy.html.eex:109 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:109 msgctxt "terms" msgid "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site." msgstr "" -#: lib/web/templates/api/privacy.html.eex:117 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:117 msgctxt "terms" msgid "If we decide to change our privacy policy, we will post those changes on this page." msgstr "" -#: lib/web/templates/api/privacy.html.eex:112 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:112 msgctxt "terms" msgid "Law requirements can be different if this server is in another jurisdiction." msgstr "" -#: lib/web/templates/api/privacy.html.eex:103 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:103 msgctxt "terms" msgid "Site usage by children" msgstr "" -#: lib/web/templates/api/privacy.html.eex:47 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:47 msgctxt "terms" msgid "The email address you provide may be used to send you information, updates and notifications about other people\n interacting with your content or sending you messages and to respond to inquiries, and/or other requests or\n questions." msgstr "" -#: lib/web/templates/api/privacy.html.eex:45 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:45 msgctxt "terms" msgid "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban\n evasion or other violations." msgstr "" -#: lib/web/templates/api/privacy.html.eex:43 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:43 msgctxt "terms" msgid "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to\n interact with other people's content and post your own content if you are logged in." msgstr "" -#: lib/web/templates/api/privacy.html.eex:6 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:6 msgctxt "terms" msgid "What information do we collect?" msgstr "" -#: lib/web/email/user.ex:176 #, elixir-format +#: lib/web/email/user.ex:176 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon på %{instance}: bekräfta din e-postadress" -#: lib/web/email/user.ex:152 #, elixir-format +#: lib/web/email/user.ex:152 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon på %{instance}: e-postadressen har ändrats" -#: lib/web/email/notification.ex:47 #, elixir-format +#: lib/web/email/notification.ex:47 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Ett evenemang har planerats idag" msgstr[1] "%{nb_events} evenemang har planerats idag" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "Du har ett evenemang idag:" msgstr[1] "Du har %{total} evenemang idag:" -#: lib/web/templates/email/group_invite.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_invite.text.eex:3 msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} bjöd nyss in dig till sin grupp %{group}" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "Häng på!" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "Glöm inte att gå till %{title}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Gör dig redo för %{title}" -#: lib/web/templates/email/group_invite.html.eex:59 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:59 msgid "See my groups" msgstr "Visa mina grupper" +#, elixir-format #: lib/web/templates/email/group_invite.html.eex:45 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Gå till dina grupper för att acceptera den här inbjudan." -#: lib/web/templates/email/before_event_notification.text.eex:5 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:5 msgid "View the event on: %{link}" msgstr "Visa det uppdaterade evenemanget på %{link}" -#: lib/web/email/group.ex:33 #, elixir-format +#: lib/web/email/group.ex:33 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{inviter} har bjudit in dig till gruppen %{group}" -#: lib/web/email/notification.ex:71 #, elixir-format +#: lib/web/email/notification.ex:71 msgid "One event planned this week" msgid_plural "%{nb_events} events planned this week" msgstr[0] "" msgstr[1] "" -#: lib/web/email/notification.ex:93 #, elixir-format +#: lib/web/email/notification.ex:93 msgid "One participation request for event %{title} to process" msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" msgstr[0] "" msgstr[1] "" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:38 #: lib/web/templates/email/notification_each_week.text.eex:3 -#, elixir-format msgid "You have one event this week:" msgid_plural "You have %{total} events this week:" msgstr[0] "" msgstr[1] "" -#: lib/service/metadata/utils.ex:52 #, elixir-format +#: lib/service/metadata/utils.ex:52 msgid "The event organizer didn't add any description." msgstr "" -#: lib/web/templates/api/privacy.html.eex:54 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:54 msgctxt "terms" msgid "We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way algorithm." msgstr "" -#: lib/web/templates/api/privacy.html.eex:94 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:94 msgctxt "terms" msgid "No. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety." msgstr "" -#: lib/web/templates/api/terms.html.eex:23 #, elixir-format +#: lib/web/templates/api/terms.html.eex:23 msgctxt "terms" msgid "Accepting these Terms" msgstr "" -#: lib/web/templates/api/terms.html.eex:27 #, elixir-format +#: lib/web/templates/api/terms.html.eex:27 msgctxt "terms" msgid "Changes to these Terms" msgstr "" -#: lib/web/templates/api/terms.html.eex:85 #, elixir-format +#: lib/web/templates/api/terms.html.eex:85 msgctxt "terms" msgid "A lot of the content on the Service is from you and others, and we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content." msgstr "" -#: lib/web/templates/api/terms.html.eex:60 #, elixir-format +#: lib/web/templates/api/terms.html.eex:60 msgctxt "terms" msgid "Also, you agree that you will not do any of the following in connection with the Service or other users:" msgstr "" -#: lib/web/templates/api/terms.html.eex:65 #, elixir-format +#: lib/web/templates/api/terms.html.eex:65 msgctxt "terms" msgid "Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties." msgstr "" -#: lib/web/templates/api/terms.html.eex:64 #, elixir-format +#: lib/web/templates/api/terms.html.eex:64 msgctxt "terms" msgid "Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service;" msgstr "" -#: lib/web/templates/api/terms.html.eex:55 #, elixir-format +#: lib/web/templates/api/terms.html.eex:55 msgctxt "terms" msgid "Content that is illegal or unlawful, that would otherwise create liability;" msgstr "" -#: lib/web/templates/api/terms.html.eex:56 #, elixir-format +#: lib/web/templates/api/terms.html.eex:56 msgctxt "terms" msgid "Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party;" msgstr "" -#: lib/web/templates/api/terms.html.eex:42 #, elixir-format +#: lib/web/templates/api/terms.html.eex:42 msgctxt "terms" msgid "Creating Accounts" msgstr "" -#: lib/web/templates/api/terms.html.eex:89 #, elixir-format +#: lib/web/templates/api/terms.html.eex:89 msgctxt "terms" msgid "Entire Agreement" msgstr "" -#: lib/web/templates/api/terms.html.eex:92 #, elixir-format +#: lib/web/templates/api/terms.html.eex:92 msgctxt "terms" msgid "Feedback" msgstr "" -#: lib/web/templates/api/terms.html.eex:83 #, elixir-format +#: lib/web/templates/api/terms.html.eex:83 msgctxt "terms" msgid "Hyperlinks and Third Party Content" msgstr "" -#: lib/web/templates/api/terms.html.eex:88 #, elixir-format +#: lib/web/templates/api/terms.html.eex:88 msgctxt "terms" msgid "If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service." msgstr "" -#: lib/web/templates/api/terms.html.eex:63 #, elixir-format +#: lib/web/templates/api/terms.html.eex:63 msgctxt "terms" msgid "Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity;" msgstr "" -#: lib/web/templates/api/terms.html.eex:48 #, elixir-format +#: lib/web/templates/api/terms.html.eex:48 msgctxt "terms" msgid "Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness." msgstr "" -#: lib/web/templates/api/terms.html.eex:39 #, elixir-format +#: lib/web/templates/api/terms.html.eex:39 msgctxt "terms" msgid "Privacy Policy" msgstr "" -#: lib/web/templates/api/terms.html.eex:95 #, elixir-format +#: lib/web/templates/api/terms.html.eex:95 msgctxt "terms" msgid "Questions & Contact Information" msgstr "" -#: lib/web/templates/api/terms.html.eex:87 #, elixir-format +#: lib/web/templates/api/terms.html.eex:87 msgctxt "terms" msgid "Termination" msgstr "" -#: lib/web/templates/api/terms.html.eex:62 #, elixir-format +#: lib/web/templates/api/terms.html.eex:62 msgctxt "terms" msgid "Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service;" msgstr "" -#: lib/web/templates/api/terms.html.eex:47 #, elixir-format +#: lib/web/templates/api/terms.html.eex:47 msgctxt "terms" msgid "Your Content & Conduct" msgstr "" -#: lib/web/templates/api/terms.html.eex:84 #, elixir-format +#: lib/web/templates/api/terms.html.eex:84 msgctxt "terms" msgid "%{instance_name} makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by %{instance_name} of the site. Use of any such linked website is at the user's own risk." msgstr "" -#: lib/web/templates/api/terms.html.eex:68 #, elixir-format +#: lib/web/templates/api/terms.html.eex:68 msgctxt "terms" msgid "Finally, your use of the Service is also subject to acceptance of the instance's own specific rules regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended." msgstr "" -#: lib/web/templates/api/terms.html.eex:81 #, elixir-format +#: lib/web/templates/api/terms.html.eex:81 msgctxt "terms" msgid "For full details about the Mobilizon software see here." msgstr "" -#: lib/web/templates/api/terms.html.eex:18 #, elixir-format +#: lib/web/templates/api/terms.html.eex:18 msgctxt "terms" msgid "Here are the important things you need to know about accessing and using the %{instance_name} (%{instance_url}) website and service (collectively, \"Service\"). These are our terms of service (\"Terms\"). Please read them carefully." msgstr "" -#: lib/web/templates/api/terms.html.eex:33 #, elixir-format +#: lib/web/templates/api/terms.html.eex:33 msgctxt "terms" msgid "If we make major changes, we will notify our users in a clear and prominent manner. Minor changes may only be highlighted in the footer of our website. It is your responsibility to check the website regularly for changes to these Terms." msgstr "" -#: lib/web/templates/api/terms.html.eex:53 #, elixir-format +#: lib/web/templates/api/terms.html.eex:53 msgctxt "terms" msgid "In order to make %{instance_name} a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:" msgstr "" -#: lib/web/templates/api/terms.html.eex:57 #, elixir-format +#: lib/web/templates/api/terms.html.eex:57 msgctxt "terms" msgid "Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and" msgstr "" -#: lib/web/templates/api/terms.html.eex:52 #, elixir-format +#: lib/web/templates/api/terms.html.eex:52 msgctxt "terms" msgid "Since Mobilizon is a distributed network, it is possible, depending on the visibility rules set to your content, that your content has been distributed to other Mobilizon instances. When you delete your content, we will request those other instances to also delete the content. Our responsibility on the content being deleted from those other instances ends here. If for some reason, some other instance does not delete the content, we cannot be held responsible." msgstr "" -#: lib/web/templates/api/terms.html.eex:90 #, elixir-format +#: lib/web/templates/api/terms.html.eex:90 msgctxt "terms" msgid "These Terms constitute the entire agreement between you and %{instance_name} regarding the use of the Service, superseding any prior agreements between you and %{instance_name} relating to your use of the Service." msgstr "" -#: lib/web/templates/api/terms.html.eex:80 #, elixir-format +#: lib/web/templates/api/terms.html.eex:80 msgctxt "terms" msgid "This Service runs on a Mobilizon instance. This source code is licensed under an AGPLv3 license which means you are allowed to and even encouraged to take the source code, modify it and use it." msgstr "" -#: lib/web/templates/api/terms.html.eex:58 #, elixir-format +#: lib/web/templates/api/terms.html.eex:58 msgctxt "terms" msgid "Viruses, corrupted data or other harmful, disruptive or destructive files or code." msgstr "" -#: lib/web/templates/api/terms.html.eex:51 #, elixir-format +#: lib/web/templates/api/terms.html.eex:51 msgctxt "terms" msgid "You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. Web server access logs might also be stored for some time in the system." msgstr "" -#: lib/web/templates/api/terms.html.eex:96 #, elixir-format +#: lib/web/templates/api/terms.html.eex:96 msgctxt "terms" msgid "Questions or comments about the Service may be directed to us at %{contact}" msgstr "" -#: lib/web/templates/api/terms.html.eex:79 #, elixir-format +#: lib/web/templates/api/terms.html.eex:79 msgctxt "terms" msgid "Source code" msgstr "" -#: lib/web/templates/api/terms.html.eex:93 #, elixir-format +#: lib/web/templates/api/terms.html.eex:93 msgctxt "terms" msgid "We love feedback. Please let us know what you think of the Service, these Terms and, in general, %{instance_name}." msgstr "" -#: lib/web/templates/api/terms.html.eex:74 #, elixir-format +#: lib/web/templates/api/terms.html.eex:74 msgctxt "terms" msgid "Instance administrators (and community moderators, given the relevant access) are responsible for monitoring and acting on flagged content and other user reports, and have the right and responsibility to remove or edit content that is not aligned to this Instance set of rules, or to suspend, block or ban (temporarily or permanently) any account, community, or instance for breaking these terms, or for other behaviours that they deem inappropriate, threatening, offensive, or harmful." msgstr "" -#: lib/web/templates/api/terms.html.eex:6 #, elixir-format +#: lib/web/templates/api/terms.html.eex:6 msgctxt "terms" msgid "%{instance_name} will not use or transmit or resell your personal data" msgstr "" -#: lib/web/templates/api/terms.html.eex:44 #, elixir-format +#: lib/web/templates/api/terms.html.eex:44 msgctxt "terms" msgid "If you discover or suspect any Service security breaches, please let us know as soon as possible. For security holes in the Mobilizon software itself, please contact its contributors directly." msgstr "" -#: lib/web/templates/api/terms.html.eex:77 #, elixir-format +#: lib/web/templates/api/terms.html.eex:77 msgctxt "terms" msgid "Instance administrators should ensure that every community hosted on the instance is properly moderated according to the defined rules." msgstr "" -#: lib/web/templates/api/terms.html.eex:98 #, elixir-format +#: lib/web/templates/api/terms.html.eex:98 msgctxt "terms" msgid "Originally adapted from the Diaspora* and App.net privacy policies, also licensed under CC BY-SA." msgstr "" -#: lib/web/templates/api/privacy.html.eex:119 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:119 msgctxt "terms" msgid "Originally adapted from the Mastodon and Discourse privacy policies, also licensed under CC BY-SA." msgstr "" -#: lib/web/templates/api/terms.html.eex:3 #, elixir-format +#: lib/web/templates/api/terms.html.eex:3 msgctxt "terms" msgid "Short version" msgstr "" -#: lib/web/templates/api/terms.html.eex:9 #, elixir-format +#: lib/web/templates/api/terms.html.eex:9 msgctxt "terms" msgid "The service is provided without warranties and these terms may change in the future" msgstr "" -#: lib/web/templates/api/privacy.html.eex:118 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:118 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 18, 2020." msgstr "" -#: lib/web/templates/api/terms.html.eex:97 #, elixir-format +#: lib/web/templates/api/terms.html.eex:97 msgctxt "terms" msgid "This document is licensed under CC BY-SA. It was last updated June 22, 2020." msgstr "" -#: lib/web/templates/api/terms.html.eex:8 #, elixir-format +#: lib/web/templates/api/terms.html.eex:8 msgctxt "terms" msgid "You must respect other people and %{instance_name}'s rules when using the service" msgstr "" -#: lib/web/templates/api/terms.html.eex:7 #, elixir-format +#: lib/web/templates/api/terms.html.eex:7 msgctxt "terms" msgid "You must respect the law when using %{instance_name}" msgstr "" -#: lib/web/templates/api/terms.html.eex:5 #, elixir-format +#: lib/web/templates/api/terms.html.eex:5 msgctxt "terms" msgid "Your content is yours" msgstr "" -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:51 msgid "Confirm my e-mail address" msgstr "" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Confirm your e-mail" msgstr "" -#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" #, elixir-format #: lib/web/templates/email/email.html.eex:115 #: lib/web/templates/email/email.text.eex:8 -#, elixir-format msgid "Need help? Is something not working as expected?" msgstr "Behöver du hjälp? Är det något som krånglar?" -#: lib/web/templates/email/registration_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.eex:38 msgid "You created an account on %{host} with this email address. You are one click away from activating it." msgstr "" "Du har skapat ett konto på %{host} med den här e-postadressen. Nu " "återstår bara ett klick för att aktivera det." -#: lib/web/templates/email/report.html.eex:13 #, elixir-format +#: lib/web/templates/email/report.html.eex:13 msgid "New report on %{instance}" msgstr "Ny anmälan på %{instance}" -#: lib/web/templates/email/email_changed_old.html.eex:38 #, elixir-format +#: lib/web/templates/email/email_changed_old.html.eex:38 msgid "The email address for your account on %{host} is being changed to:" msgstr "" -#: lib/web/templates/email/password_reset.html.eex:38 #, elixir-format +#: lib/web/templates/email/password_reset.html.eex:38 msgid "You requested a new password for your account on %{instance}." msgstr "Du har bett om ett nytt lösenord för ditt konto på %{instance}." -#: lib/web/templates/email/email.text.eex:5 #, elixir-format +#: lib/web/templates/email/email.text.eex:5 msgid "Please do not use it for real purposes." msgstr "" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:63 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:6 lib/web/templates/email/event_updated.html.eex:133 #: lib/web/templates/email/event_updated.text.eex:24 lib/web/templates/email/notification_each_week.html.eex:70 #: lib/web/templates/email/notification_each_week.text.eex:11 lib/web/templates/email/on_day_notification.html.eex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 -#, elixir-format msgid "Would you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button." msgstr[0] "" @@ -785,16 +784,16 @@ msgstr[1] "" "Om du behöver lämna återbud är det bara att gå till evenemangens sidor, via " "länkarna ovan, och klicka på deltagande-knappen." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:38 #: lib/web/templates/email/pending_participation_notification.text.eex:4 -#, elixir-format msgid "You have one pending attendance request to process:" msgid_plural "You have %{number_participation_requests} attendance requests to process:" msgstr[0] "" msgstr[1] "" -#: lib/web/templates/email/email.text.eex:11 #, elixir-format +#: lib/web/templates/email/email.text.eex:11 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} är en Mobilizon-server." @@ -803,83 +802,83 @@ msgstr "%{instance} är en Mobilizon-server." msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} är en Mobilizon-server." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:13 #: lib/web/templates/email/pending_participation_notification.text.eex:1 -#, elixir-format msgid "A request is pending!" msgstr "" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "An event is upcoming!" msgstr "" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:13 #: lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Confirm new email" msgstr "" -#: lib/web/templates/email/event_updated.html.eex:84 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:84 msgid "End" msgstr "" -#: lib/web/templates/email/event_updated.text.eex:21 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:21 msgid "End %{ends_on}" msgstr "" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event update!" msgstr "Evenemang uppdaterat!" -#: lib/web/templates/email/report.html.eex:88 #, elixir-format +#: lib/web/templates/email/report.html.eex:88 msgid "Flagged comments" msgstr "" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "Good news: one of the event organizers just approved your request. Update your calendar, because you're on the guest list now!" msgstr "" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:38 #: lib/web/templates/email/email_changed_new.text.eex:3 -#, elixir-format msgid "Hi there! It seems like you wanted to change the email address linked to your account on %{instance}. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address." msgstr "" -#: lib/web/templates/email/email_changed_old.text.eex:3 #, elixir-format +#: lib/web/templates/email/email_changed_old.text.eex:3 msgid "Hi there! Just a quick note to confirm that the email address linked to your account on %{host} has been changed from this one to:" msgstr "" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:62 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "If you did not trigger this change yourself, it is likely that someone has gained access to your %{host} account. Please log in and change your password immediately. If you cannot login, contact the admin on %{host}." msgstr "" -#: lib/web/templates/email/password_reset.text.eex:12 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:12 msgid "If you didn't trigger the change yourself, please ignore this message. Your password won't be changed until you click the link above." msgstr "" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.eex:70 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:4 lib/web/templates/email/registration_confirmation.html.eex:45 -#, elixir-format msgid "If you didn't trigger this email, you may safely ignore it." msgstr "" "Du kan strunta i det här meddelandet om det inte var du frågade efter det." +#, elixir-format #: lib/web/templates/email/before_event_notification.html.eex:63 #: lib/web/templates/email/before_event_notification.text.eex:6 -#, elixir-format msgid "If you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgstr "" "Om du behöver lämna återbud är det bara att gå till evenemangets sida, på " @@ -888,169 +887,168 @@ msgstr "" #, elixir-format #: lib/web/templates/email/email.html.eex:144 #: lib/web/templates/email/email.text.eex:11 -#, elixir-format msgid "Learn more about Mobilizon here!" msgstr "Läs mer om Mobilizon här!" -#: lib/web/templates/email/event_updated.html.eex:94 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:94 msgid "Location" msgstr "" -#: lib/web/templates/email/event_updated.html.eex:104 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:104 msgid "Location address was removed" msgstr "" +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:51 #: lib/web/templates/email/pending_participation_notification.text.eex:6 -#, elixir-format msgid "Manage pending requests" msgstr "" +#, elixir-format #: lib/web/templates/email/registration_confirmation.html.eex:13 #: lib/web/templates/email/registration_confirmation.text.eex:1 -#, elixir-format msgid "Nearly there!" msgstr "Snart framme!" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.eex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email confirmation" msgstr "" -#: lib/web/templates/email/report.html.eex:106 #, elixir-format +#: lib/web/templates/email/report.html.eex:106 msgid "Reasons for report" msgstr "" -#: lib/web/templates/email/report.html.eex:39 #, elixir-format +#: lib/web/templates/email/report.html.eex:39 msgid "Someone on %{instance} reported the following content for you to analyze:" msgstr "" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:13 #: lib/web/templates/email/event_participation_rejected.text.eex:1 -#, elixir-format msgid "Sorry! You're not going." msgstr "" -#: lib/web/templates/email/event_updated.html.eex:74 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:74 msgid "Start" msgstr "" -#: lib/web/templates/email/event_updated.text.eex:18 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:18 msgid "Start %{begins_on}" msgstr "" -#: lib/web/templates/email/event_updated.text.eex:3 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:3 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:55 #: lib/web/templates/email/event_updated.text.eex:11 -#, elixir-format msgid "This event has been cancelled by its organizers. Sorry!" msgstr "" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:51 #: lib/web/templates/email/event_updated.text.eex:7 -#, elixir-format msgid "This event has been confirmed" msgstr "" +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:53 #: lib/web/templates/email/event_updated.text.eex:9 -#, elixir-format msgid "This event has yet to be confirmed: organizers will let you know if they do confirm it." msgstr "" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.eex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your request." msgstr "Organisatörerna har tyvärr gjort avslag på ditt deltagande." -#: lib/web/templates/email/email_changed_new.html.eex:51 #, elixir-format +#: lib/web/templates/email/email_changed_new.html.eex:51 msgid "Verify your email address" msgstr "" -#: lib/web/templates/email/report.html.eex:126 #, elixir-format +#: lib/web/templates/email/report.html.eex:126 msgid "View report" msgstr "Visa anmälan" -#: lib/web/templates/email/report.text.eex:24 #, elixir-format +#: lib/web/templates/email/report.text.eex:24 msgid "View report:" msgstr "Visa anmälan:" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:58 #: lib/web/templates/email/event_participation_confirmed.html.eex:58 -#, elixir-format msgid "Visit event page" msgstr "" -#: lib/web/templates/email/event_updated.html.eex:121 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:121 msgid "Visit the updated event page" msgstr "" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "Visit the updated event page: %{link}" msgstr "Visa det uppdaterade evenemanget på %{link}" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.eex:13 #: lib/web/templates/email/notification_each_week.text.eex:1 -#, elixir-format msgid "What's up this week?" msgstr "" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.eex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "What's up today?" msgstr "" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:70 #: lib/web/templates/email/event_participation_approved.text.eex:11 lib/web/templates/email/event_participation_confirmed.html.eex:70 #: lib/web/templates/email/event_participation_confirmed.text.eex:6 -#, elixir-format msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button." msgstr "" +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.eex:64 #: lib/web/templates/email/pending_participation_notification.text.eex:8 -#, elixir-format msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »." msgstr "" -#: lib/web/templates/email/event_participation_rejected.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:5 msgid "You issued a request to attend %{title}." msgstr "" +#, elixir-format #: lib/web/templates/email/event_participation_approved.text.eex:5 #: lib/web/templates/email/event_participation_confirmed.text.eex:3 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Du har bett om att få delta i evenemanget %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:13 #: lib/web/templates/email/event_participation_confirmed.html.eex:13 lib/web/templates/email/event_participation_confirmed.text.eex:1 -#, elixir-format msgid "You're going!" msgstr "" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.eex:64 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" @@ -1059,380 +1057,379 @@ msgstr "" msgid "Please do not use it for real purposes." msgstr "" +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:45 #: lib/web/templates/email/group_member_removal.text.eex:5 -#, elixir-format msgid "If you feel this is an error, you may contact the group's administrators so that they can add you back." msgstr "" +#, elixir-format #: lib/web/templates/email/group_member_removal.html.eex:13 #: lib/web/templates/email/group_member_removal.text.eex:1 -#, elixir-format msgid "So long, and thanks for the fish!" msgstr "" -#: lib/web/email/group.ex:63 #, elixir-format +#: lib/web/email/group.ex:63 msgid "You have been removed from group %{group}" msgstr "" -#: lib/web/templates/email/group_member_removal.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_member_removal.text.eex:3 msgid "You have been removed from group %{group}. You will not be able to access this group's private content anymore." msgstr "" -#: lib/web/templates/email/group_invite.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_invite.html.eex:38 msgid "%{inviter} just invited you to join their group %{link_start}%{group}%{link_end}" msgstr "" -#: lib/web/templates/email/group_member_removal.html.eex:38 #, elixir-format +#: lib/web/templates/email/group_member_removal.html.eex:38 msgid "You have been removed from group %{link_start}%{group}%{link_end}. You will not be able to access this group's private content anymore." msgstr "" +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:54 #: lib/web/templates/email/group_suspension.text.eex:7 -#, elixir-format msgid "As this group was located on another instance, it will continue to work for other instances than this one." msgstr "" +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:46 #: lib/web/templates/email/group_suspension.text.eex:5 -#, elixir-format msgid "As this group was located on this instance, all of it's data has been irretrievably deleted." msgstr "" +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:38 #: lib/web/templates/email/group_deletion.text.eex:3 -#, elixir-format msgid "The administrator %{author} deleted group %{group}. All of the group's events, discussions, posts and todos have been deleted." msgstr "" +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:13 #: lib/web/templates/email/group_suspension.text.eex:1 -#, elixir-format msgid "The group %{group} has been suspended on %{instance}!" msgstr "" +#, elixir-format #: lib/web/templates/email/group_deletion.html.eex:13 #: lib/web/templates/email/group_deletion.text.eex:1 -#, elixir-format msgid "The group %{group} was deleted on %{instance}!" msgstr "" +#, elixir-format #: lib/web/templates/email/group_suspension.html.eex:38 #: lib/web/templates/email/group_suspension.text.eex:3 -#, elixir-format msgid "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group." msgstr "" -#: lib/web/email/group.ex:136 #, elixir-format +#: lib/web/email/group.ex:136 msgid "The group %{group} has been deleted on %{instance}" msgstr "" -#: lib/web/email/group.ex:97 #, elixir-format +#: lib/web/email/group.ex:97 msgid "The group %{group} has been suspended on %{instance}" msgstr "" -#: lib/web/templates/api/terms.html.eex:24 #, elixir-format +#: lib/web/templates/api/terms.html.eex:24 msgctxt "terms" msgid "By accessing or using the Service, this means you agree to be bound by all the terms below. If these terms are in any way unclear, please let us know by contacting %{contact}." msgstr "" -#: lib/web/templates/api/terms.html.eex:40 #, elixir-format +#: lib/web/templates/api/terms.html.eex:40 msgctxt "terms" msgid "For information about how we collect and use information about users of the Service, please check our privacy policy." msgstr "" -#: lib/web/templates/api/terms.html.eex:36 #, elixir-format +#: lib/web/templates/api/terms.html.eex:36 msgctxt "terms" msgid "If you continue to use the Service after the revised Terms go into effect, you accept the revised Terms." msgstr "" -#: lib/web/templates/api/privacy.html.eex:78 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:78 msgctxt "terms" msgid "If you delete this information, you need to login again." msgstr "" -#: lib/web/templates/api/privacy.html.eex:80 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:80 msgctxt "terms" msgid "If you're not connected, we don't store any information on your device, unless you participate in an event anonymously. In this specific case we store the hash of an unique identifier for the event and participation status in your browser so that we may display participation status. Deleting this information will only stop displaying participation status in your browser." msgstr "" -#: lib/web/templates/api/privacy.html.eex:87 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:87 msgctxt "terms" msgid "Note: This information is stored in your localStorage and not your cookies." msgstr "" -#: lib/web/templates/api/terms.html.eex:71 #, elixir-format +#: lib/web/templates/api/terms.html.eex:71 msgctxt "terms" msgid "Our responsibility" msgstr "" -#: lib/web/templates/api/privacy.html.eex:61 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:61 msgctxt "terms" msgid "Retain server logs containing the IP address of all requests to this server, insofar as such logs are kept, no more than 90 days." msgstr "" +#, elixir-format #: lib/web/templates/api/privacy.html.eex:3 #: lib/web/templates/api/terms.html.eex:15 -#, elixir-format msgctxt "terms" msgid "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We have provided a glossary to help you understand them better." msgstr "" -#: lib/web/templates/api/terms.html.eex:45 #, elixir-format +#: lib/web/templates/api/terms.html.eex:45 msgctxt "terms" msgid "We are not liable for any loss you may incur as a result of someone else using your email or password, either with or without your knowledge." msgstr "" -#: lib/web/templates/api/terms.html.eex:50 #, elixir-format +#: lib/web/templates/api/terms.html.eex:50 msgctxt "terms" msgid "We cannot be held responsible should a programming or administrative error make your content visible to a larger audience than intended. Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service." msgstr "" -#: lib/web/templates/api/privacy.html.eex:10 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:10 msgctxt "terms" msgid "We collect information from you when you register on this instance and gather data when you participate in the platform by reading, writing, and interacting with content shared here. If you register on this instance, you will be asked to enter an email address, a password (hashed) and at least an username. Your email address will be verified by an email containing a unique link. Once the link is activated, we know you control that email address. You may also enter additional profile information such as a display name and biography, and upload a profile picture and header image. The username, display name, biography, profile picture and header image are always listed publicly. You may however visit this instance without registering." msgstr "" -#: lib/web/templates/api/terms.html.eex:30 #, elixir-format +#: lib/web/templates/api/terms.html.eex:30 msgctxt "terms" msgid "We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature." msgstr "" -#: lib/web/templates/api/terms.html.eex:20 #, elixir-format +#: lib/web/templates/api/terms.html.eex:20 msgctxt "terms" msgid "When we say “we”, “our”, or “us” in this document, we are referring to the owners, operators and administrators of this Mobilizon instance. The Mobilizon software is provided by the team of Mobilizon contributors, supported by Framasoft, a French not-for-profit organization advocating for Free/Libre Software. Unless explicitly stated, this Mobilizon instance is an independent service using Mobilizon's source code. You may find more information about this instance on the \"About this instance\" page." msgstr "" -#: lib/web/templates/api/terms.html.eex:43 #, elixir-format +#: lib/web/templates/api/terms.html.eex:43 msgctxt "terms" msgid "When you create an account you agree to maintain the security and confidentiality of your password and accept all risks of unauthorized access to your account data and any other information you provide to %{instance_name}." msgstr "" -#: lib/web/templates/api/terms.html.eex:49 #, elixir-format +#: lib/web/templates/api/terms.html.eex:49 msgctxt "terms" msgid "When you post, link or otherwise make available content to the Service, you grant us the right and license to display and distribute your content on or through the Service (including via applications). We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. The displaying and distribution of your content happens only according to the visibility rules you have set for the content. We will not modify the visibility of the content you have set." msgstr "" -#: lib/web/templates/api/privacy.html.eex:19 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:19 msgctxt "terms" msgid "Your events and comments are delivered to other instances that follow your own, meaning they are delivered to different instances and copies are stored there. When you delete events or comments, this is likewise delivered to these other instances. All interactions related to event features - such as joining an event - or group features - such as managing resources - are federated as well. Please keep in mind that the operators of the instance and any receiving instances may view such messages and information, and that recipients may screenshot, copy or otherwise re-share them." msgstr "" -#: lib/web/templates/api/privacy.html.eex:99 #, elixir-format +#: lib/web/templates/api/privacy.html.eex:99 msgctxt "terms" msgid "Your content may be downloaded by other instances in the network. Your public events and comments are delivered to the instances following your own instance. Content created through a group is forwarded to all the instances of all the members of the group, insofar as these members reside on a different instance than this one." msgstr "" -#: lib/web/templates/email/event_participation_confirmed.text.eex:4 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.text.eex:4 msgid "You have confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.eex:38 #: lib/web/templates/email/event_participation_confirmed.html.eex:38 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Du har bett om att få delta i evenemanget %{title}." -#: lib/web/email/participation.ex:91 #, elixir-format +#: lib/web/email/participation.ex:91 msgid "Your participation to event %{title} has been confirmed" msgstr "Din förfrågan om att få delta i evenemanget %{title} har godkännts" -#: lib/web/templates/email/report.html.eex:41 #, elixir-format +#: lib/web/templates/email/report.html.eex:41 msgid "%{reporter} reported the following content." msgstr "" "%{reporter_name} (%{reporter_username}) har anmält följande innehåll." -#: lib/web/templates/email/report.text.eex:5 #, elixir-format +#: lib/web/templates/email/report.text.eex:5 msgid "Group %{group} was reported" msgstr "" -#: lib/web/templates/email/report.html.eex:51 #, elixir-format +#: lib/web/templates/email/report.html.eex:51 msgid "Group reported" msgstr "" -#: lib/web/templates/email/report.text.eex:7 #, elixir-format +#: lib/web/templates/email/report.text.eex:7 msgid "Profile %{profile} was reported" msgstr "" -#: lib/web/templates/email/report.html.eex:56 #, elixir-format +#: lib/web/templates/email/report.html.eex:56 msgid "Profile reported" msgstr "" -#: lib/web/templates/email/event_participation_confirmed.html.eex:45 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.html.eex:45 msgid "You have now confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" -#: lib/mobilizon/posts/post.ex:94 #, elixir-format +#: lib/mobilizon/posts/post.ex:94 msgid "A text is required for the post" msgstr "" -#: lib/mobilizon/posts/post.ex:93 #, elixir-format +#: lib/mobilizon/posts/post.ex:93 msgid "A title is required for the post" msgstr "" -#: lib/web/templates/email/instance_follow.text.eex:3 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:3 msgid "%{name} (%{domain}) just requested to follow your instance." msgstr "" -#: lib/web/email/follow.ex:54 #, elixir-format +#: lib/web/email/follow.ex:54 msgid "%{name} requests to follow your instance" msgstr "" -#: lib/web/templates/email/instance_follow.html.eex:38 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:38 msgid "%{name} (%{domain}) just requested to follow your instance. If you accept, this instance will receive all of your instance's public events." msgstr "" -#: lib/web/templates/email/instance_follow.text.eex:4 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:4 msgid "If you accept, this instance will receive all of your public events." msgstr "" -#: lib/web/email/follow.ex:48 #, elixir-format +#: lib/web/email/follow.ex:48 msgid "Instance %{name} (%{domain}) requests to follow your instance" msgstr "" -#: lib/web/templates/email/instance_follow.html.eex:66 #, elixir-format +#: lib/web/templates/email/instance_follow.html.eex:66 msgid "See the federation settings" msgstr "" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:52 #: lib/web/templates/email/instance_follow.text.eex:6 -#, elixir-format msgid "To accept this invitation, head over to the instance's admin settings." msgstr "Gå till dina grupper för att acceptera den här inbjudan." +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:13 #: lib/web/templates/email/instance_follow.text.eex:1 -#, elixir-format msgid "Want to connect?" msgstr "" +#, elixir-format #: lib/web/templates/email/instance_follow.html.eex:45 #: lib/web/templates/email/instance_follow.text.eex:5 -#, elixir-format msgid "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." msgstr "" -#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.eex:38 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" -#: lib/web/templates/email/event_participation_rejected.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.html.eex:38 msgid "You issued a request to attend %{title}." msgstr "" -#: lib/web/templates/email/event_updated.html.eex:64 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Evenemangets titel" -#: lib/web/templates/email/event_updated.html.eex:38 #, elixir-format +#: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "Det har skett ändringar kring %{title} som vi misstänker att du vill " "känna till." -#: lib/web/templates/error/500_page.html.eex:7 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 msgid "This page is not correct" msgstr "" -#: lib/web/templates/error/500_page.html.eex:50 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:50 msgid "We're sorry, but something went wrong on our end." msgstr "" #, elixir-format #: lib/web/templates/email/email.html.eex:89 #: lib/web/templates/email/email.text.eex:4 -#, elixir-format msgid "This is a demonstration site to test Mobilizon." msgstr "" "Detta är en webbplats för att visa upp och testa beta-versionen av Mobilizon." +#, elixir-format #: lib/service/metadata/actor.ex:53 lib/service/metadata/actor.ex:60 #: lib/service/metadata/instance.ex:54 lib/service/metadata/instance.ex:60 -#, elixir-format msgid "%{name}'s feed" msgstr "" -#: lib/service/export/feed.ex:120 #, elixir-format +#: lib/service/export/feed.ex:120 msgid "%{actor}'s private events feed on %{instance}" msgstr "" -#: lib/service/export/feed.ex:115 #, elixir-format +#: lib/service/export/feed.ex:115 msgid "%{actor}'s public events feed on %{instance}" msgstr "" -#: lib/service/export/feed.ex:220 #, elixir-format +#: lib/service/export/feed.ex:220 msgid "Feed for %{email} on %{instance}" msgstr "" -#: lib/web/templates/error/500_page.html.eex:57 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:57 msgid "If the issue persists, you may contact the server administrator at %{contact}." msgstr "" -#: lib/web/templates/error/500_page.html.eex:55 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:55 msgid "If the issue persists, you may try to contact the server administrator." msgstr "" -#: lib/web/templates/error/500_page.html.eex:68 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:68 msgid "Technical details" msgstr "" -#: lib/web/templates/error/500_page.html.eex:52 #, elixir-format +#: lib/web/templates/error/500_page.html.eex:52 msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" -#: lib/service/export/feed.ex:73 #, elixir-format +#: lib/service/export/feed.ex:73 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/errors.po b/priv/gettext/sv/LC_MESSAGES/errors.po index 9b9c6db7..e2a2b088 100644 --- a/priv/gettext/sv/LC_MESSAGES/errors.po +++ b/priv/gettext/sv/LC_MESSAGES/errors.po @@ -110,7 +110,7 @@ msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:501 +#: lib/graphql/resolvers/user.ex:523 msgid "Error while saving user settings" msgstr "Ett fel uppstod när användarinställningarna skulle sparas" @@ -136,18 +136,18 @@ msgid "Member not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88 -#: lib/graphql/resolvers/user.ex:406 +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/user.ex:428 msgid "No profile found for the moderator user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:193 +#: lib/graphql/resolvers/user.ex:215 msgid "No user to validate with this email was found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:218 +#: lib/graphql/resolvers/person.ex:254 lib/graphql/resolvers/user.ex:240 msgid "No user with this email was found" msgstr "" @@ -155,49 +155,49 @@ msgstr "" #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:28 lib/graphql/resolvers/participant.ex:159 #: lib/graphql/resolvers/participant.ex:188 lib/graphql/resolvers/person.ex:165 lib/graphql/resolvers/person.ex:199 -#: lib/graphql/resolvers/person.ex:278 lib/graphql/resolvers/person.ex:307 lib/graphql/resolvers/person.ex:334 -#: lib/graphql/resolvers/person.ex:346 +#: lib/graphql/resolvers/person.ex:279 lib/graphql/resolvers/person.ex:295 lib/graphql/resolvers/person.ex:323 +#: lib/graphql/resolvers/person.ex:340 msgid "Profile is not owned by authenticated user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:123 +#: lib/graphql/resolvers/user.ex:145 msgid "Registrations are not open" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:331 +#: lib/graphql/resolvers/user.ex:353 msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:376 +#: lib/graphql/resolvers/user.ex:398 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:373 +#: lib/graphql/resolvers/user.ex:395 msgid "The new email must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:334 +#: lib/graphql/resolvers/user.ex:356 msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:370 lib/graphql/resolvers/user.ex:428 -#: lib/graphql/resolvers/user.ex:431 +#: lib/graphql/resolvers/user.ex:392 lib/graphql/resolvers/user.ex:450 +#: lib/graphql/resolvers/user.ex:453 msgid "The password provided is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:338 +#: lib/graphql/resolvers/user.ex:360 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:214 +#: lib/graphql/resolvers/user.ex:236 msgid "This user can't reset their password" msgstr "" @@ -207,17 +207,17 @@ msgid "This user has been disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:177 +#: lib/graphql/resolvers/user.ex:199 msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:409 +#: lib/graphql/resolvers/user.ex:431 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:476 +#: lib/graphql/resolvers/user.ex:498 msgid "User requested is not logged-in" msgstr "" @@ -242,12 +242,12 @@ msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:381 +#: lib/graphql/resolvers/user.ex:403 msgid "You need to be logged-in to change your email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:346 +#: lib/graphql/resolvers/user.ex:368 msgid "You need to be logged-in to change your password" msgstr "" @@ -257,7 +257,7 @@ msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:436 +#: lib/graphql/resolvers/user.ex:458 msgid "You need to be logged-in to delete your account" msgstr "" @@ -282,47 +282,47 @@ msgid "You need to have an existing token to get a refresh token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:196 lib/graphql/resolvers/user.ex:221 +#: lib/graphql/resolvers/user.ex:218 lib/graphql/resolvers/user.ex:243 msgid "You requested again a confirmation email too soon" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:126 +#: lib/graphql/resolvers/user.ex:148 msgid "Your email is not on the allowlist" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94 +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/actor.ex:97 msgid "Error while performing background task" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:27 +#: lib/graphql/resolvers/actor.ex:30 msgid "No profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91 +#: lib/graphql/resolvers/actor.ex:57 lib/graphql/resolvers/actor.ex:94 msgid "No remote profile found with this ID" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:69 +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:99 +#: lib/graphql/resolvers/actor.ex:102 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:24 +#: lib/graphql/resolvers/actor.ex:27 msgid "Only remote profiles may be refreshed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/actor.ex:61 +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "" @@ -372,8 +372,8 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:281 -#: lib/graphql/resolvers/event.ex:325 +#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:328 msgid "Event not found" msgstr "" @@ -501,7 +501,7 @@ msgid "Token is not a valid UUID" msgstr "" #, elixir-format -#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:362 +#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:356 msgid "User not found" msgstr "" @@ -567,7 +567,7 @@ msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:324 msgid "You cannot delete this event" msgstr "" @@ -627,7 +627,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:256 +#: lib/graphql/resolvers/event.ex:259 msgid "You need to be logged-in to create events" msgstr "" @@ -647,7 +647,7 @@ msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:333 msgid "You need to be logged-in to delete an event" msgstr "" @@ -672,7 +672,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:298 msgid "You need to be logged-in to update an event" msgstr "" @@ -697,17 +697,17 @@ msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:109 +#: lib/mobilizon/users/user.ex:110 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:138 +#: lib/mobilizon/users/user.ex:139 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:104 +#: lib/mobilizon/users/user.ex:105 msgid "This email is already used." msgstr "" @@ -777,12 +777,12 @@ msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:287 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:287 +#: lib/graphql/resolvers/event.ex:290 msgid "You can't attribute this event to this profile." msgstr "" @@ -812,7 +812,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:245 +#: lib/graphql/resolvers/event.ex:248 msgid "Organizer profile is not owned by the user" msgstr "" @@ -838,7 +838,7 @@ msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:390 +#: lib/graphql/resolvers/user.ex:412 msgid "Invalid activation token" msgstr "" @@ -848,6 +848,6 @@ msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:145 lib/graphql/resolvers/participant.ex:234 +#: lib/graphql/resolvers/event.ex:148 lib/graphql/resolvers/participant.ex:234 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" From 8298f50b3d08fd075631b1e3487c71b89626cda8 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sun, 6 Jun 2021 20:25:16 +0200 Subject: [PATCH 66/67] Fix metadata injection in html Signed-off-by: Thomas Citharel --- lib/web/views/utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web/views/utils.ex b/lib/web/views/utils.ex index 04372711..1997e2a0 100644 --- a/lib/web/views/utils.ex +++ b/lib/web/views/utils.ex @@ -40,7 +40,7 @@ defmodule Mobilizon.Web.Views.Utils do @spec replace_meta(String.t(), String.t()) :: String.t() defp replace_meta(index_content, tags) do index_content - |> String.replace("", tags) + |> String.replace("", tags) |> String.replace("", tags) end From 6d9170cdb6eecaaa5d8bfd7587dabeae3dadaa66 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sun, 6 Jun 2021 20:25:50 +0200 Subject: [PATCH 67/67] Remove vue-cli-plugin-svg It was bringing in an old version of webpack-html-plugin Signed-off-by: Thomas Citharel --- js/package.json | 1 - js/yarn.lock | 570 +++++------------------------------------------- 2 files changed, 60 insertions(+), 511 deletions(-) diff --git a/js/package.json b/js/package.json index 33ae1076..fb05b29f 100644 --- a/js/package.json +++ b/js/package.json @@ -97,7 +97,6 @@ "sass-loader": "^12.0.0", "ts-jest": "^26.5.3", "typescript": "~4.1.5", - "vue-cli-plugin-svg": "~0.1.3", "vue-i18n-extract": "^1.0.2", "vue-jest": "^4.0.1", "vue-template-compiler": "^2.6.11", diff --git a/js/yarn.lock b/js/yarn.lock index 812eddff..85fcd193 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -1037,15 +1037,15 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== -"@eslint/eslintrc@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14" - integrity sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ== +"@eslint/eslintrc@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" + integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== dependencies: ajv "^6.12.4" debug "^4.1.1" espree "^7.3.0" - globals "^12.1.0" + globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" @@ -1943,9 +1943,9 @@ integrity sha512-6nlq2eEh75JegDGUXis9wGTYIJpUvbori4qx++PRKQsV3YRkaqUNPNykzphniqPSZADXCouBuAnyptjUkMkhvw== "@types/node@*": - version "15.12.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.0.tgz#6a459d261450a300e6865faeddb5af01c3389bb3" - integrity sha512-+aHJvoCsVhO2ZCuT4o5JtcPrCPyDE3+1nvbDprYes+pPkEsbjH7AGUCNtjMOXS0fqH14t+B7yLzaqSz92FPWyw== + version "15.12.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2" + integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw== "@types/node@^14.14.31": version "14.17.2" @@ -2063,11 +2063,6 @@ "@types/prosemirror-state" "*" "@types/prosemirror-transform" "*" -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== - "@types/qs@*": version "6.9.6" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" @@ -2918,9 +2913,9 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.1: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.5.0.tgz#695528274bcb5afc865446aa275484049a18ae4b" - integrity sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ== + version "8.6.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" + integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -3380,11 +3375,6 @@ bezier-easing@2.1.0: resolved "https://registry.yarnpkg.com/bezier-easing/-/bezier-easing-2.1.0.tgz#c04dfe8b926d6ecaca1813d69ff179b7c2025d86" integrity sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY= -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3421,7 +3411,7 @@ blob-util@^2.0.2: resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== -bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.7.2: +bluebird@^3.1.1, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -3467,7 +3457,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.2.2, braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -3625,14 +3615,6 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - camel-case@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" @@ -3662,9 +3644,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001230: - version "1.0.30001234" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001234.tgz#8fc2e709e3b0679d7af7f073a1c661155c39b975" - integrity sha512-a3gjUVKkmwLdNysa1xkUAwN2VfJUJyVW47rsi3aCbkRCtbHAfo+rOsCqVw29G6coQ8gzAPb5XBXwiGHwme3isA== + version "1.0.30001235" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz#ad5ca75bc5a1f7b12df79ad806d715a43a5ac4ed" + integrity sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A== capture-exit@^2.0.0: version "2.0.0" @@ -3795,7 +3777,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-css@4.2.x, clean-css@^4.2.3: +clean-css@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== @@ -3913,25 +3895,11 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -3996,11 +3964,6 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -4026,11 +3989,6 @@ commander@^7.0.0, commander@^7.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - common-tags@^1.4.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -4148,9 +4106,9 @@ copy-webpack-plugin@^8.0.0: serialize-javascript "^5.0.1" core-js-compat@^3.8.3, core-js-compat@^3.9.0, core-js-compat@^3.9.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.13.1.tgz#05444caa8f153be0c67db03cf8adb8ec0964e58e" - integrity sha512-mdrcxc0WznfRd8ZicEZh1qVeJ2mu6bwQFh8YVUK48friy/FOwFV5EJj9/dlh+nMQ74YusdVfBFDuomKgUspxWQ== + version "3.14.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5" + integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A== dependencies: browserslist "^4.16.6" semver "7.0.0" @@ -4166,9 +4124,9 @@ core-js@^2.4.0, core-js@^2.5.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.6.4, core-js@^3.8.3: - version "3.13.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.13.1.tgz#30303fabd53638892062d8b4e802cac7599e9fb7" - integrity sha512-JqveUc4igkqwStL2RTRn/EPFGBOfEZHxJl/8ej1mXJR75V3go2mFF4bmUYkEIT1rveHKnkUlcJX/c+f1TyIovQ== + version "3.14.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.14.0.tgz#62322b98c71cc2018b027971a69419e2425c2a6c" + integrity sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -4277,12 +4235,7 @@ css-minimizer-webpack-plugin@^2.0.0: serialize-javascript "^5.0.1" source-map "^0.6.1" -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0, css-select@^2.0.2: +css-select@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== @@ -4303,14 +4256,6 @@ css-select@^3.1.2: domutils "^2.4.3" nth-check "^2.0.0" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - css-tree@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -4393,7 +4338,7 @@ cssnano@^5.0.0: cssnano-preset-default "^5.1.2" is-resolvable "^1.1.0" -csso@^4.0.2, csso@^4.2.0: +csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== @@ -4558,11 +4503,6 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.3.2.tgz#1663691629d4dbfe364fa12a2a4f0aa86aa3a050" - integrity sha1-FmNpFinU2/42T6EqKk8KqGqjoFA= - deepmerge@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" @@ -4600,7 +4540,7 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -4778,11 +4718,6 @@ domhandler@^4.0.0, domhandler@^4.2.0: dependencies: domelementtype "^2.2.0" -domready@1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/domready/-/domready-1.0.8.tgz#91f252e597b65af77e745ae24dd0185d5e26d58c" - integrity sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw= - domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -4865,9 +4800,9 @@ ejs@^2.6.1: integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== electron-to-chromium@^1.3.723: - version "1.3.748" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.748.tgz#16638a8130f407ae5bf2fc168f2173574deb36c5" - integrity sha512-fmIKfYALVeEybk/L2ucdgt7jN3JsbGtg3K9pmF/MRWgkeADBI1VSAa5IzdG2gZwTxsnsrFtdMpOTSM5mrBRKVQ== + version "1.3.749" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz#0ecebc529ceb49dd2a7c838ae425236644c3439a" + integrity sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A== elegant-spinner@^1.0.1: version "1.0.1" @@ -4889,11 +4824,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -4971,7 +4901,7 @@ error-stack-parser@^2.0.2: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: version "1.18.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== @@ -5017,7 +4947,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -5156,12 +5086,12 @@ eslint-webpack-plugin@2.4.3: schema-utils "^3.0.0" eslint@^7.20.0, eslint@^7.9.0: - version "7.27.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7" - integrity sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA== + version "7.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820" + integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.1" + "@eslint/eslintrc" "^0.4.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -5178,7 +5108,7 @@ eslint@^7.20.0, eslint@^7.9.0: fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" + glob-parent "^5.1.2" globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" @@ -5336,9 +5266,9 @@ execa@^1.0.0: strip-eof "^1.0.0" execa@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.0.tgz#3ea50ee863d226bfa323528cce1684e7481dfe46" - integrity sha512-CkdUB7s2y6S+d4y+OM/+ZtQcJCiKUCth4cNImGMqrt2zEVtW2rfHGspQBE1GDo6LjeNIQmTPKXqTCKjqFKyu3A== + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.0" @@ -5457,7 +5387,7 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^2.0.2, extglob@^2.0.4: +extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== @@ -5598,14 +5528,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-loader@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" - integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== - dependencies: - loader-utils "^1.2.3" - schema-utils "^2.5.0" - file-loader@^6.1.1: version "6.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" @@ -5910,7 +5832,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5946,14 +5868,7 @@ globals@^11.1.0, globals@^11.12.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globals@^13.6.0: +globals@^13.6.0, globals@^13.9.0: version "13.9.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== @@ -6049,11 +5964,6 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -6117,7 +6027,7 @@ hash-sum@^2.0.0: resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== -he@1.2.x, he@^1.1.0, he@^1.1.1, he@^1.2.0: +he@^1.1.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -6194,19 +6104,6 @@ html-minifier-terser@^5.0.1: relateurl "^0.2.7" terser "^4.6.3" -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - html-tags@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" @@ -6217,19 +6114,6 @@ html-tags@^3.1.0: resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== -html-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" - integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= - dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" - util.promisify "1.0.0" - html-webpack-plugin@^5.1.0: version "5.3.1" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz#8797327548e3de438e3494e0c6d06f181a7f20d1" @@ -6241,7 +6125,7 @@ html-webpack-plugin@^5.1.0: pretty-error "^2.1.1" tapable "^2.0.0" -htmlparser2@^3.10.1, htmlparser2@^3.8.3: +htmlparser2@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -6388,11 +6272,6 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -image-size@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= - import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -6798,11 +6677,6 @@ is-path-inside@^3.0.2: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - is-plain-obj@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" @@ -6912,7 +6786,7 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0, isobject@^2.1.0: +isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= @@ -7453,11 +7327,6 @@ joi@^17.4.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -js-base64@^2.1.9: - version "2.6.4" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" - integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== - js-beautify@^1.6.12: version "1.13.13" resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.13.13.tgz#756907d1728f329f2b84c42efd56ad17514620bf" @@ -7589,11 +7458,6 @@ json5@2.x, json5@^2.1.2: dependencies: minimist "^1.2.5" -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -7644,7 +7508,7 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0, kind-of@^5.0.2: +kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== @@ -7779,16 +7643,6 @@ loader-runner@^4.1.0, loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" @@ -7885,7 +7739,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.x, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3, lodash@^4.7.0: +lodash@4.x, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7934,11 +7788,6 @@ loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -8004,11 +7853,6 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -8042,13 +7886,6 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merge-options@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-1.0.1.tgz#2a64b24457becd4e4dc608283247e94ce589aa32" - integrity sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg== - dependencies: - is-plain-obj "^1.1" - merge-source-map@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" @@ -8071,25 +7908,6 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.0.tgz#5102d4eaf20b6997d6008e3acfe1c44a3fa815e2" - integrity sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.2.2" - define-property "^1.0.0" - extend-shallow "^2.0.1" - extglob "^2.0.2" - fragment-cache "^0.2.1" - kind-of "^5.0.2" - nanomatch "^1.2.1" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -8182,11 +8000,6 @@ minipass@^3.1.1: dependencies: yallist "^4.0.0" -mitt@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.1.2.tgz#380e61480d6a615b660f07abb60d51e0a4e4bed6" - integrity sha1-OA5hSA1qYVtmDwertg1R4KTkvtY= - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -8200,7 +8013,7 @@ mkdirp@1.x, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -8274,7 +8087,7 @@ nanoid@^3.1.23: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== -nanomatch@^1.2.1, nanomatch@^1.2.9: +nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== @@ -8316,13 +8129,6 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -8513,15 +8319,6 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -8529,7 +8326,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.3: +object.values@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== @@ -8750,13 +8547,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - param-case@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -9195,13 +8985,6 @@ postcss-ordered-values@^5.0.1: cssnano-utils "^2.0.1" postcss-value-parser "^4.1.0" -postcss-prefix-selector@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/postcss-prefix-selector/-/postcss-prefix-selector-1.9.0.tgz#db549802b79f9f91f7419c8c1f86d31d974aff5e" - integrity sha512-tTUHUNP+/Qfgg+fvbljUIeLs1ijICWb8+CT3bZM2joE2pkd+EnuBzSfZNHY2RMmozNRp44yEFv+I+6IIiLcoCg== - dependencies: - postcss "^7.0.0" - postcss-reduce-initial@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz#9d6369865b0f6f6f6b165a0ef5dc1a4856c7e946" @@ -9248,17 +9031,7 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^5.2.17: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^7.0.0, postcss@^7.0.14: +postcss@^7.0.14: version "7.0.35" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== @@ -9276,44 +9049,6 @@ postcss@^8.2.15, postcss@^8.2.6, postcss@^8.2.9: nanoid "^3.1.23" source-map-js "^0.6.2" -posthtml-parser@^0.2.0, posthtml-parser@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.2.1.tgz#35d530de386740c2ba24ff2eb2faf39ccdf271dd" - integrity sha1-NdUw3jhnQMK6JP8usvrznM3ycd0= - dependencies: - htmlparser2 "^3.8.3" - isobject "^2.1.0" - -posthtml-rename-id@^1.0: - version "1.0.12" - resolved "https://registry.yarnpkg.com/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz#cf7f6eb37146bf1afac31e68f18c6cc19ae61433" - integrity sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw== - dependencies: - escape-string-regexp "1.0.5" - -posthtml-render@^1.0.5, posthtml-render@^1.0.6: - version "1.4.0" - resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-1.4.0.tgz#40114070c45881cacb93347dae3eff53afbcff13" - integrity sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw== - -posthtml-svg-mode@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz#abd554face81223cab0cb367e18e4efd2a4e74b0" - integrity sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ== - dependencies: - merge-options "1.0.1" - posthtml "^0.9.2" - posthtml-parser "^0.2.1" - posthtml-render "^1.0.6" - -posthtml@^0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.9.2.tgz#f4c06db9f67b61fd17c4e256e7e3d9515bf726fd" - integrity sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0= - dependencies: - posthtml-parser "^0.2.0" - posthtml-render "^1.0.5" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -9355,16 +9090,16 @@ prettier@^1.18.2: integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== prettier@^2.0.0, prettier@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18" - integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== + version "2.3.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6" + integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA== pretty-bytes@^5.3.0, pretty-bytes@^5.4.1, pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-error@^2.0.2, pretty-error@^2.1.1: +pretty-error@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== @@ -9574,11 +9309,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" @@ -9589,14 +9319,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -9819,7 +9541,7 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" -relateurl@0.2.x, relateurl@^0.2.7: +relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= @@ -9998,9 +9720,9 @@ rollup-plugin-terser@^7.0.0: terser "^5.0.0" rollup@^2.43.1: - version "2.50.6" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.50.6.tgz#24e2211caf9031081656e98a5e5e94d3b5e786e2" - integrity sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg== + version "2.51.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.51.0.tgz#ffd847882283998fc8611cd57af917f173b4ab5c" + integrity sha512-ITLt9sScNCBVspSHauw/W49lEZ0vjN8LyCzSNsNaqT67vTss2lYEfOyxltX8hjrhr1l/rQwmZ2wazzEqhZ/fUg== optionalDependencies: fsevents "~2.3.1" @@ -10092,11 +9814,6 @@ sass@^1.34.1: dependencies: chokidar ">=3.0.0 <4.0.0" -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -10122,7 +9839,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.5: +schema-utils@^2.0.0, schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -10574,11 +10291,6 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -10737,13 +10449,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -10780,80 +10485,11 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -svg-baker-runtime@^1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz#f4720637f5b6202eef6378d81f1fead0815f8a4e" - integrity sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw== - dependencies: - deepmerge "1.3.2" - mitt "1.1.2" - svg-baker "^1.7.0" - -svg-baker@^1.5.0, svg-baker@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/svg-baker/-/svg-baker-1.7.0.tgz#8367f78d875550c52fe4756f7303d5c5d7c2e9a7" - integrity sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg== - dependencies: - bluebird "^3.5.0" - clone "^2.1.1" - he "^1.1.1" - image-size "^0.5.1" - loader-utils "^1.1.0" - merge-options "1.0.1" - micromatch "3.1.0" - postcss "^5.2.17" - postcss-prefix-selector "^1.6.0" - posthtml-rename-id "^1.0" - posthtml-svg-mode "^1.0.3" - query-string "^4.3.2" - traverse "^0.6.6" - -svg-sprite-loader@^4.1.6: - version "4.3.0" - resolved "https://registry.yarnpkg.com/svg-sprite-loader/-/svg-sprite-loader-4.3.0.tgz#a427f777fe15bba83a806e2fde01a736b19445c8" - integrity sha512-IkXI2e0bWr32G6VCqw0g8x8eRsMSUKkyd3axnI6D5pEZ9zv3Zi7FTVVnOUi/Io3i2D1UAofOW+35N8qwIUql4w== - dependencies: - bluebird "^3.5.0" - deepmerge "1.3.2" - domready "1.0.8" - escape-string-regexp "1.0.5" - html-webpack-plugin "^3.2.0" - loader-utils "^1.1.0" - svg-baker "^1.5.0" - svg-baker-runtime "^1.4.7" - url-slug "2.0.0" - svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= -svg-to-vue@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/svg-to-vue/-/svg-to-vue-0.4.0.tgz#93a2fc9658c09593f6099ac7f5ded73ac83dc549" - integrity sha512-g/ZHtEFf4QDsDtTk9tuYX/MJ2HESTUBMTkuLoffQGQ3xMtlmD9Ec4YyTgmMkP1P8QJtWWu2FiGdOnlKaXc/X/Q== - dependencies: - svgo "^1.1.1" - -svgo@^1.1.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - svgo@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.3.0.tgz#6b3af81d0cbd1e19c83f5f63cec2cb98c70b5373" @@ -11094,11 +10730,6 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= - totalist@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" @@ -11135,11 +10766,6 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" -traverse@^0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= - ts-invariant@^0.4.0: version "0.4.4" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" @@ -11289,14 +10915,6 @@ typescript@~4.1.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" @@ -11335,11 +10953,6 @@ unicode-property-aliases-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== -unidecode@0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/unidecode/-/unidecode-0.1.8.tgz#efbb301538bc45246a9ac8c559d72f015305053e" - integrity sha1-77swFTi8RSRqmsjFWdcvAVMFBT4= - union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -11377,11 +10990,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -11400,11 +11008,6 @@ upath@^1.1.1, upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -11417,15 +11020,6 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-loader@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" - integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== - dependencies: - loader-utils "^1.2.3" - mime "^2.4.4" - schema-utils "^2.5.0" - url-loader@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" @@ -11443,13 +11037,6 @@ url-parse@^1.4.3, url-parse@^1.5.1: querystringify "^2.1.1" requires-port "^1.0.0" -url-slug@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/url-slug/-/url-slug-2.0.0.tgz#a789d5aed4995c0d95af33377ad1d5c68d4d7027" - integrity sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc= - dependencies: - unidecode "0.1.8" - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -11468,24 +11055,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -11571,17 +11140,6 @@ vue-class-component@^7.2.3: resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.6.tgz#8471e037b8e4762f5a464686e19e5afc708502e4" integrity sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w== -vue-cli-plugin-svg@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/vue-cli-plugin-svg/-/vue-cli-plugin-svg-0.1.3.tgz#9b52ac5594250703cb33aebd9665b9376db74cbf" - integrity sha512-RE6HNQxKNoYDxlfD0jcOo3y3RWuOB3NsoAkW4noCFU0j/H70XnrxmoVhHFGLBDU2v2TRsOfSpImFOSU1G54j7w== - dependencies: - file-loader "^4.0.0" - lodash "^4.17.11" - svg-sprite-loader "^4.1.6" - url-loader "^2.0.0" - vue-svg-loader "^0.12.0" - vue-eslint-parser@^7.0.0, vue-eslint-parser@^7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz#01ea1a2932f581ff244336565d712801f8f72561" @@ -11697,14 +11255,6 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-svg-loader@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/vue-svg-loader/-/vue-svg-loader-0.12.0.tgz#5ea97d021edd3023236b92f96c3aba433b5d428b" - integrity sha512-pg8H6iKCj+DAC7FZuxdfGJMHiFpJPv/YyoN1M7Iqlf+Hu4eU6Q/W/sEFx978syQA+aOx0NXrp+uQUAajqQvXbQ== - dependencies: - loader-utils "^1.2.3" - svg-to-vue "^0.4.0" - vue-template-compiler@^2.6.11: version "2.6.13" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.13.tgz#a735b8974e013ce829e7f77e08e4ee5aecbd3005"