From 7ce76cdb9b8d2d0aeb86bd992092518f95a4494d Mon Sep 17 00:00:00 2001 From: vinibrsl Date: Wed, 11 Oct 2023 12:41:12 +0000 Subject: [PATCH] deploy: 303b3509f7ea39f85aa30999df0a9859cd387b8b --- .build | 5 +- 404.html | 2 +- Mix.Tasks.CancelSubscription.html | 2 +- Mix.Tasks.CleanClickhouse.html | 2 +- Mix.Tasks.CreateFreeSubscription.html | 2 +- Mix.Tasks.DownloadCountryDatabase.html | 2 +- Mix.Tasks.GenerateReferrerFavicons.html | 2 +- Mix.Tasks.PullSandboxSubscription.html | 2 +- Mix.Tasks.SendPageview.html | 2 +- ObanErrorReporter.html | 2 +- Plausible.AsyncInsertRepo.html | 18 +- Plausible.Auth.ApiKey.html | 2 +- Plausible.Auth.ApiKeyAdmin.html | 2 +- Plausible.Auth.GracePeriod.html | 2 +- Plausible.Auth.Invitation.html | 2 +- Plausible.Auth.Password.html | 2 +- Plausible.Auth.Token.html | 2 +- Plausible.Auth.User.html | 2 +- Plausible.Auth.UserAdmin.html | 2 +- Plausible.Auth.html | 2 +- Plausible.Billing.EnterprisePlan.html | 2 +- Plausible.Billing.EnterprisePlanAdmin.html | 2 +- Plausible.Billing.Feature.html | 435 ++++++++++++++++++ Plausible.Billing.PaddleApi.html | 2 +- Plausible.Billing.Plans.html | 26 +- Plausible.Billing.Quota.html | 76 ++- Plausible.Billing.SiteLocker.html | 2 +- Plausible.Billing.Subscription.Status.html | 2 +- Plausible.Billing.html | 2 +- Plausible.ChangesetHelpers.html | 2 +- Plausible.Cldr.AcceptLanguage.html | 250 +++++----- Plausible.Cldr.Currency.html | 126 ++--- Plausible.Cldr.Locale.html | 50 +- Plausible.Cldr.Number.Cardinal.html | 20 +- Plausible.Cldr.Number.Format.html | 50 +- Plausible.Cldr.Number.Formatter.Decimal.html | 2 +- Plausible.Cldr.Number.Ordinal.html | 20 +- Plausible.Cldr.Number.PluralRule.Range.html | 2 +- Plausible.Cldr.Number.Symbol.html | 16 +- Plausible.Cldr.Number.System.html | 56 +-- Plausible.Cldr.Number.Transliterate.html | 22 +- Plausible.Cldr.Number.html | 178 +++---- Plausible.Cldr.Rbnf.NumberSystem.html | 14 +- Plausible.Cldr.Rbnf.Ordinal.html | 18 +- Plausible.Cldr.Rbnf.Spellout.html | 14 +- Plausible.Cldr.html | 138 +++--- Plausible.ClickhouseEventV2.html | 2 +- Plausible.ClickhouseRepo.html | 18 +- Plausible.ClickhouseSessionV2.BoolUInt8.html | 2 +- Plausible.ClickhouseSessionV2.html | 2 +- Plausible.ConfigHelpers.html | 2 +- Plausible.DataCase.html | 2 +- Plausible.DataMigration.NumericIDs.html | 2 +- Plausible.DataMigration.Repo.html | 18 +- ...ible.DataMigration.RewriteFunnelDupes.html | 2 +- Plausible.DataMigration.html | 2 +- Plausible.DebugReplayInfo.html | 2 +- Plausible.Ecto.EventName.html | 2 +- Plausible.Event.WriteBuffer.html | 2 +- Plausible.Factory.html | 56 +-- Plausible.Funnel.Step.html | 2 +- Plausible.Funnel.html | 2 +- Plausible.Funnels.html | 2 +- Plausible.Geo.html | 66 +-- Plausible.Goal.html | 2 +- Plausible.Goals.html | 23 +- Plausible.Google.Api.Mock.html | 2 +- Plausible.Google.Api.html | 2 +- Plausible.Google.Buffer.html | 2 +- Plausible.Google.HTTP.html | 2 +- Plausible.Google.ReportRequest.html | 2 +- Plausible.HTTPClient.Interface.html | 2 +- Plausible.HTTPClient.Non200Error.html | 2 +- Plausible.HTTPClient.html | 2 +- Plausible.ImportDeletionRepo.html | 18 +- Plausible.Imported.html | 2 +- Plausible.IngestRepo.html | 18 +- Plausible.Ingestion.Counters.Buffer.html | 2 +- Plausible.Ingestion.Counters.Record.html | 2 +- ...e.Ingestion.Counters.TelemetryHandler.html | 2 +- Plausible.Ingestion.Counters.html | 2 +- Plausible.Ingestion.Event.html | 4 +- Plausible.Ingestion.Request.html | 2 +- Plausible.Mailer.html | 2 +- Plausible.OpenTelemetry.Sampler.html | 2 +- Plausible.PaddleApi.Mock.html | 2 +- Plausible.Plugins.API.Goals.html | 2 +- Plausible.Plugins.API.Pagination.html | 2 +- Plausible.Plugins.API.SharedLinks.html | 2 +- Plausible.Plugins.API.Token.html | 2 +- Plausible.Plugins.API.Tokens.html | 2 +- ...sible.PromEx.Plugins.PlausibleMetrics.html | 2 +- Plausible.PromEx.html | 2 +- Plausible.Props.html | 21 +- Plausible.Purge.html | 2 +- Plausible.Release.html | 2 +- Plausible.Repo.html | 2 +- Plausible.Sentry.Client.html | 2 +- Plausible.SentryFilter.html | 2 +- Plausible.Session.CacheStore.html | 2 +- Plausible.Session.Salts.html | 2 +- Plausible.Session.WriteBuffer.html | 2 +- Plausible.Site.Cache.Warmer.All.html | 2 +- ...ble.Site.Cache.Warmer.RecentlyUpdated.html | 2 +- Plausible.Site.Cache.Warmer.html | 2 +- Plausible.Site.Cache.html | 2 +- Plausible.Site.CustomDomain.html | 2 +- Plausible.Site.Domain.html | 2 +- Plausible.Site.GateKeeper.html | 2 +- Plausible.Site.GoogleAuth.html | 2 +- Plausible.Site.ImportedData.html | 2 +- Plausible.Site.Membership.html | 2 +- ...ble.Site.Memberships.AcceptInvitation.html | 2 +- ...ble.Site.Memberships.RejectInvitation.html | 2 +- ...ble.Site.Memberships.RemoveInvitation.html | 2 +- Plausible.Site.Memberships.html | 2 +- Plausible.Site.MonthlyReport.html | 2 +- Plausible.Site.Removal.html | 2 +- Plausible.Site.SharedLink.html | 2 +- Plausible.Site.SpikeNotification.html | 2 +- Plausible.Site.WeeklyReport.html | 2 +- Plausible.Site.html | 64 +-- Plausible.SiteAdmin.html | 2 +- Plausible.Sites.html | 32 +- Plausible.Stats.Aggregate.html | 2 +- Plausible.Stats.Base.html | 2 +- Plausible.Stats.Breakdown.html | 2 +- Plausible.Stats.Clickhouse.html | 2 +- Plausible.Stats.Compare.html | 2 +- Plausible.Stats.Comparisons.html | 2 +- Plausible.Stats.CurrentVisitors.html | 2 +- Plausible.Stats.CustomProps.html | 2 +- Plausible.Stats.FilterParser.html | 14 +- Plausible.Stats.FilterSuggestions.html | 2 +- Plausible.Stats.Filters.html | 2 +- Plausible.Stats.Fragments.html | 2 +- Plausible.Stats.Funnel.html | 2 +- Plausible.Stats.Imported.html | 2 +- Plausible.Stats.Interval.html | 2 +- Plausible.Stats.Props.html | 2 +- Plausible.Stats.Query.html | 2 +- Plausible.Stats.Timeseries.html | 2 +- Plausible.Stats.Util.html | 2 +- Plausible.Stats.html | 2 +- Plausible.Test.Support.HTML.html | 2 +- Plausible.TestUtils.html | 2 +- Plausible.Themes.html | 2 +- Plausible.Timezones.html | 2 +- Plausible.Users.html | 2 +- Plausible.Workers.CheckUsage.html | 2 +- ...e.Workers.CleanEmailVerificationCodes.html | 2 +- Plausible.Workers.CleanInvitations.html | 2 +- ...Workers.ExpireDomainChangeTransitions.html | 2 +- Plausible.Workers.ImportGoogleAnalytics.html | 2 +- Plausible.Workers.LockSites.html | 2 +- Plausible.Workers.NotifyAnnualRenewal.html | 2 +- Plausible.Workers.RotateSalts.html | 2 +- Plausible.Workers.ScheduleEmailReports.html | 2 +- Plausible.Workers.SendCheckStatsEmails.html | 2 +- Plausible.Workers.SendEmailReport.html | 2 +- Plausible.Workers.SendSiteSetupEmails.html | 2 +- Plausible.Workers.SendTrialNotifications.html | 2 +- Plausible.Workers.SpikeNotifier.html | 2 +- Plausible.epub | Bin 529088 -> 531853 bytes Plausible.html | 2 +- PlausibleWeb.Api.ExternalController.html | 2 +- PlausibleWeb.Api.ExternalSitesController.html | 2 +- PlausibleWeb.Api.ExternalStatsController.html | 2 +- PlausibleWeb.Api.Helpers.html | 2 +- PlausibleWeb.Api.InternalController.html | 4 +- PlausibleWeb.Api.PaddleController.html | 2 +- PlausibleWeb.Api.StatsController.html | 18 +- PlausibleWeb.AuthController.html | 2 +- PlausibleWeb.AuthPlug.html | 2 +- PlausibleWeb.AuthView.html | 2 +- PlausibleWeb.AuthorizeSiteAccess.html | 2 +- PlausibleWeb.AuthorizeSitesApiPlug.html | 2 +- PlausibleWeb.AuthorizeStatsApiPlug.html | 2 +- PlausibleWeb.BillingController.html | 2 +- PlausibleWeb.BillingView.html | 2 +- PlausibleWeb.CRMAuthPlug.html | 2 +- PlausibleWeb.Captcha.html | 2 +- PlausibleWeb.Components.Generic.html | 6 +- PlausibleWeb.Components.Site.Feature.html | 68 +-- PlausibleWeb.ConnCase.html | 2 +- PlausibleWeb.ControllerHelpers.html | 2 +- PlausibleWeb.Email.html | 2 +- PlausibleWeb.EmailView.html | 2 +- PlausibleWeb.Endpoint.html | 2 +- PlausibleWeb.ErrorHelpers.html | 2 +- PlausibleWeb.ErrorReportController.html | 2 +- PlausibleWeb.ErrorView.html | 2 +- PlausibleWeb.Favicon.html | 2 +- PlausibleWeb.FirstLaunchPlug.html | 2 +- PlausibleWeb.FormHelpers.html | 2 +- PlausibleWeb.InvitationController.html | 2 +- PlausibleWeb.LastSeenPlug.html | 2 +- PlausibleWeb.LayoutView.html | 2 +- PlausibleWeb.Live.ChoosePlan.html | 2 +- ...Live.Components.ComboBox.StaticSearch.html | 2 +- PlausibleWeb.Live.Components.ComboBox.html | 2 +- PlausibleWeb.Live.Components.Form.html | 2 +- PlausibleWeb.Live.Flash.html | 2 +- PlausibleWeb.Live.FunnelSettings.Form.html | 2 +- PlausibleWeb.Live.FunnelSettings.List.html | 2 +- PlausibleWeb.Live.FunnelSettings.html | 2 +- PlausibleWeb.Live.GoalSettings.Form.html | 16 +- PlausibleWeb.Live.GoalSettings.List.html | 2 +- PlausibleWeb.Live.GoalSettings.html | 2 +- PlausibleWeb.Live.PropsSettings.Form.html | 2 +- PlausibleWeb.Live.PropsSettings.List.html | 2 +- PlausibleWeb.Live.PropsSettings.html | 2 +- PlausibleWeb.Live.RegisterForm.html | 2 +- PlausibleWeb.Live.ResetPasswordForm.html | 2 +- PlausibleWeb.LiveSocket.html | 2 +- PlausibleWeb.MJML.WeeklyReport.html | 2 +- PlausibleWeb.PageController.html | 2 +- PlausibleWeb.PageView.html | 2 +- ...ibleWeb.Plugins.API.Controllers.Goals.html | 2 +- ...b.Plugins.API.Controllers.SharedLinks.html | 2 +- PlausibleWeb.Plugins.API.Errors.html | 2 +- PlausibleWeb.Plugins.API.Router.html | 2 +- PlausibleWeb.Plugins.API.Schemas.Error.html | 2 +- ...chemas.Goal.CreateRequest.CustomEvent.html | 2 +- ...I.Schemas.Goal.CreateRequest.Pageview.html | 2 +- ...PI.Schemas.Goal.CreateRequest.Revenue.html | 2 +- ...lugins.API.Schemas.Goal.CreateRequest.html | 2 +- ....Plugins.API.Schemas.Goal.CustomEvent.html | 2 +- ...Plugins.API.Schemas.Goal.ListResponse.html | 2 +- ...Web.Plugins.API.Schemas.Goal.Pageview.html | 2 +- ...eWeb.Plugins.API.Schemas.Goal.Revenue.html | 2 +- ...ibleWeb.Plugins.API.Schemas.Goal.Type.html | 2 +- PlausibleWeb.Plugins.API.Schemas.Goal.html | 2 +- PlausibleWeb.Plugins.API.Schemas.Link.html | 2 +- ...sibleWeb.Plugins.API.Schemas.NotFound.html | 2 +- ...lugins.API.Schemas.PaginationMetadata.html | 2 +- ....API.Schemas.SharedLink.CreateRequest.html | 2 +- ...s.API.Schemas.SharedLink.ListResponse.html | 2 +- ...bleWeb.Plugins.API.Schemas.SharedLink.html | 2 +- ...eWeb.Plugins.API.Schemas.Unauthorized.html | 2 +- ...ugins.API.Schemas.UnprocessableEntity.html | 2 +- PlausibleWeb.Plugins.API.Spec.html | 2 +- PlausibleWeb.Plugins.API.Views.Error.html | 2 +- PlausibleWeb.Plugins.API.Views.Goal.html | 2 +- ...sibleWeb.Plugins.API.Views.Pagination.html | 2 +- ...sibleWeb.Plugins.API.Views.SharedLink.html | 2 +- PlausibleWeb.Plugins.API.html | 2 +- PlausibleWeb.PluginsAPICase.html | 2 +- PlausibleWeb.Plugs.AuthorizePluginsAPI.html | 2 +- ...bleWeb.Plugs.MaybeDisableRegistration.html | 2 +- PlausibleWeb.Plugs.NoRobots.html | 2 +- PlausibleWeb.Plugs.RuntimeSessionAdapter.html | 2 +- PlausibleWeb.RefInspector.html | 2 +- PlausibleWeb.RemoteIp.html | 2 +- PlausibleWeb.RequireAccountPlug.html | 2 +- PlausibleWeb.RequireLoggedOutPlug.html | 2 +- PlausibleWeb.Router.html | 2 +- PlausibleWeb.SessionTimeoutPlug.html | 2 +- PlausibleWeb.Site.MembershipController.html | 2 +- PlausibleWeb.Site.MembershipView.html | 2 +- PlausibleWeb.SiteController.html | 96 ++-- PlausibleWeb.SiteView.html | 2 +- PlausibleWeb.StatsController.html | 8 +- PlausibleWeb.StatsView.html | 2 +- PlausibleWeb.Tracker.html | 2 +- PlausibleWeb.UnsubscribeController.html | 2 +- PlausibleWeb.UnsubscribeView.html | 2 +- PlausibleWeb.html | 2 +- account-locking.html | 2 +- api-reference.html | 12 +- contributing.html | 2 +- dist/search_data-36A4E833.js | 1 - dist/search_data-E390E5CE.js | 1 + dist/sidebar_items-8E72A386.js | 1 - dist/sidebar_items-920E5485.js | 1 + readme.html | 2 +- search.html | 4 +- 277 files changed, 1498 insertions(+), 1086 deletions(-) create mode 100644 Plausible.Billing.Feature.html delete mode 100644 dist/search_data-36A4E833.js create mode 100644 dist/search_data-E390E5CE.js delete mode 100644 dist/sidebar_items-8E72A386.js create mode 100644 dist/sidebar_items-920E5485.js diff --git a/.build b/.build index d751b0c72..83add5fcb 100644 --- a/.build +++ b/.build @@ -19,6 +19,7 @@ Plausible.Auth.UserAdmin.html Plausible.Auth.html Plausible.Billing.EnterprisePlan.html Plausible.Billing.EnterprisePlanAdmin.html +Plausible.Billing.Feature.html Plausible.Billing.PaddleApi.html Plausible.Billing.Plans.html Plausible.Billing.Quota.html @@ -294,8 +295,8 @@ dist/merriweather-latin-ext-300-normal-K6L27CZ5.woff2 dist/merriweather-vietnamese-300-italic-EHHNZPUO.woff2 dist/merriweather-vietnamese-300-normal-U376L4Z4.woff2 dist/remixicon-NKANDIL5.woff2 -dist/search_data-36A4E833.js -dist/sidebar_items-8E72A386.js +dist/search_data-E390E5CE.js +dist/sidebar_items-920E5485.js index.html readme.html search.html diff --git a/404.html b/404.html index 5490d6f5f..936644d11 100644 --- a/404.html +++ b/404.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.CancelSubscription.html b/Mix.Tasks.CancelSubscription.html index 1ac9b2d84..331dcd928 100644 --- a/Mix.Tasks.CancelSubscription.html +++ b/Mix.Tasks.CancelSubscription.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.CleanClickhouse.html b/Mix.Tasks.CleanClickhouse.html index e9e81dd35..6d3eb8d47 100644 --- a/Mix.Tasks.CleanClickhouse.html +++ b/Mix.Tasks.CleanClickhouse.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.CreateFreeSubscription.html b/Mix.Tasks.CreateFreeSubscription.html index 1f68de1f5..292686528 100644 --- a/Mix.Tasks.CreateFreeSubscription.html +++ b/Mix.Tasks.CreateFreeSubscription.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.DownloadCountryDatabase.html b/Mix.Tasks.DownloadCountryDatabase.html index ab31859b8..cde4554ae 100644 --- a/Mix.Tasks.DownloadCountryDatabase.html +++ b/Mix.Tasks.DownloadCountryDatabase.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.GenerateReferrerFavicons.html b/Mix.Tasks.GenerateReferrerFavicons.html index 64774a44f..448571dcc 100644 --- a/Mix.Tasks.GenerateReferrerFavicons.html +++ b/Mix.Tasks.GenerateReferrerFavicons.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.PullSandboxSubscription.html b/Mix.Tasks.PullSandboxSubscription.html index 70d18598c..2e5b8f6ca 100644 --- a/Mix.Tasks.PullSandboxSubscription.html +++ b/Mix.Tasks.PullSandboxSubscription.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.SendPageview.html b/Mix.Tasks.SendPageview.html index 62bab47ba..e8723701a 100644 --- a/Mix.Tasks.SendPageview.html +++ b/Mix.Tasks.SendPageview.html @@ -13,7 +13,7 @@ - + diff --git a/ObanErrorReporter.html b/ObanErrorReporter.html index 13de2f920..bf9aeac7a 100644 --- a/ObanErrorReporter.html +++ b/ObanErrorReporter.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.AsyncInsertRepo.html b/Plausible.AsyncInsertRepo.html index 7590142c3..b6cd5eca1 100644 --- a/Plausible.AsyncInsertRepo.html +++ b/Plausible.AsyncInsertRepo.html @@ -13,7 +13,7 @@ - + @@ -1114,23 +1114,23 @@ pool to disconnect within the given interval.

See -

Similar to insert_all/2 but with the following differences:

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
+

Similar to insert_all/2 but with the following differences:

  • accepts rows as streams or lists
  • sends rows as a chunked request
  • doesn't autogenerate ids or does any other preprocessing

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
 
-defmodule Demo do
+defmodule Demo do
   use Ecto.Schema
 
   @primary_key false
-  schema "ecto_ch_demo" do
+  schema "ecto_ch_demo" do
     field :a, Ch, type: "UInt64"
     field :b, :string
-  end
-end
+  end
+end
 
-rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
-{100_000, nil} = Repo.insert_stream(Demo, rows)
+rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
+{100_000, nil} = Repo.insert_stream(Demo, rows)
 
 # schemaless
-{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
+
{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
diff --git a/Plausible.Auth.ApiKey.html b/Plausible.Auth.ApiKey.html index a88c1faa1..38c455a05 100644 --- a/Plausible.Auth.ApiKey.html +++ b/Plausible.Auth.ApiKey.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Auth.ApiKeyAdmin.html b/Plausible.Auth.ApiKeyAdmin.html index ddaf4ed5c..fb99027c7 100644 --- a/Plausible.Auth.ApiKeyAdmin.html +++ b/Plausible.Auth.ApiKeyAdmin.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Auth.GracePeriod.html b/Plausible.Auth.GracePeriod.html index 8e0778a76..05c178147 100644 --- a/Plausible.Auth.GracePeriod.html +++ b/Plausible.Auth.GracePeriod.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Auth.Invitation.html b/Plausible.Auth.Invitation.html index f0c0fe1c4..77ed4c088 100644 --- a/Plausible.Auth.Invitation.html +++ b/Plausible.Auth.Invitation.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Auth.Password.html b/Plausible.Auth.Password.html index b8da92a32..da9de57e5 100644 --- a/Plausible.Auth.Password.html +++ b/Plausible.Auth.Password.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Auth.Token.html b/Plausible.Auth.Token.html index f3ccbc24b..d2490fa7a 100644 --- a/Plausible.Auth.Token.html +++ b/Plausible.Auth.Token.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Auth.User.html b/Plausible.Auth.User.html index e1dfac8b8..a728effa3 100644 --- a/Plausible.Auth.User.html +++ b/Plausible.Auth.User.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Auth.UserAdmin.html b/Plausible.Auth.UserAdmin.html index 955443afd..994caa477 100644 --- a/Plausible.Auth.UserAdmin.html +++ b/Plausible.Auth.UserAdmin.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Auth.html b/Plausible.Auth.html index a372a8835..14de33f70 100644 --- a/Plausible.Auth.html +++ b/Plausible.Auth.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Billing.EnterprisePlan.html b/Plausible.Billing.EnterprisePlan.html index 93ad87158..143c4143a 100644 --- a/Plausible.Billing.EnterprisePlan.html +++ b/Plausible.Billing.EnterprisePlan.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Billing.EnterprisePlanAdmin.html b/Plausible.Billing.EnterprisePlanAdmin.html index 5537cdb10..4944d279b 100644 --- a/Plausible.Billing.EnterprisePlanAdmin.html +++ b/Plausible.Billing.EnterprisePlanAdmin.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Billing.Feature.html b/Plausible.Billing.Feature.html new file mode 100644 index 000000000..1656bd0cf --- /dev/null +++ b/Plausible.Billing.Feature.html @@ -0,0 +1,435 @@ + + + + + + + + + + Plausible.Billing.Feature — Plausible v0.0.1 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Plausible.Billing.Feature behaviour + (Plausible v0.0.1) + +

+ + +
+

This module provides an interface for managing features, e.g. Revenue Goals, +Funnels and Custom Properties.

Feature modules have functions for toggling the feature on/off and checking +whether the feature is available for a site/user.

When defining new features, the following options are expected by the +__using__ macro:

  • :display_name - human-readable display name of the feature

  • :toggle_field - the field in the %Plausible.Site{} schema that toggles +the feature. If nil or not set, toggle/2 silently returns :ok

  • :extra_feature - an atom representing the feature name in the plan JSON +file (see also Plausible.Billing.Plan). If nil or not set, +check_availability/1 silently returns :ok

Functions defined by __using__ can be overridden if needed.

+
+ + +
+

+ + + Summary + +

+
+

+ Callbacks +

+ +
+ + +

Checks whether the site owner or the user plan includes the given feature.

+ +
+ +
+ + +

Returns the human-readable display name of the feature.

+ +
+ +
+
+ enabled?(t) + +
+ +

Checks whether a feature is enabled or not. Returns false when the feature is +disabled or the user does not have access to it.

+ +
+ +
+
+ toggle(t, t) + +
+ +

Toggles the feature on and off for a site. Returns +{:error, :upgrade_required} when toggling a feature the site owner does not +have access to.

+ +
+ +
+ + +

Returns the %Plausible.Site{} field that toggles the feature on and off.

+ +
+ +
+
+

+ Functions +

+ +
+
+ list() + +
+ +

Lists all available feature modules.

+ +
+ +
+ +
+ + +
+

+ + +Callbacks + +

+
+
+ +
+ + + Link to this callback + +

check_availability(arg1)

+ + + + View Source + + + +
+ +
+ +
+ +
@callback check_availability(Plausible.Site.t() | Plausible.Auth.User.t()) ::
+  :ok | {:error, :upgrade_required}
+ +
+ +

Checks whether the site owner or the user plan includes the given feature.

+
+
+
+ + + +
+ +
+ +
@callback display_name() :: String.t()
+ +
+ +

Returns the human-readable display name of the feature.

+
+
+
+ + + +
+ +
+ +
@callback enabled?(Plausible.Site.t()) :: boolean()
+ +
+ +

Checks whether a feature is enabled or not. Returns false when the feature is +disabled or the user does not have access to it.

+
+
+
+ + + +
+ +
+ +
@callback toggle(Plausible.Site.t(), Keyword.t()) :: :ok | {:error, :upgrade_required}
+ +
+ +

Toggles the feature on and off for a site. Returns +{:error, :upgrade_required} when toggling a feature the site owner does not +have access to.

+
+
+
+ + + +
+ +
+ +
@callback toggle_field() :: atom()
+ +
+ +

Returns the %Plausible.Site{} field that toggles the feature on and off.

+
+
+ +
+
+ +
+

+ + +Functions + +

+
+
+ + + +
+ +

Lists all available feature modules.

+
+
+ +
+
+ + +
+
+
+
+ + + + + + diff --git a/Plausible.Billing.PaddleApi.html b/Plausible.Billing.PaddleApi.html index e48950c6e..ee1825bfc 100644 --- a/Plausible.Billing.PaddleApi.html +++ b/Plausible.Billing.PaddleApi.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Billing.Plans.html b/Plausible.Billing.Plans.html index a1e791377..3d2f5729d 100644 --- a/Plausible.Billing.Plans.html +++ b/Plausible.Billing.Plans.html @@ -13,7 +13,7 @@ - + @@ -256,7 +256,7 @@ Functions

available_plans_with_prices(user)

- + View Source @@ -278,7 +278,7 @@ Functions

business_plans()

- + View Source @@ -300,7 +300,7 @@ Functions

business_tier?(subscription)

- + View Source @@ -322,7 +322,7 @@ Functions

get_price_for(enterprise_plan)

- + View Source @@ -346,7 +346,7 @@ Functions

get_regular_plan(subscription, opts \\ [])

- + View Source @@ -368,7 +368,7 @@ Functions

get_subscription_plan(subscription)

- + View Source @@ -390,7 +390,7 @@ Functions

growth_plans_for(user)

- + View Source @@ -419,7 +419,7 @@ still choose from old plans.

latest_enterprise_plan_with_price(user)

- + View Source @@ -441,7 +441,7 @@ still choose from old plans.

subscription_interval(subscription)

- + View Source @@ -463,7 +463,7 @@ still choose from old plans.

suggest(user, usage_during_cycle)

- + View Source @@ -496,7 +496,7 @@ plan's limit from the available options for the user.

with_prices(plans)

- + View Source @@ -521,7 +521,7 @@ given plan and returns the new list of plans with completed information.

yearly_product_ids()

- + View Source diff --git a/Plausible.Billing.Quota.html b/Plausible.Billing.Quota.html index 5872e05d4..0ea7b71cb 100644 --- a/Plausible.Billing.Quota.html +++ b/Plausible.Billing.Quota.html @@ -13,7 +13,7 @@ - + @@ -130,6 +130,27 @@ Plausible Functions +
+ + +

Returns a list of extra features the user can use. Trial users have the +ability to use all features during their trial.

+ +
+ +
+ + +

Returns a list of extra features the given user's sites uses.

+ +
+
monthly_pageview_limit(subscription) @@ -215,6 +236,57 @@ Functions
+
+ +
+ + + Link to this function + +

extra_features_limit(user)

+ + + + View Source + + + +
+ +
+ +

Returns a list of extra features the user can use. Trial users have the +ability to use all features during their trial.

+
+
+
+ +
+ + + Link to this function + +

extra_features_usage(user)

+ + + + View Source + + + +
+ +
+ +
+ +
@spec extra_features_usage(Plausible.Auth.User.t()) :: [atom()]
+ +
+ +

Returns a list of extra features the given user's sites uses.

+
+
@@ -396,7 +468,7 @@ with the user's sites.

within_limit?(usage, limit)

- + View Source diff --git a/Plausible.Billing.SiteLocker.html b/Plausible.Billing.SiteLocker.html index 2860b6e87..e5fbeb3e0 100644 --- a/Plausible.Billing.SiteLocker.html +++ b/Plausible.Billing.SiteLocker.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Billing.Subscription.Status.html b/Plausible.Billing.Subscription.Status.html index 7978ac005..82e96d351 100644 --- a/Plausible.Billing.Subscription.Status.html +++ b/Plausible.Billing.Subscription.Status.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Billing.html b/Plausible.Billing.html index f0648e34a..dffd38b93 100644 --- a/Plausible.Billing.html +++ b/Plausible.Billing.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.ChangesetHelpers.html b/Plausible.ChangesetHelpers.html index f4d58b60b..6d6b49555 100644 --- a/Plausible.ChangesetHelpers.html +++ b/Plausible.ChangesetHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Cldr.AcceptLanguage.html b/Plausible.Cldr.AcceptLanguage.html index 565ca3443..d556ebe9d 100644 --- a/Plausible.Cldr.AcceptLanguage.html +++ b/Plausible.Cldr.AcceptLanguage.html @@ -13,7 +13,7 @@ - + @@ -119,7 +119,7 @@ Plausible the set of natural languages that are preferred as a response to the request. Language tags function are provided in Cldr.LanguageTag.

The format of an Accept-Language header is as follows in ABNF format:

   Accept-Language = "Accept-Language" ":"
                      1#( language-range [ ";" "q" "=" qvalue ] )
-   language-range  = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )

Each language-range MAY be given an associated quality value which represents an + language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )

Each language-range MAY be given an associated quality value which represents an estimate of the user's preference for the languages specified by that range. The quality value defaults to "q=1". For example,

   Accept-Language: da, en-gb;q=0.8, en;q=0.7

would mean: "I prefer Danish, but will accept British English and other types of English."

@@ -232,54 +232,54 @@ a configured iex> Plausible.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr) -{:ok, - %Cldr.LanguageTag{ +
iex> Plausible.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
+{:ok,
+ %Cldr.LanguageTag{
    backend: TestBackend.Cldr,
    canonical_locale_name: "zh-TW",
    cldr_locale_name: :"zh-Hant",
-   language_subtags: [],
-   extensions: %{},
+   language_subtags: [],
+   extensions: %{},
    gettext_locale_name: nil,
    language: "zh",
-   locale: %{},
-   private_use: [],
+   locale: %{},
+   private_use: [],
    rbnf_locale_name: :"zh-Hant",
    requested_locale_name: "zh-TW",
    script: :Hant,
    territory: :TW,
-   transform: %{},
-   language_variants: []
- }}
+   transform: %{},
+   language_variants: []
+ }}
 
-iex> Plausible.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
-{:ok,
- %Cldr.LanguageTag{
+iex> Plausible.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
+{:ok,
+ %Cldr.LanguageTag{
    backend: TestBackend.Cldr,
    canonical_locale_name: "zh-TW",
    cldr_locale_name: :"zh-Hant",
-   language_subtags: [],
-   extensions: %{},
+   language_subtags: [],
+   extensions: %{},
    gettext_locale_name: nil,
    language: "zh",
-   locale: %{},
-   private_use: [],
+   locale: %{},
+   private_use: [],
    rbnf_locale_name: :"zh-Hant",
    requested_locale_name: "zh-TW",
    script: :Hant,
    territory: :TW,
-   transform: %{},
-   language_variants: []
- }}
+   transform: %{},
+   language_variants: []
+ }}
 
-iex> Plausible.Cldr.AcceptLanguage.best_match("xx,yy;q=0.3")
-{:error,
- {Cldr.NoMatchingLocale,
-  "No configured locale could be matched to \"xx,yy;q=0.3\""}}
+iex> Plausible.Cldr.AcceptLanguage.best_match("xx,yy;q=0.3")
+{:error,
+ {Cldr.NoMatchingLocale,
+  "No configured locale could be matched to \"xx,yy;q=0.3\""}}
 
-iex> Plausible.Cldr.AcceptLanguage.best_match("invalid_tag")
-{:error, {Cldr.LanguageTag.ParseError,
-  "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+
iex> Plausible.Cldr.AcceptLanguage.best_match("invalid_tag") +{:error, {Cldr.LanguageTag.ParseError, + "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
@@ -340,95 +340,95 @@ wuth an error tuple for each invalid tag added at the end of the list.

-
iex> Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3", TestBackend.Cldr)
-{:ok,
- [
-   {1.0,
-    %Cldr.LanguageTag{
+
iex> Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3", TestBackend.Cldr)
+{:ok,
+ [
+   {1.0,
+    %Cldr.LanguageTag{
       backend: TestBackend.Cldr,
       canonical_locale_name: "da",
       cldr_locale_name: :da,
-      language_subtags: [],
-      extensions: %{},
+      language_subtags: [],
+      extensions: %{},
       gettext_locale_name: nil,
       language: "da",
-      locale: %{},
-      private_use: [],
+      locale: %{},
+      private_use: [],
       rbnf_locale_name: :da,
       requested_locale_name: "da",
       script: :Latn,
       territory: :DK,
-      transform: %{},
-      language_variants: []
-    }},
-   {0.3,
-    %Cldr.LanguageTag{
+      transform: %{},
+      language_variants: []
+    }},
+   {0.3,
+    %Cldr.LanguageTag{
       backend: TestBackend.Cldr,
       canonical_locale_name: "zh-TW",
       cldr_locale_name: :"zh-Hant",
-      language_subtags: [],
-      extensions: %{},
+      language_subtags: [],
+      extensions: %{},
       gettext_locale_name: nil,
       language: "zh",
-      locale: %{},
-      private_use: [],
+      locale: %{},
+      private_use: [],
       rbnf_locale_name: :"zh-Hant",
       requested_locale_name: "zh-TW",
       script: :Hant,
       territory: :TW,
-      transform: %{},
-      language_variants: []
-    }}
- ]}
+      transform: %{},
+      language_variants: []
+    }}
+ ]}
 
-iex> Plausible.Cldr.AcceptLanguage.parse("invalid_tag")
-{:error,
- {Cldr.LanguageTag.ParseError,
-  "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+iex> Plausible.Cldr.AcceptLanguage.parse("invalid_tag")
+{:error,
+ {Cldr.LanguageTag.ParseError,
+  "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
 
-iex> Plausible.Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3,invalid_tag")
-{:ok,
- [
-   {1.0,
-    %Cldr.LanguageTag{
+iex> Plausible.Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3,invalid_tag")
+{:ok,
+ [
+   {1.0,
+    %Cldr.LanguageTag{
       backend: TestBackend.Cldr,
       canonical_locale_name: "da",
       cldr_locale_name: :da,
-      language_subtags: [],
-      extensions: %{},
+      language_subtags: [],
+      extensions: %{},
       gettext_locale_name: nil,
       language: "da",
-      locale: %{},
-      private_use: [],
+      locale: %{},
+      private_use: [],
       rbnf_locale_name: :da,
       requested_locale_name: "da",
       script: :Latn,
       territory: :DK,
-      transform: %{},
-      language_variants: []
-    }},
-   {0.3,
-    %Cldr.LanguageTag{
+      transform: %{},
+      language_variants: []
+    }},
+   {0.3,
+    %Cldr.LanguageTag{
       backend: TestBackend.Cldr,
       canonical_locale_name: "zh-TW",
       cldr_locale_name: :"zh-Hant",
-      language_subtags: [],
-      extensions: %{},
+      language_subtags: [],
+      extensions: %{},
       gettext_locale_name: nil,
       language: "zh",
-      locale: %{},
-      private_use: [],
+      locale: %{},
+      private_use: [],
       rbnf_locale_name: :"zh-Hant",
       requested_locale_name: "zh-TW",
       script: :Hant,
       territory: :TW,
-      transform: %{},
-      language_variants: []
-    }},
-   {:error,
-    {Cldr.LanguageTag.ParseError,
-     "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
- ]}
+
transform: %{}, + language_variants: [] + }}, + {:error, + {Cldr.LanguageTag.ParseError, + "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}} + ]}
@@ -473,92 +473,92 @@ wuth an error tuple for each invalid tag added at the end of the list.

-
iex> Plausible.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3")
-[
-  {1.0,
-   %Cldr.LanguageTag{
+
iex> Plausible.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3")
+[
+  {1.0,
+   %Cldr.LanguageTag{
      backend: TestBackend.Cldr,
      canonical_locale_name: "da",
      cldr_locale_name: :da,
-     language_subtags: [],
-     extensions: %{},
+     language_subtags: [],
+     extensions: %{},
      gettext_locale_name: nil,
      language: "da",
-     locale: %{},
-     private_use: [],
+     locale: %{},
+     private_use: [],
      rbnf_locale_name: :da,
      requested_locale_name: "da",
      script: :Latn,
      territory: :DK,
-     transform: %{},
-     language_variants: []
-   }},
-  {0.3,
-   %Cldr.LanguageTag{
+     transform: %{},
+     language_variants: []
+   }},
+  {0.3,
+   %Cldr.LanguageTag{
      backend: TestBackend.Cldr,
      canonical_locale_name: "zh-TW",
      cldr_locale_name: :"zh-Hant",
-     language_subtags: [],
-     extensions: %{},
+     language_subtags: [],
+     extensions: %{},
      gettext_locale_name: nil,
      language: "zh",
-     locale: %{},
-     private_use: [],
+     locale: %{},
+     private_use: [],
      rbnf_locale_name: :"zh-Hant",
      requested_locale_name: "zh-TW",
      script: :Hant,
      territory: :TW,
-     transform: %{},
-     language_variants: []
-   }}
-]
+     transform: %{},
+     language_variants: []
+   }}
+]
 
 Plausible.Cldr.AcceptLanguage.parse! "invalid_tag"
 ** (Cldr.AcceptLanguageError) "Expected a BCP47 language tag. Could not parse the remaining "g" starting at position 11
     (ex_cldr) lib/cldr/accept_language.ex:304: Cldr.AcceptLanguage.parse!/1
 
-iex> Plausible.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3,invalid_tag")
-[
-  {1.0,
-   %Cldr.LanguageTag{
+iex> Plausible.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3,invalid_tag")
+[
+  {1.0,
+   %Cldr.LanguageTag{
      backend: TestBackend.Cldr,
      canonical_locale_name: "da",
      cldr_locale_name: :da,
-     language_subtags: [],
-     extensions: %{},
+     language_subtags: [],
+     extensions: %{},
      gettext_locale_name: nil,
      language: "da",
-     locale: %{},
-     private_use: [],
+     locale: %{},
+     private_use: [],
      rbnf_locale_name: :da,
      requested_locale_name: "da",
      script: :Latn,
      territory: :DK,
-     transform: %{},
-     language_variants: []
-   }},
-  {0.3,
-   %Cldr.LanguageTag{
+     transform: %{},
+     language_variants: []
+   }},
+  {0.3,
+   %Cldr.LanguageTag{
      backend: TestBackend.Cldr,
      canonical_locale_name: "zh-TW",
      cldr_locale_name: :"zh-Hant",
-     language_subtags: [],
-     extensions: %{},
+     language_subtags: [],
+     extensions: %{},
      gettext_locale_name: nil,
      language: "zh",
-     locale: %{},
-     private_use: [],
+     locale: %{},
+     private_use: [],
      rbnf_locale_name: :"zh-Hant",
      requested_locale_name: "zh-TW",
      script: :Hant,
      territory: :TW,
-     transform: %{},
-     language_variants: []
-   }},
-  {:error,
-   {Cldr.LanguageTag.ParseError,
-    "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
-]
+
transform: %{}, + language_variants: [] + }}, + {:error, + {Cldr.LanguageTag.ParseError, + "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}} +]
diff --git a/Plausible.Cldr.Currency.html b/Plausible.Cldr.Currency.html index 20a858695..b04ca5230 100644 --- a/Plausible.Cldr.Currency.html +++ b/Plausible.Cldr.Currency.html @@ -13,7 +13,7 @@ - + @@ -390,11 +390,11 @@ The default is :all. See
FJD: %Cldr.Currency{ + %{

 FJD: %Cldr.Currency{
    cash_digits: 2,
    cash_rounding: 0,
    code: "FJD",
-   count: %{one: "Fijian dollar", other: "Fijian dollars"},
+   count: %{one: "Fijian dollar", other: "Fijian dollars"},
    digits: 2,
    from: nil,
    iso_digits: 2,
@@ -404,12 +404,12 @@ The default is :all. See symbol: "FJD",
    tender: true,
    to: nil
- },
- SUR: %Cldr.Currency{
+ },
+ SUR: %Cldr.Currency{
    cash_digits: 2,
    cash_rounding: 0,
    code: "SUR",
-   count: %{one: "Soviet rouble", other: "Soviet roubles"},
+   count: %{one: "Soviet rouble", other: "Soviet roubles"},
    digits: 2,
    from: nil,
    iso_digits: nil,
@@ -419,7 +419,7 @@ The default is :all. See symbol: "SUR",
    tender: true,
    to: nil
- },
+ },
  ...
 }}
@@ -470,11 +470,11 @@ The default is :all. See FJD: %Cldr.Currency{ + => %{

FJD: %Cldr.Currency{
   cash_digits: 2,
   cash_rounding: 0,
   code: "FJD",
-  count: %{one: "Fijian dollar", other: "Fijian dollars"},
+  count: %{one: "Fijian dollar", other: "Fijian dollars"},
   digits: 2,
   from: nil,
   iso_digits: 2,
@@ -484,12 +484,12 @@ The default is :all. See symbol: "FJD",
   tender: true,
   to: nil
-},
-SUR: %Cldr.Currency{
+},
+SUR: %Cldr.Currency{
   cash_digits: 2,
   cash_rounding: 0,
   code: "SUR",
-  count: %{one: "Soviet rouble", other: "Soviet roubles"},
+  count: %{one: "Soviet rouble", other: "Soviet roubles"},
   digits: 2,
   from: nil,
   iso_digits: nil,
@@ -499,7 +499,7 @@ The default is :all. See symbol: "SUR",
   tender: true,
   to: nil
-},
+},
 ...

}

@@ -557,13 +557,13 @@ or a -
iex> Plausible.Cldr.Currency.currency_for_code("AUD")
-{:ok,
-  %Cldr.Currency{
+
iex> Plausible.Cldr.Currency.currency_for_code("AUD")
+{:ok,
+  %Cldr.Currency{
     cash_digits: 2,
     cash_rounding: 0,
     code: "AUD",
-    count: %{one: "Australian dollar", other: "Australian dollars"},
+    count: %{one: "Australian dollar", other: "Australian dollars"},
     digits: 2,
     iso_digits: 2,
     name: "Australian Dollar",
@@ -571,15 +571,15 @@ or a rounding: 0,
     symbol: "A$",
     tender: true
-}}
+}}
 
-iex> Plausible.Cldr.Currency.currency_for_code("THB")
-{:ok,
-  %Cldr.Currency{
+iex> Plausible.Cldr.Currency.currency_for_code("THB")
+{:ok,
+  %Cldr.Currency{
     cash_digits: 2,
     cash_rounding: 0,
     code: "THB",
-    count: %{one: "Thai baht", other: "Thai baht"},
+    count: %{one: "Thai baht", other: "Thai baht"},
     digits: 2,
     iso_digits: 2,
     name: "Thai Baht",
@@ -587,7 +587,7 @@ or a rounding: 0,
     symbol: "THB",
     tender: true
-}}
+}}
@@ -646,12 +646,12 @@ or a -
iex> Plausible.Cldr.Currency.currency_for_code!("AUD")
-%Cldr.Currency{
+
iex> Plausible.Cldr.Currency.currency_for_code!("AUD")
+%Cldr.Currency{
   cash_digits: 2,
   cash_rounding: 0,
   code: "AUD",
-  count: %{one: "Australian dollar", other: "Australian dollars"},
+  count: %{one: "Australian dollar", other: "Australian dollars"},
   digits: 2,
   iso_digits: 2,
   name: "Australian Dollar",
@@ -659,14 +659,14 @@ or a rounding: 0,
   symbol: "A$",
   tender: true
-}
+}
 
-iex> Plausible.Cldr.Currency.currency_for_code!("THB")
-%Cldr.Currency{
+iex> Plausible.Cldr.Currency.currency_for_code!("THB")
+%Cldr.Currency{
   cash_digits: 2,
   cash_rounding: 0,
   code: "THB",
-  count: %{one: "Thai baht", other: "Thai baht"},
+  count: %{one: "Thai baht", other: "Thai baht"},
   digits: 2,
   iso_digits: 2,
   name: "Thai Baht",
@@ -674,7 +674,7 @@ or a rounding: 0,
   symbol: "THB",
   tender: true
-}
+}
@@ -715,11 +715,11 @@ or a -
iex> {:ok, locale} = Plausible.Cldr.validate_locale "en"
+
iex> {:ok, locale} = Plausible.Cldr.validate_locale "en"
 iex> Plausible.Cldr.Currency.currency_from_locale locale
 :USD
 
-iex> {:ok, locale} = Plausible.Cldr.validate_locale "en-AU"
+iex> {:ok, locale} = Plausible.Cldr.validate_locale "en-AU"
 iex> Plausible.Cldr.Currency.currency_from_locale locale
 :AUD
 
@@ -768,13 +768,13 @@ or a 
 
 
iex> MyApp.Cldr.Currency.currency_history_for_locale "en"
-{:ok,
-    %{
-    USD: %{from: ~D[1792-01-01], to: nil},
-    USN: %{tender: false},
-    USS: %{from: nil, tender: false, to: ~D[2014-03-01]}
-  }
-}
+{:ok, + %{ + USD: %{from: ~D[1792-01-01], to: nil}, + USN: %{tender: false}, + USS: %{from: nil, tender: false, to: ~D[2014-03-01]} + } +}
@@ -834,8 +834,8 @@ The default is :all. See MyApp.Cldr.Currency.currency_strings "en" -=> {:ok, - %{ +=> {:ok, + %{ "mexican silver pesos" => :MXP, "sudanese dinar" => :SDD, "bad" => :BAD, @@ -845,7 +845,7 @@ The default is :all. See "guyanaese dollars" => :GYD, "equatorial guinean ekwele" => :GQE, ... - }} + }}
@@ -905,7 +905,7 @@ The default is :all. See MyApp.Cldr.Currency.currency_strings! "en" -=> %{ +=> %{ "mexican silver pesos" => :MXP, "sudanese dinar" => :SDD, "bad" => :BAD, @@ -915,7 +915,7 @@ The default is :all. See "guyanaese dollars" => :GYD, "equatorial guinean ekwele" => :GQE, ... - } + }
@@ -1004,7 +1004,7 @@ mapping is returned for that territory.

iex> Plausible.Cldr.Currency.current_territory_currencies() +
iex> Plausible.Cldr.Currency.current_territory_currencies()

@@ -1097,10 +1097,10 @@ currency code

iex> Plausible.Cldr.Currency.known_currency_code "AUD" -{:ok, :AUD} +{:ok, :AUD} iex> Plausible.Cldr.Currency.known_currency_code "GGG" -{:error, {Cldr.UnknownCurrencyError, "The currency \"GGG\" is invalid"}} +{:error, {Cldr.UnknownCurrencyError, "The currency \"GGG\" is invalid"}}

@@ -1247,14 +1247,14 @@ such as 0.05. Optional.

iex> Plausible.Cldr.Currency.new(:XAE, name: "Custom Name", digits: 0) -{:ok, - %Cldr.Currency{ +
iex> Plausible.Cldr.Currency.new(:XAE, name: "Custom Name", digits: 0)
+{:ok,
+ %Cldr.Currency{
    alt_code: :XAE,
    cash_digits: 0,
    cash_rounding: nil,
    code: :XAE,
-   count: %{other: "Custom Name"},
+   count: %{other: "Custom Name"},
    digits: 0,
    from: nil,
    iso_digits: 0,
@@ -1264,11 +1264,11 @@ such as 0.05. Optional.

symbol: "XAE", tender: false, to: nil - }} -iex> MyApp.Cldr.Currency.new(:XAH, name: "Custom Name") -{:error, "Required options are missing. Required options are [:name, :digits]"} -iex> Plausible.Cldr.Currency.new(:XAE, name: "XAE", digits: 0) -{:error, {Cldr.CurrencyAlreadyDefined, "Currency :XAE is already defined."}}

+
}} +iex> MyApp.Cldr.Currency.new(:XAH, name: "Custom Name") +{:error, "Required options are missing. Required options are [:name, :digits]"} +iex> Plausible.Cldr.Currency.new(:XAE, name: "XAE", digits: 0) +{:error, {Cldr.CurrencyAlreadyDefined, "Currency :XAE is already defined."}}

@@ -1327,19 +1327,19 @@ default is Plaus
iex> Plausible.Cldr.Currency.pluralize 1, :USD
-{:ok, "US dollar"}
+{:ok, "US dollar"}
 
 iex> Plausible.Cldr.Currency.pluralize 3, :USD
-{:ok, "US dollars"}
+{:ok, "US dollars"}
 
 iex> Plausible.Cldr.Currency.pluralize 12, :USD, locale: "zh"
-{:ok, "美元"}
+{:ok, "美元"}
 
 iex> Plausible.Cldr.Currency.pluralize 12, :USD, locale: "fr"
-{:ok, "dollars des États-Unis"}
+{:ok, "dollars des États-Unis"}
 
 iex> Plausible.Cldr.Currency.pluralize 1, :USD, locale: "fr"
-{:ok, "dollar des États-Unis"}
+{:ok, "dollar des États-Unis"}
@@ -1382,7 +1382,7 @@ or a
iex> MyApp.Cldr.Currency.strings_for_currency :AUD, "en"
-["a$", "australian dollars", "aud", "australian dollar"]
+["a$", "australian dollars", "aud", "australian dollar"]
diff --git a/Plausible.Cldr.Locale.html b/Plausible.Cldr.Locale.html index faee5f6fb..c8a7033f1 100644 --- a/Plausible.Cldr.Locale.html +++ b/Plausible.Cldr.Locale.html @@ -13,7 +13,7 @@ - + @@ -297,16 +297,16 @@ this specific locale..

iex> Plausible.Cldr.Locale.fallback_locale_names(:"fr-CA") -{:ok, [:"fr-CA", :fr, :und]} +
iex> Plausible.Cldr.Locale.fallback_locale_names(:"fr-CA")
+{:ok, [:"fr-CA", :fr, :und]}
 
 # Fallbacks are typically formed by progressively
 # stripping variant, territory and script from the
 # given locale name. But not always - there are
 # certain fallbacks that take a different path.
 
-iex> Plausible.Cldr.Locale.fallback_locale_names(:nb)
-{:ok, [:nb, :no, :und]}
+
iex> Plausible.Cldr.Locale.fallback_locale_names(:nb) +{:ok, [:nb, :no, :und]}
@@ -360,20 +360,20 @@ this specific locale.

Plausible.Cldr.Locale.fallback_locales(:"fr-CA") -=> {:ok, - [#Cldr.LanguageTag<fr-CA [validated]>, #Cldr.LanguageTag<fr [validated]>, - #Cldr.LanguageTag<und [validated]>]} +
Plausible.Cldr.Locale.fallback_locales(:"fr-CA")
+=> {:ok,
+     [#Cldr.LanguageTag<fr-CA [validated]>, #Cldr.LanguageTag<fr [validated]>,
+      #Cldr.LanguageTag<und [validated]>]}
 
 # Fallbacks are typically formed by progressively
 # stripping variant, territory and script from the
 # given locale name. But not always - there are
 # certain fallbacks that take a different path.
 
-Plausible.Cldr.Locale.fallback_locales(:nb))
-=> {:ok,
-     [#Cldr.LanguageTag<nb [validated]>, #Cldr.LanguageTag<no [validated]>,
-      #Cldr.LanguageTag<und [validated]>]}
+
Plausible.Cldr.Locale.fallback_locales(:nb)) +=> {:ok, + [#Cldr.LanguageTag<nb [validated]>, #Cldr.LanguageTag<no [validated]>, + #Cldr.LanguageTag<und [validated]>]}

@@ -504,15 +504,15 @@ generic top-level domain names.

iex> Plausible.Cldr.Locale.locale_from_host "a.b.com.au" -Elixir.Plausible.Cldr.validate_locale(:"en-AU") +Elixir.Plausible.Cldr.validate_locale(:"en-AU") -iex> Plausible.Cldr.Locale.locale_from_host("a.b.com.tv") -{:error, - {Cldr.UnknownLocaleError, "No locale was identified for territory \"tv\""}} +iex> Plausible.Cldr.Locale.locale_from_host("a.b.com.tv") +{:error, + {Cldr.UnknownLocaleError, "No locale was identified for territory \"tv\""}} -iex> Plausible.Cldr.Locale.locale_from_host("a.b.com") -{:error, - {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}} +iex> Plausible.Cldr.Locale.locale_from_host("a.b.com") +{:error, + {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}}

@@ -654,12 +654,12 @@ be a territory.

iex> Cldr.Locale.territory_from_host("a.b.com.au") -{:ok, :AU} +
iex> Cldr.Locale.territory_from_host("a.b.com.au")
+{:ok, :AU}
 
-iex> Cldr.Locale.territory_from_host("a.b.com")
-{:error,
- {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}}
+
iex> Cldr.Locale.territory_from_host("a.b.com") +{:error, + {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}}

diff --git a/Plausible.Cldr.Number.Cardinal.html b/Plausible.Cldr.Number.Cardinal.html index f54af39c3..b0e421270 100644 --- a/Plausible.Cldr.Number.Cardinal.html +++ b/Plausible.Cldr.Number.Cardinal.html @@ -13,7 +13,7 @@ - + @@ -426,31 +426,31 @@ The valid substitution keys are :zero, iex> Plausible.Cldr.Number.Cardinal.pluralize 1, "en", %{one: "one"} +
iex> Plausible.Cldr.Number.Cardinal.pluralize 1, "en", %{one: "one"}
 "one"
 
-iex> Plausible.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one"}
+iex> Plausible.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one"}
 nil
 
-iex> Plausible.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one", two: "two", other: "other"}
+iex> Plausible.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one", two: "two", other: "other"}
 "other"
 
-iex> Plausible.Cldr.Number.Cardinal.pluralize 22, "en", %{one: "one", two: "two", other: "other"}
+iex> Plausible.Cldr.Number.Cardinal.pluralize 22, "en", %{one: "one", two: "two", other: "other"}
 "other"
 
-iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(1), "en", %{one: "one"}
+iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(1), "en", %{one: "one"}
 "one"
 
-iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one"}
+iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one"}
 nil
 
-iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one", two: "two"}
+iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one", two: "two"}
 nil
 
-iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
+iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
 "few"
 
-iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
+iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
 "other"
diff --git a/Plausible.Cldr.Number.Format.html b/Plausible.Cldr.Number.Format.html index 18b7079a2..3ad463059 100644 --- a/Plausible.Cldr.Number.Format.html +++ b/Plausible.Cldr.Number.Format.html @@ -13,7 +13,7 @@ - + @@ -439,7 +439,7 @@ to precompile all the known formats at compile time.

#=> Plausible.Cldr.Number.Format.Format.decimal_format_list -["#", "#,##,##0%", +["#", "#,##,##0%", "#,##,##0.###", "#,##,##0.00¤", "#,##,##0.00¤;(#,##,##0.00¤)", "#,##,##0 %", "#,##0%", "#,##0.###", "#,##0.00 ¤", "#,##0.00 ¤;(#,##0.00 ¤)", "#,##0.00¤", "#,##0.00¤;(#,##0.00¤)", @@ -449,7 +449,7 @@ to precompile all the known formats at compile time.

"000 B ¤", "000 E ¤", "000 K ¤", "000 MRD ¤", "000 Md ¤", "000 Mio'.' ¤", "000 Mio ¤", "000 Mld ¤", "000 Mln ¤", "000 Mn ¤", "000 Mrd'.' ¤", "000 Mrd ¤", "000 Mr ¤", "000 M ¤", "000 NT ¤", "000 N ¤", "000 Tn ¤", -"000 Tr ¤", ...] +"000 Tr ¤", ...]
@@ -497,8 +497,8 @@ the known formats at compile time. Its use is not otherwise recommended.

-
iex> Plausible.Cldr.Number.Format.decimal_format_list_for(:en)
-{:ok, ["#,##0%", "#,##0.###", "#,##0.00", "#,##0.00;(#,##0.00)","#E0",
+
iex> Plausible.Cldr.Number.Format.decimal_format_list_for(:en)
+{:ok, ["#,##0%", "#,##0.###", "#,##0.00", "#,##0.00;(#,##0.00)","#E0",
  "0 billion", "0 million", "0 thousand",
  "0 trillion", "00 billion", "00 million", "00 thousand", "00 trillion",
  "000 billion", "000 million", "000 thousand", "000 trillion", "000B", "000K",
@@ -506,7 +506,7 @@ the known formats at compile time. Its use is not otherwise recommended.

"¤#,##0.00", "¤#,##0.00;(¤#,##0.00)", "¤000B", "¤000K", "¤000M", "¤000T", "¤00B", "¤00K", "¤00M", "¤00T", "¤0B", "¤0K", "¤0M", "¤0T", "¤ #,##0.00", "¤ #,##0.00;(¤ #,##0.00)", "¤ 000B", "¤ 000K", "¤ 000M", - "¤ 000T", "¤ 00B", "¤ 00K", "¤ 00M", "¤ 00T", "¤ 0B", "¤ 0K", "¤ 0M", "¤ 0T"]}

+
"¤ 000T", "¤ 00B", "¤ 00K", "¤ 00M", "¤ 00T", "¤ 0B", "¤ 0K", "¤ 0M", "¤ 0T"]}
@@ -559,8 +559,8 @@ is Plausible.Cld Examples

-
iex> Plausible.Cldr.Number.Format.default_grouping_for(:en)
-{:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}
+
iex> Plausible.Cldr.Number.Format.default_grouping_for(:en)
+{:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}
@@ -612,8 +612,8 @@ is Plausible.Cld Examples

-
iex> Plausible.Cldr.Number.Format.default_grouping_for!(:en)
-%{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}
+
iex> Plausible.Cldr.Number.Format.default_grouping_for!(:en)
+%{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}
@@ -670,18 +670,18 @@ by percent: "#,##0 %", scientific: "#E0", standard: "#,##0.###" - currency_short: [{"1000", [one: "0 k ¤", other: "0 k ¤"]}, - {"10000", [one: "00 k ¤", other: "00 k ¤"]}, - {"100000", [one: "000 k ¤", other: "000 k ¤"]}, - {"1000000", [one: "0 M ¤", other: "0 M ¤"]}, - {"10000000", [one: "00 M ¤", other: "00 M ¤"]}, - {"100000000", [one: "000 M ¤", other: "000 M ¤"]}, - {"1000000000", [one: "0 Md ¤", other: "0 Md ¤"]}, - {"10000000000", [one: "00 Md ¤", other: "00 Md ¤"]}, - {"100000000000", [one: "000 Md ¤", other: "000 Md ¤"]}, - {"1000000000000", [one: "0 Bn ¤", other: "0 Bn ¤"]}, - {"10000000000000", [one: "00 Bn ¤", other: "00 Bn ¤"]}, - {"100000000000000", [one: "000 Bn ¤", other: "000 Bn ¤"]}], + currency_short: [{"1000", [one: "0 k ¤", other: "0 k ¤"]}, + {"10000", [one: "00 k ¤", other: "00 k ¤"]}, + {"100000", [one: "000 k ¤", other: "000 k ¤"]}, + {"1000000", [one: "0 M ¤", other: "0 M ¤"]}, + {"10000000", [one: "00 M ¤", other: "00 M ¤"]}, + {"100000000", [one: "000 M ¤", other: "000 M ¤"]}, + {"1000000000", [one: "0 Md ¤", other: "0 Md ¤"]}, + {"10000000000", [one: "00 Md ¤", other: "00 Md ¤"]}, + {"100000000000", [one: "000 Md ¤", other: "000 Md ¤"]}, + {"1000000000000", [one: "0 Bn ¤", other: "0 Bn ¤"]}, + {"10000000000000", [one: "00 Bn ¤", other: "00 Bn ¤"]}, + {"100000000000000", [one: "000 Bn ¤", other: "000 Bn ¤"]}], ... }
@@ -772,8 +772,8 @@ is Plausible.Cld Examples

-
iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for("en")
-{:ok, 1}
+
iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for("en")
+{:ok, 1}
@@ -825,7 +825,7 @@ is Plausible.Cld Examples -
iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for!("en")
+
iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for!("en")
 1
diff --git a/Plausible.Cldr.Number.Formatter.Decimal.html b/Plausible.Cldr.Number.Formatter.Decimal.html index e9c2c9b53..3ddc865a4 100644 --- a/Plausible.Cldr.Number.Formatter.Decimal.html +++ b/Plausible.Cldr.Number.Formatter.Decimal.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Cldr.Number.Ordinal.html b/Plausible.Cldr.Number.Ordinal.html index 609fdcde6..153c6d0ac 100644 --- a/Plausible.Cldr.Number.Ordinal.html +++ b/Plausible.Cldr.Number.Ordinal.html @@ -13,7 +13,7 @@ - + @@ -429,31 +429,31 @@ The valid substitution keys are :zero, iex> Plausible.Cldr.Number.Ordinal.pluralize 1, :en, %{one: "one"} +
iex> Plausible.Cldr.Number.Ordinal.pluralize 1, :en, %{one: "one"}
 "one"
 
-iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one"}
 nil
 
-iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one", two: "two"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one", two: "two"}
 "two"
 
-iex> Plausible.Cldr.Number.Ordinal.pluralize 22, :en, %{one: "one", two: "two", other: "other"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 22, :en, %{one: "one", two: "two", other: "other"}
 "two"
 
-iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: "one"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: "one"}
 "one"
 
-iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one"}
 nil
 
-iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one", two: "two"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one", two: "two"}
 "two"
 
-iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
 "other"
 
-iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
 "other"
diff --git a/Plausible.Cldr.Number.PluralRule.Range.html b/Plausible.Cldr.Number.PluralRule.Range.html index 9525f7f8d..cd78d8d3e 100644 --- a/Plausible.Cldr.Number.PluralRule.Range.html +++ b/Plausible.Cldr.Number.PluralRule.Range.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Cldr.Number.Symbol.html b/Plausible.Cldr.Number.Symbol.html index a2e2f1d22..fec8404dd 100644 --- a/Plausible.Cldr.Number.Symbol.html +++ b/Plausible.Cldr.Number.Symbol.html @@ -13,7 +13,7 @@ - + @@ -349,9 +349,9 @@ is Plausible.Cld Example: -
iex> Plausible.Cldr.Number.Symbol.number_symbols_for(:th)
-{:ok, %{
-   latn: %Cldr.Number.Symbol{
+
iex> Plausible.Cldr.Number.Symbol.number_symbols_for(:th)
+{:ok, %{
+   latn: %Cldr.Number.Symbol{
      decimal: ".",
      exponential: "E",
      group: ",",
@@ -364,8 +364,8 @@ is Plausible.Cld
      plus_sign: "+",
      superscripting_exponent: "×",
      time_separator: ":"
-   },
-   thai: %Cldr.Number.Symbol{
+   },
+   thai: %Cldr.Number.Symbol{
      decimal: ".",
      exponential: "E",
      group: ",",
@@ -378,8 +378,8 @@ is Plausible.Cld
      plus_sign: "+",
      superscripting_exponent: "×",
      time_separator: ":"
-   }
- }}
+
} + }}
diff --git a/Plausible.Cldr.Number.System.html b/Plausible.Cldr.Number.System.html index c9a888620..68f3d16d9 100644 --- a/Plausible.Cldr.Number.System.html +++ b/Plausible.Cldr.Number.System.html @@ -13,7 +13,7 @@ - + @@ -288,23 +288,23 @@ it is returned as is.

iex> Plausible.Cldr.Number.System.number_system_for "th", :latn -{:ok, %{digits: "0123456789", type: :numeric}} +{:ok, %{digits: "0123456789", type: :numeric}} iex> Plausible.Cldr.Number.System.number_system_for "en", :default -{:ok, %{digits: "0123456789", type: :numeric}} +{:ok, %{digits: "0123456789", type: :numeric}} iex> Plausible.Cldr.Number.System.number_system_for "he", :traditional -{:ok, %{rules: "hebrew", type: :algorithmic}} +{:ok, %{rules: "hebrew", type: :algorithmic}} iex> Plausible.Cldr.Number.System.number_system_for "en", :native -{:ok, %{digits: "0123456789", type: :numeric}} +{:ok, %{digits: "0123456789", type: :numeric}} iex> Plausible.Cldr.Number.System.number_system_for "en", :finance -{ +{ :error, - {Cldr.UnknownNumberSystemError, - "The number system :finance is unknown for the locale named :en. Valid number systems are %{default: :latn, native: :latn}"} -} + {Cldr.UnknownNumberSystemError, + "The number system :finance is unknown for the locale named :en. Valid number systems are %{default: :latn, native: :latn}"} +}

@@ -395,10 +395,10 @@ or a
iex> Plausible.Cldr.Number.System.number_system_names_for "en"
-{:ok, [:latn]}
+{:ok, [:latn]}
 
 iex> Plausible.Cldr.Number.System.number_system_names_for "zz"
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
@@ -480,13 +480,13 @@ or a
iex> Plausible.Cldr.Number.System.number_systems_for "en"
-{:ok, %{default: :latn, native: :latn}}
+{:ok, %{default: :latn, native: :latn}}
 
 iex> Plausible.Cldr.Number.System.number_systems_for "th"
-{:ok, %{default: :latn, native: :thai}}
+{:ok, %{default: :latn, native: :thai}}
 
 iex> Plausible.Cldr.Number.System.number_systems_for "zz"
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
@@ -584,20 +584,20 @@ actual system name.

ex> Plausible.Cldr.Number.System.system_name_from(:default, "en") -{:ok, :latn} +
ex> Plausible.Cldr.Number.System.system_name_from(:default, "en")
+{:ok, :latn}
 
-iex> Plausible.Cldr.Number.System.system_name_from("latn", "en")
-{:ok, :latn}
+iex> Plausible.Cldr.Number.System.system_name_from("latn", "en")
+{:ok, :latn}
 
-iex> Plausible.Cldr.Number.System.system_name_from(:native, "en")
-{:ok, :latn}
+iex> Plausible.Cldr.Number.System.system_name_from(:native, "en")
+{:ok, :latn}
 
-iex> Plausible.Cldr.Number.System.system_name_from(:nope, "en")
-{
+iex> Plausible.Cldr.Number.System.system_name_from(:nope, "en")
+{
   :error,
-  {Cldr.UnknownNumberSystemError, "The number system :nope is unknown"}
-}

Note that return value is not guaranteed to be a valid + {Cldr.UnknownNumberSystemError, "The number system :nope is unknown"} +}

Note that return value is not guaranteed to be a valid number system for the given locale as demonstrated in the third example.

@@ -644,16 +644,16 @@ is recommended.

iex> Plausible.Cldr.Number.System.to_system 123456, :hebr -{:ok, "קכ״ג׳תנ״ו"} +{:ok, "קכ״ג׳תנ״ו"} iex> Plausible.Cldr.Number.System.to_system 123, :hans -{:ok, "一百二十三"} +{:ok, "一百二十三"} iex> Plausible.Cldr.Number.System.to_system 123, :hant -{:ok, "一百二十三"} +{:ok, "一百二十三"} iex> Plausible.Cldr.Number.System.to_system 123, :hansfin -{:ok, "壹佰贰拾叁"} +{:ok, "壹佰贰拾叁"}
diff --git a/Plausible.Cldr.Number.Transliterate.html b/Plausible.Cldr.Number.Transliterate.html index f6a532efb..e63e99472 100644 --- a/Plausible.Cldr.Number.Transliterate.html +++ b/Plausible.Cldr.Number.Transliterate.html @@ -13,7 +13,7 @@ - + @@ -133,12 +133,12 @@ digits between number systems. For example from :arabic to :latn. Since genera transliteration map is slow, pairs of transliterations can be configured so that the transliteration map is created at compile time and therefore speeding up transliteration at run time.

To configure these transliteration pairs, add the to the use Cldr configuration -in a backend module:

defmodule MyApp.Cldr do
+in a backend module:

defmodule MyApp.Cldr do
   use Cldr,
-  locale: ["en", "fr", "th"],
+  locale: ["en", "fr", "th"],
   default_locale: "en",
-  precompile_transliterations: [{:latn, :thai}, {:arab, :thai}]
-end

Where each tuple in the list configures one transliteration map. In this example, two maps are + precompile_transliterations: [{:latn, :thai}, {:arab, :thai}] +end

Where each tuple in the list configures one transliteration map. In this example, two maps are configured: from :latn to :thai and from :arab to :thai.

A list of configurable number systems is returned by Cldr.Number.System.systems_with_digits/0.

If a transliteration is requested between two number pairs that have not been configured for precompilation, a warning is logged.

@@ -252,22 +252,22 @@ and

-
iex> Plausible.Cldr.Number.Transliterate.transliterate("123556")
+
iex> Plausible.Cldr.Number.Transliterate.transliterate("123556")
 "123556"
 
-iex> Plausible.Cldr.Number.Transliterate.transliterate("123,556.000", "fr", :default)
+iex> Plausible.Cldr.Number.Transliterate.transliterate("123,556.000", "fr", :default)
 "123 556,000"
 
-iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", :default)
+iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", :default)
 "123556"
 
-iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", "thai")
+iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", "thai")
 "๑๒๓๕๕๖"
 
-iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", :native)
+iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", :native)
 "๑๒๓๕๕๖"
 
-iex> Plausible.Cldr.Number.Transliterate.transliterate("Some number is: 123556", "th", "thai")
+iex> Plausible.Cldr.Number.Transliterate.transliterate("Some number is: 123556", "th", "thai")
 "Some number is: ๑๒๓๕๕๖"
diff --git a/Plausible.Cldr.Number.html b/Plausible.Cldr.Number.html index 461822fff..38a8e28ce 100644 --- a/Plausible.Cldr.Number.html +++ b/Plausible.Cldr.Number.html @@ -13,7 +13,7 @@ - + @@ -412,19 +412,19 @@ using the Elixir standard library functions.

-
iex> Plausible.Cldr.Number.parse("+1.000,34", locale: "de")
-{:ok, 1000.34}
+
iex> Plausible.Cldr.Number.parse("+1.000,34", locale: "de")
+{:ok, 1000.34}
 
-iex> Plausible.Cldr.Number.parse("-1_000_000.34")
-{:ok, -1000000.34}
+iex> Plausible.Cldr.Number.parse("-1_000_000.34")
+{:ok, -1000000.34}
 
-iex> Plausible.Cldr.Number.parse("1.000", locale: "de", number: :integer)
-{:ok, 1000}
+iex> Plausible.Cldr.Number.parse("1.000", locale: "de", number: :integer)
+{:ok, 1000}
 
-iex> Plausible.Cldr.Number.parse("+1.000,34", locale: "de", number: :integer)
-{:error,
-  {Cldr.Number.ParseError,
-   "The string \"+1.000,34\" could not be parsed as a number"}}
+
iex> Plausible.Cldr.Number.parse("+1.000,34", locale: "de", number: :integer) +{:error, + {Cldr.Number.ParseError, + "The string \"+1.000,34\" could not be parsed as a number"}}
@@ -496,17 +496,17 @@ financial instruments.

-
iex> Plausible.Cldr.Number.scan("100 US dollars")
+
iex> Plausible.Cldr.Number.scan("100 US dollars")
 ...> |> Plausible.Cldr.Number.resolve_currencies
-[100, :USD]
+[100, :USD]
 
-iex> Plausible.Cldr.Number.scan("100 eurosports")
-...> |> Plausible.Cldr.Number.resolve_currencies(fuzzy: 0.75)
-[100, :EUR]
+iex> Plausible.Cldr.Number.scan("100 eurosports")
+...> |> Plausible.Cldr.Number.resolve_currencies(fuzzy: 0.75)
+[100, :EUR]
 
-iex> Plausible.Cldr.Number.scan("100 dollars des États-Unis")
-...> |> Plausible.Cldr.Number.resolve_currencies(locale: "fr")
-[100, :USD]
+
iex> Plausible.Cldr.Number.scan("100 dollars des États-Unis") +...> |> Plausible.Cldr.Number.resolve_currencies(locale: "fr") +[100, :USD]
@@ -583,19 +583,19 @@ financial instruments.

iex> Plausible.Cldr.Number.resolve_currency("US dollars") -[:USD] +
iex> Plausible.Cldr.Number.resolve_currency("US dollars")
+[:USD]
 
-iex> Plausible.Cldr.Number.resolve_currency("100 eurosports", fuzzy: 0.75)
-[:EUR]
+iex> Plausible.Cldr.Number.resolve_currency("100 eurosports", fuzzy: 0.75)
+[:EUR]
 
-iex> Plausible.Cldr.Number.resolve_currency("dollars des États-Unis", locale: "fr")
-[:USD]
+iex> Plausible.Cldr.Number.resolve_currency("dollars des États-Unis", locale: "fr")
+[:USD]
 
-iex> Plausible.Cldr.Number.resolve_currency("not a known currency", locale: "fr")
-{:error,
- {Cldr.UnknownCurrencyError,
-  "The currency \"not a known currency\" is unknown or not supported"}}
+
iex> Plausible.Cldr.Number.resolve_currency("not a known currency", locale: "fr") +{:error, + {Cldr.UnknownCurrencyError, + "The currency \"not a known currency\" is unknown or not supported"}}

@@ -659,13 +659,13 @@ The default is options[:backend].get_locale()
iex> Plausible.Cldr.Number.resolve_per "11%"
-["11", :percent]
+["11", :percent]
 
 iex> Plausible.Cldr.Number.resolve_per "% of linguists"
-[:percent, " of linguists"]
+[:percent, " of linguists"]
 
 iex> Plausible.Cldr.Number.resolve_per "% of linguists %"
-[:percent, " of linguists ", :percent]
+[:percent, " of linguists ", :percent]
@@ -722,9 +722,9 @@ The default is options[:backend].get_locale() -
iex> Plausible.Cldr.Number.scan("100%")
-...> |> Plausible.Cldr.Number.resolve_pers()
-[100, :percent]
+
iex> Plausible.Cldr.Number.scan("100%")
+...> |> Plausible.Cldr.Number.resolve_pers()
+[100, :percent]
@@ -784,20 +784,20 @@ and any options provided are passed to that function.

iex> Plausible.Cldr.Number.scan("£1_000_000.34") -["£", 1000000.34] +
iex> Plausible.Cldr.Number.scan("£1_000_000.34")
+["£", 1000000.34]
 
-iex> Plausible.Cldr.Number.scan("I want £1_000_000 dollars")
-["I want £", 1000000, " dollars"]
+iex> Plausible.Cldr.Number.scan("I want £1_000_000 dollars")
+["I want £", 1000000, " dollars"]
 
-iex> Plausible.Cldr.Number.scan("The prize is 23")
-["The prize is ", 23]
+iex> Plausible.Cldr.Number.scan("The prize is 23")
+["The prize is ", 23]
 
-iex> Plausible.Cldr.Number.scan("The lottery number is 23 for the next draw")
-["The lottery number is ", 23, " for the next draw"]
+iex> Plausible.Cldr.Number.scan("The lottery number is 23 for the next draw")
+["The lottery number is ", 23, " for the next draw"]
 
-iex> Plausible.Cldr.Number.scan("The loss is -1.000 euros", locale: "de", number: :integer)
-["The loss is ", -1000, " euros"]
+
iex> Plausible.Cldr.Number.scan("The loss is -1.000 euros", locale: "de", number: :integer) +["The loss is ", -1000, " euros"]

@@ -844,7 +844,7 @@ options.

iex> Plausible.Cldr.Number.to_approx_string 1234 -{:ok, "~1,234"} +{:ok, "~1,234"}

@@ -891,7 +891,7 @@ options.

iex> Plausible.Cldr.Number.to_at_least_string 1234 -{:ok, "1,234+"} +{:ok, "1,234+"}

@@ -938,7 +938,7 @@ options.

iex> Plausible.Cldr.Number.to_at_most_string 1234 -{:ok, "≤1,234"} +{:ok, "≤1,234"}

@@ -985,7 +985,7 @@ options.

iex> Plausible.Cldr.Number.to_range_string 1234..5678
-{:ok, "1,234–5,678"}
+{:ok, "1,234–5,678"}
@@ -1104,21 +1104,21 @@ extensions.

iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn +applied to the symbol than the number. For example:

iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
 ...>   string, :currency_symbol -> "<span class=\"symbol\">" <> string <> "</span>"
 ...>   string, :number -> "<span class=\"number\">" <> string <> "</span>"
 ...>   string, :currency_space -> "<span>" <> string <> "</span>"
 ...>   string, _other -> string
-...> end)
-{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}

It is also possible and recommended to use the Phoenix.HTML.Tag.content_tag/3 +...> end) +{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}

It is also possible and recommended to use the Phoenix.HTML.Tag.content_tag/3 function if wrapping HTML tags since these will ensure HTML entities are -correctly encoded. For example:

iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
-...>   string, :currency_symbol -> Phoenix.HTML.Tag.content_tag(:span, string, class: "symbol")
-...>   string, :number -> Phoenix.HTML.Tag.content_tag(:span, string, class: "number")
-...>   string, :currency_space -> Phoenix.HTML.Tag.content_tag(:span, string)
+correctly encoded.  For example:

iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
+...>   string, :currency_symbol -> Phoenix.HTML.Tag.content_tag(:span, string, class: "symbol")
+...>   string, :number -> Phoenix.HTML.Tag.content_tag(:span, string, class: "number")
+...>   string, :currency_space -> Phoenix.HTML.Tag.content_tag(:span, string)
 ...>   string, _other -> string
-...> end)
-{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}

When formatting a number the format is parsed into format elements that might include +...> end) +{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}

When formatting a number the format is parsed into format elements that might include a currency symbol, a literal string, inserted text between a currency symbol and the currency amount, a percent sign, the number itself and several other elements. In some cases it is helpful to be apply specific formatting to each element. @@ -1139,80 +1139,80 @@ inserted in the final formatted number.

iex> Plausible.Cldr.Number.to_string 12345 -{:ok, "12,345"} +{:ok, "12,345"} iex> Plausible.Cldr.Number.to_string 12345, locale: "fr" -{:ok, "12 345"} +{:ok, "12 345"} iex> Plausible.Cldr.Number.to_string 1345.32, currency: :EUR, locale: "es", minimum_grouping_digits: 1 -{:ok, "1.345,32 €"} +{:ok, "1.345,32 €"} iex> Plausible.Cldr.Number.to_string 1345.32, currency: :EUR, locale: "es" -{:ok, "1345,32 €"} +{:ok, "1345,32 €"} iex> Plausible.Cldr.Number.to_string 12345, locale: "fr", currency: "USD" -{:ok, "12 345,00 $US"} +{:ok, "12 345,00 $US"} iex> Plausible.Cldr.Number.to_string 12345, format: "#E0" -{:ok, "1.2345E4"} +{:ok, "1.2345E4"} iex> Plausible.Cldr.Number.to_string 12345, format: :accounting, currency: "THB" -{:ok, "THB 12,345.00"} +{:ok, "THB 12,345.00"} iex> Plausible.Cldr.Number.to_string -12345, format: :accounting, currency: "THB" -{:ok, "(THB 12,345.00)"} +{:ok, "(THB 12,345.00)"} iex> Plausible.Cldr.Number.to_string 12345, format: :accounting, currency: "THB", ...> locale: "th" -{:ok, "฿12,345.00"} +{:ok, "฿12,345.00"} iex> Plausible.Cldr.Number.to_string 12345, format: :accounting, currency: "THB", ...> locale: "th", number_system: :native -{:ok, "฿๑๒,๓๔๕.๐๐"} +{:ok, "฿๑๒,๓๔๕.๐๐"} iex> Plausible.Cldr.Number.to_string 1244.30, format: :long -{:ok, "1 thousand"} +{:ok, "1 thousand"} iex> Plausible.Cldr.Number.to_string 1244.30, format: :long, currency: "USD" -{:ok, "1,244 US dollars"} +{:ok, "1,244 US dollars"} iex> Plausible.Cldr.Number.to_string 1244.30, format: :short -{:ok, "1K"} +{:ok, "1K"} iex> Plausible.Cldr.Number.to_string 1244.30, format: :short, currency: "EUR" -{:ok, "€1K"} +{:ok, "€1K"} iex> Plausible.Cldr.Number.to_string 1234, format: :spellout -{:ok, "one thousand two hundred thirty-four"} +{:ok, "one thousand two hundred thirty-four"} iex> Plausible.Cldr.Number.to_string 1234, format: :spellout_verbose -{:ok, "one thousand two hundred and thirty-four"} +{:ok, "one thousand two hundred and thirty-four"} iex> Plausible.Cldr.Number.to_string 1989, format: :spellout_year -{:ok, "nineteen eighty-nine"} +{:ok, "nineteen eighty-nine"} iex> Plausible.Cldr.Number.to_string 123, format: :ordinal -{:ok, "123rd"} +{:ok, "123rd"} iex> Plausible.Cldr.Number.to_string 123, format: :roman -{:ok, "CXXIII"} +{:ok, "CXXIII"} iex> Plausible.Cldr.Number.to_string 123, locale: "th-u-nu-thai" -{:ok, "๑๒๓"}

+{:ok, "๑๒๓"}

Errors

An error tuple {:error, reason} will be returned if an error is detected. -The two most likely causes of an error return are:

  • A format cannot be compiled. In this case the error tuple will look like:
    iex> Plausible.Cldr.Number.to_string(12345, format: "0#")
-    {:error, {Cldr.FormatCompileError,
-      "Decimal format compiler: syntax error before: \"#\""}}
  • The format style requested is not defined for the locale and +The two most likely causes of an error return are:

    • A format cannot be compiled. In this case the error tuple will look like:
        iex> Plausible.Cldr.Number.to_string(12345, format: "0#")
    +    {:error, {Cldr.FormatCompileError,
    +      "Decimal format compiler: syntax error before: \"#\""}}
    • The format style requested is not defined for the locale and number_system. This happens typically when the number system is :algorithmic rather than the more common :numeric. In this case the error -return looks like:
        iex> Plausible.Cldr.Number.to_string(1234, locale: "he", number_system: "hebr")
    -    {:error, {Cldr.UnknownFormatError,
    -      "The locale :he with number system :hebr does not define a format :standard"}}
    +return looks like:
    iex> Plausible.Cldr.Number.to_string(1234, locale: "he", number_system: "hebr")
+    {:error, {Cldr.UnknownFormatError,
+      "The locale :he with number system :hebr does not define a format :standard"}}
@@ -1316,17 +1316,17 @@ returned by iex> Plausible.Cldr.Number.validate_number_system "en", :latn -{:ok, :latn} +{:ok, :latn} iex> Plausible.Cldr.Number.validate_number_system "en", :default -{:ok, :latn} +{:ok, :latn} iex> Plausible.Cldr.Number.validate_number_system "en", :unknown -{:error, - {Cldr.UnknownNumberSystemError, "The number system :unknown is unknown"}} +{:error, + {Cldr.UnknownNumberSystemError, "The number system :unknown is unknown"}} iex> Plausible.Cldr.Number.validate_number_system "zz", :default -{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}} +{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
diff --git a/Plausible.Cldr.Rbnf.NumberSystem.html b/Plausible.Cldr.Rbnf.NumberSystem.html index d07e9fc48..f8a34ee1b 100644 --- a/Plausible.Cldr.Rbnf.NumberSystem.html +++ b/Plausible.Cldr.Rbnf.NumberSystem.html @@ -13,7 +13,7 @@ - + @@ -116,9 +116,9 @@ Plausible

Functions to implement the number system rule-based-number-format rules of CLDR.

These rules are defined only on the "und" locale and represent specialised number formatting.

The standard public API for RBNF is via the Cldr.Number.to_string/2 function.

The functions on this module are defined at compile time based upon the RBNF rules -defined in the Unicode CLDR data repository. Available rules are identified by:

iex> Plausible.Cldr.Rbnf.NumberSystem.rule_sets(:und)
-...> |> Enum.sort()
-[
+defined in the Unicode CLDR data repository.  Available rules are identified by:

iex> Plausible.Cldr.Rbnf.NumberSystem.rule_sets(:und)
+...> |> Enum.sort()
+[
   :armenian_lower,
   :armenian_upper,
   :cyrillic_lower,
@@ -132,9 +132,9 @@ defined in the Unicode CLDR data repository.  Available rules are identified by:
   :roman_upper,
   :tamil,
   :zz_default
-]

A rule can then be invoked on an available rule_set. For example

iex> Plausible.Cldr.Rbnf.NumberSystem.roman_upper(123, :und)
-"CXXIII"

This particular call is equivalent to the call through the public API of:

iex> Plausible.Cldr.Number.to_string(123, format: :roman)
-{:ok, "CXXIII"}
+
]

A rule can then be invoked on an available rule_set. For example

iex> Plausible.Cldr.Rbnf.NumberSystem.roman_upper(123, :und)
+"CXXIII"

This particular call is equivalent to the call through the public API of:

iex> Plausible.Cldr.Number.to_string(123, format: :roman)
+{:ok, "CXXIII"}
diff --git a/Plausible.Cldr.Rbnf.Ordinal.html b/Plausible.Cldr.Rbnf.Ordinal.html index dcf39ab4d..8a620dbd6 100644 --- a/Plausible.Cldr.Rbnf.Ordinal.html +++ b/Plausible.Cldr.Rbnf.Ordinal.html @@ -13,7 +13,7 @@ - + @@ -116,20 +116,20 @@ Plausible

Functions to implement the ordinal rule-based-number-format rules of CLDR.

As CLDR notes, the data is incomplete or non-existent for many languages. It is considered complete for English however.

The standard public API for RBNF is via the Cldr.Number.to_string/2 function.

The functions on this module are defined at compile time based upon the RBNF rules -defined in the Unicode CLDR data repository. Available rules are identified by:

iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets(:en)
-[:digits_ordinal]
+defined in the Unicode CLDR data repository.  Available rules are identified by:

iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets(:en)
+[:digits_ordinal]
 
-iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets("fr")
-...> |> Enum.sort()
-[
+iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets("fr")
+...> |> Enum.sort()
+[
   :digits_ordinal,
   :digits_ordinal_feminine,
   :digits_ordinal_feminine_plural,
   :digits_ordinal_masculine,
   :digits_ordinal_masculine_plural
-]

A rule can then be invoked on an available rule_set. For example

iex> Plausible.Cldr.Rbnf.Ordinal.digits_ordinal(123, :en)
-"123rd"

This call is equivalent to the call through the public API of:

iex> Plausible.Cldr.Number.to_string(123, format: :ordinal)
-{:ok, "123rd"}
+
]

A rule can then be invoked on an available rule_set. For example

iex> Plausible.Cldr.Rbnf.Ordinal.digits_ordinal(123, :en)
+"123rd"

This call is equivalent to the call through the public API of:

iex> Plausible.Cldr.Number.to_string(123, format: :ordinal)
+{:ok, "123rd"}
diff --git a/Plausible.Cldr.Rbnf.Spellout.html b/Plausible.Cldr.Rbnf.Spellout.html index 12880b684..1fc6a9df7 100644 --- a/Plausible.Cldr.Rbnf.Spellout.html +++ b/Plausible.Cldr.Rbnf.Spellout.html @@ -13,7 +13,7 @@ - + @@ -116,9 +116,9 @@ Plausible

Functions to implement the spellout rule-based-number-format rules of CLDR.

As CLDR notes, the data is incomplete or non-existent for many languages. It is considered complete for English however.

The standard public API for RBNF is via the Cldr.Number.to_string/2 function.

The functions on this module are defined at compile time based upon the RBNF rules -defined in the Unicode CLDR data repository. Available rules are identified by:

iex> Plausible.Cldr.Rbnf.Spellout.rule_sets("en")
-...> |> Enum.sort()
-[
+defined in the Unicode CLDR data repository.  Available rules are identified by:

iex> Plausible.Cldr.Rbnf.Spellout.rule_sets("en")
+...> |> Enum.sort()
+[
   :spellout_cardinal,
   :spellout_cardinal_verbose,
   :spellout_numbering,
@@ -126,9 +126,9 @@ defined in the Unicode CLDR data repository.  Available rules are identified by:
   :spellout_numbering_year,
   :spellout_ordinal,
   :spellout_ordinal_verbose
-]

A rule can then be invoked on an available rule_set. For example:

iex> Plausible.Cldr.Rbnf.Spellout.spellout_ordinal(123, "en")
-"one hundred twenty-third"

This call is equivalent to the call through the public API of:

iex> Plausible.Cldr.Number.to_string(123, format: :spellout)
-{:ok, "one hundred twenty-three"}
+
]

A rule can then be invoked on an available rule_set. For example:

iex> Plausible.Cldr.Rbnf.Spellout.spellout_ordinal(123, "en")
+"one hundred twenty-third"

This call is equivalent to the call through the public API of:

iex> Plausible.Cldr.Number.to_string(123, format: :spellout)
+{:ok, "one hundred twenty-three"}
diff --git a/Plausible.Cldr.html b/Plausible.Cldr.html index eb1cb0c52..bdb4803a3 100644 --- a/Plausible.Cldr.html +++ b/Plausible.Cldr.html @@ -13,7 +13,7 @@ - + @@ -518,24 +518,24 @@ Functions Example -
iex> Plausible.Cldr.default_locale()
-%Cldr.LanguageTag{
+
iex> Plausible.Cldr.default_locale()
+%Cldr.LanguageTag{
   backend: Plausible.Cldr,
   canonical_locale_name: "en-001",
   cldr_locale_name: :"en-001",
-  language_subtags: [],
-  extensions: %{},
+  language_subtags: [],
+  extensions: %{},
   gettext_locale_name: "en",
   language: "en",
-  locale: %{},
-  private_use: [],
+  locale: %{},
+  private_use: [],
   rbnf_locale_name: :en,
   requested_locale_name: "en-001",
   script: :Latn,
   territory: :"001",
-  transform: %{},
-  language_variants: []
-}
+
transform: %{}, + language_variants: [] +}
@@ -570,7 +570,7 @@ does not specify one and none can be inferred.

iex> Plausible.Cldr.default_territory() +
iex> Plausible.Cldr.default_territory()
 :"001"

@@ -633,13 +633,13 @@ is inserted between words or sentences. The valid options are
iex> Plausible.Cldr.ellipsis "And furthermore"
 "And furthermore…"
 
-iex> Plausible.Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: :ja
+iex> Plausible.Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: :ja
 "And furthermore…there is much to be done"
 
 iex> Plausible.Cldr.ellipsis "And furthermore", format: :word
 "And furthermore …"
 
-iex> Plausible.Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: :ja, format: :word
+iex> Plausible.Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: :ja, format: :word
 "And furthermore … there is much to be done"
@@ -675,23 +675,23 @@ take an optional locale parameter for which a locale is not supplied.

-
iex> Plausible.Cldr.put_locale("pl")
+
iex> Plausible.Cldr.put_locale("pl")
 iex> Plausible.Cldr.get_locale
-%Cldr.LanguageTag{
+%Cldr.LanguageTag{
    backend: Elixir.Plausible.Cldr,
    canonical_locale_name: "pl",
    cldr_locale_name: :pl,
-   extensions: %{},
+   extensions: %{},
    language: "pl",
-   locale: %{},
-   private_use: [],
+   locale: %{},
+   private_use: [],
    rbnf_locale_name: :pl,
    territory: :PL,
    requested_locale_name: "pl",
    script: :Latn,
-   transform: %{},
-   language_variants: []
- }
+
transform: %{}, + language_variants: [] + }
@@ -824,10 +824,10 @@ name is configured and available in Gettext.

iex> Plausible.Cldr.known_gettext_locale_name?("en") +
iex> Plausible.Cldr.known_gettext_locale_name?("en")
 true
 
-iex> Plausible.Cldr.known_gettext_locale_name?("!!")
+iex> Plausible.Cldr.known_gettext_locale_name?("!!")
 false

@@ -946,10 +946,10 @@ name is configured and available in Cldr.

iex> Plausible.Cldr.known_locale_name?(:en) +
iex> Plausible.Cldr.known_locale_name?(:en)
 true
 
-iex> Plausible.Cldr.known_locale_name?(:"!!")
+iex> Plausible.Cldr.known_locale_name?(:"!!")
 false
@@ -1004,7 +1004,7 @@ in this module or in

iex> Plausible.Cldr.known_number_system_types
-[:default, :finance, :native, :traditional]
+[:default, :finance, :native, :traditional]
@@ -1115,10 +1115,10 @@ rules based number formats (RBNF).

iex> Plausible.Cldr.known_rbnf_locale_name?(:en) +
iex> Plausible.Cldr.known_rbnf_locale_name?(:en)
 true
 
-iex> Plausible.Cldr.known_rbnf_locale_name?(:"!!")
+iex> Plausible.Cldr.known_rbnf_locale_name?(:"!!")
 false

@@ -1239,29 +1239,29 @@ of a language tag.

Examples

-
iex> Plausible.Cldr.put_locale("en")
-{:ok,
- %Cldr.LanguageTag{
+
iex> Plausible.Cldr.put_locale("en")
+{:ok,
+ %Cldr.LanguageTag{
    backend: Plausible.Cldr,
    canonical_locale_name: "en",
    cldr_locale_name: :en,
-   language_subtags: [],
-   extensions: %{},
+   language_subtags: [],
+   extensions: %{},
    gettext_locale_name: "en",
    language: "en",
-   locale: %{},
-   private_use: [],
+   locale: %{},
+   private_use: [],
    rbnf_locale_name: :en,
    requested_locale_name: "en",
    script: :Latn,
    territory: :US,
-   transform: %{},
-   language_variants: []
- }}
+   transform: %{},
+   language_variants: []
+ }}
 
-iex> Plausible.Cldr.put_locale("invalid-locale!")
-{:error, {Cldr.LanguageTag.ParseError,
-  "Expected a BCP47 language tag. Could not parse the remaining \"!\" starting at position 15"}}
+
iex> Plausible.Cldr.put_locale("invalid-locale!") +{:error, {Cldr.LanguageTag.ParseError, + "Expected a BCP47 language tag. Could not parse the remaining \"!\" starting at position 15"}}
@@ -1444,47 +1444,47 @@ of a language tag.

iex> Plausible.Cldr.validate_locale(:en) -{:ok, -%Cldr.LanguageTag{ +
iex> Plausible.Cldr.validate_locale(:en)
+{:ok,
+%Cldr.LanguageTag{
   backend: Plausible.Cldr,
   canonical_locale_name: "en",
   cldr_locale_name: :en,
-  extensions: %{},
+  extensions: %{},
   gettext_locale_name: "en",
   language: "en",
-  locale: %{},
-  private_use: [],
+  locale: %{},
+  private_use: [],
   rbnf_locale_name: :en,
   requested_locale_name: "en",
   script: :Latn,
   territory: :US,
-  transform: %{},
-  language_variants: []
-}}
+  transform: %{},
+  language_variants: []
+}}
 
 
-iex> Plausible.Cldr.validate_locale Plausible.Cldr.default_locale()
-{:ok,
-%Cldr.LanguageTag{
+iex> Plausible.Cldr.validate_locale Plausible.Cldr.default_locale()
+{:ok,
+%Cldr.LanguageTag{
   backend: Plausible.Cldr,
   canonical_locale_name: "en-001",
   cldr_locale_name: :"en-001",
-  extensions: %{},
+  extensions: %{},
   gettext_locale_name: "en",
   language: "en",
-  locale: %{},
-  private_use: [],
+  locale: %{},
+  private_use: [],
   rbnf_locale_name: :en,
   requested_locale_name: "en-001",
   script: :Latn,
   territory: :"001",
-  transform: %{},
-  language_variants: []
-}}
+  transform: %{},
+  language_variants: []
+}}
 
-iex> Plausible.Cldr.validate_locale("zzz")
-{:error, {Cldr.InvalidLanguageError, "The language \"zzz\" is invalid"}}
+
iex> Plausible.Cldr.validate_locale("zzz") +{:error, {Cldr.InvalidLanguageError, "The language \"zzz\" is invalid"}}

@@ -1555,22 +1555,22 @@ of a language tag.

iex> Plausible.Cldr.validate_number_system_type :default -{:ok, :default} +{:ok, :default} iex> Plausible.Cldr.validate_number_system_type :traditional -{:ok, :traditional} +{:ok, :traditional} iex> Plausible.Cldr.validate_number_system_type :latn -{ +{ :error, - {Cldr.UnknownNumberSystemTypeError, "The number system type :latn is unknown"} -} + {Cldr.UnknownNumberSystemTypeError, "The number system type :latn is unknown"} +} iex> Plausible.Cldr.validate_number_system_type "bork" -{ +{ :error, - {Cldr.UnknownNumberSystemTypeError, "The number system type \"bork\" is invalid"} -} + {Cldr.UnknownNumberSystemTypeError, "The number system type \"bork\" is invalid"} +}

diff --git a/Plausible.ClickhouseEventV2.html b/Plausible.ClickhouseEventV2.html index 93b178364..b3d24f16c 100644 --- a/Plausible.ClickhouseEventV2.html +++ b/Plausible.ClickhouseEventV2.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.ClickhouseRepo.html b/Plausible.ClickhouseRepo.html index 99a5de441..c824e4a40 100644 --- a/Plausible.ClickhouseRepo.html +++ b/Plausible.ClickhouseRepo.html @@ -13,7 +13,7 @@ - + @@ -816,23 +816,23 @@ pool to disconnect within the given interval.

See -

Similar to insert_all/2 but with the following differences:

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
+

Similar to insert_all/2 but with the following differences:

  • accepts rows as streams or lists
  • sends rows as a chunked request
  • doesn't autogenerate ids or does any other preprocessing

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
 
-defmodule Demo do
+defmodule Demo do
   use Ecto.Schema
 
   @primary_key false
-  schema "ecto_ch_demo" do
+  schema "ecto_ch_demo" do
     field :a, Ch, type: "UInt64"
     field :b, :string
-  end
-end
+  end
+end
 
-rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
-{100_000, nil} = Repo.insert_stream(Demo, rows)
+rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
+{100_000, nil} = Repo.insert_stream(Demo, rows)
 
 # schemaless
-{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
+
{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
diff --git a/Plausible.ClickhouseSessionV2.BoolUInt8.html b/Plausible.ClickhouseSessionV2.BoolUInt8.html index 52f713912..548108fcc 100644 --- a/Plausible.ClickhouseSessionV2.BoolUInt8.html +++ b/Plausible.ClickhouseSessionV2.BoolUInt8.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.ClickhouseSessionV2.html b/Plausible.ClickhouseSessionV2.html index e9d629e94..d6839de80 100644 --- a/Plausible.ClickhouseSessionV2.html +++ b/Plausible.ClickhouseSessionV2.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.ConfigHelpers.html b/Plausible.ConfigHelpers.html index 42abe3c4d..335880968 100644 --- a/Plausible.ConfigHelpers.html +++ b/Plausible.ConfigHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.DataCase.html b/Plausible.DataCase.html index fe30a7a80..5b62e0621 100644 --- a/Plausible.DataCase.html +++ b/Plausible.DataCase.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.DataMigration.NumericIDs.html b/Plausible.DataMigration.NumericIDs.html index 0a6125022..118f250df 100644 --- a/Plausible.DataMigration.NumericIDs.html +++ b/Plausible.DataMigration.NumericIDs.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.DataMigration.Repo.html b/Plausible.DataMigration.Repo.html index c44b4d350..265676017 100644 --- a/Plausible.DataMigration.Repo.html +++ b/Plausible.DataMigration.Repo.html @@ -13,7 +13,7 @@ - + @@ -1123,23 +1123,23 @@ pool to disconnect within the given interval.

See -

Similar to insert_all/2 but with the following differences:

  • accepts rows as streams or lists
  • sends rows as a chunked request
  • doesn't autogenerate ids or does any other preprocessing

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
+

Similar to insert_all/2 but with the following differences:

  • accepts rows as streams or lists
  • sends rows as a chunked request
  • doesn't autogenerate ids or does any other preprocessing

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
 
-defmodule Demo do
+defmodule Demo do
   use Ecto.Schema
 
   @primary_key false
-  schema "ecto_ch_demo" do
+  schema "ecto_ch_demo" do
     field :a, Ch, type: "UInt64"
     field :b, :string
-  end
-end
+  end
+end
 
-rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
-{100_000, nil} = Repo.insert_stream(Demo, rows)
+rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
+{100_000, nil} = Repo.insert_stream(Demo, rows)
 
 # schemaless
-{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
+
{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
diff --git a/Plausible.DataMigration.RewriteFunnelDupes.html b/Plausible.DataMigration.RewriteFunnelDupes.html index 33b685e54..ceef67040 100644 --- a/Plausible.DataMigration.RewriteFunnelDupes.html +++ b/Plausible.DataMigration.RewriteFunnelDupes.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.DataMigration.html b/Plausible.DataMigration.html index 04426d59f..8660928b8 100644 --- a/Plausible.DataMigration.html +++ b/Plausible.DataMigration.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.DebugReplayInfo.html b/Plausible.DebugReplayInfo.html index 3a9d6cb13..ab43ef984 100644 --- a/Plausible.DebugReplayInfo.html +++ b/Plausible.DebugReplayInfo.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Ecto.EventName.html b/Plausible.Ecto.EventName.html index f2bfdbd0f..eb579fcff 100644 --- a/Plausible.Ecto.EventName.html +++ b/Plausible.Ecto.EventName.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Event.WriteBuffer.html b/Plausible.Event.WriteBuffer.html index 15da956ed..c5b34710e 100644 --- a/Plausible.Event.WriteBuffer.html +++ b/Plausible.Event.WriteBuffer.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Factory.html b/Plausible.Factory.html index 823361798..b4a23a227 100644 --- a/Plausible.Factory.html +++ b/Plausible.Factory.html @@ -13,7 +13,7 @@ - + @@ -426,7 +426,7 @@ Plausible
@@ -510,7 +510,7 @@ Functions

api_key_factory()

- + View Source @@ -604,7 +604,7 @@ Functions

ch_session_factory()

- + View Source @@ -738,7 +738,7 @@ Functions

custom_domain_factory()

- + View Source @@ -760,7 +760,7 @@ Functions

enterprise_plan_factory()

- + View Source @@ -782,7 +782,7 @@ Functions

event_factory()

- + View Source @@ -832,7 +832,7 @@ Functions

goal_factory()

- + View Source @@ -854,7 +854,7 @@ Functions

google_auth_factory()

- + View Source @@ -876,7 +876,7 @@ Functions

imported_browsers_factory()

- + View Source @@ -898,7 +898,7 @@ Functions

imported_devices_factory()

- + View Source @@ -920,7 +920,7 @@ Functions

imported_entry_pages_factory()

- + View Source @@ -942,7 +942,7 @@ Functions

imported_exit_pages_factory()

- + View Source @@ -964,7 +964,7 @@ Functions

imported_locations_factory()

- + View Source @@ -986,7 +986,7 @@ Functions

imported_operating_systems_factory()

- + View Source @@ -1008,7 +1008,7 @@ Functions

imported_pages_factory()

- + View Source @@ -1030,7 +1030,7 @@ Functions

imported_sources_factory()

- + View Source @@ -1052,7 +1052,7 @@ Functions

imported_visitors_factory()

- + View Source @@ -1232,7 +1232,7 @@ Functions

invitation_factory()

- + View Source @@ -1254,7 +1254,7 @@ Functions

monthly_report_factory()

- + View Source @@ -1276,7 +1276,7 @@ Functions

pageview_factory()

- + View Source @@ -1346,7 +1346,7 @@ Functions

shared_link_factory()

- + View Source @@ -1359,14 +1359,14 @@ Functions
-
+
- + Link to this function -

site_factory()

+

site_factory(attrs)

@@ -1390,7 +1390,7 @@ Functions

site_membership_factory()

- + View Source @@ -1482,7 +1482,7 @@ Functions

subscription_factory()

- + View Source @@ -1526,7 +1526,7 @@ Functions

weekly_report_factory()

- + View Source diff --git a/Plausible.Funnel.Step.html b/Plausible.Funnel.Step.html index 040f3ae1a..45c124b9f 100644 --- a/Plausible.Funnel.Step.html +++ b/Plausible.Funnel.Step.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Funnel.html b/Plausible.Funnel.html index 9c8246af4..5492d8772 100644 --- a/Plausible.Funnel.html +++ b/Plausible.Funnel.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Funnels.html b/Plausible.Funnels.html index 7d78c929c..7c2b53e87 100644 --- a/Plausible.Funnels.html +++ b/Plausible.Funnels.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Geo.html b/Plausible.Geo.html index a71979fff..920e7f3ff 100644 --- a/Plausible.Geo.html +++ b/Plausible.Geo.html @@ -13,7 +13,7 @@ - + @@ -231,8 +231,8 @@ Functions Examples -

In the case of a DB-IP database:

iex> database_type()
-"DBIP-City-Lite"

In the case of a MaxMind database:

iex> database_type()
+

In the case of a DB-IP database:

iex> database_type()
+"DBIP-City-Lite"

In the case of a MaxMind database:

iex> database_type()
 "GeoLite2-City"
@@ -272,8 +272,8 @@ asynchronously.

-

Loading from a local file:

iex> load_db(path: "/etc/plausible/dbip-city.mmdb")
-:ok

Downloading a MaxMind DB (this license key is no longer active):

iex> load_db(license_key: "LNpsJCCKPis6XvBP", edition: "GeoLite2-City", async: true)
+

Loading from a local file:

iex> load_db(path: "/etc/plausible/dbip-city.mmdb")
+:ok

Downloading a MaxMind DB (this license key is no longer active):

iex> load_db(license_key: "LNpsJCCKPis6XvBP", edition: "GeoLite2-City", async: true)
 :ok
@@ -302,21 +302,21 @@ asynchronously.

-
iex> lookup("8.7.6.5")
-%{
-  "city" => %{
+
iex> lookup("8.7.6.5")
+%{
+  "city" => %{
     "geoname_id" => 5349755,
-    "names" => %{
+    "names" => %{
       "de" => "Fontana",
       "en" => "Fontana",
       "ja" => "フォンタナ",
       "ru" => "Фонтана"
-    }
-  },
-  "continent" => %{
+    }
+  },
+  "continent" => %{
     "code" => "NA",
     "geoname_id" => 6255149,
-    "names" => %{
+    "names" => %{
       "de" => "Nordamerika",
       "en" => "North America",
       "es" => "Norteamérica",
@@ -325,12 +325,12 @@ asynchronously.

"pt-BR" => "América do Norte", "ru" => "Северная Америка", "zh-CN" => "北美洲" - } - }, - "country" => %{ + } + }, + "country" => %{ "geoname_id" => 6252001, "iso_code" => "US", - "names" => %{ + "names" => %{ "de" => "Vereinigte Staaten", "en" => "United States", "es" => "Estados Unidos", @@ -339,20 +339,20 @@ asynchronously.

"pt-BR" => "EUA", "ru" => "США", "zh-CN" => "美国" - } - }, - "location" => %{ + } + }, + "location" => %{ "accuracy_radius" => 50, "latitude" => 34.1211, "longitude" => -117.4362, "metro_code" => 803, "time_zone" => "America/Los_Angeles" - }, - "postal" => %{"code" => "92336"}, - "registered_country" => %{ + }, + "postal" => %{"code" => "92336"}, + "registered_country" => %{ "geoname_id" => 6252001, "iso_code" => "US", - "names" => %{ + "names" => %{ "de" => "Vereinigte Staaten", "en" => "United States", "es" => "Estados Unidos", @@ -361,13 +361,13 @@ asynchronously.

"pt-BR" => "EUA", "ru" => "США", "zh-CN" => "美国" - } - }, - "subdivisions" => [ - %{ + } + }, + "subdivisions" => [ + %{ "geoname_id" => 5332921, "iso_code" => "CA", - "names" => %{ + "names" => %{ "de" => "Kalifornien", "en" => "California", "es" => "California", @@ -376,10 +376,10 @@ asynchronously.

"pt-BR" => "Califórnia", "ru" => "Калифорния", "zh-CN" => "加州" - } - } - ] -}

+
} + } + ] +}
diff --git a/Plausible.Goal.html b/Plausible.Goal.html index 19aaef44d..3ac1ba141 100644 --- a/Plausible.Goal.html +++ b/Plausible.Goal.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Goals.html b/Plausible.Goals.html index c13eadc28..551cc2b09 100644 --- a/Plausible.Goals.html +++ b/Plausible.Goals.html @@ -13,7 +13,7 @@ - + @@ -200,7 +200,7 @@ Functions

count(site)

- + View Source @@ -230,7 +230,7 @@ Functions

create(site, params, opts \\ [])

- + View Source @@ -240,6 +240,15 @@ Functions
+
+ +
@spec create(Plausible.Site.t(), map(), Keyword.t()) ::
+  {:ok, Plausible.Goal.t()}
+  | {:error, Ecto.Changeset.t()}
+  | {:error, :upgrade_required}
+ +
+

Creates a Goal for a site.

If the created goal is a revenue goal, it sets site.updated_at to be refreshed by the sites cache, as revenue goals are used during ingestion.

@@ -253,7 +262,7 @@ refreshed by the sites cache, as revenue goals are used during ingestion.

delete(id, site_id)

- + View Source @@ -279,7 +288,7 @@ funnel record(s) are removed completely along with the targeted goal.

find_or_create(site, map)

- + View Source @@ -303,7 +312,7 @@ funnel record(s) are removed completely along with the targeted goal.

for_site(site, opts \\ [])

- + View Source @@ -327,7 +336,7 @@ funnel record(s) are removed completely along with the targeted goal.

for_site_query(site, opts \\ [])

- + View Source diff --git a/Plausible.Google.Api.Mock.html b/Plausible.Google.Api.Mock.html index 051bf3e97..d01e88756 100644 --- a/Plausible.Google.Api.Mock.html +++ b/Plausible.Google.Api.Mock.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Google.Api.html b/Plausible.Google.Api.html index f287116db..8636cfeef 100644 --- a/Plausible.Google.Api.html +++ b/Plausible.Google.Api.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Google.Buffer.html b/Plausible.Google.Buffer.html index d79937ed4..a0dd4cf67 100644 --- a/Plausible.Google.Buffer.html +++ b/Plausible.Google.Buffer.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Google.HTTP.html b/Plausible.Google.HTTP.html index a3575aa5a..f79b065ff 100644 --- a/Plausible.Google.HTTP.html +++ b/Plausible.Google.HTTP.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Google.ReportRequest.html b/Plausible.Google.ReportRequest.html index 09a023546..537d0b745 100644 --- a/Plausible.Google.ReportRequest.html +++ b/Plausible.Google.ReportRequest.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.HTTPClient.Interface.html b/Plausible.HTTPClient.Interface.html index 902933970..083370d6d 100644 --- a/Plausible.HTTPClient.Interface.html +++ b/Plausible.HTTPClient.Interface.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.HTTPClient.Non200Error.html b/Plausible.HTTPClient.Non200Error.html index 0023a4bfd..ed334504f 100644 --- a/Plausible.HTTPClient.Non200Error.html +++ b/Plausible.HTTPClient.Non200Error.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.HTTPClient.html b/Plausible.HTTPClient.html index 864f2b7f2..b95464df0 100644 --- a/Plausible.HTTPClient.html +++ b/Plausible.HTTPClient.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.ImportDeletionRepo.html b/Plausible.ImportDeletionRepo.html index 8f89ef37d..57a2607c6 100644 --- a/Plausible.ImportDeletionRepo.html +++ b/Plausible.ImportDeletionRepo.html @@ -13,7 +13,7 @@ - + @@ -1114,23 +1114,23 @@ pool to disconnect within the given interval.

See -

Similar to insert_all/2 but with the following differences:

  • accepts rows as streams or lists
  • sends rows as a chunked request
  • doesn't autogenerate ids or does any other preprocessing

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
+

Similar to insert_all/2 but with the following differences:

  • accepts rows as streams or lists
  • sends rows as a chunked request
  • doesn't autogenerate ids or does any other preprocessing

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
 
-defmodule Demo do
+defmodule Demo do
   use Ecto.Schema
 
   @primary_key false
-  schema "ecto_ch_demo" do
+  schema "ecto_ch_demo" do
     field :a, Ch, type: "UInt64"
     field :b, :string
-  end
-end
+  end
+end
 
-rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
-{100_000, nil} = Repo.insert_stream(Demo, rows)
+rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
+{100_000, nil} = Repo.insert_stream(Demo, rows)
 
 # schemaless
-{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
+
{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
diff --git a/Plausible.Imported.html b/Plausible.Imported.html index 56fc8a2a9..54039d61a 100644 --- a/Plausible.Imported.html +++ b/Plausible.Imported.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.IngestRepo.html b/Plausible.IngestRepo.html index b5717ddf5..fe8ac016d 100644 --- a/Plausible.IngestRepo.html +++ b/Plausible.IngestRepo.html @@ -13,7 +13,7 @@ - + @@ -1114,23 +1114,23 @@ pool to disconnect within the given interval.

See -

Similar to insert_all/2 but with the following differences:

  • accepts rows as streams or lists
  • sends rows as a chunked request
  • doesn't autogenerate ids or does any other preprocessing

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
+

Similar to insert_all/2 but with the following differences:

  • accepts rows as streams or lists
  • sends rows as a chunked request
  • doesn't autogenerate ids or does any other preprocessing

Example:

Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
 
-defmodule Demo do
+defmodule Demo do
   use Ecto.Schema
 
   @primary_key false
-  schema "ecto_ch_demo" do
+  schema "ecto_ch_demo" do
     field :a, Ch, type: "UInt64"
     field :b, :string
-  end
-end
+  end
+end
 
-rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
-{100_000, nil} = Repo.insert_stream(Demo, rows)
+rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
+{100_000, nil} = Repo.insert_stream(Demo, rows)
 
 # schemaless
-{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
+
{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
diff --git a/Plausible.Ingestion.Counters.Buffer.html b/Plausible.Ingestion.Counters.Buffer.html index ad414d092..33ce5bdba 100644 --- a/Plausible.Ingestion.Counters.Buffer.html +++ b/Plausible.Ingestion.Counters.Buffer.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Ingestion.Counters.Record.html b/Plausible.Ingestion.Counters.Record.html index 0dc06a6e1..f4c202993 100644 --- a/Plausible.Ingestion.Counters.Record.html +++ b/Plausible.Ingestion.Counters.Record.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Ingestion.Counters.TelemetryHandler.html b/Plausible.Ingestion.Counters.TelemetryHandler.html index 38b73dce9..52112c203 100644 --- a/Plausible.Ingestion.Counters.TelemetryHandler.html +++ b/Plausible.Ingestion.Counters.TelemetryHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Ingestion.Counters.html b/Plausible.Ingestion.Counters.html index 49799e628..76eab19ec 100644 --- a/Plausible.Ingestion.Counters.html +++ b/Plausible.Ingestion.Counters.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Ingestion.Event.html b/Plausible.Ingestion.Event.html index bbaa47e9d..97a0d41ba 100644 --- a/Plausible.Ingestion.Event.html +++ b/Plausible.Ingestion.Event.html @@ -13,7 +13,7 @@ - + @@ -341,6 +341,8 @@ Types memberships: term(), monthly_report: term(), native_stats_start_at: term(), + owner: term(), + ownership: term(), props_enabled: term(), public: term(), revenue_goals: term(), diff --git a/Plausible.Ingestion.Request.html b/Plausible.Ingestion.Request.html index e1ad63d49..e30a86247 100644 --- a/Plausible.Ingestion.Request.html +++ b/Plausible.Ingestion.Request.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Mailer.html b/Plausible.Mailer.html index 057258d22..5167112ec 100644 --- a/Plausible.Mailer.html +++ b/Plausible.Mailer.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.OpenTelemetry.Sampler.html b/Plausible.OpenTelemetry.Sampler.html index 0ee9e3887..d7463a57a 100644 --- a/Plausible.OpenTelemetry.Sampler.html +++ b/Plausible.OpenTelemetry.Sampler.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.PaddleApi.Mock.html b/Plausible.PaddleApi.Mock.html index 7086ba635..5af7d35e1 100644 --- a/Plausible.PaddleApi.Mock.html +++ b/Plausible.PaddleApi.Mock.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Plugins.API.Goals.html b/Plausible.Plugins.API.Goals.html index 96894ece0..55f79b10f 100644 --- a/Plausible.Plugins.API.Goals.html +++ b/Plausible.Plugins.API.Goals.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Plugins.API.Pagination.html b/Plausible.Plugins.API.Pagination.html index 349baedeb..8b63e380f 100644 --- a/Plausible.Plugins.API.Pagination.html +++ b/Plausible.Plugins.API.Pagination.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Plugins.API.SharedLinks.html b/Plausible.Plugins.API.SharedLinks.html index 0d23c9f62..4963f6f56 100644 --- a/Plausible.Plugins.API.SharedLinks.html +++ b/Plausible.Plugins.API.SharedLinks.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Plugins.API.Token.html b/Plausible.Plugins.API.Token.html index 5565dfedf..a126b8a0f 100644 --- a/Plausible.Plugins.API.Token.html +++ b/Plausible.Plugins.API.Token.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Plugins.API.Tokens.html b/Plausible.Plugins.API.Tokens.html index 489abcc8e..80d9588a4 100644 --- a/Plausible.Plugins.API.Tokens.html +++ b/Plausible.Plugins.API.Tokens.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.PromEx.Plugins.PlausibleMetrics.html b/Plausible.PromEx.Plugins.PlausibleMetrics.html index 8ee6ff1e1..f0375043d 100644 --- a/Plausible.PromEx.Plugins.PlausibleMetrics.html +++ b/Plausible.PromEx.Plugins.PlausibleMetrics.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.PromEx.html b/Plausible.PromEx.html index 3db81268e..268b40ab6 100644 --- a/Plausible.PromEx.html +++ b/Plausible.PromEx.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Props.html b/Plausible.Props.html index 90588b03c..610216ee6 100644 --- a/Plausible.Props.html +++ b/Plausible.Props.html @@ -13,7 +13,7 @@ - + @@ -318,7 +318,9 @@ Functions
@spec allow(Plausible.Site.t(), [prop()] | prop()) ::
-  {:ok, Plausible.Site.t()} | {:error, Ecto.Changeset.t()}
+ {:ok, Plausible.Site.t()} + | {:error, Ecto.Changeset.t()} + | {:error, :upgrade_required}
@@ -336,7 +338,7 @@ data to be dropped or lost.

allow_changeset(site, prop_or_props)

- + View Source @@ -358,7 +360,7 @@ data to be dropped or lost.

allow_existing_props(site)

- + View Source @@ -370,7 +372,8 @@ data to be dropped or lost.

-
@spec allow_existing_props(Plausible.Site.t()) :: {:ok, Plausible.Site.t()}
+
@spec allow_existing_props(Plausible.Site.t()) ::
+  {:ok, Plausible.Site.t()} | {:error, :upgrade_required}
@@ -387,7 +390,7 @@ the past 6 months.

configured?(site)

- + View Source @@ -409,7 +412,7 @@ the past 6 months.

disallow(site, prop)

- + View Source @@ -440,7 +443,7 @@ ClickHouse data, nor affects ingestion.

internal_keys()

- + View Source @@ -533,7 +536,7 @@ from the allow list, or to suggest users to add this prop key.

suggest_keys_to_allow(site, limit \\ 300)

- + View Source diff --git a/Plausible.Purge.html b/Plausible.Purge.html index 2b936e286..df4560aee 100644 --- a/Plausible.Purge.html +++ b/Plausible.Purge.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Release.html b/Plausible.Release.html index 1cf34f7e4..aa0df0136 100644 --- a/Plausible.Release.html +++ b/Plausible.Release.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Repo.html b/Plausible.Repo.html index 881448e12..83c0d5928 100644 --- a/Plausible.Repo.html +++ b/Plausible.Repo.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Sentry.Client.html b/Plausible.Sentry.Client.html index f9029c145..d9a5c5e74 100644 --- a/Plausible.Sentry.Client.html +++ b/Plausible.Sentry.Client.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.SentryFilter.html b/Plausible.SentryFilter.html index 429ddf00e..6c9e031d6 100644 --- a/Plausible.SentryFilter.html +++ b/Plausible.SentryFilter.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Session.CacheStore.html b/Plausible.Session.CacheStore.html index 47f0e1519..17a063148 100644 --- a/Plausible.Session.CacheStore.html +++ b/Plausible.Session.CacheStore.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Session.Salts.html b/Plausible.Session.Salts.html index 6ab78ed71..e138a9951 100644 --- a/Plausible.Session.Salts.html +++ b/Plausible.Session.Salts.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Session.WriteBuffer.html b/Plausible.Session.WriteBuffer.html index 178d55732..58e97692b 100644 --- a/Plausible.Session.WriteBuffer.html +++ b/Plausible.Session.WriteBuffer.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Cache.Warmer.All.html b/Plausible.Site.Cache.Warmer.All.html index d6512696a..80325fc57 100644 --- a/Plausible.Site.Cache.Warmer.All.html +++ b/Plausible.Site.Cache.Warmer.All.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Cache.Warmer.RecentlyUpdated.html b/Plausible.Site.Cache.Warmer.RecentlyUpdated.html index 47fbab095..340003e6c 100644 --- a/Plausible.Site.Cache.Warmer.RecentlyUpdated.html +++ b/Plausible.Site.Cache.Warmer.RecentlyUpdated.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Cache.Warmer.html b/Plausible.Site.Cache.Warmer.html index 722afa8e4..d90b6f928 100644 --- a/Plausible.Site.Cache.Warmer.html +++ b/Plausible.Site.Cache.Warmer.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Cache.html b/Plausible.Site.Cache.html index 09a86abff..5834f3736 100644 --- a/Plausible.Site.Cache.html +++ b/Plausible.Site.Cache.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.CustomDomain.html b/Plausible.Site.CustomDomain.html index a7bb835ca..d1aba9f9f 100644 --- a/Plausible.Site.CustomDomain.html +++ b/Plausible.Site.CustomDomain.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Domain.html b/Plausible.Site.Domain.html index 2b682f8c6..2cb94c7dc 100644 --- a/Plausible.Site.Domain.html +++ b/Plausible.Site.Domain.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.GateKeeper.html b/Plausible.Site.GateKeeper.html index be05e9621..075f72847 100644 --- a/Plausible.Site.GateKeeper.html +++ b/Plausible.Site.GateKeeper.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.GoogleAuth.html b/Plausible.Site.GoogleAuth.html index 54331ba98..4e6d4d1c6 100644 --- a/Plausible.Site.GoogleAuth.html +++ b/Plausible.Site.GoogleAuth.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.ImportedData.html b/Plausible.Site.ImportedData.html index 3ce0a6a7f..f19babb42 100644 --- a/Plausible.Site.ImportedData.html +++ b/Plausible.Site.ImportedData.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Membership.html b/Plausible.Site.Membership.html index 17b45d695..86677a7ee 100644 --- a/Plausible.Site.Membership.html +++ b/Plausible.Site.Membership.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Memberships.AcceptInvitation.html b/Plausible.Site.Memberships.AcceptInvitation.html index 37fadaa1f..8114bb424 100644 --- a/Plausible.Site.Memberships.AcceptInvitation.html +++ b/Plausible.Site.Memberships.AcceptInvitation.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Memberships.RejectInvitation.html b/Plausible.Site.Memberships.RejectInvitation.html index a4fd30649..1d675212d 100644 --- a/Plausible.Site.Memberships.RejectInvitation.html +++ b/Plausible.Site.Memberships.RejectInvitation.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Memberships.RemoveInvitation.html b/Plausible.Site.Memberships.RemoveInvitation.html index 87f0fd356..1a79d3198 100644 --- a/Plausible.Site.Memberships.RemoveInvitation.html +++ b/Plausible.Site.Memberships.RemoveInvitation.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Memberships.html b/Plausible.Site.Memberships.html index 31b7716d2..606b5d9fd 100644 --- a/Plausible.Site.Memberships.html +++ b/Plausible.Site.Memberships.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.MonthlyReport.html b/Plausible.Site.MonthlyReport.html index c1c615b48..1c95e1a0d 100644 --- a/Plausible.Site.MonthlyReport.html +++ b/Plausible.Site.MonthlyReport.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.Removal.html b/Plausible.Site.Removal.html index 950ea5779..1f1883a8c 100644 --- a/Plausible.Site.Removal.html +++ b/Plausible.Site.Removal.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.SharedLink.html b/Plausible.Site.SharedLink.html index 995215e4d..31e46ec85 100644 --- a/Plausible.Site.SharedLink.html +++ b/Plausible.Site.SharedLink.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.SpikeNotification.html b/Plausible.Site.SpikeNotification.html index 3d7f10673..4f83e8405 100644 --- a/Plausible.Site.SpikeNotification.html +++ b/Plausible.Site.SpikeNotification.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.WeeklyReport.html b/Plausible.Site.WeeklyReport.html index c7a9e5d4a..3e484dc03 100644 --- a/Plausible.Site.WeeklyReport.html +++ b/Plausible.Site.WeeklyReport.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.html b/Plausible.Site.html index 6b99d57c0..ea4caf7f5 100644 --- a/Plausible.Site.html +++ b/Plausible.Site.html @@ -13,7 +13,7 @@ - + @@ -160,14 +160,6 @@ Plausible - -
import_failure(site) @@ -325,6 +317,8 @@ Types memberships: term(), monthly_report: term(), native_stats_start_at: term(), + owner: term(), + ownership: term(), props_enabled: term(), public: term(), revenue_goals: term(), @@ -363,7 +357,7 @@ Functions

changeset(site, attrs \\ %{})

- + View Source @@ -385,31 +379,7 @@ Functions

crm_changeset(site, attrs)

- - - View Source - - - -
- -
- - -
- -
- - - -
- - - Link to this function - -

feature_toggle_change(site, property, opts \\ [])

- - + View Source @@ -431,7 +401,7 @@ Functions

import_failure(site)

- + View Source @@ -453,7 +423,7 @@ Functions

import_success(site)

- + View Source @@ -475,7 +445,7 @@ Functions

local_start_date(site)

- + View Source @@ -514,7 +484,7 @@ This function does 2 transformations:

make_private(site)

- + View Source @@ -536,7 +506,7 @@ This function does 2 transformations:

make_public(site)

- + View Source @@ -558,7 +528,7 @@ This function does 2 transformations:

remove_imported_data(site)

- + View Source @@ -580,7 +550,7 @@ This function does 2 transformations:

set_imported_source(site, imported_source)

- + View Source @@ -602,7 +572,7 @@ This function does 2 transformations:

set_native_stats_start_at(site, val)

- + View Source @@ -624,7 +594,7 @@ This function does 2 transformations:

set_stats_start_date(site, val)

- + View Source @@ -648,7 +618,7 @@ This function does 2 transformations:

start_import(site, start_date, end_date, imported_source, status \\ "importing")

- + View Source @@ -672,7 +642,7 @@ This function does 2 transformations:

tz_offset(site, utc_now \\ DateTime.utc_now())

- + View Source @@ -698,7 +668,7 @@ This function does 2 transformations:

update_changeset(site, attrs \\ %{}, opts \\ [])

- + View Source diff --git a/Plausible.SiteAdmin.html b/Plausible.SiteAdmin.html index 75df0db47..238d2d377 100644 --- a/Plausible.SiteAdmin.html +++ b/Plausible.SiteAdmin.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Sites.html b/Plausible.Sites.html index 3836bbfff..c860ad9a7 100644 --- a/Plausible.Sites.html +++ b/Plausible.Sites.html @@ -13,7 +13,7 @@ - + @@ -272,14 +272,6 @@ this invitation.

-
- - -
-
role(user_id, site) @@ -745,28 +737,6 @@ as an ownership transfer and requires the inviter to be the owner of the site. - - -
- - - -
- -
diff --git a/Plausible.Stats.Aggregate.html b/Plausible.Stats.Aggregate.html index 5b9aaf3cb..15bfcd736 100644 --- a/Plausible.Stats.Aggregate.html +++ b/Plausible.Stats.Aggregate.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Base.html b/Plausible.Stats.Base.html index 5e5fcc00f..1e0370351 100644 --- a/Plausible.Stats.Base.html +++ b/Plausible.Stats.Base.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Breakdown.html b/Plausible.Stats.Breakdown.html index c730a2b57..ea9d08e90 100644 --- a/Plausible.Stats.Breakdown.html +++ b/Plausible.Stats.Breakdown.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Clickhouse.html b/Plausible.Stats.Clickhouse.html index dff352089..299bb9851 100644 --- a/Plausible.Stats.Clickhouse.html +++ b/Plausible.Stats.Clickhouse.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Compare.html b/Plausible.Stats.Compare.html index b012a6da5..e50533152 100644 --- a/Plausible.Stats.Compare.html +++ b/Plausible.Stats.Compare.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Comparisons.html b/Plausible.Stats.Comparisons.html index c6f7f423f..522a40a04 100644 --- a/Plausible.Stats.Comparisons.html +++ b/Plausible.Stats.Comparisons.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.CurrentVisitors.html b/Plausible.Stats.CurrentVisitors.html index ddd659cd6..786fad581 100644 --- a/Plausible.Stats.CurrentVisitors.html +++ b/Plausible.Stats.CurrentVisitors.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.CustomProps.html b/Plausible.Stats.CustomProps.html index 53f3d3276..9cc4cdcde 100644 --- a/Plausible.Stats.CustomProps.html +++ b/Plausible.Stats.CustomProps.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.FilterParser.html b/Plausible.Stats.FilterParser.html index ce0316061..842649138 100644 --- a/Plausible.Stats.FilterParser.html +++ b/Plausible.Stats.FilterParser.html @@ -13,7 +13,7 @@ - + @@ -178,14 +178,14 @@ Functions Examples: -
iex> FilterParser.parse_filters("{\"page\":\"/blog/**\"}")
-%{"page" => "/blog/**"}
+
iex> FilterParser.parse_filters("{\"page\":\"/blog/**\"}")
+%{"page" => "/blog/**"}
 
-iex> FilterParser.parse_filters("visit:browser!=Chrome")
-%{"visit:browser" => {:is_not, "Chrome"}}
+iex> FilterParser.parse_filters("visit:browser!=Chrome")
+%{"visit:browser" => {:is_not, "Chrome"}}
 
-iex> FilterParser.parse_filters(nil)
-%{}
+
iex> FilterParser.parse_filters(nil) +%{}
diff --git a/Plausible.Stats.FilterSuggestions.html b/Plausible.Stats.FilterSuggestions.html index 0787c37f9..cfeffe9fd 100644 --- a/Plausible.Stats.FilterSuggestions.html +++ b/Plausible.Stats.FilterSuggestions.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Filters.html b/Plausible.Stats.Filters.html index 021c34a3a..0806518ff 100644 --- a/Plausible.Stats.Filters.html +++ b/Plausible.Stats.Filters.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Fragments.html b/Plausible.Stats.Fragments.html index 9044cec7c..5fe81ce95 100644 --- a/Plausible.Stats.Fragments.html +++ b/Plausible.Stats.Fragments.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Funnel.html b/Plausible.Stats.Funnel.html index 99d037a4d..e9bdf4fa2 100644 --- a/Plausible.Stats.Funnel.html +++ b/Plausible.Stats.Funnel.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Imported.html b/Plausible.Stats.Imported.html index fe6c06926..51f04a566 100644 --- a/Plausible.Stats.Imported.html +++ b/Plausible.Stats.Imported.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Interval.html b/Plausible.Stats.Interval.html index fa66a59c9..40314934d 100644 --- a/Plausible.Stats.Interval.html +++ b/Plausible.Stats.Interval.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Props.html b/Plausible.Stats.Props.html index cc4ba7903..1eead74ce 100644 --- a/Plausible.Stats.Props.html +++ b/Plausible.Stats.Props.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Query.html b/Plausible.Stats.Query.html index 2671dfaf5..c09e11e95 100644 --- a/Plausible.Stats.Query.html +++ b/Plausible.Stats.Query.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Timeseries.html b/Plausible.Stats.Timeseries.html index f302b13bd..a2a566a5b 100644 --- a/Plausible.Stats.Timeseries.html +++ b/Plausible.Stats.Timeseries.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.Util.html b/Plausible.Stats.Util.html index 94494871e..188280f70 100644 --- a/Plausible.Stats.Util.html +++ b/Plausible.Stats.Util.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Stats.html b/Plausible.Stats.html index 306b675f2..42e9647d2 100644 --- a/Plausible.Stats.html +++ b/Plausible.Stats.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Test.Support.HTML.html b/Plausible.Test.Support.HTML.html index 92d128a9f..da598e2f5 100644 --- a/Plausible.Test.Support.HTML.html +++ b/Plausible.Test.Support.HTML.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.TestUtils.html b/Plausible.TestUtils.html index 6d8bd1c55..f02611d0d 100644 --- a/Plausible.TestUtils.html +++ b/Plausible.TestUtils.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Themes.html b/Plausible.Themes.html index a8d04882f..91e768e15 100644 --- a/Plausible.Themes.html +++ b/Plausible.Themes.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Timezones.html b/Plausible.Timezones.html index 11f67ed5e..d62136745 100644 --- a/Plausible.Timezones.html +++ b/Plausible.Timezones.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Users.html b/Plausible.Users.html index 6fb28a483..2c96fa068 100644 --- a/Plausible.Users.html +++ b/Plausible.Users.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.CheckUsage.html b/Plausible.Workers.CheckUsage.html index b53ce8840..e0a1e1d87 100644 --- a/Plausible.Workers.CheckUsage.html +++ b/Plausible.Workers.CheckUsage.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.CleanEmailVerificationCodes.html b/Plausible.Workers.CleanEmailVerificationCodes.html index d99f13854..6318cbe69 100644 --- a/Plausible.Workers.CleanEmailVerificationCodes.html +++ b/Plausible.Workers.CleanEmailVerificationCodes.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.CleanInvitations.html b/Plausible.Workers.CleanInvitations.html index f9b775241..09db0811f 100644 --- a/Plausible.Workers.CleanInvitations.html +++ b/Plausible.Workers.CleanInvitations.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.ExpireDomainChangeTransitions.html b/Plausible.Workers.ExpireDomainChangeTransitions.html index f26904166..831e14e7b 100644 --- a/Plausible.Workers.ExpireDomainChangeTransitions.html +++ b/Plausible.Workers.ExpireDomainChangeTransitions.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.ImportGoogleAnalytics.html b/Plausible.Workers.ImportGoogleAnalytics.html index 709f879d5..4b3003f0d 100644 --- a/Plausible.Workers.ImportGoogleAnalytics.html +++ b/Plausible.Workers.ImportGoogleAnalytics.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.LockSites.html b/Plausible.Workers.LockSites.html index 23c66ba73..8697d26b9 100644 --- a/Plausible.Workers.LockSites.html +++ b/Plausible.Workers.LockSites.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.NotifyAnnualRenewal.html b/Plausible.Workers.NotifyAnnualRenewal.html index b10dd61b7..18590bfdf 100644 --- a/Plausible.Workers.NotifyAnnualRenewal.html +++ b/Plausible.Workers.NotifyAnnualRenewal.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.RotateSalts.html b/Plausible.Workers.RotateSalts.html index 4cb880580..8716efb1c 100644 --- a/Plausible.Workers.RotateSalts.html +++ b/Plausible.Workers.RotateSalts.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.ScheduleEmailReports.html b/Plausible.Workers.ScheduleEmailReports.html index 7ef5cfc65..25dccc5f0 100644 --- a/Plausible.Workers.ScheduleEmailReports.html +++ b/Plausible.Workers.ScheduleEmailReports.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.SendCheckStatsEmails.html b/Plausible.Workers.SendCheckStatsEmails.html index 5838869a2..8cd8b234c 100644 --- a/Plausible.Workers.SendCheckStatsEmails.html +++ b/Plausible.Workers.SendCheckStatsEmails.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.SendEmailReport.html b/Plausible.Workers.SendEmailReport.html index a3ce01a94..26c6cbcaf 100644 --- a/Plausible.Workers.SendEmailReport.html +++ b/Plausible.Workers.SendEmailReport.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.SendSiteSetupEmails.html b/Plausible.Workers.SendSiteSetupEmails.html index d73ecbe11..aa7c1047e 100644 --- a/Plausible.Workers.SendSiteSetupEmails.html +++ b/Plausible.Workers.SendSiteSetupEmails.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.SendTrialNotifications.html b/Plausible.Workers.SendTrialNotifications.html index a5ed81992..0b199a9b2 100644 --- a/Plausible.Workers.SendTrialNotifications.html +++ b/Plausible.Workers.SendTrialNotifications.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Workers.SpikeNotifier.html b/Plausible.Workers.SpikeNotifier.html index 413421c5b..33048245b 100644 --- a/Plausible.Workers.SpikeNotifier.html +++ b/Plausible.Workers.SpikeNotifier.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.epub b/Plausible.epub index ac3998aa172fd3b1d69c1a57bf1a7ae3f83531d6..e564f76b214c2b3b0faa8e5fce023963d6cf59bf 100644 GIT binary patch delta 159015 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 gc4ywVUFFeZQ0i2PM+>4Ln>CSfKG{e?)-V&K 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⩔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 delta 156633 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
    lZfrP6ypcumKZ-`k=ERlSH4n%! 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 diff --git a/Plausible.html b/Plausible.html index ddde859e0..4ccd06ed4 100644 --- a/Plausible.html +++ b/Plausible.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Api.ExternalController.html b/PlausibleWeb.Api.ExternalController.html index 69899baa1..4b3a6a7e2 100644 --- a/PlausibleWeb.Api.ExternalController.html +++ b/PlausibleWeb.Api.ExternalController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Api.ExternalSitesController.html b/PlausibleWeb.Api.ExternalSitesController.html index 5039b4099..00da54940 100644 --- a/PlausibleWeb.Api.ExternalSitesController.html +++ b/PlausibleWeb.Api.ExternalSitesController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Api.ExternalStatsController.html b/PlausibleWeb.Api.ExternalStatsController.html index f9000fcc9..3ef0454f5 100644 --- a/PlausibleWeb.Api.ExternalStatsController.html +++ b/PlausibleWeb.Api.ExternalStatsController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Api.Helpers.html b/PlausibleWeb.Api.Helpers.html index 1e91d5923..6a51dd2b5 100644 --- a/PlausibleWeb.Api.Helpers.html +++ b/PlausibleWeb.Api.Helpers.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Api.InternalController.html b/PlausibleWeb.Api.InternalController.html index 2c70a7353..9adee8ded 100644 --- a/PlausibleWeb.Api.InternalController.html +++ b/PlausibleWeb.Api.InternalController.html @@ -13,7 +13,7 @@ - + @@ -172,7 +172,7 @@ Functions

    disable_feature(conn, map)

    - + View Source diff --git a/PlausibleWeb.Api.PaddleController.html b/PlausibleWeb.Api.PaddleController.html index dc612bb04..a4ad4c4b0 100644 --- a/PlausibleWeb.Api.PaddleController.html +++ b/PlausibleWeb.Api.PaddleController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Api.StatsController.html b/PlausibleWeb.Api.StatsController.html index 7bf50cf4d..998265570 100644 --- a/PlausibleWeb.Api.StatsController.html +++ b/PlausibleWeb.Api.StatsController.html @@ -13,7 +13,7 @@ - + @@ -654,13 +654,13 @@ and month. The default depends on the Plausible.Query.from/2 for each default.

  1. filters - optional filters to drill down data. See the Stats API "Filtering" section for more details.

  2. with_imported - boolean indicating whether to include Google Analytics -imported data or not. Defaults to false.

  3. Full example:

    %{
    +imported data or not. Defaults to false.

    Full example:

    %{
       "from" => "2021-09-06",
       "interval" => "month",
       "metric" => "visitors",
       "period" => "custom",
       "to" => "2021-12-13"
    -}

    +}

    Response @@ -675,20 +675,20 @@ cut off by the requested date range or not. For example, if looking at a month week-by-week, some weeks may be cut off by the month boundaries. It's useful to adjust the graph display slightly in case the interval is not 'full' so that the user understands why the numbers might be lower for -those partial periods.

    Full example:

    %{
    -  "full_intervals" => %{
    +those partial periods.

    Full example:

    %{
    +  "full_intervals" => %{
         "2021-09-01" => false,
         "2021-10-01" => true,
         "2021-11-01" => true,
         "2021-12-01" => false
    -  },
    +  },
       "imported_source" => nil,
       "interval" => "month",
    -  "labels" => ["2021-09-01", "2021-10-01", "2021-11-01", "2021-12-01"],
    -  "plot" => [0, 0, 0, 0],
    +  "labels" => ["2021-09-01", "2021-10-01", "2021-11-01", "2021-12-01"],
    +  "plot" => [0, 0, 0, 0],
       "present_index" => nil,
       "with_imported" => false
    -}
    +
    }
    diff --git a/PlausibleWeb.AuthController.html b/PlausibleWeb.AuthController.html index e12be85c8..bc5b842b2 100644 --- a/PlausibleWeb.AuthController.html +++ b/PlausibleWeb.AuthController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.AuthPlug.html b/PlausibleWeb.AuthPlug.html index c72407ffe..b40ba4db1 100644 --- a/PlausibleWeb.AuthPlug.html +++ b/PlausibleWeb.AuthPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.AuthView.html b/PlausibleWeb.AuthView.html index 318bfad9f..fc5b36467 100644 --- a/PlausibleWeb.AuthView.html +++ b/PlausibleWeb.AuthView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.AuthorizeSiteAccess.html b/PlausibleWeb.AuthorizeSiteAccess.html index 01f38c147..82613e27b 100644 --- a/PlausibleWeb.AuthorizeSiteAccess.html +++ b/PlausibleWeb.AuthorizeSiteAccess.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.AuthorizeSitesApiPlug.html b/PlausibleWeb.AuthorizeSitesApiPlug.html index c2d8276e1..2627628a0 100644 --- a/PlausibleWeb.AuthorizeSitesApiPlug.html +++ b/PlausibleWeb.AuthorizeSitesApiPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.AuthorizeStatsApiPlug.html b/PlausibleWeb.AuthorizeStatsApiPlug.html index 6e850a01d..7420869c4 100644 --- a/PlausibleWeb.AuthorizeStatsApiPlug.html +++ b/PlausibleWeb.AuthorizeStatsApiPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.BillingController.html b/PlausibleWeb.BillingController.html index b0aa370f0..2fdd8215e 100644 --- a/PlausibleWeb.BillingController.html +++ b/PlausibleWeb.BillingController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.BillingView.html b/PlausibleWeb.BillingView.html index c311a7a36..9b84caa8b 100644 --- a/PlausibleWeb.BillingView.html +++ b/PlausibleWeb.BillingView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.CRMAuthPlug.html b/PlausibleWeb.CRMAuthPlug.html index 146b88a96..e33161026 100644 --- a/PlausibleWeb.CRMAuthPlug.html +++ b/PlausibleWeb.CRMAuthPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Captcha.html b/PlausibleWeb.Captcha.html index b0162eab9..bbefafaeb 100644 --- a/PlausibleWeb.Captcha.html +++ b/PlausibleWeb.Captcha.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Components.Generic.html b/PlausibleWeb.Components.Generic.html index 1bc991189..31f9aaf00 100644 --- a/PlausibleWeb.Components.Generic.html +++ b/PlausibleWeb.Components.Generic.html @@ -13,7 +13,7 @@ - + @@ -136,7 +136,7 @@ Plausible

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

-

Attributes

  • title (:string) - Defaults to "Notice".
  • class (:string) - Defaults to "".

Slots

  • inner_block
+

Attributes

  • title (:string) - Defaults to "Notice".
  • size (:atom) - Defaults to :sm.
  • Global attributes are accepted.

Slots

  • inner_block
@@ -188,7 +188,7 @@ Functions Attributes -
  • title (:string) - Defaults to "Notice".
  • class (:string) - Defaults to "".

+
  • title (:string) - Defaults to "Notice".
  • size (:atom) - Defaults to :sm.
  • Global attributes are accepted.

Slots diff --git a/PlausibleWeb.Components.Site.Feature.html b/PlausibleWeb.Components.Site.Feature.html index bb9bfd06d..7c8213a87 100644 --- a/PlausibleWeb.Components.Site.Feature.html +++ b/PlausibleWeb.Components.Site.Feature.html @@ -13,7 +13,7 @@ - + @@ -141,22 +141,6 @@ capable of flipping booleans in - - - - - -
render(template, assigns \\ %{}) @@ -193,7 +177,7 @@ to render a particular template.

-

Attributes

Slots

  • inner_block
+

Attributes

  • site (Plausible.Site) (required)
  • feature_mod (:atom) (required) - Must be one of Plausible.Billing.Feature.Funnels, Plausible.Billing.Feature.Goals, Plausible.Billing.Feature.Props, or Plausible.Billing.Feature.RevenueGoals.
  • conn (Plug.Conn) (required)

Slots

  • inner_block
@@ -230,50 +214,6 @@ Functions

The resource name, as an atom, for this view

-
- -
- -
- - - Link to this function - -

button_active(assigns)

- - - - View Source - - - -
- -
- - -
-
-
- -
- - - Link to this function - -

button_inactive(assigns)

- - - - View Source - - - -
- -
- -
@@ -309,7 +249,7 @@ Functions

target(site, setting, conn, set_to)

- + View Source @@ -377,7 +317,7 @@ to render a particular template.

Attributes

-

+
  • site (Plausible.Site) (required)
  • feature_mod (:atom) (required) - Must be one of Plausible.Billing.Feature.Funnels, Plausible.Billing.Feature.Goals, Plausible.Billing.Feature.Props, or Plausible.Billing.Feature.RevenueGoals.
  • conn (Plug.Conn) (required)

Slots diff --git a/PlausibleWeb.ConnCase.html b/PlausibleWeb.ConnCase.html index 4103b3cb5..d0a71f11a 100644 --- a/PlausibleWeb.ConnCase.html +++ b/PlausibleWeb.ConnCase.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.ControllerHelpers.html b/PlausibleWeb.ControllerHelpers.html index 93ae57958..7cd773ebf 100644 --- a/PlausibleWeb.ControllerHelpers.html +++ b/PlausibleWeb.ControllerHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Email.html b/PlausibleWeb.Email.html index 7ccf44a45..54ad492c4 100644 --- a/PlausibleWeb.Email.html +++ b/PlausibleWeb.Email.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.EmailView.html b/PlausibleWeb.EmailView.html index 513db6f5e..4c68532f9 100644 --- a/PlausibleWeb.EmailView.html +++ b/PlausibleWeb.EmailView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Endpoint.html b/PlausibleWeb.Endpoint.html index 19b06e929..9332f80a9 100644 --- a/PlausibleWeb.Endpoint.html +++ b/PlausibleWeb.Endpoint.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.ErrorHelpers.html b/PlausibleWeb.ErrorHelpers.html index ec2032630..138f7db18 100644 --- a/PlausibleWeb.ErrorHelpers.html +++ b/PlausibleWeb.ErrorHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.ErrorReportController.html b/PlausibleWeb.ErrorReportController.html index 33f0a9bd7..ad172bb76 100644 --- a/PlausibleWeb.ErrorReportController.html +++ b/PlausibleWeb.ErrorReportController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.ErrorView.html b/PlausibleWeb.ErrorView.html index e7000699d..43db8374e 100644 --- a/PlausibleWeb.ErrorView.html +++ b/PlausibleWeb.ErrorView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Favicon.html b/PlausibleWeb.Favicon.html index 7884ddb30..f84aba331 100644 --- a/PlausibleWeb.Favicon.html +++ b/PlausibleWeb.Favicon.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.FirstLaunchPlug.html b/PlausibleWeb.FirstLaunchPlug.html index 379c7acbb..cf819127f 100644 --- a/PlausibleWeb.FirstLaunchPlug.html +++ b/PlausibleWeb.FirstLaunchPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.FormHelpers.html b/PlausibleWeb.FormHelpers.html index 3fc9d6d5e..43931e717 100644 --- a/PlausibleWeb.FormHelpers.html +++ b/PlausibleWeb.FormHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.InvitationController.html b/PlausibleWeb.InvitationController.html index fc2e1e14f..754952450 100644 --- a/PlausibleWeb.InvitationController.html +++ b/PlausibleWeb.InvitationController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.LastSeenPlug.html b/PlausibleWeb.LastSeenPlug.html index 929a72cbb..82440c099 100644 --- a/PlausibleWeb.LastSeenPlug.html +++ b/PlausibleWeb.LastSeenPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.LayoutView.html b/PlausibleWeb.LayoutView.html index a838a4796..6ad303f99 100644 --- a/PlausibleWeb.LayoutView.html +++ b/PlausibleWeb.LayoutView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.ChoosePlan.html b/PlausibleWeb.Live.ChoosePlan.html index 7325ddad1..a60925680 100644 --- a/PlausibleWeb.Live.ChoosePlan.html +++ b/PlausibleWeb.Live.ChoosePlan.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.Components.ComboBox.StaticSearch.html b/PlausibleWeb.Live.Components.ComboBox.StaticSearch.html index 358276dbd..fcb18f81f 100644 --- a/PlausibleWeb.Live.Components.ComboBox.StaticSearch.html +++ b/PlausibleWeb.Live.Components.ComboBox.StaticSearch.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.Components.ComboBox.html b/PlausibleWeb.Live.Components.ComboBox.html index 58c93b326..684be7f23 100644 --- a/PlausibleWeb.Live.Components.ComboBox.html +++ b/PlausibleWeb.Live.Components.ComboBox.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.Components.Form.html b/PlausibleWeb.Live.Components.Form.html index b0513f40c..5a00668bb 100644 --- a/PlausibleWeb.Live.Components.Form.html +++ b/PlausibleWeb.Live.Components.Form.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.Flash.html b/PlausibleWeb.Live.Flash.html index 01ba41ff3..4203f818d 100644 --- a/PlausibleWeb.Live.Flash.html +++ b/PlausibleWeb.Live.Flash.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.FunnelSettings.Form.html b/PlausibleWeb.Live.FunnelSettings.Form.html index d8948d927..18629493f 100644 --- a/PlausibleWeb.Live.FunnelSettings.Form.html +++ b/PlausibleWeb.Live.FunnelSettings.Form.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.FunnelSettings.List.html b/PlausibleWeb.Live.FunnelSettings.List.html index d4ac76972..29fe64ade 100644 --- a/PlausibleWeb.Live.FunnelSettings.List.html +++ b/PlausibleWeb.Live.FunnelSettings.List.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.FunnelSettings.html b/PlausibleWeb.Live.FunnelSettings.html index 16f58a2e4..345c3319b 100644 --- a/PlausibleWeb.Live.FunnelSettings.html +++ b/PlausibleWeb.Live.FunnelSettings.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.GoalSettings.Form.html b/PlausibleWeb.Live.GoalSettings.Form.html index b62fd04c0..72698eb9b 100644 --- a/PlausibleWeb.Live.GoalSettings.Form.html +++ b/PlausibleWeb.Live.GoalSettings.Form.html @@ -13,7 +13,7 @@ - + @@ -136,7 +136,7 @@ Plausible - +

Attributes

@@ -242,7 +242,7 @@ Functions Attributes

- +
@@ -254,7 +254,7 @@ Functions

handle_event(binary, arg2, socket)

- + View Source @@ -326,7 +326,7 @@ Functions

pageviews_tab(assigns)

- + View Source @@ -348,7 +348,7 @@ Functions

render(assigns)

- + View Source @@ -370,7 +370,7 @@ Functions

suggest_page_paths(input, options, site)

- + View Source @@ -392,7 +392,7 @@ Functions

tabs(assigns)

- + View Source diff --git a/PlausibleWeb.Live.GoalSettings.List.html b/PlausibleWeb.Live.GoalSettings.List.html index 6bc54d1b8..c29e18f69 100644 --- a/PlausibleWeb.Live.GoalSettings.List.html +++ b/PlausibleWeb.Live.GoalSettings.List.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.GoalSettings.html b/PlausibleWeb.Live.GoalSettings.html index 39679e774..224c11ad4 100644 --- a/PlausibleWeb.Live.GoalSettings.html +++ b/PlausibleWeb.Live.GoalSettings.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.PropsSettings.Form.html b/PlausibleWeb.Live.PropsSettings.Form.html index 32735a770..205014e4f 100644 --- a/PlausibleWeb.Live.PropsSettings.Form.html +++ b/PlausibleWeb.Live.PropsSettings.Form.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.PropsSettings.List.html b/PlausibleWeb.Live.PropsSettings.List.html index 56bb1b081..32e13b833 100644 --- a/PlausibleWeb.Live.PropsSettings.List.html +++ b/PlausibleWeb.Live.PropsSettings.List.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.PropsSettings.html b/PlausibleWeb.Live.PropsSettings.html index f124a464d..9ca47de92 100644 --- a/PlausibleWeb.Live.PropsSettings.html +++ b/PlausibleWeb.Live.PropsSettings.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.RegisterForm.html b/PlausibleWeb.Live.RegisterForm.html index aef8bd7ce..2b45f37d9 100644 --- a/PlausibleWeb.Live.RegisterForm.html +++ b/PlausibleWeb.Live.RegisterForm.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.ResetPasswordForm.html b/PlausibleWeb.Live.ResetPasswordForm.html index 6bddb562d..203a3a473 100644 --- a/PlausibleWeb.Live.ResetPasswordForm.html +++ b/PlausibleWeb.Live.ResetPasswordForm.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.LiveSocket.html b/PlausibleWeb.LiveSocket.html index 2ae4ee6dc..5bd927cef 100644 --- a/PlausibleWeb.LiveSocket.html +++ b/PlausibleWeb.LiveSocket.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.MJML.WeeklyReport.html b/PlausibleWeb.MJML.WeeklyReport.html index 65c74aee3..436febbe7 100644 --- a/PlausibleWeb.MJML.WeeklyReport.html +++ b/PlausibleWeb.MJML.WeeklyReport.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.PageController.html b/PlausibleWeb.PageController.html index a74523024..93a2f596a 100644 --- a/PlausibleWeb.PageController.html +++ b/PlausibleWeb.PageController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.PageView.html b/PlausibleWeb.PageView.html index 80eefce42..e21919727 100644 --- a/PlausibleWeb.PageView.html +++ b/PlausibleWeb.PageView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Controllers.Goals.html b/PlausibleWeb.Plugins.API.Controllers.Goals.html index 9740e1dc9..c09ea995f 100644 --- a/PlausibleWeb.Plugins.API.Controllers.Goals.html +++ b/PlausibleWeb.Plugins.API.Controllers.Goals.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Controllers.SharedLinks.html b/PlausibleWeb.Plugins.API.Controllers.SharedLinks.html index 7794f00aa..90e407848 100644 --- a/PlausibleWeb.Plugins.API.Controllers.SharedLinks.html +++ b/PlausibleWeb.Plugins.API.Controllers.SharedLinks.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Errors.html b/PlausibleWeb.Plugins.API.Errors.html index 7f8f331a6..27bb72b2e 100644 --- a/PlausibleWeb.Plugins.API.Errors.html +++ b/PlausibleWeb.Plugins.API.Errors.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Router.html b/PlausibleWeb.Plugins.API.Router.html index 734df7065..bff25f9dd 100644 --- a/PlausibleWeb.Plugins.API.Router.html +++ b/PlausibleWeb.Plugins.API.Router.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Error.html b/PlausibleWeb.Plugins.API.Schemas.Error.html index 96f918308..2d686ef28 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Error.html +++ b/PlausibleWeb.Plugins.API.Schemas.Error.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent.html b/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent.html index 26081dab6..4b8a845bf 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview.html b/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview.html index c20556bd6..f4b3f7642 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue.html b/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue.html index 33148347a..3c0ce8a48 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.html b/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.html index 24c98d8be..0689ec147 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent.html b/PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent.html index 64bb0a49f..776a68290 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse.html b/PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse.html index d3b112950..cdfd89f07 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.Pageview.html b/PlausibleWeb.Plugins.API.Schemas.Goal.Pageview.html index a2bec65a9..70bf8a2df 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.Pageview.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.Pageview.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.Revenue.html b/PlausibleWeb.Plugins.API.Schemas.Goal.Revenue.html index ef318e007..bdf4a48e6 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.Revenue.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.Revenue.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.Type.html b/PlausibleWeb.Plugins.API.Schemas.Goal.Type.html index b9ff37398..0f9978e56 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.Type.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.Type.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Goal.html b/PlausibleWeb.Plugins.API.Schemas.Goal.html index 9a69dec01..9ecdc8a6d 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Goal.html +++ b/PlausibleWeb.Plugins.API.Schemas.Goal.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Link.html b/PlausibleWeb.Plugins.API.Schemas.Link.html index bc190183c..61bbc0c54 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Link.html +++ b/PlausibleWeb.Plugins.API.Schemas.Link.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.NotFound.html b/PlausibleWeb.Plugins.API.Schemas.NotFound.html index 09ba58d4e..fad6f54b3 100644 --- a/PlausibleWeb.Plugins.API.Schemas.NotFound.html +++ b/PlausibleWeb.Plugins.API.Schemas.NotFound.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.PaginationMetadata.html b/PlausibleWeb.Plugins.API.Schemas.PaginationMetadata.html index c0232d789..4f57a5d0b 100644 --- a/PlausibleWeb.Plugins.API.Schemas.PaginationMetadata.html +++ b/PlausibleWeb.Plugins.API.Schemas.PaginationMetadata.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest.html b/PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest.html index d3d42260e..2d4c50c42 100644 --- a/PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest.html +++ b/PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse.html b/PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse.html index d199177ba..32204ffb9 100644 --- a/PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse.html +++ b/PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.SharedLink.html b/PlausibleWeb.Plugins.API.Schemas.SharedLink.html index 923fc7c6e..7e87d37cb 100644 --- a/PlausibleWeb.Plugins.API.Schemas.SharedLink.html +++ b/PlausibleWeb.Plugins.API.Schemas.SharedLink.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.Unauthorized.html b/PlausibleWeb.Plugins.API.Schemas.Unauthorized.html index 496a50019..6cfa86629 100644 --- a/PlausibleWeb.Plugins.API.Schemas.Unauthorized.html +++ b/PlausibleWeb.Plugins.API.Schemas.Unauthorized.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity.html b/PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity.html index 124018b82..76e098211 100644 --- a/PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity.html +++ b/PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Spec.html b/PlausibleWeb.Plugins.API.Spec.html index eacc80cd5..c624e1fa2 100644 --- a/PlausibleWeb.Plugins.API.Spec.html +++ b/PlausibleWeb.Plugins.API.Spec.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Views.Error.html b/PlausibleWeb.Plugins.API.Views.Error.html index 6955998d1..0d201b226 100644 --- a/PlausibleWeb.Plugins.API.Views.Error.html +++ b/PlausibleWeb.Plugins.API.Views.Error.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Views.Goal.html b/PlausibleWeb.Plugins.API.Views.Goal.html index fbcdd9f85..a96bcd42b 100644 --- a/PlausibleWeb.Plugins.API.Views.Goal.html +++ b/PlausibleWeb.Plugins.API.Views.Goal.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Views.Pagination.html b/PlausibleWeb.Plugins.API.Views.Pagination.html index ff81268a2..01963592e 100644 --- a/PlausibleWeb.Plugins.API.Views.Pagination.html +++ b/PlausibleWeb.Plugins.API.Views.Pagination.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.Views.SharedLink.html b/PlausibleWeb.Plugins.API.Views.SharedLink.html index 4e7acbbf2..6c1806dbf 100644 --- a/PlausibleWeb.Plugins.API.Views.SharedLink.html +++ b/PlausibleWeb.Plugins.API.Views.SharedLink.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugins.API.html b/PlausibleWeb.Plugins.API.html index c7680a7ea..f50556054 100644 --- a/PlausibleWeb.Plugins.API.html +++ b/PlausibleWeb.Plugins.API.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.PluginsAPICase.html b/PlausibleWeb.PluginsAPICase.html index bc4a660f6..b5b083e6c 100644 --- a/PlausibleWeb.PluginsAPICase.html +++ b/PlausibleWeb.PluginsAPICase.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugs.AuthorizePluginsAPI.html b/PlausibleWeb.Plugs.AuthorizePluginsAPI.html index f84c861bd..05681f5cb 100644 --- a/PlausibleWeb.Plugs.AuthorizePluginsAPI.html +++ b/PlausibleWeb.Plugs.AuthorizePluginsAPI.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugs.MaybeDisableRegistration.html b/PlausibleWeb.Plugs.MaybeDisableRegistration.html index 88b1501d4..16382e132 100644 --- a/PlausibleWeb.Plugs.MaybeDisableRegistration.html +++ b/PlausibleWeb.Plugs.MaybeDisableRegistration.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugs.NoRobots.html b/PlausibleWeb.Plugs.NoRobots.html index dc372f44a..339c7e577 100644 --- a/PlausibleWeb.Plugs.NoRobots.html +++ b/PlausibleWeb.Plugs.NoRobots.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugs.RuntimeSessionAdapter.html b/PlausibleWeb.Plugs.RuntimeSessionAdapter.html index cde6ab0e2..b1def0b17 100644 --- a/PlausibleWeb.Plugs.RuntimeSessionAdapter.html +++ b/PlausibleWeb.Plugs.RuntimeSessionAdapter.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.RefInspector.html b/PlausibleWeb.RefInspector.html index 3d3009aa7..54fec8c2a 100644 --- a/PlausibleWeb.RefInspector.html +++ b/PlausibleWeb.RefInspector.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.RemoteIp.html b/PlausibleWeb.RemoteIp.html index 8d888b38a..36066ec91 100644 --- a/PlausibleWeb.RemoteIp.html +++ b/PlausibleWeb.RemoteIp.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.RequireAccountPlug.html b/PlausibleWeb.RequireAccountPlug.html index 83dede1a5..10dd998f5 100644 --- a/PlausibleWeb.RequireAccountPlug.html +++ b/PlausibleWeb.RequireAccountPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.RequireLoggedOutPlug.html b/PlausibleWeb.RequireLoggedOutPlug.html index c7f2366b9..b677e39b9 100644 --- a/PlausibleWeb.RequireLoggedOutPlug.html +++ b/PlausibleWeb.RequireLoggedOutPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Router.html b/PlausibleWeb.Router.html index e757c69a0..8f802b0cd 100644 --- a/PlausibleWeb.Router.html +++ b/PlausibleWeb.Router.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.SessionTimeoutPlug.html b/PlausibleWeb.SessionTimeoutPlug.html index 84a320b0d..7ab91134e 100644 --- a/PlausibleWeb.SessionTimeoutPlug.html +++ b/PlausibleWeb.SessionTimeoutPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Site.MembershipController.html b/PlausibleWeb.Site.MembershipController.html index 78993bc24..6a6ea4634 100644 --- a/PlausibleWeb.Site.MembershipController.html +++ b/PlausibleWeb.Site.MembershipController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Site.MembershipView.html b/PlausibleWeb.Site.MembershipView.html index d4dea3fde..d3eb2ca43 100644 --- a/PlausibleWeb.Site.MembershipView.html +++ b/PlausibleWeb.Site.MembershipView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.SiteController.html b/PlausibleWeb.SiteController.html index 4ae39c3ee..9527fb463 100644 --- a/PlausibleWeb.SiteController.html +++ b/PlausibleWeb.SiteController.html @@ -13,7 +13,7 @@ - + @@ -556,7 +556,7 @@ Functions

add_monthly_report_recipient(conn, map)

- + View Source @@ -600,7 +600,7 @@ Functions

add_snippet_after_domain_change(conn, params)

- + View Source @@ -622,7 +622,7 @@ Functions

add_spike_notification_recipient(conn, map)

- + View Source @@ -644,7 +644,7 @@ Functions

add_weekly_report_recipient(conn, map)

- + View Source @@ -666,7 +666,7 @@ Functions

change_domain(conn, params)

- + View Source @@ -688,7 +688,7 @@ Functions

change_domain_submit(conn, map)

- + View Source @@ -710,7 +710,7 @@ Functions

create_shared_link(conn, map)

- + View Source @@ -754,7 +754,7 @@ Functions

delete_custom_domain(conn, map)

- + View Source @@ -776,7 +776,7 @@ Functions

delete_google_auth(conn, params)

- + View Source @@ -798,7 +798,7 @@ Functions

delete_shared_link(conn, map)

- + View Source @@ -820,7 +820,7 @@ Functions

delete_site(conn, params)

- + View Source @@ -842,7 +842,7 @@ Functions

disable_monthly_report(conn, params)

- + View Source @@ -864,7 +864,7 @@ Functions

disable_spike_notification(conn, params)

- + View Source @@ -886,7 +886,7 @@ Functions

disable_weekly_report(conn, params)

- + View Source @@ -908,7 +908,7 @@ Functions

edit_shared_link(conn, map)

- + View Source @@ -930,7 +930,7 @@ Functions

enable_monthly_report(conn, params)

- + View Source @@ -952,7 +952,7 @@ Functions

enable_spike_notification(conn, params)

- + View Source @@ -974,7 +974,7 @@ Functions

enable_weekly_report(conn, params)

- + View Source @@ -996,7 +996,7 @@ Functions

forget_imported(conn, params)

- + View Source @@ -1018,7 +1018,7 @@ Functions

import_from_google(conn, map)

- + View Source @@ -1040,7 +1040,7 @@ Functions

import_from_google_confirm(conn, map)

- + View Source @@ -1062,7 +1062,7 @@ Functions

import_from_google_user_metric_notice(conn, map)

- + View Source @@ -1084,7 +1084,7 @@ Functions

import_from_google_view_id(conn, map)

- + View Source @@ -1106,7 +1106,7 @@ Functions

import_from_google_view_id_form(conn, map)

- + View Source @@ -1150,7 +1150,7 @@ Functions

make_private(conn, params)

- + View Source @@ -1172,7 +1172,7 @@ Functions

make_public(conn, params)

- + View Source @@ -1216,7 +1216,7 @@ Functions

new_shared_link(conn, params)

- + View Source @@ -1238,7 +1238,7 @@ Functions

remove_monthly_report_recipient(conn, map)

- + View Source @@ -1260,7 +1260,7 @@ Functions

remove_spike_notification_recipient(conn, map)

- + View Source @@ -1282,7 +1282,7 @@ Functions

remove_weekly_report_recipient(conn, map)

- + View Source @@ -1304,7 +1304,7 @@ Functions

reset_stats(conn, params)

- + View Source @@ -1326,7 +1326,7 @@ Functions

settings(conn, map)

- + View Source @@ -1348,7 +1348,7 @@ Functions

settings_custom_domain(conn, params)

- + View Source @@ -1370,7 +1370,7 @@ Functions

settings_danger_zone(conn, params)

- + View Source @@ -1392,7 +1392,7 @@ Functions

settings_email_reports(conn, params)

- + View Source @@ -1414,7 +1414,7 @@ Functions

settings_funnels(conn, params)

- + View Source @@ -1436,7 +1436,7 @@ Functions

settings_general(conn, params)

- + View Source @@ -1458,7 +1458,7 @@ Functions

settings_goals(conn, params)

- + View Source @@ -1480,7 +1480,7 @@ Functions

settings_people(conn, params)

- + View Source @@ -1502,7 +1502,7 @@ Functions

settings_props(conn, params)

- + View Source @@ -1524,7 +1524,7 @@ Functions

settings_search_console(conn, params)

- + View Source @@ -1546,7 +1546,7 @@ Functions

settings_visibility(conn, params)

- + View Source @@ -1568,7 +1568,7 @@ Functions

update_feature_visibility(conn, map)

- + View Source @@ -1590,7 +1590,7 @@ Functions

update_google_auth(conn, map)

- + View Source @@ -1612,7 +1612,7 @@ Functions

update_settings(conn, map)

- + View Source @@ -1634,7 +1634,7 @@ Functions

update_shared_link(conn, map)

- + View Source @@ -1656,7 +1656,7 @@ Functions

update_spike_notification(conn, map)

- + View Source diff --git a/PlausibleWeb.SiteView.html b/PlausibleWeb.SiteView.html index 9a21084d8..79ef2d098 100644 --- a/PlausibleWeb.SiteView.html +++ b/PlausibleWeb.SiteView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.StatsController.html b/PlausibleWeb.StatsController.html index b59f72885..1091adbac 100644 --- a/PlausibleWeb.StatsController.html +++ b/PlausibleWeb.StatsController.html @@ -13,7 +13,7 @@ - + @@ -212,7 +212,7 @@ Functions

authenticate_shared_link(conn, map)

- + View Source @@ -234,7 +234,7 @@ Functions

csv_export(conn, params)

- + View Source @@ -258,7 +258,7 @@ using the IN filter, it causes the requests to balloon in payload size.

shared_link(conn, arg2)

- + View Source diff --git a/PlausibleWeb.StatsView.html b/PlausibleWeb.StatsView.html index 9d4c626aa..ab68b3082 100644 --- a/PlausibleWeb.StatsView.html +++ b/PlausibleWeb.StatsView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Tracker.html b/PlausibleWeb.Tracker.html index 7574189ab..7fb446a81 100644 --- a/PlausibleWeb.Tracker.html +++ b/PlausibleWeb.Tracker.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.UnsubscribeController.html b/PlausibleWeb.UnsubscribeController.html index 758a03712..f2a49f837 100644 --- a/PlausibleWeb.UnsubscribeController.html +++ b/PlausibleWeb.UnsubscribeController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.UnsubscribeView.html b/PlausibleWeb.UnsubscribeView.html index e03b13f46..5ade85c56 100644 --- a/PlausibleWeb.UnsubscribeView.html +++ b/PlausibleWeb.UnsubscribeView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.html b/PlausibleWeb.html index cae6a00bd..13935e709 100644 --- a/PlausibleWeb.html +++ b/PlausibleWeb.html @@ -13,7 +13,7 @@ - + diff --git a/account-locking.html b/account-locking.html index 45a44e3be..47e0056c8 100644 --- a/account-locking.html +++ b/account-locking.html @@ -13,7 +13,7 @@ - + diff --git a/api-reference.html b/api-reference.html index 3fd2ac225..e4d7536a0 100644 --- a/api-reference.html +++ b/api-reference.html @@ -13,7 +13,7 @@ - + @@ -233,6 +233,16 @@ period.

+ +
+ + +

This module provides an interface for managing features, e.g. Revenue Goals, +Funnels and Custom Properties.

+
diff --git a/contributing.html b/contributing.html index 75df5ab49..9207ed6b9 100644 --- a/contributing.html +++ b/contributing.html @@ -13,7 +13,7 @@ - + diff --git a/dist/search_data-36A4E833.js b/dist/search_data-36A4E833.js deleted file mode 100644 index e652a9c9f..000000000 --- a/dist/search_data-36A4E833.js +++ /dev/null @@ -1 +0,0 @@ -searchData={"content_type":"text/markdown","items":[{"doc":"This task is meant to replicate the behavior of cancelling\na subscription. On production, this action is initiated by\na Paddle webhook. Currently, only the subscription status\nis changed with that action.","ref":"Mix.Tasks.CancelSubscription.html","title":"mix cancel_subscription","type":"task"},{"doc":"","ref":"Mix.Tasks.CancelSubscription.html#run/1","title":"Mix.Tasks.CancelSubscription.run/1","type":"function"},{"doc":"","ref":"Mix.Tasks.CleanClickhouse.html","title":"mix clean_clickhouse","type":"task"},{"doc":"","ref":"Mix.Tasks.CleanClickhouse.html#run/1","title":"Mix.Tasks.CleanClickhouse.run/1","type":"function"},{"doc":"","ref":"Mix.Tasks.CreateFreeSubscription.html","title":"mix create_free_subscription","type":"task"},{"doc":"","ref":"Mix.Tasks.CreateFreeSubscription.html#execute/1","title":"Mix.Tasks.CreateFreeSubscription.execute/1","type":"function"},{"doc":"","ref":"Mix.Tasks.CreateFreeSubscription.html#run/1","title":"Mix.Tasks.CreateFreeSubscription.run/1","type":"function"},{"doc":"This task downloads the Country Lite database from DB-IP for self-hosted or development purposes.\nPlausible Cloud runs a paid version of DB-IP with more detailed geolocation data.","ref":"Mix.Tasks.DownloadCountryDatabase.html","title":"mix download_country_database","type":"task"},{"doc":"","ref":"Mix.Tasks.DownloadCountryDatabase.html#run/1","title":"Mix.Tasks.DownloadCountryDatabase.run/1","type":"function"},{"doc":"","ref":"Mix.Tasks.GenerateReferrerFavicons.html","title":"mix generate_referrer_favicons","type":"task"},{"doc":"","ref":"Mix.Tasks.GenerateReferrerFavicons.html#run/1","title":"Mix.Tasks.GenerateReferrerFavicons.run/1","type":"function"},{"doc":"","ref":"Mix.Tasks.PullSandboxSubscription.html","title":"mix pull_sandbox_subscription","type":"task"},{"doc":"","ref":"Mix.Tasks.PullSandboxSubscription.html#run/1","title":"Mix.Tasks.PullSandboxSubscription.run/1","type":"function"},{"doc":"It's often necessary to generate fake events for development and testing purposes. This Mix Task provides a quick and easy\nway to generate a pageview or custom event, either in your development environment or a remote Plausible instance.\n\nSee Mix.Tasks.SendPageview.usage/1 for more detailed documentation.","ref":"Mix.Tasks.SendPageview.html","title":"mix send_pageview","type":"task"},{"doc":"","ref":"Mix.Tasks.SendPageview.html#run/1","title":"Mix.Tasks.SendPageview.run/1","type":"function"},{"doc":"","ref":"ObanErrorReporter.html","title":"ObanErrorReporter","type":"module"},{"doc":"","ref":"ObanErrorReporter.html#handle_event/4","title":"ObanErrorReporter.handle_event/4","type":"function"},{"doc":"Plausible keeps the contexts that define your domain\nand business logic.\n\nContexts are also responsible for managing your data, regardless\nif it comes from the database, an external API or others.","ref":"Plausible.html","title":"Plausible","type":"module"},{"doc":"Clickhouse access with async inserts enabled","ref":"Plausible.AsyncInsertRepo.html","title":"Plausible.AsyncInsertRepo","type":"module"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#aggregate/3","title":"Plausible.AsyncInsertRepo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#aggregate/4","title":"Plausible.AsyncInsertRepo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#all/2","title":"Plausible.AsyncInsertRepo.all/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#checked_out?/0","title":"Plausible.AsyncInsertRepo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#checkout/2","title":"Plausible.AsyncInsertRepo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#child_spec/1","title":"Plausible.AsyncInsertRepo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#config/0","title":"Plausible.AsyncInsertRepo.config/0","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#default_options/1","title":"Plausible.AsyncInsertRepo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#delete/2","title":"Plausible.AsyncInsertRepo.delete/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#delete!/2","title":"Plausible.AsyncInsertRepo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#delete_all/2","title":"Plausible.AsyncInsertRepo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.AsyncInsertRepo.html#disconnect_all/2","title":"Plausible.AsyncInsertRepo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#exists?/2","title":"Plausible.AsyncInsertRepo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get/3","title":"Plausible.AsyncInsertRepo.get/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get!/3","title":"Plausible.AsyncInsertRepo.get!/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get_by/3","title":"Plausible.AsyncInsertRepo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get_by!/3","title":"Plausible.AsyncInsertRepo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get_dynamic_repo/0","title":"Plausible.AsyncInsertRepo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert/2","title":"Plausible.AsyncInsertRepo.insert/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert!/2","title":"Plausible.AsyncInsertRepo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert_all/3","title":"Plausible.AsyncInsertRepo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert_or_update/2","title":"Plausible.AsyncInsertRepo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert_or_update!/2","title":"Plausible.AsyncInsertRepo.insert_or_update!/2","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.AsyncInsertRepo.html#insert_stream/3","title":"Plausible.AsyncInsertRepo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#load/2","title":"Plausible.AsyncInsertRepo.load/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#one/2","title":"Plausible.AsyncInsertRepo.one/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#one!/2","title":"Plausible.AsyncInsertRepo.one!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#preload/3","title":"Plausible.AsyncInsertRepo.preload/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#prepare_query/3","title":"Plausible.AsyncInsertRepo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#put_dynamic_repo/1","title":"Plausible.AsyncInsertRepo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.AsyncInsertRepo.html#query/3","title":"Plausible.AsyncInsertRepo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.AsyncInsertRepo.html#query!/3","title":"Plausible.AsyncInsertRepo.query!/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#reload/2","title":"Plausible.AsyncInsertRepo.reload/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#reload!/2","title":"Plausible.AsyncInsertRepo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#start_link/1","title":"Plausible.AsyncInsertRepo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#stop/1","title":"Plausible.AsyncInsertRepo.stop/1","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#stream/2","title":"Plausible.AsyncInsertRepo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.AsyncInsertRepo.html#to_sql/2","title":"Plausible.AsyncInsertRepo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#update/2","title":"Plausible.AsyncInsertRepo.update/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#update!/2","title":"Plausible.AsyncInsertRepo.update!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#update_all/3","title":"Plausible.AsyncInsertRepo.update_all/3","type":"function"},{"doc":"","ref":"Plausible.Auth.html","title":"Plausible.Auth","type":"module"},{"doc":"","ref":"Plausible.Auth.html#create_user/3","title":"Plausible.Auth.create_user/3","type":"function"},{"doc":"","ref":"Plausible.Auth.html#delete_user/1","title":"Plausible.Auth.delete_user/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#enterprise_configured?/1","title":"Plausible.Auth.enterprise_configured?/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#find_user_by/1","title":"Plausible.Auth.find_user_by/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#has_active_sites?/2","title":"Plausible.Auth.has_active_sites?/2","type":"function"},{"doc":"","ref":"Plausible.Auth.html#is_super_admin?/1","title":"Plausible.Auth.is_super_admin?/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#issue_email_verification/1","title":"Plausible.Auth.issue_email_verification/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#user_owns_sites?/1","title":"Plausible.Auth.user_owns_sites?/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#verify_email/2","title":"Plausible.Auth.verify_email/2","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKey.html","title":"Plausible.Auth.ApiKey","type":"module"},{"doc":"","ref":"Plausible.Auth.ApiKey.html#changeset/2","title":"Plausible.Auth.ApiKey.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKey.html#do_hash/1","title":"Plausible.Auth.ApiKey.do_hash/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKey.html#process_key/1","title":"Plausible.Auth.ApiKey.process_key/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKey.html#update/2","title":"Plausible.Auth.ApiKey.update/2","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html","title":"Plausible.Auth.ApiKeyAdmin","type":"module"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#create_changeset/2","title":"Plausible.Auth.ApiKeyAdmin.create_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#custom_index_query/3","title":"Plausible.Auth.ApiKeyAdmin.custom_index_query/3","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#form_fields/1","title":"Plausible.Auth.ApiKeyAdmin.form_fields/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#index/1","title":"Plausible.Auth.ApiKeyAdmin.index/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#search_fields/1","title":"Plausible.Auth.ApiKeyAdmin.search_fields/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#update_changeset/2","title":"Plausible.Auth.ApiKeyAdmin.update_changeset/2","type":"function"},{"doc":"This embedded schema stores information about the account locking grace\nperiod.\n\nUsers are given this 7-day grace period to upgrade their account after\noutgrowing their subscriptions. The actual account locking happens in\nbackground with `Plausible.Workers.LockSites`.\n\nThe grace period can also be manual, without an end date, being controlled\nmanually from the CRM, and not by the background site locker job. This is \nuseful for enterprise subscriptions.","ref":"Plausible.Auth.GracePeriod.html","title":"Plausible.Auth.GracePeriod","type":"module"},{"doc":"Returns whether the grace period is still active for a User. Defaults to\nfalse if the user is nil or there is no grace period.","ref":"Plausible.Auth.GracePeriod.html#active?/1","title":"Plausible.Auth.GracePeriod.active?/1","type":"function"},{"doc":"Ends an existing grace period by `setting users.grace_period.is_over` to true.\nThis means the grace period has expired.","ref":"Plausible.Auth.GracePeriod.html#end_changeset/1","title":"Plausible.Auth.GracePeriod.end_changeset/1","type":"function"},{"doc":"Returns whether the grace period has already expired for a User. Defaults to\nfalse if the user is nil or there is no grace period.","ref":"Plausible.Auth.GracePeriod.html#expired?/1","title":"Plausible.Auth.GracePeriod.expired?/1","type":"function"},{"doc":"Removes the grace period from the User completely.","ref":"Plausible.Auth.GracePeriod.html#remove_changeset/1","title":"Plausible.Auth.GracePeriod.remove_changeset/1","type":"function"},{"doc":"Starts a account locking grace period of 7 days by changing the User struct.","ref":"Plausible.Auth.GracePeriod.html#start_changeset/2","title":"Plausible.Auth.GracePeriod.start_changeset/2","type":"function"},{"doc":"Starts a manual account locking grace period by changing the User struct. \nManual locking means the grace period can only be removed manually from the\nCRM.","ref":"Plausible.Auth.GracePeriod.html#start_manual_lock_changeset/2","title":"Plausible.Auth.GracePeriod.start_manual_lock_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.GracePeriod.html#t:t/0","title":"Plausible.Auth.GracePeriod.t/0","type":"type"},{"doc":"","ref":"Plausible.Auth.Invitation.html","title":"Plausible.Auth.Invitation","type":"module"},{"doc":"","ref":"Plausible.Auth.Invitation.html#new/1","title":"Plausible.Auth.Invitation.new/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Invitation.html#t:t/0","title":"Plausible.Auth.Invitation.t/0","type":"type"},{"doc":"","ref":"Plausible.Auth.Password.html","title":"Plausible.Auth.Password","type":"module"},{"doc":"","ref":"Plausible.Auth.Password.html#dummy_calculation/0","title":"Plausible.Auth.Password.dummy_calculation/0","type":"function"},{"doc":"","ref":"Plausible.Auth.Password.html#hash/1","title":"Plausible.Auth.Password.hash/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Password.html#match?/2","title":"Plausible.Auth.Password.match?/2","type":"function"},{"doc":"","ref":"Plausible.Auth.Token.html","title":"Plausible.Auth.Token","type":"module"},{"doc":"","ref":"Plausible.Auth.Token.html#sign_password_reset/1","title":"Plausible.Auth.Token.sign_password_reset/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Token.html#sign_shared_link/1","title":"Plausible.Auth.Token.sign_shared_link/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Token.html#verify_password_reset/1","title":"Plausible.Auth.Token.verify_password_reset/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Token.html#verify_shared_link/1","title":"Plausible.Auth.Token.verify_shared_link/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html","title":"Plausible.Auth.User","type":"module"},{"doc":"","ref":"Plausible.Auth.User.html#cancel_email_changeset/1","title":"Plausible.Auth.User.cancel_email_changeset/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#changeset/2","title":"Plausible.Auth.User.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#email_changeset/2","title":"Plausible.Auth.User.email_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#end_trial/1","title":"Plausible.Auth.User.end_trial/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#hash_password/1","title":"Plausible.Auth.User.hash_password/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#new/1","title":"Plausible.Auth.User.new/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#password_strength/1","title":"Plausible.Auth.User.password_strength/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#remove_trial_expiry/1","title":"Plausible.Auth.User.remove_trial_expiry/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#set_password/2","title":"Plausible.Auth.User.set_password/2","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#settings_changeset/2","title":"Plausible.Auth.User.settings_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#start_trial/1","title":"Plausible.Auth.User.start_trial/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#t:t/0","title":"Plausible.Auth.User.t/0","type":"type"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html","title":"Plausible.Auth.UserAdmin","type":"module"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#custom_index_query/3","title":"Plausible.Auth.UserAdmin.custom_index_query/3","type":"function"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#delete/2","title":"Plausible.Auth.UserAdmin.delete/2","type":"function"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#form_fields/1","title":"Plausible.Auth.UserAdmin.form_fields/1","type":"function"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#index/1","title":"Plausible.Auth.UserAdmin.index/1","type":"function"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#resource_actions/1","title":"Plausible.Auth.UserAdmin.resource_actions/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html","title":"Plausible.Billing","type":"module"},{"doc":"","ref":"Plausible.Billing.html#active_subscription_for/1","title":"Plausible.Billing.active_subscription_for/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#change_plan/2","title":"Plausible.Billing.change_plan/2","type":"function"},{"doc":"","ref":"Plausible.Billing.html#change_plan_preview/2","title":"Plausible.Billing.change_plan_preview/2","type":"function"},{"doc":"","ref":"Plausible.Billing.html#check_needs_to_upgrade/1","title":"Plausible.Billing.check_needs_to_upgrade/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#has_active_subscription?/1","title":"Plausible.Billing.has_active_subscription?/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#last_two_billing_cycles/2","title":"Plausible.Billing.last_two_billing_cycles/2","type":"function"},{"doc":"","ref":"Plausible.Billing.html#last_two_billing_months_usage/2","title":"Plausible.Billing.last_two_billing_months_usage/2","type":"function"},{"doc":"","ref":"Plausible.Billing.html#on_trial?/1","title":"Plausible.Billing.on_trial?/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#paddle_api/0","title":"Plausible.Billing.paddle_api/0","type":"function"},{"doc":"","ref":"Plausible.Billing.html#subscription_cancelled/1","title":"Plausible.Billing.subscription_cancelled/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#subscription_created/1","title":"Plausible.Billing.subscription_created/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#subscription_payment_succeeded/1","title":"Plausible.Billing.subscription_payment_succeeded/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#subscription_updated/1","title":"Plausible.Billing.subscription_updated/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#trial_days_left/1","title":"Plausible.Billing.trial_days_left/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#usage_breakdown/1","title":"Plausible.Billing.usage_breakdown/1","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlan.html","title":"Plausible.Billing.EnterprisePlan","type":"module"},{"doc":"","ref":"Plausible.Billing.EnterprisePlan.html#changeset/2","title":"Plausible.Billing.EnterprisePlan.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html","title":"Plausible.Billing.EnterprisePlanAdmin","type":"module"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html#custom_index_query/3","title":"Plausible.Billing.EnterprisePlanAdmin.custom_index_query/3","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html#form_fields/1","title":"Plausible.Billing.EnterprisePlanAdmin.form_fields/1","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html#index/1","title":"Plausible.Billing.EnterprisePlanAdmin.index/1","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html#search_fields/1","title":"Plausible.Billing.EnterprisePlanAdmin.search_fields/1","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html","title":"Plausible.Billing.PaddleApi","type":"module"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#checkout_domain/0","title":"Plausible.Billing.PaddleApi.checkout_domain/0","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#fetch_prices/1","title":"Plausible.Billing.PaddleApi.fetch_prices/1","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#get_invoices/1","title":"Plausible.Billing.PaddleApi.get_invoices/1","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#get_subscription/1","title":"Plausible.Billing.PaddleApi.get_subscription/1","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#update_subscription/2","title":"Plausible.Billing.PaddleApi.update_subscription/2","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#update_subscription_preview/2","title":"Plausible.Billing.PaddleApi.update_subscription_preview/2","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#vendors_domain/0","title":"Plausible.Billing.PaddleApi.vendors_domain/0","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html","title":"Plausible.Billing.Plans","type":"module"},{"doc":"","ref":"Plausible.Billing.Plans.html#available_plans_with_prices/1","title":"Plausible.Billing.Plans.available_plans_with_prices/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#business_plans/0","title":"Plausible.Billing.Plans.business_plans/0","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#business_tier?/1","title":"Plausible.Billing.Plans.business_tier?/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#get_price_for/1","title":"Plausible.Billing.Plans.get_price_for/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#get_regular_plan/2","title":"Plausible.Billing.Plans.get_regular_plan/2","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#get_subscription_plan/1","title":"Plausible.Billing.Plans.get_subscription_plan/1","type":"function"},{"doc":"Returns a list of growth plans available for the user to choose.\n\nAs new versions of plans are introduced, users who were on old plans can\nstill choose from old plans.","ref":"Plausible.Billing.Plans.html#growth_plans_for/1","title":"Plausible.Billing.Plans.growth_plans_for/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#latest_enterprise_plan_with_price/1","title":"Plausible.Billing.Plans.latest_enterprise_plan_with_price/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#subscription_interval/1","title":"Plausible.Billing.Plans.subscription_interval/1","type":"function"},{"doc":"Returns the most appropriate plan for a user based on their usage during a\ngiven cycle.\n\nIf the usage during the cycle exceeds the enterprise-level threshold, or if\nthe user already belongs to an enterprise plan, it suggests the :enterprise\nplan.\n\nOtherwise, it recommends the plan where the cycle usage falls just under the\nplan's limit from the available options for the user.","ref":"Plausible.Billing.Plans.html#suggest/2","title":"Plausible.Billing.Plans.suggest/2","type":"function"},{"doc":"This function takes a list of plans as an argument, gathers all product\nIDs in a single list, and makes an API call to Paddle. After a successful\nresponse, fills in the `monthly_cost` and `yearly_cost` fields for each\ngiven plan and returns the new list of plans with completed information.","ref":"Plausible.Billing.Plans.html#with_prices/1","title":"Plausible.Billing.Plans.with_prices/1","type":"function"},{"doc":"List yearly plans product IDs.","ref":"Plausible.Billing.Plans.html#yearly_product_ids/0","title":"Plausible.Billing.Plans.yearly_product_ids/0","type":"function"},{"doc":"This module provides functions to work with plans usage and limits.","ref":"Plausible.Billing.Quota.html","title":"Plausible.Billing.Quota","type":"module"},{"doc":"Returns the limit of pageviews for a subscription.","ref":"Plausible.Billing.Quota.html#monthly_pageview_limit/1","title":"Plausible.Billing.Quota.monthly_pageview_limit/1","type":"function"},{"doc":"Returns the amount of pageviews and custom events\nsent by the sites the user owns in last 30 days.","ref":"Plausible.Billing.Quota.html#monthly_pageview_usage/1","title":"Plausible.Billing.Quota.monthly_pageview_usage/1","type":"function"},{"doc":"Returns the limit of sites a user can have.\n\nFor enterprise customers, returns :unlimited. The site limit is checked in a\nbackground job so as to avoid service disruption.","ref":"Plausible.Billing.Quota.html#site_limit/1","title":"Plausible.Billing.Quota.site_limit/1","type":"function"},{"doc":"Returns the number of sites the given user owns.","ref":"Plausible.Billing.Quota.html#site_usage/1","title":"Plausible.Billing.Quota.site_usage/1","type":"function"},{"doc":"Returns the limit of team members a user can have in their sites.","ref":"Plausible.Billing.Quota.html#team_member_limit/1","title":"Plausible.Billing.Quota.team_member_limit/1","type":"function"},{"doc":"Returns the total count of team members and pending invitations associated\nwith the user's sites.","ref":"Plausible.Billing.Quota.html#team_member_usage/1","title":"Plausible.Billing.Quota.team_member_usage/1","type":"function"},{"doc":"Returns whether the limit has been exceeded or not.","ref":"Plausible.Billing.Quota.html#within_limit?/2","title":"Plausible.Billing.Quota.within_limit?/2","type":"function"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html","title":"Plausible.Billing.SiteLocker","type":"module"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#send_grace_period_end_email/1","title":"Plausible.Billing.SiteLocker.send_grace_period_end_email/1","type":"function"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#set_lock_status_for/2","title":"Plausible.Billing.SiteLocker.set_lock_status_for/2","type":"function"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#update_sites_for/2","title":"Plausible.Billing.SiteLocker.update_sites_for/2","type":"function"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#t:lock_reason/0","title":"Plausible.Billing.SiteLocker.lock_reason/0","type":"type"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#t:update_opt/0","title":"Plausible.Billing.SiteLocker.update_opt/0","type":"type"},{"doc":"The subscription statuses are stored in Paddle. They can only be changed\nthrough Paddle webhooks, which always send the current subscription status\nvia the payload.\n\n* `active` - All good with the payments. Can access stats.\n\n* `past_due` - The payment has failed, but we're trying to charge the customer\n again. Access to stats is still granted. There will be three retries - after\n 3, 5, and 7 days have passed from the first failure. After a failure on the\n final retry, the subscription status will change to `paused`. As soon as the\n customer updates their billing details, Paddle will charge them again, and\n after a successful payment, the subscription will become `active` again.\n\n* `paused` - we've tried to charge the customer but all the retries have failed.\n Stats access restricted. As soon as the customer updates their billing details,\n Paddle will charge them again, and after a successful payment, the subscription\n will become `active` again.\n\n* `deleted` - The customer has triggered the cancel subscription action. Access\n to stats should be granted for the time the customer has already paid for. If\n they want to upgrade again, new billing details have to be provided.\n\nPaddle documentation links for reference:\n\n* Subscription statuses -\n https://developer.paddle.com/classic/reference/zg9joji1mzu0mdi2-subscription-status-reference\n\n* Payment failures -\n https://developer.paddle.com/classic/guides/zg9joji1mzu0mduy-payment-failures","ref":"Plausible.Billing.Subscription.Status.html","title":"Plausible.Billing.Subscription.Status","type":"module"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#active/0","title":"Plausible.Billing.Subscription.Status.active/0","type":"macro"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#deleted/0","title":"Plausible.Billing.Subscription.Status.deleted/0","type":"macro"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#past_due/0","title":"Plausible.Billing.Subscription.Status.past_due/0","type":"macro"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#paused/0","title":"Plausible.Billing.Subscription.Status.paused/0","type":"macro"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#valid_statuses/0","title":"Plausible.Billing.Subscription.Status.valid_statuses/0","type":"function"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#t:status/0","title":"Plausible.Billing.Subscription.Status.status/0","type":"type"},{"doc":"Helper function for working with Ecto changesets","ref":"Plausible.ChangesetHelpers.html","title":"Plausible.ChangesetHelpers","type":"module"},{"doc":"","ref":"Plausible.ChangesetHelpers.html#traverse_errors/1","title":"Plausible.ChangesetHelpers.traverse_errors/1","type":"function"},{"doc":"Provides the core functions to retrieve and manage\nthe CLDR data that supports formatting and localisation.\n\nIt provides the core functions to access formatted\nCLDR data, set and retrieve a current locale and validate\ncertain core data types such as locales, currencies and\nterritories.","ref":"Plausible.Cldr.html","title":"Plausible.Cldr","type":"module"},{"doc":"","ref":"Plausible.Cldr.html#available_locale_name?/1","title":"Plausible.Cldr.available_locale_name?/1","type":"function"},{"doc":"Returns the default `locale`.","ref":"Plausible.Cldr.html#default_locale/0","title":"Plausible.Cldr.default_locale/0","type":"function"},{"doc":"iex> Plausible.Cldr.default_locale()\n %Cldr.LanguageTag{\n backend: Plausible.Cldr,\n canonical_locale_name: \"en-001\",\n cldr_locale_name: :\"en-001\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: \"en\",\n language: \"en\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :en,\n requested_locale_name: \"en-001\",\n script: :Latn,\n territory: :\"001\",\n transform: %{},\n language_variants: []\n }","ref":"Plausible.Cldr.html#default_locale/0-example","title":"Example - Plausible.Cldr.default_locale/0","type":"function"},{"doc":"Returns the default territory when a locale\ndoes not specify one and none can be inferred.","ref":"Plausible.Cldr.html#default_territory/0","title":"Plausible.Cldr.default_territory/0","type":"function"},{"doc":"iex> Plausible.Cldr.default_territory()\n :\"001\"","ref":"Plausible.Cldr.html#default_territory/0-example","title":"Example - Plausible.Cldr.default_territory/0","type":"function"},{"doc":"Add locale-specific ellipsis to a string.","ref":"Plausible.Cldr.html#ellipsis/2","title":"Plausible.Cldr.ellipsis/2","type":"function"},{"doc":"* `string` is any `String.t` or a 2-element list\n of `String.t` between which the ellipsis is inserted.\n\n* `backend` is any module that includes `use Cldr` and therefore\n is a `Cldr` backend module. The default is `Cldr.default_backend!/0`.\n Note that `Cldr.default_backend!/0` will raise an exception if\n no `:default_backend` is configured under the `:ex_cldr` key in\n `config.exs`.\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.html#ellipsis/2-arguments","title":"Arguments - Plausible.Cldr.ellipsis/2","type":"function"},{"doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/1`.\n The default is `Cldr.get_locale/0`.\n\n* `:location` determines where to place the ellipsis. The options are\n `:after` (the default for a single string argument), `:between`\n (the default and only valid location for an argument that is a list\n of two strings) and `:before`.\n\n* `:format` formats based upon whether the ellipsis\n is inserted between words or sentences. The valid options are\n `:word` or `:sentence`. The default is `:sentence`.","ref":"Plausible.Cldr.html#ellipsis/2-options","title":"Options - Plausible.Cldr.ellipsis/2","type":"function"},{"doc":"iex> Plausible.Cldr.ellipsis \"And furthermore\"\n \"And furthermore…\"\n\n iex> Plausible.Cldr.ellipsis [\"And furthermore\", \"there is much to be done\"], locale: :ja\n \"And furthermore…there is much to be done\"\n\n iex> Plausible.Cldr.ellipsis \"And furthermore\", format: :word\n \"And furthermore …\"\n\n iex> Plausible.Cldr.ellipsis [\"And furthermore\", \"there is much to be done\"], locale: :ja, format: :word\n \"And furthermore … there is much to be done\"","ref":"Plausible.Cldr.html#ellipsis/2-examples","title":"Examples - Plausible.Cldr.ellipsis/2","type":"function"},{"doc":"Return the current locale to be used for `Cldr` functions that\ntake an optional locale parameter for which a locale is not supplied.","ref":"Plausible.Cldr.html#get_locale/0","title":"Plausible.Cldr.get_locale/0","type":"function"},{"doc":"iex> Plausible.Cldr.put_locale(\"pl\")\n iex> Plausible.Cldr.get_locale\n %Cldr.LanguageTag{\n backend: Elixir.Plausible.Cldr,\n canonical_locale_name: \"pl\",\n cldr_locale_name: :pl,\n extensions: %{},\n language: \"pl\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :pl,\n territory: :PL,\n requested_locale_name: \"pl\",\n script: :Latn,\n transform: %{},\n language_variants: []\n }","ref":"Plausible.Cldr.html#get_locale/0-example","title":"Example - Plausible.Cldr.get_locale/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#known_calendars/0","title":"Plausible.Cldr.known_calendars/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#known_currencies/0","title":"Plausible.Cldr.known_currencies/0","type":"function"},{"doc":"Returns either the Gettext `locale_name` in Cldr format or\n`false` based upon whether the locale name is configured in\n`Gettext`.","ref":"Plausible.Cldr.html#known_gettext_locale_name/1","title":"Plausible.Cldr.known_gettext_locale_name/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_gettext_locale_names/0`","ref":"Plausible.Cldr.html#known_gettext_locale_name/1-arguments","title":"Arguments - Plausible.Cldr.known_gettext_locale_name/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_gettext_locale_name \"en\"\n \"en\"\n\n iex> Plausible.Cldr.known_gettext_locale_name \"en-SA\"\n false","ref":"Plausible.Cldr.html#known_gettext_locale_name/1-examples","title":"Examples - Plausible.Cldr.known_gettext_locale_name/1","type":"function"},{"doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Gettext.","ref":"Plausible.Cldr.html#known_gettext_locale_name?/1","title":"Plausible.Cldr.known_gettext_locale_name?/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_gettext_locale_name?/1-arguments","title":"Arguments - Plausible.Cldr.known_gettext_locale_name?/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_gettext_locale_name?(\"en\")\n true\n\n iex> Plausible.Cldr.known_gettext_locale_name?(\"!!\")\n false","ref":"Plausible.Cldr.html#known_gettext_locale_name?/1-examples","title":"Examples - Plausible.Cldr.known_gettext_locale_name?/1","type":"function"},{"doc":"Returns a list of Gettext locale names but in CLDR format with\nunderscore replaced by hyphen in order to facilitate comparisons\nwith `Cldr` locale names.","ref":"Plausible.Cldr.html#known_gettext_locale_names/0","title":"Plausible.Cldr.known_gettext_locale_names/0","type":"function"},{"doc":"Returns either the `locale_name` or `false` based upon\nwhether the locale name is configured in `Cldr`.\n\nThis is helpful when building a list of `or` expressions\nto return the first known locale name from a list.","ref":"Plausible.Cldr.html#known_locale_name/1","title":"Plausible.Cldr.known_locale_name/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_locale_name/1-arguments","title":"Arguments - Plausible.Cldr.known_locale_name/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_locale_name :\"en-AU\"\n :\"en-AU\"\n\n iex> Plausible.Cldr.known_locale_name :\"en-SA\"\n false","ref":"Plausible.Cldr.html#known_locale_name/1-examples","title":"Examples - Plausible.Cldr.known_locale_name/1","type":"function"},{"doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Cldr.","ref":"Plausible.Cldr.html#known_locale_name?/1","title":"Plausible.Cldr.known_locale_name?/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_locale_name?/1-arguments","title":"Arguments - Plausible.Cldr.known_locale_name?/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_locale_name?(:en)\n true\n\n iex> Plausible.Cldr.known_locale_name?(:\"!!\")\n false","ref":"Plausible.Cldr.html#known_locale_name?/1-examples","title":"Examples - Plausible.Cldr.known_locale_name?/1","type":"function"},{"doc":"Returns a list of the known locale names.\n\nKnown locales are those locales which\nare the subset of all CLDR locales that\nhave been configured for use either\nin this module or in `Gettext`.","ref":"Plausible.Cldr.html#known_locale_names/0","title":"Plausible.Cldr.known_locale_names/0","type":"function"},{"doc":"Returns a list of atoms representing the number systems types known to `Cldr`.","ref":"Plausible.Cldr.html#known_number_system_types/0","title":"Plausible.Cldr.known_number_system_types/0","type":"function"},{"doc":"iex> Plausible.Cldr.known_number_system_types\n [:default, :finance, :native, :traditional]","ref":"Plausible.Cldr.html#known_number_system_types/0-example","title":"Example - Plausible.Cldr.known_number_system_types/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#known_number_systems/0","title":"Plausible.Cldr.known_number_systems/0","type":"function"},{"doc":"Returns either the RBNF `locale_name` or `false` based upon\nwhether the locale name is configured in `Cldr`\nand has RBNF rules defined.","ref":"Plausible.Cldr.html#known_rbnf_locale_name/1","title":"Plausible.Cldr.known_rbnf_locale_name/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_rbnf_locale_name/1-arguments","title":"Arguments - Plausible.Cldr.known_rbnf_locale_name/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_rbnf_locale_name :en\n :en\n\n iex> Plausible.Cldr.known_rbnf_locale_name :\"en-SA\"\n false","ref":"Plausible.Cldr.html#known_rbnf_locale_name/1-examples","title":"Examples - Plausible.Cldr.known_rbnf_locale_name/1","type":"function"},{"doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Cldr and supports\nrules based number formats (RBNF).","ref":"Plausible.Cldr.html#known_rbnf_locale_name?/1","title":"Plausible.Cldr.known_rbnf_locale_name?/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_rbnf_locale_name?/1-arguments","title":"Arguments - Plausible.Cldr.known_rbnf_locale_name?/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_rbnf_locale_name?(:en)\n true\n\n iex> Plausible.Cldr.known_rbnf_locale_name?(:\"!!\")\n false","ref":"Plausible.Cldr.html#known_rbnf_locale_name?/1-examples","title":"Examples - Plausible.Cldr.known_rbnf_locale_name?/1","type":"function"},{"doc":"Returns a list of locale names which have rules-based number\nformats (RBNF).","ref":"Plausible.Cldr.html#known_rbnf_locale_names/0","title":"Plausible.Cldr.known_rbnf_locale_names/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#known_territories/0","title":"Plausible.Cldr.known_territories/0","type":"function"},{"doc":"Normalizes a string by applying transliteration\nof common symbols in numbers, currencies and dates","ref":"Plausible.Cldr.html#normalize_lenient_parse/3","title":"Plausible.Cldr.normalize_lenient_parse/3","type":"function"},{"doc":"Set the current locale to be used for `Cldr` functions that\ntake an optional locale parameter for which a locale is not supplied.","ref":"Plausible.Cldr.html#put_locale/1","title":"Plausible.Cldr.put_locale/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`\n\nSee [rfc5646](https://tools.ietf.org/html/rfc5646) for the specification\nof a language tag.","ref":"Plausible.Cldr.html#put_locale/1-arguments","title":"Arguments - Plausible.Cldr.put_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.put_locale(\"en\")\n {:ok,\n %Cldr.LanguageTag{\n backend: Plausible.Cldr,\n canonical_locale_name: \"en\",\n cldr_locale_name: :en,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: \"en\",\n language: \"en\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :en,\n requested_locale_name: \"en\",\n script: :Latn,\n territory: :US,\n transform: %{},\n language_variants: []\n }}\n\n iex> Plausible.Cldr.put_locale(\"invalid-locale!\")\n {:error, {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"!\\\" starting at position 15\"}}","ref":"Plausible.Cldr.html#put_locale/1-examples","title":"Examples - Plausible.Cldr.put_locale/1","type":"function"},{"doc":"Add locale-specific quotation marks around a string.","ref":"Plausible.Cldr.html#quote/2","title":"Plausible.Cldr.quote/2","type":"function"},{"doc":"* `string` is any valid Elixir string\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.html#quote/2-arguments","title":"Arguments - Plausible.Cldr.quote/2","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/1`.\n The default is `Cldr.get_locale/0`","ref":"Plausible.Cldr.html#quote/2-options","title":"Options - Plausible.Cldr.quote/2","type":"function"},{"doc":"iex> Plausible.Cldr.quote \"Quoted String\"\n \"“Quoted String”\"\n\n iex> Plausible.Cldr.quote \"Quoted String\", locale: :ja\n \"「Quoted String」\"","ref":"Plausible.Cldr.html#quote/2-examples","title":"Examples - Plausible.Cldr.quote/2","type":"function"},{"doc":"Returns a list of the locales names that are configured,\nbut not known in CLDR.\n\nSince there is a compile-time exception raised if there are\nany unknown locales this function should always\nreturn an empty list.","ref":"Plausible.Cldr.html#unknown_locale_names/0","title":"Plausible.Cldr.unknown_locale_names/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#validate_calendar/1","title":"Plausible.Cldr.validate_calendar/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#validate_currency/1","title":"Plausible.Cldr.validate_currency/1","type":"function"},{"doc":"Normalise and validate a locale name.","ref":"Plausible.Cldr.html#validate_locale/1","title":"Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.html#validate_locale/1-arguments","title":"Arguments - Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"* `{:ok, language_tag}`\n\n* `{:error, reason}`","ref":"Plausible.Cldr.html#validate_locale/1-returns","title":"Returns - Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"See [rfc5646](https://tools.ietf.org/html/rfc5646) for the specification\nof a language tag.","ref":"Plausible.Cldr.html#validate_locale/1-notes","title":"Notes - Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.validate_locale(:en)\n {:ok,\n %Cldr.LanguageTag{\n backend: Plausible.Cldr,\n canonical_locale_name: \"en\",\n cldr_locale_name: :en,\n extensions: %{},\n gettext_locale_name: \"en\",\n language: \"en\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :en,\n requested_locale_name: \"en\",\n script: :Latn,\n territory: :US,\n transform: %{},\n language_variants: []\n }}\n\n\n iex> Plausible.Cldr.validate_locale Plausible.Cldr.default_locale()\n {:ok,\n %Cldr.LanguageTag{\n backend: Plausible.Cldr,\n canonical_locale_name: \"en-001\",\n cldr_locale_name: :\"en-001\",\n extensions: %{},\n gettext_locale_name: \"en\",\n language: \"en\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :en,\n requested_locale_name: \"en-001\",\n script: :Latn,\n territory: :\"001\",\n transform: %{},\n language_variants: []\n }}\n\n iex> Plausible.Cldr.validate_locale(\"zzz\")\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zzz\\\" is invalid\"}}","ref":"Plausible.Cldr.html#validate_locale/1-examples","title":"Examples - Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#validate_number_system/1","title":"Plausible.Cldr.validate_number_system/1","type":"function"},{"doc":"Normalise and validate a number system type.","ref":"Plausible.Cldr.html#validate_number_system_type/1","title":"Plausible.Cldr.validate_number_system_type/1","type":"function"},{"doc":"* `number_system_type` is any number system type returned by\n `Cldr.known_number_system_types/1`","ref":"Plausible.Cldr.html#validate_number_system_type/1-arguments","title":"Arguments - Plausible.Cldr.validate_number_system_type/1","type":"function"},{"doc":"* `{:ok, normalized_number_system_type}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.html#validate_number_system_type/1-returns","title":"Returns - Plausible.Cldr.validate_number_system_type/1","type":"function"},{"doc":"iex> Plausible.Cldr.validate_number_system_type :default\n {:ok, :default}\n\n iex> Plausible.Cldr.validate_number_system_type :traditional\n {:ok, :traditional}\n\n iex> Plausible.Cldr.validate_number_system_type :latn\n {\n :error,\n {Cldr.UnknownNumberSystemTypeError, \"The number system type :latn is unknown\"}\n }\n\n iex> Plausible.Cldr.validate_number_system_type \"bork\"\n {\n :error,\n {Cldr.UnknownNumberSystemTypeError, \"The number system type \\\"bork\\\" is invalid\"}\n }","ref":"Plausible.Cldr.html#validate_number_system_type/1-examples","title":"Examples - Plausible.Cldr.validate_number_system_type/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#validate_territory/1","title":"Plausible.Cldr.validate_territory/1","type":"function"},{"doc":"Execute a function with a locale ensuring that the\ncurrent locale is restored after the function.","ref":"Plausible.Cldr.html#with_locale/2","title":"Plausible.Cldr.with_locale/2","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/1`.\n\n* `fun` is any 0-arity function or function capture.","ref":"Plausible.Cldr.html#with_locale/2-arguments","title":"Arguments - Plausible.Cldr.with_locale/2","type":"function"},{"doc":"* The value returned by the function `fun/0` or\n\n* `{:error, {exception, reason}}` if the locale is invalid or\n\n* raises an exception if the current locale cannot be\n identified.","ref":"Plausible.Cldr.html#with_locale/2-returns","title":"Returns - Plausible.Cldr.with_locale/2","type":"function"},{"doc":"Parses HTTP `Accept-Language` header values as defined in\n[rfc2616](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4).\n\nThe Accept-Language request-header field is similar to Accept, but restricts\nthe set of natural languages that are preferred as a response to the request.\nLanguage tags function are provided in `Cldr.LanguageTag`.\n\nThe format of an `Accept-Language` header is as follows in `ABNF` format:\n\n Accept-Language = \"Accept-Language\" \":\"\n 1#( language-range [ \";\" \"q\" \"=\" qvalue ] )\n language-range = ( ( 1*8ALPHA *( \"-\" 1*8ALPHA ) ) | \"*\" )\n\nEach language-range MAY be given an associated quality value which represents an\nestimate of the user's preference for the languages specified by that range. The\nquality value defaults to \"q=1\". For example,\n\n Accept-Language: da, en-gb;q=0.8, en;q=0.7\n\nwould mean: \"I prefer Danish, but will accept British English and other types of English.\"","ref":"Plausible.Cldr.AcceptLanguage.html","title":"Plausible.Cldr.AcceptLanguage","type":"module"},{"doc":"Parse an `Accept-Language` string and return the best match for\na configured `Cldr` locale.","ref":"Plausible.Cldr.AcceptLanguage.html#best_match/1","title":"Plausible.Cldr.AcceptLanguage.best_match/1","type":"function"},{"doc":"* `accept_langauge` is a string representing an accept language header","ref":"Plausible.Cldr.AcceptLanguage.html#best_match/1-arguments","title":"Arguments - Plausible.Cldr.AcceptLanguage.best_match/1","type":"function"},{"doc":"* `{:ok, language_tag}` or\n\n* `{:error, reason}`","ref":"Plausible.Cldr.AcceptLanguage.html#best_match/1-returns","title":"Returns - Plausible.Cldr.AcceptLanguage.best_match/1","type":"function"},{"doc":"iex> Plausible.Cldr.AcceptLanguage.best_match(\"da;q=0.1,zh-TW;q=0.3\", TestBackend.Cldr)\n {:ok,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }}\n\n iex> Plausible.Cldr.AcceptLanguage.best_match(\"da;q=0.1,zh-TW;q=0.3\", TestBackend.Cldr)\n {:ok,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }}\n\n iex> Plausible.Cldr.AcceptLanguage.best_match(\"xx,yy;q=0.3\")\n {:error,\n {Cldr.NoMatchingLocale,\n \"No configured locale could be matched to \\\"xx,yy;q=0.3\\\"\"}}\n\n iex> Plausible.Cldr.AcceptLanguage.best_match(\"invalid_tag\")\n {:error, {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"g\\\" starting at position 11\"}}","ref":"Plausible.Cldr.AcceptLanguage.html#best_match/1-examples","title":"Examples - Plausible.Cldr.AcceptLanguage.best_match/1","type":"function"},{"doc":"Parses an `Accept-Language` header value in its string\nor tokenized form to return a tuple of the form\n`{:ok, [{quality, %Cldr.LanguageTag{}}, ...]}` sorted by quality.","ref":"Plausible.Cldr.AcceptLanguage.html#parse/1","title":"Plausible.Cldr.AcceptLanguage.parse/1","type":"function"},{"doc":"* `accept-language` is any string in the format defined by\n [rfc2616](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)\n\n* `backend` is any module that includes `use Cldr` and therefore\n is a `Cldr` backend module","ref":"Plausible.Cldr.AcceptLanguage.html#parse/1-arguments","title":"Arguments - Plausible.Cldr.AcceptLanguage.parse/1","type":"function"},{"doc":"* `{:ok, [{quality, language_tag}, ...]}` or\n\n* `{:error, {Cldr.AcceptLanguageError, String.t}}`\n\nIf at least one valid language tag is found but errors are also\ndetected on one more more tags, an `{ok, list}` tuple is returned\nwuth an error tuple for each invalid tag added at the end of the list.","ref":"Plausible.Cldr.AcceptLanguage.html#parse/1-returns","title":"Returns - Plausible.Cldr.AcceptLanguage.parse/1","type":"function"},{"doc":"iex> Cldr.AcceptLanguage.parse(\"da,zh-TW;q=0.3\", TestBackend.Cldr)\n {:ok,\n [\n {1.0,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"da\",\n cldr_locale_name: :da,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"da\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :da,\n requested_locale_name: \"da\",\n script: :Latn,\n territory: :DK,\n transform: %{},\n language_variants: []\n }},\n {0.3,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }}\n ]}\n\n iex> Plausible.Cldr.AcceptLanguage.parse(\"invalid_tag\")\n {:error,\n {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"g\\\" starting at position 11\"}}\n\n iex> Plausible.Cldr.AcceptLanguage.parse(\"da,zh-TW;q=0.3,invalid_tag\")\n {:ok,\n [\n {1.0,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"da\",\n cldr_locale_name: :da,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"da\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :da,\n requested_locale_name: \"da\",\n script: :Latn,\n territory: :DK,\n transform: %{},\n language_variants: []\n }},\n {0.3,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }},\n {:error,\n {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"g\\\" starting at position 11\"}}\n ]}","ref":"Plausible.Cldr.AcceptLanguage.html#parse/1-example","title":"Example - Plausible.Cldr.AcceptLanguage.parse/1","type":"function"},{"doc":"Parses an `Accept-Language` header value in its string\nor tokenized form to produce a list of tuples of the form\n`[{quality, %Cldr.LanguageTag{}}, ...]` sorted by quality\nin descending order.","ref":"Plausible.Cldr.AcceptLanguage.html#parse!/1","title":"Plausible.Cldr.AcceptLanguage.parse!/1","type":"function"},{"doc":"* `accept-language` is any string in the format defined by [rfc2616](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)","ref":"Plausible.Cldr.AcceptLanguage.html#parse!/1-arguments","title":"Arguments - Plausible.Cldr.AcceptLanguage.parse!/1","type":"function"},{"doc":"* `{:ok, [{quality, language_tag}, ...]}` or\n\n* raises a `Cldr.AcceptLanguageError` exception\n\nIf at least one valid language tag is found but errors are also\ndetected on one more more tags, an `{ok, list}` tuple is returned\nwuth an error tuple for each invalid tag added at the end of the list.","ref":"Plausible.Cldr.AcceptLanguage.html#parse!/1-returns","title":"Returns - Plausible.Cldr.AcceptLanguage.parse!/1","type":"function"},{"doc":"iex> Plausible.Cldr.AcceptLanguage.parse!(\"da,zh-TW;q=0.3\")\n [\n {1.0,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"da\",\n cldr_locale_name: :da,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"da\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :da,\n requested_locale_name: \"da\",\n script: :Latn,\n territory: :DK,\n transform: %{},\n language_variants: []\n }},\n {0.3,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }}\n ]\n\n Plausible.Cldr.AcceptLanguage.parse! \"invalid_tag\"\n ** (Cldr.AcceptLanguageError) \"Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11\n (ex_cldr) lib/cldr/accept_language.ex:304: Cldr.AcceptLanguage.parse!/1\n\n iex> Plausible.Cldr.AcceptLanguage.parse!(\"da,zh-TW;q=0.3,invalid_tag\")\n [\n {1.0,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"da\",\n cldr_locale_name: :da,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"da\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :da,\n requested_locale_name: \"da\",\n script: :Latn,\n territory: :DK,\n transform: %{},\n language_variants: []\n }},\n {0.3,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }},\n {:error,\n {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"g\\\" starting at position 11\"}}\n ]","ref":"Plausible.Cldr.AcceptLanguage.html#parse!/1-example","title":"Example - Plausible.Cldr.AcceptLanguage.parse!/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Currency.html","title":"Plausible.Cldr.Currency","type":"module"},{"doc":"Returns a map of the metadata for all currencies for\na given locale.","ref":"Plausible.Cldr.Currency.html#currencies_for_locale/3","title":"Plausible.Cldr.Currency.currencies_for_locale/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`\n\n* `currency_status` is `:all`, `:current`, `:historic`,\n `unannotated` or `:tender`; or a list of one or more status.\n The default is `:all`. See `Cldr.Currency.currency_filter/2`.","ref":"Plausible.Cldr.Currency.html#currencies_for_locale/3-arguments","title":"Arguments - Plausible.Cldr.Currency.currencies_for_locale/3","type":"function"},{"doc":"* `{:ok, currency_map}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#currencies_for_locale/3-returns","title":"Returns - Plausible.Cldr.Currency.currencies_for_locale/3","type":"function"},{"doc":"MyApp.Cldr.Currency.currencies_for_locale \"en\"\n => {:ok,\n %{\n FJD: %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"FJD\",\n count: %{one: \"Fijian dollar\", other: \"Fijian dollars\"},\n digits: 2,\n from: nil,\n iso_digits: 2,\n name: \"Fijian Dollar\",\n narrow_symbol: \"$\",\n rounding: 0,\n symbol: \"FJD\",\n tender: true,\n to: nil\n },\n SUR: %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"SUR\",\n count: %{one: \"Soviet rouble\", other: \"Soviet roubles\"},\n digits: 2,\n from: nil,\n iso_digits: nil,\n name: \"Soviet Rouble\",\n narrow_symbol: nil,\n rounding: 0,\n symbol: \"SUR\",\n tender: true,\n to: nil\n },\n ...\n }}","ref":"Plausible.Cldr.Currency.html#currencies_for_locale/3-example","title":"Example - Plausible.Cldr.Currency.currencies_for_locale/3","type":"function"},{"doc":"Returns a map of the metadata for all currencies for\na given locale and raises on error.","ref":"Plausible.Cldr.Currency.html#currencies_for_locale!/3","title":"Plausible.Cldr.Currency.currencies_for_locale!/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`\n\n* `currency_status` is `:all`, `:current`, `:historic`,\n `unannotated` or `:tender`; or a list of one or more status.\n The default is `:all`. See `Cldr.Currency.currency_filter/2`.","ref":"Plausible.Cldr.Currency.html#currencies_for_locale!/3-arguments","title":"Arguments - Plausible.Cldr.Currency.currencies_for_locale!/3","type":"function"},{"doc":"* `{:ok, currency_map}` or\n\n* raises an exception","ref":"Plausible.Cldr.Currency.html#currencies_for_locale!/3-returns","title":"Returns - Plausible.Cldr.Currency.currencies_for_locale!/3","type":"function"},{"doc":"MyApp.Cldr.Currency.currencies_for_locale! \"en\"\n => %{\n FJD: %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"FJD\",\n count: %{one: \"Fijian dollar\", other: \"Fijian dollars\"},\n digits: 2,\n from: nil,\n iso_digits: 2,\n name: \"Fijian Dollar\",\n narrow_symbol: \"$\",\n rounding: 0,\n symbol: \"FJD\",\n tender: true,\n to: nil\n },\n SUR: %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"SUR\",\n count: %{one: \"Soviet rouble\", other: \"Soviet roubles\"},\n digits: 2,\n from: nil,\n iso_digits: nil,\n name: \"Soviet Rouble\",\n narrow_symbol: nil,\n rounding: 0,\n symbol: \"SUR\",\n tender: true,\n to: nil\n },\n ...\n }","ref":"Plausible.Cldr.Currency.html#currencies_for_locale!/3-example","title":"Example - Plausible.Cldr.Currency.currencies_for_locale!/3","type":"function"},{"doc":"Returns the currency metadata for the requested currency code.","ref":"Plausible.Cldr.Currency.html#currency_for_code/2","title":"Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"* `currency_or_currency_code` is a `binary` or `atom` representation\n of an ISO 4217 currency code, or a `%Cldr.Currency{}` struct.","ref":"Plausible.Cldr.Currency.html#currency_for_code/2-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`","ref":"Plausible.Cldr.Currency.html#currency_for_code/2-options","title":"Options - Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"* A `{:ok, currency}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#currency_for_code/2-returns","title":"Returns - Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.currency_for_code(\"AUD\")\n {:ok,\n %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"AUD\",\n count: %{one: \"Australian dollar\", other: \"Australian dollars\"},\n digits: 2,\n iso_digits: 2,\n name: \"Australian Dollar\",\n narrow_symbol: \"$\",\n rounding: 0,\n symbol: \"A$\",\n tender: true\n }}\n\n iex> Plausible.Cldr.Currency.currency_for_code(\"THB\")\n {:ok,\n %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"THB\",\n count: %{one: \"Thai baht\", other: \"Thai baht\"},\n digits: 2,\n iso_digits: 2,\n name: \"Thai Baht\",\n narrow_symbol: \"฿\",\n rounding: 0,\n symbol: \"THB\",\n tender: true\n }}","ref":"Plausible.Cldr.Currency.html#currency_for_code/2-examples","title":"Examples - Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"Returns the currency metadata for the requested currency code.","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2","title":"Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"* `currency_or_currency_code` is a `binary` or `atom` representation\n of an ISO 4217 currency code, or a `%Cldr.Currency{}` struct.","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2-options","title":"Options - Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"* A `t:Cldr.Current.t/0` or\n\n* raises an exception","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2-returns","title":"Returns - Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.currency_for_code!(\"AUD\")\n %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"AUD\",\n count: %{one: \"Australian dollar\", other: \"Australian dollars\"},\n digits: 2,\n iso_digits: 2,\n name: \"Australian Dollar\",\n narrow_symbol: \"$\",\n rounding: 0,\n symbol: \"A$\",\n tender: true\n }\n\n iex> Plausible.Cldr.Currency.currency_for_code!(\"THB\")\n %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"THB\",\n count: %{one: \"Thai baht\", other: \"Thai baht\"},\n digits: 2,\n iso_digits: 2,\n name: \"Thai Baht\",\n narrow_symbol: \"฿\",\n rounding: 0,\n symbol: \"THB\",\n tender: true\n }","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2-examples","title":"Examples - Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"Returns the effective currency for a given locale","ref":"Plausible.Cldr.Currency.html#currency_from_locale/1","title":"Plausible.Cldr.Currency.currency_from_locale/1","type":"function"},{"doc":"* `locale` is a `Cldr.LanguageTag` struct returned by\n `Cldr.Locale.new!/2`","ref":"Plausible.Cldr.Currency.html#currency_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_from_locale/1","type":"function"},{"doc":"* A ISO 4217 currency code as an upcased atom","ref":"Plausible.Cldr.Currency.html#currency_from_locale/1-returns","title":"Returns - Plausible.Cldr.Currency.currency_from_locale/1","type":"function"},{"doc":"iex> {:ok, locale} = Plausible.Cldr.validate_locale \"en\"\n iex> Plausible.Cldr.Currency.currency_from_locale locale\n :USD\n\n iex> {:ok, locale} = Plausible.Cldr.validate_locale \"en-AU\"\n iex> Plausible.Cldr.Currency.currency_from_locale locale\n :AUD\n\n iex> Plausible.Cldr.Currency.currency_from_locale \"en-GB\"\n :GBP","ref":"Plausible.Cldr.Currency.html#currency_from_locale/1-examples","title":"Examples - Plausible.Cldr.Currency.currency_from_locale/1","type":"function"},{"doc":"Returns a list of historic and the current\ncurrency for a given locale.","ref":"Plausible.Cldr.Currency.html#currency_history_for_locale/1","title":"Plausible.Cldr.Currency.currency_history_for_locale/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Currency.html#currency_history_for_locale/1-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_history_for_locale/1","type":"function"},{"doc":"iex> MyApp.Cldr.Currency.currency_history_for_locale \"en\"\n {:ok,\n %{\n USD: %{from: ~D[1792-01-01], to: nil},\n USN: %{tender: false},\n USS: %{from: nil, tender: false, to: ~D[2014-03-01]}\n }\n }","ref":"Plausible.Cldr.Currency.html#currency_history_for_locale/1-example","title":"Example - Plausible.Cldr.Currency.currency_history_for_locale/1","type":"function"},{"doc":"Returns a map that matches a currency string to a\ncurrency code.\n\nA currency string is a localised name or symbol\nrepresenting a currency in a locale-specific manner.","ref":"Plausible.Cldr.Currency.html#currency_strings/3","title":"Plausible.Cldr.Currency.currency_strings/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`\n\n* `currency_status` is `:all`, `:current`, `:historic`,\n `unannotated` or `:tender`; or a list of one or more status.\n The default is `:all`. See `Cldr.Currency.currency_filter/2`.","ref":"Plausible.Cldr.Currency.html#currency_strings/3-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_strings/3","type":"function"},{"doc":"* `{:ok, currency_string_map}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#currency_strings/3-returns","title":"Returns - Plausible.Cldr.Currency.currency_strings/3","type":"function"},{"doc":"MyApp.Cldr.Currency.currency_strings \"en\"\n => {:ok,\n %{\n \"mexican silver pesos\" => :MXP,\n \"sudanese dinar\" => :SDD,\n \"bad\" => :BAD,\n \"rsd\" => :RSD,\n \"swazi lilangeni\" => :SZL,\n \"zairean new zaire\" => :ZRN,\n \"guyanaese dollars\" => :GYD,\n \"equatorial guinean ekwele\" => :GQE,\n ...\n }}","ref":"Plausible.Cldr.Currency.html#currency_strings/3-example","title":"Example - Plausible.Cldr.Currency.currency_strings/3","type":"function"},{"doc":"Returns a map that matches a currency string to a\ncurrency code or raises an exception.\n\nA currency string is a localised name or symbol\nrepresenting a currency in a locale-specific manner.","ref":"Plausible.Cldr.Currency.html#currency_strings!/3","title":"Plausible.Cldr.Currency.currency_strings!/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`\n\n* `currency_status` is `:all`, `:current`, `:historic`,\n `unannotated` or `:tender`; or a list of one or more status.\n The default is `:all`. See `Cldr.Currency.currency_filter/2`.","ref":"Plausible.Cldr.Currency.html#currency_strings!/3-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_strings!/3","type":"function"},{"doc":"* `{:ok, currency_string_map}` or\n\n* raises an exception","ref":"Plausible.Cldr.Currency.html#currency_strings!/3-returns","title":"Returns - Plausible.Cldr.Currency.currency_strings!/3","type":"function"},{"doc":"MyApp.Cldr.Currency.currency_strings! \"en\"\n => %{\n \"mexican silver pesos\" => :MXP,\n \"sudanese dinar\" => :SDD,\n \"bad\" => :BAD,\n \"rsd\" => :RSD,\n \"swazi lilangeni\" => :SZL,\n \"zairean new zaire\" => :ZRN,\n \"guyanaese dollars\" => :GYD,\n \"equatorial guinean ekwele\" => :GQE,\n ...\n }","ref":"Plausible.Cldr.Currency.html#currency_strings!/3-example","title":"Example - Plausible.Cldr.Currency.currency_strings!/3","type":"function"},{"doc":"Returns the current currency for a given locale.\n\nThis function does not consider the `U` extenion\nparameters `cu` or `rg`. It is recommended to us\n`Cldr.Currency.currency_from_locale/1` in most\ncircumstances.","ref":"Plausible.Cldr.Currency.html#current_currency_from_locale/1","title":"Plausible.Cldr.Currency.current_currency_from_locale/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Currency.html#current_currency_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Currency.current_currency_from_locale/1","type":"function"},{"doc":"iex> MyApp.Cldr.Currency.current_currency_from_locale \"en\"\n :USD\n\n iex> MyApp.Cldr.Currency.current_currency_from_locale \"en-AU\"\n :AUD","ref":"Plausible.Cldr.Currency.html#current_currency_from_locale/1-example","title":"Example - Plausible.Cldr.Currency.current_currency_from_locale/1","type":"function"},{"doc":"Returns a mapping from a territory code to its\ncurrent currency code.\n\nIf a territory has no current currency (like\nAntartica, territory code `:AQ`) then no\nmapping is returned for that territory.","ref":"Plausible.Cldr.Currency.html#current_territory_currencies/0","title":"Plausible.Cldr.Currency.current_territory_currencies/0","type":"function"},{"doc":"* A map of `{territory_code => Cldr.Currency.t}`","ref":"Plausible.Cldr.Currency.html#current_territory_currencies/0-returns","title":"Returns - Plausible.Cldr.Currency.current_territory_currencies/0","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.current_territory_currencies()","ref":"Plausible.Cldr.Currency.html#current_territory_currencies/0-example","title":"Example - Plausible.Cldr.Currency.current_territory_currencies/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Currency.html#known_currencies/0","title":"Plausible.Cldr.Currency.known_currencies/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Currency.html#known_currency?/1","title":"Plausible.Cldr.Currency.known_currency?/1","type":"function"},{"doc":"Returns a 2-tuple indicating if the supplied currency code is known.","ref":"Plausible.Cldr.Currency.html#known_currency_code/1","title":"Plausible.Cldr.Currency.known_currency_code/1","type":"function"},{"doc":"* `currency_code` is a `binary` or `atom` representing an ISO4217\n currency code","ref":"Plausible.Cldr.Currency.html#known_currency_code/1-arguments","title":"Arguments - Plausible.Cldr.Currency.known_currency_code/1","type":"function"},{"doc":"* `{:ok, currency_code}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#known_currency_code/1-returns","title":"Returns - Plausible.Cldr.Currency.known_currency_code/1","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.known_currency_code \"AUD\"\n {:ok, :AUD}\n\n iex> Plausible.Cldr.Currency.known_currency_code \"GGG\"\n {:error, {Cldr.UnknownCurrencyError, \"The currency \\\"GGG\\\" is invalid\"}}","ref":"Plausible.Cldr.Currency.html#known_currency_code/1-examples","title":"Examples - Plausible.Cldr.Currency.known_currency_code/1","type":"function"},{"doc":"Returns a boolean indicating if the supplied currency code is known.","ref":"Plausible.Cldr.Currency.html#known_currency_code?/1","title":"Plausible.Cldr.Currency.known_currency_code?/1","type":"function"},{"doc":"* `currency_code` is a `binary` or `atom` representing an ISO4217\n currency code","ref":"Plausible.Cldr.Currency.html#known_currency_code?/1-arguments","title":"Arguments - Plausible.Cldr.Currency.known_currency_code?/1","type":"function"},{"doc":"* `true` or `false`","ref":"Plausible.Cldr.Currency.html#known_currency_code?/1-returns","title":"Returns - Plausible.Cldr.Currency.known_currency_code?/1","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.known_currency_code? \"AUD\"\n true\n\n iex> Plausible.Cldr.Currency.known_currency_code? \"GGG\"\n false\n\n iex> Plausible.Cldr.Currency.known_currency_code? :XCV\n false","ref":"Plausible.Cldr.Currency.html#known_currency_code?/1-examples","title":"Examples - Plausible.Cldr.Currency.known_currency_code?/1","type":"function"},{"doc":"Returns a list of all known currency codes.","ref":"Plausible.Cldr.Currency.html#known_currency_codes/0","title":"Plausible.Cldr.Currency.known_currency_codes/0","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.known_currency_codes","ref":"Plausible.Cldr.Currency.html#known_currency_codes/0-example","title":"Example - Plausible.Cldr.Currency.known_currency_codes/0","type":"function"},{"doc":"Returns a `Currency` struct created from the arguments.","ref":"Plausible.Cldr.Currency.html#new/2","title":"Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"* `currency` is a private use currency code in a format defined by\n [ISO4217](https://en.wikipedia.org/wiki/ISO_4217)\n which is `X` followed by two alphanumeric characters.\n\n* `options` is a map of options representing the optional elements of\n the `Cldr.Currency.t` struct.","ref":"Plausible.Cldr.Currency.html#new/2-arguments","title":"Arguments - Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"* `:name` is the name of the currency. Required.\n* `:digits` is the precision of the currency. Required.\n* `:symbol` is the currency symbol. Optional.\n* `:narrow_symbol` is an alternative narrow symbol. Optional.\n* `:round_nearest` is the rounding precision such as `0.05`. Optional.\n* `:alt_code` is an alternative currency code for application use.\n* `:cash_digits` is the precision of the currency when used as cash. Optional.\n* `:cash_rounding_nearest` is the rounding precision when used as cash\n such as `0.05`. Optional.","ref":"Plausible.Cldr.Currency.html#new/2-options","title":"Options - Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"* `{:ok, Cldr.Currency.t}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Currency.html#new/2-returns","title":"Returns - Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.new(:XAE, name: \"Custom Name\", digits: 0)\n {:ok,\n %Cldr.Currency{\n alt_code: :XAE,\n cash_digits: 0,\n cash_rounding: nil,\n code: :XAE,\n count: %{other: \"Custom Name\"},\n digits: 0,\n from: nil,\n iso_digits: 0,\n name: \"Custom Name\",\n narrow_symbol: nil,\n rounding: 0,\n symbol: \"XAE\",\n tender: false,\n to: nil\n }}\n iex> MyApp.Cldr.Currency.new(:XAH, name: \"Custom Name\")\n {:error, \"Required options are missing. Required options are [:name, :digits]\"}\n iex> Plausible.Cldr.Currency.new(:XAE, name: \"XAE\", digits: 0)\n {:error, {Cldr.CurrencyAlreadyDefined, \"Currency :XAE is already defined.\"}}","ref":"Plausible.Cldr.Currency.html#new/2-example","title":"Example - Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"Returns the appropriate currency display name for the `currency`, based\non the plural rules in effect for the `locale`.","ref":"Plausible.Cldr.Currency.html#pluralize/3","title":"Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"* `number` is an integer, float or `Decimal`\n\n* `currency` is any currency returned by `Cldr.Currency.known_currencies/0`\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Currency.html#pluralize/3-arguments","title":"Arguments - Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`. The\n default is `Plausible.Cldr.get_locale/0`","ref":"Plausible.Cldr.Currency.html#pluralize/3-options","title":"Options - Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"* `{:ok, plural_string}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Currency.html#pluralize/3-returns","title":"Returns - Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.pluralize 1, :USD\n {:ok, \"US dollar\"}\n\n iex> Plausible.Cldr.Currency.pluralize 3, :USD\n {:ok, \"US dollars\"}\n\n iex> Plausible.Cldr.Currency.pluralize 12, :USD, locale: \"zh\"\n {:ok, \"美元\"}\n\n iex> Plausible.Cldr.Currency.pluralize 12, :USD, locale: \"fr\"\n {:ok, \"dollars des États-Unis\"}\n\n iex> Plausible.Cldr.Currency.pluralize 1, :USD, locale: \"fr\"\n {:ok, \"dollar des États-Unis\"}","ref":"Plausible.Cldr.Currency.html#pluralize/3-examples","title":"Examples - Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"Returns the strings associated with a currency\nin a given locale.","ref":"Plausible.Cldr.Currency.html#strings_for_currency/2","title":"Plausible.Cldr.Currency.strings_for_currency/2","type":"function"},{"doc":"* `currency` is an ISO4217 currency code\n\n* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Currency.html#strings_for_currency/2-arguments","title":"Arguments - Plausible.Cldr.Currency.strings_for_currency/2","type":"function"},{"doc":"* A list of strings or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#strings_for_currency/2-returns","title":"Returns - Plausible.Cldr.Currency.strings_for_currency/2","type":"function"},{"doc":"iex> MyApp.Cldr.Currency.strings_for_currency :AUD, \"en\"\n [\"a$\", \"australian dollars\", \"aud\", \"australian dollar\"]","ref":"Plausible.Cldr.Currency.html#strings_for_currency/2-example","title":"Example - Plausible.Cldr.Currency.strings_for_currency/2","type":"function"},{"doc":"Backend module that provides functions\nto define new locales and display human-readable\nlocale names for presentation purposes.","ref":"Plausible.Cldr.Locale.html","title":"Plausible.Cldr.Locale","type":"module"},{"doc":"Returns the list of fallback locale names, starting\nwith the provided locale name.\n\nFallbacks are a list of locate names which can\nbe used to resolve translation or other localization\ndata if such localised data does not exist for\nthis specific locale..","ref":"Plausible.Cldr.Locale.html#fallback_locale_names/1","title":"Plausible.Cldr.Locale.fallback_locale_names/1","type":"function"},{"doc":"* `locale_name` is any locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.Locale.html#fallback_locale_names/1-arguments","title":"Arguments - Plausible.Cldr.Locale.fallback_locale_names/1","type":"function"},{"doc":"* `{:ok, list_of_locale_names}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#fallback_locale_names/1-returns","title":"Returns - Plausible.Cldr.Locale.fallback_locale_names/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.fallback_locale_names(:\"fr-CA\")\n {:ok, [:\"fr-CA\", :fr, :und]}\n\n # Fallbacks are typically formed by progressively\n # stripping variant, territory and script from the\n # given locale name. But not always - there are\n # certain fallbacks that take a different path.\n\n iex> Plausible.Cldr.Locale.fallback_locale_names(:nb)\n {:ok, [:nb, :no, :und]}","ref":"Plausible.Cldr.Locale.html#fallback_locale_names/1-examples","title":"Examples - Plausible.Cldr.Locale.fallback_locale_names/1","type":"function"},{"doc":"Returns the list of fallback locales, starting\nwith the provided locale name.\n\nFallbacks are a list of locate names which can\nbe used to resolve translation or other localization\ndata if such localised data does not exist for\nthis specific locale.","ref":"Plausible.Cldr.Locale.html#fallback_locales/1","title":"Plausible.Cldr.Locale.fallback_locales/1","type":"function"},{"doc":"* `locale_name` is any locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.Locale.html#fallback_locales/1-arguments","title":"Arguments - Plausible.Cldr.Locale.fallback_locales/1","type":"function"},{"doc":"* `{:ok, list_of_locales}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#fallback_locales/1-returns","title":"Returns - Plausible.Cldr.Locale.fallback_locales/1","type":"function"},{"doc":"Plausible.Cldr.Locale.fallback_locales(:\"fr-CA\")\n => {:ok,\n [#Cldr.LanguageTag , #Cldr.LanguageTag ,\n #Cldr.LanguageTag ]}\n\n # Fallbacks are typically formed by progressively\n # stripping variant, territory and script from the\n # given locale name. But not always - there are\n # certain fallbacks that take a different path.\n\n Plausible.Cldr.Locale.fallback_locales(:nb))\n => {:ok,\n [#Cldr.LanguageTag , #Cldr.LanguageTag ,\n #Cldr.LanguageTag ]}","ref":"Plausible.Cldr.Locale.html#fallback_locales/1-examples","title":"Examples - Plausible.Cldr.Locale.fallback_locales/1","type":"function"},{"doc":"Returns the \"best fit\" locale for a given territory.\n\nUsing the population percentage data from CLDR, the\nlanguage most commonly spoken in the given territory\nis used to form a locale name which is then validated\nagainst the given backend.\n\nFirst a territory-specific locale is validated and if\nthat fails, the base language only is validate.\n\nFor example, if the territory is `AU` then then the\nlanguage most spoken is \"en\". First, the locale \"en-AU\"\nis validated and if that fails, \"en\" is validated.","ref":"Plausible.Cldr.Locale.html#locale_for_territory/1","title":"Plausible.Cldr.Locale.locale_for_territory/1","type":"function"},{"doc":"* `territory` is any ISO 3166 Alpha-2 territory\n code that can be validated by `Cldr.validate_territory/1`","ref":"Plausible.Cldr.Locale.html#locale_for_territory/1-arguments","title":"Arguments - Plausible.Cldr.Locale.locale_for_territory/1","type":"function"},{"doc":"* `{:ok, language_tag}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#locale_for_territory/1-returns","title":"Returns - Plausible.Cldr.Locale.locale_for_territory/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.locale_for_territory(:AU)\n Elixir.Plausible.Cldr.validate_locale(:\"en-AU\")\n\n iex> Plausible.Cldr.Locale.locale_for_territory(:US)\n Elixir.Plausible.Cldr.validate_locale(:\"en-US\")\n\n iex> Plausible.Cldr.Locale.locale_for_territory(:ZZ)\n {:error, {Cldr.UnknownTerritoryError, \"The territory :ZZ is unknown\"}}","ref":"Plausible.Cldr.Locale.html#locale_for_territory/1-examples","title":"Examples - Plausible.Cldr.Locale.locale_for_territory/1","type":"function"},{"doc":"Returns a \"best fit\" locale for a host name.","ref":"Plausible.Cldr.Locale.html#locale_from_host/2","title":"Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"* `host` is any valid host name\n\n* `options` is a keyword list of options. The default\n is `[]`.","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-arguments","title":"Arguments - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"* `:tlds` is a list of territory codes as upper-cased\n atoms that are to be considered as top-level domains.\n See `Cldr.Locale.locale_from_host/2` for the default\n list.","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-options","title":"Options - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"* `{:ok, langauge_tag}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-returns","title":"Returns - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"Certain top-level domains have become associated with content\nunderlated to the territory for who the domain is registered.\nTherefore Google (and perhaps others) do not associate these\nTLDs as belonging to the territory but rather are considered\ngeneric top-level domain names.","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-notes","title":"Notes - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.locale_from_host \"a.b.com.au\"\n Elixir.Plausible.Cldr.validate_locale(:\"en-AU\")\n\n iex> Plausible.Cldr.Locale.locale_from_host(\"a.b.com.tv\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"tv\\\"\"}}\n\n iex> Plausible.Cldr.Locale.locale_from_host(\"a.b.com\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"com\\\"\"}}","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-examples","title":"Examples - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Locale.html#new/1","title":"Plausible.Cldr.Locale.new/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Locale.html#new!/1","title":"Plausible.Cldr.Locale.new!/1","type":"function"},{"doc":"Returns the script direction for a locale.","ref":"Plausible.Cldr.Locale.html#script_direction_from_locale/1","title":"Plausible.Cldr.Locale.script_direction_from_locale/1","type":"function"},{"doc":"* `language_tag` is any language tag returned by `Cldr.Locale.new/2`\n or any `locale_name` returned by `Cldr.known_locale_names/1`.","ref":"Plausible.Cldr.Locale.html#script_direction_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Locale.script_direction_from_locale/1","type":"function"},{"doc":"* The script direction which is either `:ltr` (for left-to-right\n scripts) or `:rtl` (for right-to-left scripts).","ref":"Plausible.Cldr.Locale.html#script_direction_from_locale/1-returns","title":"Returns - Plausible.Cldr.Locale.script_direction_from_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.script_direction_from_locale \"en-US\"\n :ltr\n\n iex> Plausible.Cldr.Locale.script_direction_from_locale :ar\n :rtl","ref":"Plausible.Cldr.Locale.html#script_direction_from_locale/1-examples","title":"Examples - Plausible.Cldr.Locale.script_direction_from_locale/1","type":"function"},{"doc":"Returns the last segment of a host that might\nbe a territory.","ref":"Plausible.Cldr.Locale.html#territory_from_host/1","title":"Plausible.Cldr.Locale.territory_from_host/1","type":"function"},{"doc":"* `host` is any valid host name","ref":"Plausible.Cldr.Locale.html#territory_from_host/1-arguments","title":"Arguments - Plausible.Cldr.Locale.territory_from_host/1","type":"function"},{"doc":"* `{:ok, territory}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#territory_from_host/1-returns","title":"Returns - Plausible.Cldr.Locale.territory_from_host/1","type":"function"},{"doc":"iex> Cldr.Locale.territory_from_host(\"a.b.com.au\")\n {:ok, :AU}\n\n iex> Cldr.Locale.territory_from_host(\"a.b.com\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"com\\\"\"}}","ref":"Plausible.Cldr.Locale.html#territory_from_host/1-examples","title":"Examples - Plausible.Cldr.Locale.territory_from_host/1","type":"function"},{"doc":"Returns the territory from a language tag or\nlocale name.","ref":"Plausible.Cldr.Locale.html#territory_from_locale/1","title":"Plausible.Cldr.Locale.territory_from_locale/1","type":"function"},{"doc":"* `locale` is any language tag returned by\n `Plausible.Cldr.Locale.new/1`\n or a locale name in the list returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.Locale.html#territory_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Locale.territory_from_locale/1","type":"function"},{"doc":"* A territory code as an atom","ref":"Plausible.Cldr.Locale.html#territory_from_locale/1-returns","title":"Returns - Plausible.Cldr.Locale.territory_from_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.territory_from_locale \"en-US\"\n :US\n\n iex> Plausible.Cldr.Locale.territory_from_locale \"en-US-u-rg-GBzzzz\"\n :GB","ref":"Plausible.Cldr.Locale.html#territory_from_locale/1-examples","title":"Examples - Plausible.Cldr.Locale.territory_from_locale/1","type":"function"},{"doc":"Returns the time zone from a language tag or\nlocale name.","ref":"Plausible.Cldr.Locale.html#timezone_from_locale/1","title":"Plausible.Cldr.Locale.timezone_from_locale/1","type":"function"},{"doc":"* `locale` is any language tag returned by\n `Plausible.Cldr.Locale.new/1`\n or a locale name in the list returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.Locale.html#timezone_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Locale.timezone_from_locale/1","type":"function"},{"doc":"* A time zone ID as a string or\n\n* `:error` if no time zone can be determined","ref":"Plausible.Cldr.Locale.html#timezone_from_locale/1-returns","title":"Returns - Plausible.Cldr.Locale.timezone_from_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.timezone_from_locale \"en-US-u-tz-ausyd\"\n \"Australia/Sydney\"","ref":"Plausible.Cldr.Locale.html#timezone_from_locale/1-examples","title":"Examples - Plausible.Cldr.Locale.timezone_from_locale/1","type":"function"},{"doc":"Formats numbers and currencies based upon CLDR's decimal formats specification.\n\nThe format specification is documentated in [Unicode TR35](http://unicode.org/reports/tr35/tr35-numbers.html#Number_Formats).\nThere are several classes of formatting including non-scientific, scientific,\nrules based (for spelling and ordinal formats), compact formats that display `1k`\nrather than `1,000` and so on. See `Cldr.Number.to_string/2` for specific formatting\noptions.\n\n#","ref":"Plausible.Cldr.Number.html","title":"Plausible.Cldr.Number","type":"module"},{"doc":"The following description applies to formats that do not use scientific\nnotation or significant digits:\n\n* If the number of actual integer digits exceeds the maximum integer digits,\n then only the least significant digits are shown. For example, 1997 is\n formatted as \"97\" if the maximum integer digits is set to 2.\n\n* If the number of actual integer digits is less than the minimum integer\n digits, then leading zeros are added. For example, 1997 is formatted as\n \"01997\" if the minimum integer digits is set to 5.\n\n* If the number of actual fraction digits exceeds the maximum fraction\n digits, then half-even rounding it performed to the maximum fraction\n digits. For example, 0.125 is formatted as \"0.12\" if the maximum fraction\n digits is 2. This behavior can be changed by specifying a rounding\n increment and a rounding mode.\n\n* If the number of actual fraction digits is less than the minimum fraction\n digits, then trailing zeros are added. For example, 0.125 is formatted as\n \"0.1250\" if the minimum fraction digits is set to 4.\n\n* Trailing fractional zeros are not displayed if they occur j positions after\n the decimal, where j is less than the maximum fraction digits. For example,\n 0.10004 is formatted as \"0.1\" if the maximum fraction digits is four or\n less.\n\n#","ref":"Plausible.Cldr.Number.html#module-non-scientific-notation-formatting","title":"Non-Scientific Notation Formatting - Plausible.Cldr.Number","type":"module"},{"doc":"Numbers in scientific notation are expressed as the product of a mantissa and\na power of ten, for example, 1234 can be expressed as 1.234 x 10^3. The\nmantissa is typically in the half-open interval [1.0, 10.0) or sometimes\n[0.0, 1.0), but it need not be. In a pattern, the exponent character\nimmediately followed by one or more digit characters indicates scientific\nnotation. Example: \"0.###E0\" formats the number 1234 as \"1.234E3\".\n\n* The number of digit characters after the exponent character gives the\n minimum exponent digit count. There is no maximum. Negative exponents are\n formatted using the localized minus sign, not the prefix and suffix from\n the pattern. This allows patterns such as \"0.###E0 m/s\". To prefix positive\n exponents with a localized plus sign, specify '+' between the exponent and\n the digits: \"0.###E+0\" will produce formats \"1E+1\", \"1E+0\", \"1E-1\", and so\n on. (In localized patterns, use the localized plus sign rather than '+'.)\n\n* The minimum number of integer digits is achieved by adjusting the exponent.\n Example: 0.00123 formatted with \"00.###E0\" yields \"12.3E-4\". This only\n happens if there is no maximum number of integer digits. If there is a\n maximum, then the minimum number of integer digits is fixed at one.\n\n* The maximum number of integer digits, if present, specifies the exponent\n grouping. The most common use of this is to generate engineering notation,\n in which the exponent is a multiple of three, for example, \"##0.###E0\". The\n number 12345 is formatted using \"##0.####E0\" as \"12.345E3\".\n\n* When using scientific notation, the formatter controls the digit counts\n using significant digits logic. The maximum number of significant digits\n limits the total number of integer and fraction digits that will be shown\n in the mantissa; it does not affect parsing. For example, 12345 formatted\n with \"##0.##E0\" is \"12.3E3\". Exponential patterns may not contain grouping\n separators.\n\n#","ref":"Plausible.Cldr.Number.html#module-scientific-notation-formatting","title":"Scientific Notation Formatting - Plausible.Cldr.Number","type":"module"},{"doc":"There are two ways of controlling how many digits are shows: (a)\nsignificant digits counts, or (b) integer and fraction digit counts. Integer\nand fraction digit counts are described above. When a formatter is using\nsignificant digits counts, it uses however many integer and fraction digits\nare required to display the specified number of significant digits. It may\nignore min/max integer/fraction digits, or it may use them to the extent\npossible.","ref":"Plausible.Cldr.Number.html#module-significant-digits","title":"Significant Digits - Plausible.Cldr.Number","type":"module"},{"doc":"Parse a string locale-aware manner and return\na number.","ref":"Plausible.Cldr.Number.html#parse/2","title":"Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"* `string` is any `String.t`\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#parse/2-arguments","title":"Arguments - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"* `:number` is one of `:integer`, `:float`,\n `:decimal` or `nil`. The default is `nil`\n meaning that the type auto-detected as either\n an `integer` or a `float`.\n\n* `:locale` is any locale returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag.t`. The default is\n `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.html#parse/2-options","title":"Options - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"* A number of the requested or default type or\n\n* `{:error, {exception, error}}` if no number could be determined","ref":"Plausible.Cldr.Number.html#parse/2-returns","title":"Returns - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"This function parses a string to return a number but\nin a locale-aware manner. It will normalise grouping\ncharacters and decimal separators, different forms of\nthe `+` and `-` symbols that appear in Unicode and\nstrips any `_` characters that might be used for\nformatting in a string. It then parses the number\nusing the Elixir standard library functions.","ref":"Plausible.Cldr.Number.html#parse/2-notes","title":"Notes - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.parse(\"+1.000,34\", locale: \"de\")\n {:ok, 1000.34}\n\n iex> Plausible.Cldr.Number.parse(\"-1_000_000.34\")\n {:ok, -1000000.34}\n\n iex> Plausible.Cldr.Number.parse(\"1.000\", locale: \"de\", number: :integer)\n {:ok, 1000}\n\n iex> Plausible.Cldr.Number.parse(\"+1.000,34\", locale: \"de\", number: :integer)\n {:error,\n {Cldr.Number.ParseError,\n \"The string \\\"+1.000,34\\\" could not be parsed as a number\"}}","ref":"Plausible.Cldr.Number.html#parse/2-examples","title":"Examples - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"Resolve curencies from strings within\na list.","ref":"Plausible.Cldr.Number.html#resolve_currencies/2","title":"Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"* `list` is any list in which currency\n names and symbols are expected\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#resolve_currencies/2-arguments","title":"Arguments - Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"* `:locale` is any valid locale returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n The default is `Plausible.Cldr.get_locale()`\n\n* `:only` is an `atom` or list of `atoms` representing the\n currencies or currency types to be considered for a match.\n The equates to a list of acceptable currencies for parsing.\n See the notes below for currency types.\n\n* `:except` is an `atom` or list of `atoms` representing the\n currencies or currency types to be not considered for a match.\n This equates to a list of unacceptable currencies for parsing.\n See the notes below for currency types.\n\n* `:fuzzy` is a float greater than `0.0` and less than or\n equal to `1.0` which is used as input to\n `String.jaro_distance/2` to determine is the provided\n currency string is *close enough* to a known currency\n string for it to identify definitively a currency code.\n It is recommended to use numbers greater than `0.8` in\n order to reduce false positives.","ref":"Plausible.Cldr.Number.html#resolve_currencies/2-options","title":"Options - Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"The `:only` and `:except` options accept a list of\ncurrency codes and/or currency types. The following\ntypes are recognised.\n\nIf both `:only` and `:except` are specified,\nthe `:except` entries take priority - that means\nany entries in `:except` are removed from the `:only`\nentries.\n\n * `:all`, the default, considers all currencies\n\n * `:current` considers those currencies that have a `:to`\n date of nil and which also is a known ISO4217 currency\n\n * `:historic` is the opposite of `:current`\n\n * `:tender` considers currencies that are legal tender\n\n * `:unannotated` considers currencies that don't have\n \"(some string)\" in their names. These are usually\n financial instruments.","ref":"Plausible.Cldr.Number.html#resolve_currencies/2-notes","title":"Notes - Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.scan(\"100 US dollars\")\n ...> |> Plausible.Cldr.Number.resolve_currencies\n [100, :USD]\n\n iex> Plausible.Cldr.Number.scan(\"100 eurosports\")\n ...> |> Plausible.Cldr.Number.resolve_currencies(fuzzy: 0.75)\n [100, :EUR]\n\n iex> Plausible.Cldr.Number.scan(\"100 dollars des États-Unis\")\n ...> |> Plausible.Cldr.Number.resolve_currencies(locale: \"fr\")\n [100, :USD]","ref":"Plausible.Cldr.Number.html#resolve_currencies/2-examples","title":"Examples - Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"Resolve a currency from a string","ref":"Plausible.Cldr.Number.html#resolve_currency/2","title":"Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"* `list` is any list in which currency\n names and symbols are expected\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#resolve_currency/2-arguments","title":"Arguments - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"* `:locale` is any valid locale returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n The default is `Plausible.Cldr.get_locale()`\n\n* `:only` is an `atom` or list of `atoms` representing the\n currencies or currency types to be considered for a match.\n The equates to a list of acceptable currencies for parsing.\n See the notes below for currency types.\n\n* `:except` is an `atom` or list of `atoms` representing the\n currencies or currency types to be not considered for a match.\n This equates to a list of unacceptable currencies for parsing.\n See the notes below for currency types.\n\n* `:fuzzy` is a float greater than `0.0` and less than or\n equal to `1.0` which is used as input to\n `String.jaro_distance/2` to determine is the provided\n currency string is *close enough* to a known currency\n string for it to identify definitively a currency code.\n It is recommended to use numbers greater than `0.8` in\n order to reduce false positives.","ref":"Plausible.Cldr.Number.html#resolve_currency/2-options","title":"Options - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"* An ISO4217 currency code as an atom or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.html#resolve_currency/2-returns","title":"Returns - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"The `:only` and `:except` options accept a list of\ncurrency codes and/or currency types. The following\ntypes are recognised.\n\nIf both `:only` and `:except` are specified,\nthe `:except` entries take priority - that means\nany entries in `:except` are removed from the `:only`\nentries.\n\n * `:all`, the default, considers all currencies\n\n * `:current` considers those currencies that have a `:to`\n date of nil and which also is a known ISO4217 currency\n\n * `:historic` is the opposite of `:current`\n\n * `:tender` considers currencies that are legal tender\n\n * `:unannotated` considers currencies that don't have\n \"(some string)\" in their names. These are usually\n financial instruments.","ref":"Plausible.Cldr.Number.html#resolve_currency/2-notes","title":"Notes - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.resolve_currency(\"US dollars\")\n [:USD]\n\n iex> Plausible.Cldr.Number.resolve_currency(\"100 eurosports\", fuzzy: 0.75)\n [:EUR]\n\n iex> Plausible.Cldr.Number.resolve_currency(\"dollars des États-Unis\", locale: \"fr\")\n [:USD]\n\n iex> Plausible.Cldr.Number.resolve_currency(\"not a known currency\", locale: \"fr\")\n {:error,\n {Cldr.UnknownCurrencyError,\n \"The currency \\\"not a known currency\\\" is unknown or not supported\"}}","ref":"Plausible.Cldr.Number.html#resolve_currency/2-examples","title":"Examples - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"Resolve and tokenize percent or permille\nfrom the beginning and/or the end of a string","ref":"Plausible.Cldr.Number.html#resolve_per/2","title":"Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"* `list` is any list in which percent\n and permille symbols are expected\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#resolve_per/2-arguments","title":"Arguments - Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"* `:locale` is any valid locale returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n The default is `options[:backend].get_locale()`","ref":"Plausible.Cldr.Number.html#resolve_per/2-options","title":"Options - Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"* An `:percent` or `permille` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.html#resolve_per/2-returns","title":"Returns - Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.resolve_per \"11%\"\n [\"11\", :percent]\n\n iex> Plausible.Cldr.Number.resolve_per \"% of linguists\"\n [:percent, \" of linguists\"]\n\n iex> Plausible.Cldr.Number.resolve_per \"% of linguists %\"\n [:percent, \" of linguists \", :percent]","ref":"Plausible.Cldr.Number.html#resolve_per/2-examples","title":"Examples - Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"Resolve and tokenize percent and permille\nsybols from strings within a list.\n\nPercent and permille symbols can be identified\nat the beginning and/or the end of a string.","ref":"Plausible.Cldr.Number.html#resolve_pers/2","title":"Plausible.Cldr.Number.resolve_pers/2","type":"function"},{"doc":"* `list` is any list in which percent and\n permille symbols are expected\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#resolve_pers/2-arguments","title":"Arguments - Plausible.Cldr.Number.resolve_pers/2","type":"function"},{"doc":"* `:locale` is any valid locale returned by `Cldr.known_locale_names/1`\n or a `t:Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n The default is `options[:backend].get_locale()`","ref":"Plausible.Cldr.Number.html#resolve_pers/2-options","title":"Options - Plausible.Cldr.Number.resolve_pers/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.scan(\"100%\")\n ...> |> Plausible.Cldr.Number.resolve_pers()\n [100, :percent]","ref":"Plausible.Cldr.Number.html#resolve_pers/2-examples","title":"Examples - Plausible.Cldr.Number.resolve_pers/2","type":"function"},{"doc":"Scans a string locale-aware manner and returns\na list of strings and numbers.","ref":"Plausible.Cldr.Number.html#scan/2","title":"Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"* `string` is any `String.t`\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#scan/2-arguments","title":"Arguments - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"* `:number` is one of `:integer`, `:float`,\n `:decimal` or `nil`. The default is `nil`\n meaning that the type auto-detected as either\n an `integer` or a `float`.\n\n* `:locale` is any locale returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag.t`. The default is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.html#scan/2-options","title":"Options - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"* A list of strings and numbers","ref":"Plausible.Cldr.Number.html#scan/2-returns","title":"Returns - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"Number parsing is performed by `Cldr.Number.Parser.parse/2`\nand any options provided are passed to that function.","ref":"Plausible.Cldr.Number.html#scan/2-notes","title":"Notes - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.scan(\"£1_000_000.34\")\n [\"£\", 1000000.34]\n\n iex> Plausible.Cldr.Number.scan(\"I want £1_000_000 dollars\")\n [\"I want £\", 1000000, \" dollars\"]\n\n iex> Plausible.Cldr.Number.scan(\"The prize is 23\")\n [\"The prize is \", 23]\n\n iex> Plausible.Cldr.Number.scan(\"The lottery number is 23 for the next draw\")\n [\"The lottery number is \", 23, \" for the next draw\"]\n\n iex> Plausible.Cldr.Number.scan(\"The loss is -1.000 euros\", locale: \"de\", number: :integer)\n [\"The loss is \", -1000, \" euros\"]","ref":"Plausible.Cldr.Number.html#scan/2-examples","title":"Examples - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"Formats a number and applies the `:approximately` format for\na locale and number system.","ref":"Plausible.Cldr.Number.html#to_approx_string/2","title":"Plausible.Cldr.Number.to_approx_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.\n See `Cldr.Number.to_string/3` for a description of the available\n options.","ref":"Plausible.Cldr.Number.html#to_approx_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_approx_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_approx_string 1234\n {:ok, \"~1,234\"}","ref":"Plausible.Cldr.Number.html#to_approx_string/2-example","title":"Example - Plausible.Cldr.Number.to_approx_string/2","type":"function"},{"doc":"Formats a number and applies the `:at_least` format for\na locale and number system.","ref":"Plausible.Cldr.Number.html#to_at_least_string/2","title":"Plausible.Cldr.Number.to_at_least_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.\n See `Plausible.Cldr.Number.to_string/2` for a description of the available\n options.","ref":"Plausible.Cldr.Number.html#to_at_least_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_at_least_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_at_least_string 1234\n {:ok, \"1,234+\"}","ref":"Plausible.Cldr.Number.html#to_at_least_string/2-example","title":"Example - Plausible.Cldr.Number.to_at_least_string/2","type":"function"},{"doc":"Formats a number and applies the `:at_most` format for\na locale and number system.","ref":"Plausible.Cldr.Number.html#to_at_most_string/2","title":"Plausible.Cldr.Number.to_at_most_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.\n See `Cldr.Number.to_string/3` for a description of the available\n options.","ref":"Plausible.Cldr.Number.html#to_at_most_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_at_most_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_at_most_string 1234\n {:ok, \"≤1,234\"}","ref":"Plausible.Cldr.Number.html#to_at_most_string/2-example","title":"Example - Plausible.Cldr.Number.to_at_most_string/2","type":"function"},{"doc":"Formats the first and last numbers of a range and applies\nthe `:range` format for a locale and number system.","ref":"Plausible.Cldr.Number.html#to_range_string/2","title":"Plausible.Cldr.Number.to_range_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.\n See `Cldr.Number.to_string/3` for a description of the available\n options.","ref":"Plausible.Cldr.Number.html#to_range_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_range_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_range_string 1234..5678\n {:ok, \"1,234–5,678\"}","ref":"Plausible.Cldr.Number.html#to_range_string/2-example","title":"Example - Plausible.Cldr.Number.to_range_string/2","type":"function"},{"doc":"Returns a number formatted into a string according to a format pattern and options.","ref":"Plausible.Cldr.Number.html#to_string/2","title":"Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.","ref":"Plausible.Cldr.Number.html#to_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"* `format`: the format style or a format string defining how the number is\n formatted. See `Cldr.Number.Format` for how format strings can be constructed.\n See `Cldr.Number.Format.format_styles_for/3` to return available format styles\n for a locale. The default `format` is `:standard`.\n\n* If `:format` is set to `:long` or `:short` then the formatting depends on\n whether `:currency` is specified. If not specified then the number is\n formatted as `:decimal_long` or `:decimal_short`. If `:currency` is\n specified the number is formatted as `:currency_long` or\n `:currency_short` and `:fractional_digits` is set to 0 as a default.\n\n* `:format` may also be a format defined by CLDR's Rules Based Number\n Formats (RBNF). Further information is found in the module `Cldr.Rbnf`.\n The most commonly used formats in this category are to spell out the\n number in a the locales language. The applicable formats are `:spellout`,\n `:spellout_year`, `:ordinal`. A number can also be formatted as roman\n numbers by using the format `:roman` or `:roman_lower`.\n\n* `currency`: is the currency for which the number is formatted. For\n available currencies see `Cldr.Currency.known_currencies/0`. This option\n is required if `:format` is set to `:currency`. If `currency` is set\n and no `:format` is set, `:format` will be set to `:currency` as well.\n\n* `currency_symbol`: Allows overriding a currency symbol. The alternatives\n are:\n * `:iso` the ISO currency code will be used instead of the default\n currency symbol.\n * `:narrow` uses the narrow symbol defined for the locale. The same\n narrow symbol can be defined for more than one currency and therefore this\n should be used with care. If no narrow symbol is defined, the standard\n symbol is used.\n * `:symbol` uses the standard symbol defined in CLDR. A symbol is unique\n for each currency and can be safely used.\n * \"string\" uses `string` as the currency symbol\n * `:standard` (the default and recommended) uses the CLDR-defined symbol\n based upon the currency format for the locale.\n\n* `:cash`: a boolean which indicates whether a number being formatted as a\n `:currency` is to be considered a cash value or not. Currencies can be\n rounded differently depending on whether `:cash` is `true` or `false`.\n *This option is deprecated in favour of `currency_digits: :cash`.\n\n* `:currency_digits` indicates which of the rounding and digits should be\n used. The options are `:accounting` which is the default, `:cash` or\n `:iso`\n\n* `:rounding_mode`: determines how a number is rounded to meet the precision\n of the format requested. The available rounding modes are `:down`,\n :half_up, :half_even, :ceiling, :floor, :half_down, :up. The default is\n `:half_even`.\n\n* `:number_system`: determines which of the number systems for a locale\n should be used to define the separators and digits for the formatted\n number. If `number_system` is an `atom` then `number_system` is\n interpreted as a number system. If the `:number_system` is\n `binary` then it is interpreted as a number system name. See\n `Cldr.Number.System.number_system_names_for/2`. The default is `:default`.\n\n* `:locale`: determines the locale in which the number is formatted. See\n `Cldr.known_locale_names/0`. The default is`Cldr.get_locale/0` which is the\n locale currently in affect for this `Process` and which is set by\n `Cldr.put_locale/1`.\n\n* If `:fractional_digits` is set to a positive integer value then the number\n will be rounded to that number of digits and displayed accordingly - overriding\n settings that would be applied by default. For example, currencies have\n fractional digits defined reflecting each currencies minor unit. Setting\n `:fractional_digits` will override that setting.\n\n* If `:maximum_integer_digits` is set to a positive integer value then the\n number is left truncated before formatting. For example if the number `1234`\n is formatted with the option `maximum_integer_digits: 2`, the number is\n truncated to `34` and formatted.\n\n* If `:round_nearest` is set to a positive integer value then the number\n will be rounded to nearest increment of that value - overriding\n settings that would be applied by default.\n\n* `:minimum_grouping_digits` overrides the CLDR definition of minimum grouping\n digits. For example in the locale `es` the number `1234` is formatted by default\n as `1345` because the locale defines the `minimium_grouping_digits` as `2`. If\n `minimum_grouping_digits: 1` is set as an option the number is formatting as\n `1.345`. The `:minimum_grouping_digits` is added to the grouping defined by\n the number format. If the sum of these two digits is greater than the number\n of digits in the integer (or fractional) part of the number then no grouping\n is performed.\n\n* `:wrapper` is a 2-arity function that will be called for each number component\n with parameters `string` and `tag` where `tag` is one of `:number`,\n `:currency_symbol`, `:currency_space`, `:literal`, `:quote`, `:percent`,\n `:permille`, `:minus` or `:plus`. The function must return a string. The\n function can be used to wrap format elements in HTML or other tags.","ref":"Plausible.Cldr.Number.html#to_string/2-options","title":"Options - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"A locale identifier can specify options that affect number formatting.\nThese options are:\n\n* `nu`: defines the number system to be used if none is specified by the `:number_system`\n option to `to_string/2`\n\nThis key is part of the [u extension](https://unicode.org/reports/tr35/#u_Extension) and\nthat document should be consulted for details on how to construct a locale identifier with these\nextensions.","ref":"Plausible.Cldr.Number.html#to_string/2-locale-extensions-affecting-formatting","title":"Locale extensions affecting formatting - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"Wrapping elements is particularly useful when formatting a number with a\ncurrency symbol and the requirement is to have different HTML formatting\napplied to the symbol than the number. For example:\n\n iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn\n ...> string, :currency_symbol -> \" \" string \" \"\n ...> string, :number -> \" \" string \" \"\n ...> string, :currency_space -> \" \" string \" \"\n ...> string, _other -> string\n ...> end)\n {:ok, \" $ 100.00 \"}\n\nIt is also possible and recommended to use the `Phoenix.HTML.Tag.content_tag/3`\nfunction if wrapping HTML tags since these will ensure HTML entities are\ncorrectly encoded. For example:\n\n iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn\n ...> string, :currency_symbol -> Phoenix.HTML.Tag.content_tag(:span, string, class: \"symbol\")\n ...> string, :number -> Phoenix.HTML.Tag.content_tag(:span, string, class: \"number\")\n ...> string, :currency_space -> Phoenix.HTML.Tag.content_tag(:span, string)\n ...> string, _other -> string\n ...> end)\n {:ok, \" $ 100.00 \"}\n\nWhen formatting a number the format is parsed into format elements that might include\na currency symbol, a literal string, inserted text between a currency symbol and the\ncurrency amount, a percent sign, the number itself and several other elements. In\nsome cases it is helpful to be apply specific formatting to each element.\nThis can be achieved by specifying a `:wrapper` option. This option takes a 2-arity\nfunction as an argument. For each element of the format the wrapper function is called\nwith two parameters: the format element as a string and an atom representing the\nelement type. The wrapper function is required to return a string that is then\ninserted in the final formatted number.","ref":"Plausible.Cldr.Number.html#to_string/2-wrapping-format-elements","title":"Wrapping format elements - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"* `{:ok, string}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.html#to_string/2-returns","title":"Returns - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_string 12345\n {:ok, \"12,345\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, locale: \"fr\"\n {:ok, \"12 345\"}\n\n iex> Plausible.Cldr.Number.to_string 1345.32, currency: :EUR, locale: \"es\", minimum_grouping_digits: 1\n {:ok, \"1.345,32 €\"}\n\n iex> Plausible.Cldr.Number.to_string 1345.32, currency: :EUR, locale: \"es\"\n {:ok, \"1345,32 €\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, locale: \"fr\", currency: \"USD\"\n {:ok, \"12 345,00 $US\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, format: \"#E0\"\n {:ok, \"1.2345E4\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\"\n {:ok, \"THB 12,345.00\"}\n\n iex> Plausible.Cldr.Number.to_string -12345, format: :accounting, currency: \"THB\"\n {:ok, \"(THB 12,345.00)\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\",\n ...> locale: \"th\"\n {:ok, \"฿12,345.00\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\",\n ...> locale: \"th\", number_system: :native\n {:ok, \"฿๑๒,๓๔๕.๐๐\"}\n\n iex> Plausible.Cldr.Number.to_string 1244.30, format: :long\n {:ok, \"1 thousand\"}\n\n iex> Plausible.Cldr.Number.to_string 1244.30, format: :long, currency: \"USD\"\n {:ok, \"1,244 US dollars\"}\n\n iex> Plausible.Cldr.Number.to_string 1244.30, format: :short\n {:ok, \"1K\"}\n\n iex> Plausible.Cldr.Number.to_string 1244.30, format: :short, currency: \"EUR\"\n {:ok, \"€1K\"}\n\n iex> Plausible.Cldr.Number.to_string 1234, format: :spellout\n {:ok, \"one thousand two hundred thirty-four\"}\n\n iex> Plausible.Cldr.Number.to_string 1234, format: :spellout_verbose\n {:ok, \"one thousand two hundred and thirty-four\"}\n\n iex> Plausible.Cldr.Number.to_string 1989, format: :spellout_year\n {:ok, \"nineteen eighty-nine\"}\n\n iex> Plausible.Cldr.Number.to_string 123, format: :ordinal\n {:ok, \"123rd\"}\n\n iex> Plausible.Cldr.Number.to_string 123, format: :roman\n {:ok, \"CXXIII\"}\n\n iex> Plausible.Cldr.Number.to_string 123, locale: \"th-u-nu-thai\"\n {:ok, \"๑๒๓\"}","ref":"Plausible.Cldr.Number.html#to_string/2-examples","title":"Examples - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"An error tuple `{:error, reason}` will be returned if an error is detected.\nThe two most likely causes of an error return are:\n\n * A format cannot be compiled. In this case the error tuple will look like:\n\n```\n iex> Plausible.Cldr.Number.to_string(12345, format: \"0#\")\n {:error, {Cldr.FormatCompileError,\n \"Decimal format compiler: syntax error before: \\\"#\\\"\"}}\n```\n\n * The format style requested is not defined for the `locale` and\n `number_system`. This happens typically when the number system is\n `:algorithmic` rather than the more common `:numeric`. In this case the error\n return looks like:\n\n```\n iex> Plausible.Cldr.Number.to_string(1234, locale: \"he\", number_system: \"hebr\")\n {:error, {Cldr.UnknownFormatError,\n \"The locale :he with number system :hebr does not define a format :standard\"}}\n```","ref":"Plausible.Cldr.Number.html#to_string/2-errors","title":"Errors - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"Same as the execution of `to_string/2` but raises an exception if an error would be\nreturned.","ref":"Plausible.Cldr.Number.html#to_string!/2","title":"Plausible.Cldr.Number.to_string!/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted. See\n `Plausible.Cldr.Number.to_string/2`","ref":"Plausible.Cldr.Number.html#to_string!/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_string!/2","type":"function"},{"doc":"* a formatted number as a string or\n\n* raises an exception","ref":"Plausible.Cldr.Number.html#to_string!/2-returns","title":"Returns - Plausible.Cldr.Number.to_string!/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_string! 12345\n \"12,345\"\n\n iex> Plausible.Cldr.Number.to_string! 12345, locale: \"fr\"\n \"12 345\"","ref":"Plausible.Cldr.Number.html#to_string!/2-examples","title":"Examples - Plausible.Cldr.Number.to_string!/2","type":"function"},{"doc":"Return a valid number system from a provided locale and number\nsystem name or type.\n\nThe number system or number system type must be valid for the\ngiven locale. If a number system type is provided, the\nunderlying number system is returned.","ref":"Plausible.Cldr.Number.html#validate_number_system/2","title":"Plausible.Cldr.Number.validate_number_system/2","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n\n* `system_name` is any number system name returned by\n `Cldr.known_number_systems/0` or a number system type\n returned by `Cldr.known_number_system_types/0`","ref":"Plausible.Cldr.Number.html#validate_number_system/2-arguments","title":"Arguments - Plausible.Cldr.Number.validate_number_system/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.validate_number_system \"en\", :latn\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.validate_number_system \"en\", :default\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.validate_number_system \"en\", :unknown\n {:error,\n {Cldr.UnknownNumberSystemError, \"The number system :unknown is unknown\"}}\n\n iex> Plausible.Cldr.Number.validate_number_system \"zz\", :default\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Plausible.Cldr.Number.html#validate_number_system/2-examples","title":"Examples - Plausible.Cldr.Number.validate_number_system/2","type":"function"},{"doc":"Implements cardinal plural rules for numbers.","ref":"Plausible.Cldr.Number.Cardinal.html","title":"Plausible.Cldr.Number.Cardinal","type":"module"},{"doc":"The locale names for which plural rules are defined.","ref":"Plausible.Cldr.Number.Cardinal.html#available_locale_names/0","title":"Plausible.Cldr.Number.Cardinal.available_locale_names/0","type":"function"},{"doc":"The configured locales for which plural rules are defined.\n\nReturns the intersection of `Plausible.Cldr.known_locale_names/0` and\nthe locales for which Cardinal plural rules are defined.\n\nThere are many `Cldr` locales which don't have their own plural\nrules so this list is the intersection of `Cldr`'s configured\nlocales and those that have rules.","ref":"Plausible.Cldr.Number.Cardinal.html#known_locale_names/0","title":"Plausible.Cldr.Number.Cardinal.known_locale_names/0","type":"function"},{"doc":"Return the plural key for a given number in a given locale\n\nReturns which plural key (`:zero`, `:one`, `:two`, `:few`,\n`:many` or `:other`) a given number fits into within the\ncontext of a given locale.\n\nNote that these key names should not be interpreted\nliterally. For example, the key returned from\n`Cldr.Number.Ordinal.plural_rule(0, \"en\")` is actually\n`:other`, not `:zero`.\n\nThis key can then be used to format a number, date, time, unit,\nlist or other content in a plural-sensitive way.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rule/3","title":"Plausible.Cldr.Number.Cardinal.plural_rule/3","type":"function"},{"doc":"* `number` is any `integer`, `float` or `Decimal`\n\n* `locale` is any locale returned by `Cldr.Locale.new!/2` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\n* `rounding` is one of `[:down, :up, :ceiling, :floor, :half_even, :half_up, :half_down]`. The\n default is `:half_even`.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rule/3-arguments","title":"Arguments - Plausible.Cldr.Number.Cardinal.plural_rule/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Cardinal.plural_rule 0, \"fr\"\n :one\n\n iex> Plausible.Cldr.Number.Cardinal.plural_rule 0, \"en\"\n :other","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rule/3-examples","title":"Examples - Plausible.Cldr.Number.Cardinal.plural_rule/3","type":"function"},{"doc":"Returns all the plural rules defined in CLDR.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rules/0","title":"Plausible.Cldr.Number.Cardinal.plural_rules/0","type":"function"},{"doc":"Return the plural rules for a locale.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rules_for/1","title":"Plausible.Cldr.Number.Cardinal.plural_rules_for/1","type":"function"},{"doc":"* `locale` is any locale returned by `Plausible.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\nThe rules are returned in AST form after parsing.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rules_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Cardinal.plural_rules_for/1","type":"function"},{"doc":"Pluralize a number using cardinal plural rules\nand a substitution map.","ref":"Plausible.Cldr.Number.Cardinal.html#pluralize/3","title":"Plausible.Cldr.Number.Cardinal.pluralize/3","type":"function"},{"doc":"* `number` is an integer, float or Decimal\n\n* `locale` is any locale returned by `Plausible.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\n* `substitutions` is a map that maps plural keys to a string.\n The valid substitution keys are `:zero`, `:one`, `:two`,\n `:few`, `:many` and `:other`.\n\nSee also `Plausible.Cldr.Number.Cardinal.Cardinal.plural_rule/3`.","ref":"Plausible.Cldr.Number.Cardinal.html#pluralize/3-arguments","title":"Arguments - Plausible.Cldr.Number.Cardinal.pluralize/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Cardinal.pluralize 1, \"en\", %{one: \"one\"}\n \"one\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 2, \"en\", %{one: \"one\"}\n nil\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 2, \"en\", %{one: \"one\", two: \"two\", other: \"other\"}\n \"other\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 22, \"en\", %{one: \"one\", two: \"two\", other: \"other\"}\n \"other\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(1), \"en\", %{one: \"one\"}\n \"one\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), \"en\", %{one: \"one\"}\n nil\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), \"en\", %{one: \"one\", two: \"two\"}\n nil\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, \"ar\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"few\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, \"en\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"","ref":"Plausible.Cldr.Number.Cardinal.html#pluralize/3-examples","title":"Examples - Plausible.Cldr.Number.Cardinal.pluralize/3","type":"function"},{"doc":"Functions to manage the collection of number patterns defined in Cldr.\n\nNumber patterns affect how numbers are interpreted in a localized context.\nHere are some examples, based on the French locale. The \".\" shows where the\ndecimal point should go. The \",\" shows where the thousands separator should\ngo. A \"0\" indicates zero-padding: if the number is too short, a zero (in the\nlocale's numeric set) will go there. A \"#\" indicates no padding: if the\nnumber is too short, nothing goes there. A \"¤\" shows where the currency sign\nwill go. The following illustrates the effects of different patterns for the\nFrench locale, with the number \"1234.567\". Notice how the pattern characters\n',' and '.' are replaced by the characters appropriate for the locale.","ref":"Plausible.Cldr.Number.Format.html","title":"Plausible.Cldr.Number.Format","type":"module"},{"doc":"| Pattern\t | Currency\t | Text |\n| ------------- | :-------------: | ----------: |\n| #,##0.##\t | n/a\t | 1 234,57 |\n| #,##0.###\t | n/a\t | 1 234,567 |\n| ###0.#####\t | n/a\t | 1234,567 |\n| ###0.0000#\t | n/a\t | 1234,5670 |\n| 00000.0000\t | n/a\t | 01234,5670 |\n| #,##0.00 ¤\t | EUR\t | 1 234,57 € |\n\nThe number of # placeholder characters before the decimal do not matter,\nsince no limit is placed on the maximum number of digits. There should,\nhowever, be at least one zero some place in the pattern. In currency formats,\nthe number of digits after the decimal also do not matter, since the\ninformation in the supplemental data (see Supplemental Currency Data) is used\nto override the number of decimal places — and the rounding — according to\nthe currency that is being formatted. That can be seen in the above chart,\nwith the difference between Yen and Euro formatting.\n\nDetails of the number formats are described in the\n[Unicode documentation](http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns)","ref":"Plausible.Cldr.Number.Format.html#module-number-pattern-examples","title":"Number Pattern Examples - Plausible.Cldr.Number.Format","type":"module"},{"doc":"Returns the decimal formats defined for a given locale.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for/1","title":"Plausible.Cldr.Number.Format.all_formats_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.all_formats_for/1","type":"function"},{"doc":"* `{:ok, map}` where map is a map of decimal formats\n keyed by number system or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.Format.html#all_formats_for/1-returns","title":"Returns - Plausible.Cldr.Number.Format.all_formats_for/1","type":"function"},{"doc":"Returns the decimal formats defined for a given locale.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for!/1","title":"Plausible.Cldr.Number.Format.all_formats_for!/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for!/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.all_formats_for!/1","type":"function"},{"doc":"* `{:ok, map}` where map is a map of decimal formats\n keyed by number system or\n\n* raises an exception\n\nSee `Plausible.Cldr.Number.Format.Number.Format.all_formats_for/1` for further information.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for!/1-returns","title":"Returns - Plausible.Cldr.Number.Format.all_formats_for!/1","type":"function"},{"doc":"Returns the currency space for a given locale and\nnumber system.","ref":"Plausible.Cldr.Number.Format.html#currency_spacing/2","title":"Plausible.Cldr.Number.Format.currency_spacing/2","type":"function"},{"doc":"Returns the list of decimal formats in the configured locales including\nthe list of locales configured for precompilation in `config.exs`.\n\nThis function exists to allow the decimal formatter\nto precompile all the known formats at compile time.","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list/0","title":"Plausible.Cldr.Number.Format.decimal_format_list/0","type":"function"},{"doc":"#=> Plausible.Cldr.Number.Format.Format.decimal_format_list\n [\"#\", \"#,##,##0%\",\n \"#,##,##0.###\", \"#,##,##0.00¤\", \"#,##,##0.00¤;(#,##,##0.00¤)\",\n \"#,##,##0 %\", \"#,##0%\", \"#,##0.###\", \"#,##0.00 ¤\",\n \"#,##0.00 ¤;(#,##0.00 ¤)\", \"#,##0.00¤\", \"#,##0.00¤;(#,##0.00¤)\",\n \"#,##0 %\", \"#0%\", \"#0.######\", \"#0.00 ¤\", \"#E0\", \"%#,##0\", \"% #,##0\",\n \"0\", \"0.000000E+000\", \"0000 M ¤\", \"0000¤\", \"000G ¤\", \"000K ¤\", \"000M ¤\",\n \"000T ¤\", \"000mM ¤\", \"000m ¤\", \"000 Bio'.' ¤\", \"000 Bln ¤\", \"000 Bn ¤\",\n \"000 B ¤\", \"000 E ¤\", \"000 K ¤\", \"000 MRD ¤\", \"000 Md ¤\", \"000 Mio'.' ¤\",\n \"000 Mio ¤\", \"000 Mld ¤\", \"000 Mln ¤\", \"000 Mn ¤\", \"000 Mrd'.' ¤\",\n \"000 Mrd ¤\", \"000 Mr ¤\", \"000 M ¤\", \"000 NT ¤\", \"000 N ¤\", \"000 Tn ¤\",\n \"000 Tr ¤\", ...]","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list/0-example","title":"Example - Plausible.Cldr.Number.Format.decimal_format_list/0","type":"function"},{"doc":"Returns the list of decimal formats for a configured locale.","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list_for/1","title":"Plausible.Cldr.Number.Format.decimal_format_list_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.\n\nThis function exists to allow the decimal formatter to precompile all\nthe known formats at compile time. Its use is not otherwise recommended.","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.decimal_format_list_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.decimal_format_list_for(:en)\n {:ok, [\"#,##0%\", \"#,##0.###\", \"#,##0.00\", \"#,##0.00;(#,##0.00)\",\"#E0\",\n \"0 billion\", \"0 million\", \"0 thousand\",\n \"0 trillion\", \"00 billion\", \"00 million\", \"00 thousand\", \"00 trillion\",\n \"000 billion\", \"000 million\", \"000 thousand\", \"000 trillion\", \"000B\", \"000K\",\n \"000M\", \"000T\", \"00B\", \"00K\", \"00M\", \"00T\", \"0B\", \"0K\", \"0M\", \"0T\",\n \"¤#,##0.00\", \"¤#,##0.00;(¤#,##0.00)\", \"¤000B\", \"¤000K\", \"¤000M\",\n \"¤000T\", \"¤00B\", \"¤00K\", \"¤00M\", \"¤00T\", \"¤0B\", \"¤0K\", \"¤0M\", \"¤0T\",\n \"¤ #,##0.00\", \"¤ #,##0.00;(¤ #,##0.00)\", \"¤ 000B\", \"¤ 000K\", \"¤ 000M\",\n \"¤ 000T\", \"¤ 00B\", \"¤ 00K\", \"¤ 00M\", \"¤ 00T\", \"¤ 0B\", \"¤ 0K\", \"¤ 0M\", \"¤ 0T\"]}","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list_for/1-example","title":"Example - Plausible.Cldr.Number.Format.decimal_format_list_for/1","type":"function"},{"doc":"Returns the default grouping for a locale as a map.","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for/1","title":"Plausible.Cldr.Number.Format.default_grouping_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.default_grouping_for/1","type":"function"},{"doc":"* `{:ok, grouping}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for/1-returns","title":"Returns - Plausible.Cldr.Number.Format.default_grouping_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.default_grouping_for(:en)\n {:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for/1-examples","title":"Examples - Plausible.Cldr.Number.Format.default_grouping_for/1","type":"function"},{"doc":"Returns the default grouping for a locale\nor raises on error.","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for!/1","title":"Plausible.Cldr.Number.Format.default_grouping_for!/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for!/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.default_grouping_for!/1","type":"function"},{"doc":"* `grouping` as a map or\n\n* raises an exception","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for!/1-returns","title":"Returns - Plausible.Cldr.Number.Format.default_grouping_for!/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.default_grouping_for!(:en)\n %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for!/1-examples","title":"Examples - Plausible.Cldr.Number.Format.default_grouping_for!/1","type":"function"},{"doc":"Return the predfined formats for a given `locale` and `number_system`.","ref":"Plausible.Cldr.Number.Format.html#formats_for/2","title":"Plausible.Cldr.Number.Format.formats_for/2","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.\n\n* `number_system` is any valid number system or number system type returned\n by `Plausible.Cldr.Number.System.number_systems_for/1`.","ref":"Plausible.Cldr.Number.Format.html#formats_for/2-arguments","title":"Arguments - Plausible.Cldr.Number.Format.formats_for/2","type":"function"},{"doc":"Plausible.Cldr.Number.Format.formats_for :fr, :native\n #=> %Cldr.Number.Format{\n accounting: \"#,##0.00 ¤;(#,##0.00 ¤)\",\n currency: \"#,##0.00 ¤\",\n percent: \"#,##0 %\",\n scientific: \"#E0\",\n standard: \"#,##0.###\"\n currency_short: [{\"1000\", [one: \"0 k ¤\", other: \"0 k ¤\"]},\n {\"10000\", [one: \"00 k ¤\", other: \"00 k ¤\"]},\n {\"100000\", [one: \"000 k ¤\", other: \"000 k ¤\"]},\n {\"1000000\", [one: \"0 M ¤\", other: \"0 M ¤\"]},\n {\"10000000\", [one: \"00 M ¤\", other: \"00 M ¤\"]},\n {\"100000000\", [one: \"000 M ¤\", other: \"000 M ¤\"]},\n {\"1000000000\", [one: \"0 Md ¤\", other: \"0 Md ¤\"]},\n {\"10000000000\", [one: \"00 Md ¤\", other: \"00 Md ¤\"]},\n {\"100000000000\", [one: \"000 Md ¤\", other: \"000 Md ¤\"]},\n {\"1000000000000\", [one: \"0 Bn ¤\", other: \"0 Bn ¤\"]},\n {\"10000000000000\", [one: \"00 Bn ¤\", other: \"00 Bn ¤\"]},\n {\"100000000000000\", [one: \"000 Bn ¤\", other: \"000 Bn ¤\"]}],\n ...\n }","ref":"Plausible.Cldr.Number.Format.html#formats_for/2-example","title":"Example - Plausible.Cldr.Number.Format.formats_for/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Format.html#formats_for!/2","title":"Plausible.Cldr.Number.Format.formats_for!/2","type":"function"},{"doc":"Returns the minimum grouping digits for a locale.","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for/1","title":"Plausible.Cldr.Number.Format.minimum_grouping_digits_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.minimum_grouping_digits_for/1","type":"function"},{"doc":"* `{:ok, minumum_digits}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for/1-returns","title":"Returns - Plausible.Cldr.Number.Format.minimum_grouping_digits_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for(\"en\")\n {:ok, 1}","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for/1-examples","title":"Examples - Plausible.Cldr.Number.Format.minimum_grouping_digits_for/1","type":"function"},{"doc":"Returns the minimum grouping digits for a locale\nor raises on error.","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for!/1","title":"Plausible.Cldr.Number.Format.minimum_grouping_digits_for!/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.minimum_grouping_digits_for!/1","type":"function"},{"doc":"* `minumum_digits` or\n\n* raises an exception","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-returns","title":"Returns - Plausible.Cldr.Number.Format.minimum_grouping_digits_for!/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for!(\"en\")\n 1","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-examples","title":"Examples - Plausible.Cldr.Number.Format.minimum_grouping_digits_for!/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Formatter.Decimal.html","title":"Plausible.Cldr.Number.Formatter.Decimal","type":"module"},{"doc":"","ref":"Plausible.Cldr.Number.Formatter.Decimal.html#metadata!/1","title":"Plausible.Cldr.Number.Formatter.Decimal.metadata!/1","type":"function"},{"doc":"Formats a number according to a decimal format string.","ref":"Plausible.Cldr.Number.Formatter.Decimal.html#to_string/3","title":"Plausible.Cldr.Number.Formatter.Decimal.to_string/3","type":"function"},{"doc":"* `number` is an integer, float or Decimal\n\n* `format` is a format string. See `Plausible.Cldr.Number` for further information.\n\n* `options` is a map of options. See `Plausible.Cldr.Number.to_string/2`\n for further information.","ref":"Plausible.Cldr.Number.Formatter.Decimal.html#to_string/3-arguments","title":"Arguments - Plausible.Cldr.Number.Formatter.Decimal.to_string/3","type":"function"},{"doc":"Implements ordinal plural rules for numbers.","ref":"Plausible.Cldr.Number.Ordinal.html","title":"Plausible.Cldr.Number.Ordinal","type":"module"},{"doc":"The locale names for which plural rules are defined.","ref":"Plausible.Cldr.Number.Ordinal.html#available_locale_names/0","title":"Plausible.Cldr.Number.Ordinal.available_locale_names/0","type":"function"},{"doc":"The configured locales for which plural rules are defined.\n\nReturns the intersection of `Plausible.Cldr.known_locale_names/0` and\nthe locales for which Ordinal plural rules are defined.\n\nThere are many `Cldr` locales which don't have their own plural\nrules so this list is the intersection of `Cldr`'s configured\nlocales and those that have rules.","ref":"Plausible.Cldr.Number.Ordinal.html#known_locale_names/0","title":"Plausible.Cldr.Number.Ordinal.known_locale_names/0","type":"function"},{"doc":"Return the plural key for a given number in a given locale\n\nReturns which plural key (`:zero`, `:one`, `:two`, `:few`,\n`:many` or `:other`) a given number fits into within the\ncontext of a given locale.\n\nNote that these key names should not be interpreted\nliterally. For example, the key returned from\n`Cldr.Number.Ordinal.plural_rule(0, \"en\")` is actually\n`:other`, not `:zero`.\n\nThis key can then be used to format a number, date, time, unit,\nlist or other content in a plural-sensitive way.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rule/3","title":"Plausible.Cldr.Number.Ordinal.plural_rule/3","type":"function"},{"doc":"* `number` is any `integer`, `float` or `Decimal`\n\n* `locale` is any locale returned by `Cldr.Locale.new!/2` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\n* `rounding` is one of `[:down, :up, :ceiling, :floor, :half_even, :half_up, :half_down]`. The\n default is `:half_even`.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rule/3-arguments","title":"Arguments - Plausible.Cldr.Number.Ordinal.plural_rule/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Ordinal.plural_rule 0, \"fr\"\n :other\n\n iex> Plausible.Cldr.Number.Ordinal.plural_rule 1, \"en\"\n :one","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rule/3-examples","title":"Examples - Plausible.Cldr.Number.Ordinal.plural_rule/3","type":"function"},{"doc":"Returns all the plural rules defined in CLDR.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rules/0","title":"Plausible.Cldr.Number.Ordinal.plural_rules/0","type":"function"},{"doc":"Return the plural rules for a locale.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rules_for/1","title":"Plausible.Cldr.Number.Ordinal.plural_rules_for/1","type":"function"},{"doc":"* `locale` is any locale returned by `Plausible.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\nThe rules are returned in AST form after parsing.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rules_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Ordinal.plural_rules_for/1","type":"function"},{"doc":"Pluralize a number using ordinal plural rules\nand a substitution map.","ref":"Plausible.Cldr.Number.Ordinal.html#pluralize/3","title":"Plausible.Cldr.Number.Ordinal.pluralize/3","type":"function"},{"doc":"* `number` is an integer, float or Decimal or a `Range.t{}`. When a range, The\n is that in any usage, the start value is strictly less than the end value,\n and that no values are negative. Results for any cases that do not meet\n these criteria are undefined.\n\n* `locale` is any locale returned by `Plausible.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\n* `substitutions` is a map that maps plural keys to a string.\n The valid substitution keys are `:zero`, `:one`, `:two`,\n `:few`, `:many` and `:other`.\n\nSee also `Plausible.Cldr.Number.Ordinal.Ordinal.plural_rule/3`.","ref":"Plausible.Cldr.Number.Ordinal.html#pluralize/3-arguments","title":"Arguments - Plausible.Cldr.Number.Ordinal.pluralize/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Ordinal.pluralize 1, :en, %{one: \"one\"}\n \"one\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: \"one\"}\n nil\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: \"one\", two: \"two\"}\n \"two\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 22, :en, %{one: \"one\", two: \"two\", other: \"other\"}\n \"two\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: \"one\"}\n \"one\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: \"one\"}\n nil\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: \"one\", two: \"two\"}\n \"two\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, \"ar\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, \"en\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"","ref":"Plausible.Cldr.Number.Ordinal.html#pluralize/3-examples","title":"Examples - Plausible.Cldr.Number.Ordinal.pluralize/3","type":"function"},{"doc":"Implements plural rules for ranges","ref":"Plausible.Cldr.Number.PluralRule.Range.html","title":"Plausible.Cldr.Number.PluralRule.Range","type":"module"},{"doc":"Returns a final plural type for a start-of-range plural\ntype, an end-of-range plural type and a locale.","ref":"Plausible.Cldr.Number.PluralRule.Range.html#plural_rule/3","title":"Plausible.Cldr.Number.PluralRule.Range.plural_rule/3","type":"function"},{"doc":"* `first` is a plural type for the start of a range\n\n* `last` is a plural type for the end of a range\n\n* `locale` is any `Cldr.LanguageTag.t` or a language name\n (not locale name)","ref":"Plausible.Cldr.Number.PluralRule.Range.html#plural_rule/3-arguments","title":"Arguments - Plausible.Cldr.Number.PluralRule.Range.plural_rule/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.PluralRule.Range.plural_rule :other, :few, \"ar\"\n :few","ref":"Plausible.Cldr.Number.PluralRule.Range.html#plural_rule/3-example","title":"Example - Plausible.Cldr.Number.PluralRule.Range.plural_rule/3","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Symbol.html","title":"Plausible.Cldr.Number.Symbol","type":"module"},{"doc":"Returns a list of all decimal symbols defined\nby the locales configured in this backend as\na list.","ref":"Plausible.Cldr.Number.Symbol.html#all_decimal_symbols/0","title":"Plausible.Cldr.Number.Symbol.all_decimal_symbols/0","type":"function"},{"doc":"Returns a list of all decimal symbols defined\nby the locales configured in this backend as\na string.\n\nThis string can be used as a character class\nwhen builing a regular expression.","ref":"Plausible.Cldr.Number.Symbol.html#all_decimal_symbols_class/0","title":"Plausible.Cldr.Number.Symbol.all_decimal_symbols_class/0","type":"function"},{"doc":"Returns a list of all grouping symbols defined\nby the locales configured in this backend as\na list.","ref":"Plausible.Cldr.Number.Symbol.html#all_grouping_symbols/0","title":"Plausible.Cldr.Number.Symbol.all_grouping_symbols/0","type":"function"},{"doc":"Returns a list of all grouping symbols defined\nby the locales configured in this backend as\na string.\n\nThis string can be used as a character class\nwhen builing a regular expression.","ref":"Plausible.Cldr.Number.Symbol.html#all_grouping_symbols_class/0","title":"Plausible.Cldr.Number.Symbol.all_grouping_symbols_class/0","type":"function"},{"doc":"Returns a map of `Cldr.Number.Symbol.t` structs of the number symbols for each\nof the number systems of a locale.","ref":"Plausible.Cldr.Number.Symbol.html#number_symbols_for/1","title":"Plausible.Cldr.Number.Symbol.number_symbols_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Symbol.html#number_symbols_for/1-options","title":"Options - Plausible.Cldr.Number.Symbol.number_symbols_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Symbol.number_symbols_for(:th)\n {:ok, %{\n latn: %Cldr.Number.Symbol{\n decimal: \".\",\n exponential: \"E\",\n group: \",\",\n infinity: \"∞\",\n list: \";\",\n minus_sign: \"-\",\n nan: \"NaN\",\n per_mille: \"‰\",\n percent_sign: \"%\",\n plus_sign: \"+\",\n superscripting_exponent: \"×\",\n time_separator: \":\"\n },\n thai: %Cldr.Number.Symbol{\n decimal: \".\",\n exponential: \"E\",\n group: \",\",\n infinity: \"∞\",\n list: \";\",\n minus_sign: \"-\",\n nan: \"NaN\",\n per_mille: \"‰\",\n percent_sign: \"%\",\n plus_sign: \"+\",\n superscripting_exponent: \"×\",\n time_separator: \":\"\n }\n }}","ref":"Plausible.Cldr.Number.Symbol.html#number_symbols_for/1-example","title":"Example: - Plausible.Cldr.Number.Symbol.number_symbols_for/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Symbol.html#number_symbols_for/2","title":"Plausible.Cldr.Number.Symbol.number_symbols_for/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html","title":"Plausible.Cldr.Number.System","type":"module"},{"doc":"Returns the actual number system from a number system type.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by ``Cldr.Locale.new!/2``\n\n* `system_name` is any number system name returned by\n `Cldr.known_number_systems/0` or a number system type\n returned by `Cldr.known_number_system_types/0`\n\nThis function will decode a number system type into the actual\nnumber system. If the number system provided can't be decoded\nit is returned as is.","ref":"Plausible.Cldr.Number.System.html#number_system_for/2","title":"Plausible.Cldr.Number.System.number_system_for/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.number_system_for \"th\", :latn\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Plausible.Cldr.Number.System.number_system_for \"en\", :default\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Plausible.Cldr.Number.System.number_system_for \"he\", :traditional\n {:ok, %{rules: \"hebrew\", type: :algorithmic}}\n\n iex> Plausible.Cldr.Number.System.number_system_for \"en\", :native\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Plausible.Cldr.Number.System.number_system_for \"en\", :finance\n {\n :error,\n {Cldr.UnknownNumberSystemError,\n \"The number system :finance is unknown for the locale named :en. Valid number systems are %{default: :latn, native: :latn}\"}\n }","ref":"Plausible.Cldr.Number.System.html#number_system_for/2-examples","title":"Examples - Plausible.Cldr.Number.System.number_system_for/2","type":"function"},{"doc":"Returns the number system from a language tag or\nlocale name.","ref":"Plausible.Cldr.Number.System.html#number_system_from_locale/1","title":"Plausible.Cldr.Number.System.number_system_from_locale/1","type":"function"},{"doc":"* `locale` is any language tag returned be `Cldr.Locale.new/2`\n or a locale name in the list returned by `Cldr.known_locale_names/1`","ref":"Plausible.Cldr.Number.System.html#number_system_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Number.System.number_system_from_locale/1","type":"function"},{"doc":"* A number system name as an atom","ref":"Plausible.Cldr.Number.System.html#number_system_from_locale/1-returns","title":"Returns - Plausible.Cldr.Number.System.number_system_from_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.number_system_from_locale \"en-US-u-nu-thai\"\n :thai\n\n iex> Plausible.Cldr.Number.System.number_system_from_locale \"en-US\"\n :latn","ref":"Plausible.Cldr.Number.System.html#number_system_from_locale/1-examples","title":"Examples - Plausible.Cldr.Number.System.number_system_from_locale/1","type":"function"},{"doc":"Returns the number systems available for a locale\nor `{:error, message}` if the locale is not known.\n\n* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Number.System.html#number_system_names_for/1","title":"Plausible.Cldr.Number.System.number_system_names_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.number_system_names_for \"en\"\n {:ok, [:latn]}\n\n iex> Plausible.Cldr.Number.System.number_system_names_for \"zz\"\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Plausible.Cldr.Number.System.html#number_system_names_for/1-examples","title":"Examples - Plausible.Cldr.Number.System.number_system_names_for/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html#number_system_names_for!/1","title":"Plausible.Cldr.Number.System.number_system_names_for!/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html#number_system_types_for/1","title":"Plausible.Cldr.Number.System.number_system_types_for/1","type":"function"},{"doc":"Returns the number systems available for a locale\nor `{:error, message}` if the locale is not known.\n\n* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Number.System.html#number_systems_for/1","title":"Plausible.Cldr.Number.System.number_systems_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.number_systems_for \"en\"\n {:ok, %{default: :latn, native: :latn}}\n\n iex> Plausible.Cldr.Number.System.number_systems_for \"th\"\n {:ok, %{default: :latn, native: :thai}}\n\n iex> Plausible.Cldr.Number.System.number_systems_for \"zz\"\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Plausible.Cldr.Number.System.html#number_systems_for/1-examples","title":"Examples - Plausible.Cldr.Number.System.number_systems_for/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html#number_systems_for!/1","title":"Plausible.Cldr.Number.System.number_systems_for!/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html#number_systems_like/2","title":"Plausible.Cldr.Number.System.number_systems_like/2","type":"function"},{"doc":"Returns a number system name for a given locale and number system reference.\n\n* `system_name` is any number system name returned by\n `Plausible.Cldr.known_number_systems/0` or a number system type\n returned by `Plausible.Cldr.known_number_system_types/0`\n\n* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`\n\nNumber systems can be references in one of two ways:\n\n* As a number system type such as :default, :native, :traditional and\n :finance. This allows references to a number system for a locale in a\n consistent fashion for a given use\n\n* WIth the number system name directly, such as :latn, :arab or any of the\n other 70 or so\n\nThis function dereferences the supplied `system_name` and returns the\nactual system name.","ref":"Plausible.Cldr.Number.System.html#system_name_from/2","title":"Plausible.Cldr.Number.System.system_name_from/2","type":"function"},{"doc":"ex> Plausible.Cldr.Number.System.system_name_from(:default, \"en\")\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.System.system_name_from(\"latn\", \"en\")\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.System.system_name_from(:native, \"en\")\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.System.system_name_from(:nope, \"en\")\n {\n :error,\n {Cldr.UnknownNumberSystemError, \"The number system :nope is unknown\"}\n }\n\nNote that return value is not guaranteed to be a valid\nnumber system for the given locale as demonstrated in the third example.","ref":"Plausible.Cldr.Number.System.html#system_name_from/2-examples","title":"Examples - Plausible.Cldr.Number.System.system_name_from/2","type":"function"},{"doc":"Converts a number into the representation of\na non-latin number system.\n\nThis function converts numbers to a known\nnumber system only, it does not provide number\nformatting.\n\n* `number` is a `float`, `integer` or `Decimal`\n\n* `system_name` is any number system name returned by\n `Cldr.known_number_systems/0` or a number system type\n returned by `Cldr.known_number_system_types/0`\n\nThere are two types of number systems in CLDR:\n\n* `:numeric` in which the number system defines\n a direct mapping between the latin digits `0..9`\n into a the number system equivalent. In this case,\n` to_system/2` invokes `Cldr.Number.Transliterate.transliterate_digits/3`\n for the given number.\n\n* `:algorithmic` in which the number system\n does not have the same structure as the `:latn`\n number system and therefore the conversion is\n done algorithmically. For CLDR the algorithm\n is implemented through `Cldr.Rbnf` rulesets.\n These rulesets are considered by CLDR to be\n less rigorous than the `:numeric` number systems\n and caution and testing for a specific use case\n is recommended.","ref":"Plausible.Cldr.Number.System.html#to_system/2","title":"Plausible.Cldr.Number.System.to_system/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.to_system 123456, :hebr\n {:ok, \"קכ״ג׳תנ״ו\"}\n\n iex> Plausible.Cldr.Number.System.to_system 123, :hans\n {:ok, \"一百二十三\"}\n\n iex> Plausible.Cldr.Number.System.to_system 123, :hant\n {:ok, \"一百二十三\"}\n\n iex> Plausible.Cldr.Number.System.to_system 123, :hansfin\n {:ok, \"壹佰贰拾叁\"}","ref":"Plausible.Cldr.Number.System.html#to_system/2-examples","title":"Examples - Plausible.Cldr.Number.System.to_system/2","type":"function"},{"doc":"Converts a number into the representation of\na non-latin number system. Returns a converted\nstring or raises on error.\n\n* `number` is a `float`, `integer` or `Decimal`\n\n* `system_name` is any number system name returned by\n `Plausible.Cldr.known_number_systems/0` or a number system type\n returned by `Plausible.Cldr.known_number_system_types/0`\n\nSee `Plausible.Cldr.Number.System.to_system/2` for further\ninformation.","ref":"Plausible.Cldr.Number.System.html#to_system!/2","title":"Plausible.Cldr.Number.System.to_system!/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.to_system! 123, :hans\n \"一百二十三\"\n\n iex> Plausible.Cldr.Number.System.to_system! 123, :hant\n \"一百二十三\"\n\n iex> Plausible.Cldr.Number.System.to_system! 123, :hansfin\n \"壹佰贰拾叁\"","ref":"Plausible.Cldr.Number.System.html#to_system!/2-examples","title":"Examples - Plausible.Cldr.Number.System.to_system!/2","type":"function"},{"doc":"Transliteration for digits and separators.\n\nTransliterating a string is an expensive business. First the string has to\nbe exploded into its component graphemes. Then for each grapheme we have\nto map to the equivalent in the other `{locale, number_system}`. Then we\nhave to reassemble the string.\n\nEffort is made to short circuit where possible. Transliteration is not\nrequired for any `{locale, number_system}` that is the same as `{\"en\",\n\"latn\"}` since the implementation uses this combination for the placeholders during\nformatting already. When short circuiting is possible (typically the en-*\nlocales with \"latn\" number_system - the total number of short circuited\nlocales is 211 of the 537 in CLDR) the overall number formatting is twice as\nfast than when formal transliteration is required.\n\n#","ref":"Plausible.Cldr.Number.Transliterate.html","title":"Plausible.Cldr.Number.Transliterate","type":"module"},{"doc":"This module includes `Cldr.Number.Transliterate.transliterate_digits/3` which transliterates\ndigits between number systems. For example from :arabic to :latn. Since generating a\ntransliteration map is slow, pairs of transliterations can be configured so that the\ntransliteration map is created at compile time and therefore speeding up transliteration at\nrun time.\n\nTo configure these transliteration pairs, add the to the `use Cldr` configuration\nin a backend module:\n\n defmodule MyApp.Cldr do\n use Cldr,\n locale: [\"en\", \"fr\", \"th\"],\n default_locale: \"en\",\n precompile_transliterations: [{:latn, :thai}, {:arab, :thai}]\n end\n\nWhere each tuple in the list configures one transliteration map. In this example, two maps are\nconfigured: from `:latn` to `:thai` and from `:arab` to `:thai`.\n\nA list of configurable number systems is returned by `Cldr.Number.System.systems_with_digits/0`.\n\nIf a transliteration is requested between two number pairs that have not been configured for\nprecompilation, a warning is logged.","ref":"Plausible.Cldr.Number.Transliterate.html#module-configuring-precompilation-of-digit-transliterations","title":"Configuring precompilation of digit transliterations - Plausible.Cldr.Number.Transliterate","type":"module"},{"doc":"Transliterates from latin digits to another number system's digits.\n\nTransliterates the latin digits 0..9 to their equivalents in\nanother number system. Also transliterates the decimal and grouping\nseparators as well as the plus, minus and exponent symbols. Any other character\nin the string will be returned \"as is\".","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate/3","title":"Plausible.Cldr.Number.Transliterate.transliterate/3","type":"function"},{"doc":"* `sequence` is the string to be transliterated.\n\n* `locale` is any known locale, defaulting to `Plausible.Cldr.get_locale/0`.\n\n* `number_system` is any known number system. If expressed as a `string` it\n is the actual name of a known number system. If epressed as an `atom` it is\n used as a key to look up a number system for the locale (the usual keys are\n `:default` and `:native` but :traditional and :finance are also part of the\n standard). See `Plausible.Cldr.Number.System.number_systems_for/1` for a locale to\n see what number system types are defined. The default is `:default`.\n\nFor available number systems see `Cldr.Number.System.number_systems/0`\nand `Plausible.Cldr.Number.System.number_systems_for/1`. Also see\n`Plausible.Cldr.Number.Symbol.number_symbols_for/1`.","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate/3-arguments","title":"Arguments - Plausible.Cldr.Number.Transliterate.transliterate/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123556\")\n \"123556\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123,556.000\", \"fr\", :default)\n \"123 556,000\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", :default)\n \"123556\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", \"thai\")\n \"๑๒๓๕๕๖\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", :native)\n \"๑๒๓๕๕๖\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"Some number is: 123556\", \"th\", \"thai\")\n \"Some number is: ๑๒๓๕๕๖\"","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate/3-examples","title":"Examples - Plausible.Cldr.Number.Transliterate.transliterate/3","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate!/3","title":"Plausible.Cldr.Number.Transliterate.transliterate!/3","type":"function"},{"doc":"Transliterates digits from one number system to another number system\n\n* `digits` is binary representation of a number\n\n* `from_system` and `to_system` are number system names in atom form. See\n`Cldr.Number.System.systems_with_digits/0` for available number systems.","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate_digits/3","title":"Plausible.Cldr.Number.Transliterate.transliterate_digits/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Transliterate.transliterate_digits \"٠١٢٣٤٥٦٧٨٩\", :arab, :latn\n \"0123456789\"","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate_digits/3-example","title":"Example - Plausible.Cldr.Number.Transliterate.transliterate_digits/3","type":"function"},{"doc":"Functions to implement the number system rule-based-number-format rules of CLDR.\n\nThese rules are defined only on the \"und\" locale and represent specialised\nnumber formatting.\n\nThe standard public API for RBNF is via the `Cldr.Number.to_string/2` function.\n\nThe functions on this module are defined at compile time based upon the RBNF rules\ndefined in the Unicode CLDR data repository. Available rules are identified by:\n\n iex> Plausible.Cldr.Rbnf.NumberSystem.rule_sets(:und)\n ...> |> Enum.sort()\n [\n :armenian_lower,\n :armenian_upper,\n :cyrillic_lower,\n :ethiopic,\n :georgian,\n :greek_lower,\n :greek_upper,\n :hebrew,\n :hebrew_item,\n :roman_lower,\n :roman_upper,\n :tamil,\n :zz_default\n ]\n\nA rule can then be invoked on an available rule_set. For example\n\n iex> Plausible.Cldr.Rbnf.NumberSystem.roman_upper(123, :und)\n \"CXXIII\"\n\nThis particular call is equivalent to the call through the public API of:\n\n iex> Plausible.Cldr.Number.to_string(123, format: :roman)\n {:ok, \"CXXIII\"}","ref":"Plausible.Cldr.Rbnf.NumberSystem.html","title":"Plausible.Cldr.Rbnf.NumberSystem","type":"module"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#all_rule_sets/0","title":"Plausible.Cldr.Rbnf.NumberSystem.all_rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#armenian_lower/1","title":"Plausible.Cldr.Rbnf.NumberSystem.armenian_lower/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#armenian_lower/2","title":"Plausible.Cldr.Rbnf.NumberSystem.armenian_lower/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#armenian_upper/1","title":"Plausible.Cldr.Rbnf.NumberSystem.armenian_upper/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#armenian_upper/2","title":"Plausible.Cldr.Rbnf.NumberSystem.armenian_upper/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower/1","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_1_10/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower_1_10/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_final/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower_final/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_post/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower_post/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_thousands/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower_thousands/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic/1","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic_p1/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic_p1/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic_p2/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic_p2/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic_p3/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic_p3/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic_p/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic_p/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#georgian/1","title":"Plausible.Cldr.Rbnf.NumberSystem.georgian/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#georgian/2","title":"Plausible.Cldr.Rbnf.NumberSystem.georgian/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_lower/1","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_lower/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_lower/2","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_lower/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_numeral_majuscules/2","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_numeral_majuscules/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_numeral_minuscules/2","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_numeral_minuscules/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_upper/1","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_upper/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_upper/2","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_upper/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew/1","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_0_99/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_0_99/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_item/1","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_item/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_item/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_item/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_item_hundreds/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_item_hundreds/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_thousands/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_thousands/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#roman_lower/1","title":"Plausible.Cldr.Rbnf.NumberSystem.roman_lower/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#roman_lower/2","title":"Plausible.Cldr.Rbnf.NumberSystem.roman_lower/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#roman_upper/1","title":"Plausible.Cldr.Rbnf.NumberSystem.roman_upper/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#roman_upper/2","title":"Plausible.Cldr.Rbnf.NumberSystem.roman_upper/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#rule_sets/0","title":"Plausible.Cldr.Rbnf.NumberSystem.rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#rule_sets/1","title":"Plausible.Cldr.Rbnf.NumberSystem.rule_sets/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#tamil/1","title":"Plausible.Cldr.Rbnf.NumberSystem.tamil/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#tamil/2","title":"Plausible.Cldr.Rbnf.NumberSystem.tamil/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#tamil_thousands/2","title":"Plausible.Cldr.Rbnf.NumberSystem.tamil_thousands/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#zz_default/1","title":"Plausible.Cldr.Rbnf.NumberSystem.zz_default/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#zz_default/2","title":"Plausible.Cldr.Rbnf.NumberSystem.zz_default/2","type":"function"},{"doc":"Functions to implement the ordinal rule-based-number-format rules of CLDR.\n\nAs CLDR notes, the data is incomplete or non-existent for many languages. It\nis considered complete for English however.\n\nThe standard public API for RBNF is via the `Cldr.Number.to_string/2` function.\n\nThe functions on this module are defined at compile time based upon the RBNF rules\ndefined in the Unicode CLDR data repository. Available rules are identified by:\n\n iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets(:en)\n [:digits_ordinal]\n\n iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets(\"fr\")\n ...> |> Enum.sort()\n [\n :digits_ordinal,\n :digits_ordinal_feminine,\n :digits_ordinal_feminine_plural,\n :digits_ordinal_masculine,\n :digits_ordinal_masculine_plural\n ]\n\nA rule can then be invoked on an available rule_set. For example\n\n iex> Plausible.Cldr.Rbnf.Ordinal.digits_ordinal(123, :en)\n \"123rd\"\n\nThis call is equivalent to the call through the public API of:\n\n iex> Plausible.Cldr.Number.to_string(123, format: :ordinal)\n {:ok, \"123rd\"}","ref":"Plausible.Cldr.Rbnf.Ordinal.html","title":"Plausible.Cldr.Rbnf.Ordinal","type":"module"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Ordinal.html#all_rule_sets/0","title":"Plausible.Cldr.Rbnf.Ordinal.all_rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Ordinal.html#digits_ordinal/2","title":"Plausible.Cldr.Rbnf.Ordinal.digits_ordinal/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Ordinal.html#rule_sets/0","title":"Plausible.Cldr.Rbnf.Ordinal.rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Ordinal.html#rule_sets/1","title":"Plausible.Cldr.Rbnf.Ordinal.rule_sets/1","type":"function"},{"doc":"Functions to implement the spellout rule-based-number-format rules of CLDR.\n\nAs CLDR notes, the data is incomplete or non-existent for many languages. It\nis considered complete for English however.\n\nThe standard public API for RBNF is via the `Cldr.Number.to_string/2` function.\n\nThe functions on this module are defined at compile time based upon the RBNF rules\ndefined in the Unicode CLDR data repository. Available rules are identified by:\n\n iex> Plausible.Cldr.Rbnf.Spellout.rule_sets(\"en\")\n ...> |> Enum.sort()\n [\n :spellout_cardinal,\n :spellout_cardinal_verbose,\n :spellout_numbering,\n :spellout_numbering_verbose,\n :spellout_numbering_year,\n :spellout_ordinal,\n :spellout_ordinal_verbose\n ]\n\nA rule can then be invoked on an available rule_set. For example:\n\n iex> Plausible.Cldr.Rbnf.Spellout.spellout_ordinal(123, \"en\")\n \"one hundred twenty-third\"\n\nThis call is equivalent to the call through the public API of:\n\n iex> Plausible.Cldr.Number.to_string(123, format: :spellout)\n {:ok, \"one hundred twenty-three\"}","ref":"Plausible.Cldr.Rbnf.Spellout.html","title":"Plausible.Cldr.Rbnf.Spellout","type":"module"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#all_rule_sets/0","title":"Plausible.Cldr.Rbnf.Spellout.all_rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#and/2","title":"Plausible.Cldr.Rbnf.Spellout.and/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#and_o/2","title":"Plausible.Cldr.Rbnf.Spellout.and_o/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#commas/2","title":"Plausible.Cldr.Rbnf.Spellout.commas/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#commas_o/2","title":"Plausible.Cldr.Rbnf.Spellout.commas_o/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#r2d_year/2","title":"Plausible.Cldr.Rbnf.Spellout.r2d_year/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#rule_sets/0","title":"Plausible.Cldr.Rbnf.Spellout.rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#rule_sets/1","title":"Plausible.Cldr.Rbnf.Spellout.rule_sets/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_cardinal/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_cardinal/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_cardinal_verbose/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_cardinal_verbose/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_numbering/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_numbering/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_numbering_verbose/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_numbering_verbose/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_numbering_year/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_numbering_year/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_ordinal/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_ordinal/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_ordinal_verbose/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_ordinal_verbose/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#th/2","title":"Plausible.Cldr.Rbnf.Spellout.th/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#tieth/2","title":"Plausible.Cldr.Rbnf.Spellout.tieth/2","type":"function"},{"doc":"Event schema for when NumericIDs migration is complete","ref":"Plausible.ClickhouseEventV2.html","title":"Plausible.ClickhouseEventV2","type":"module"},{"doc":"","ref":"Plausible.ClickhouseEventV2.html#new/1","title":"Plausible.ClickhouseEventV2.new/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html","title":"Plausible.ClickhouseRepo","type":"module"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#aggregate/3","title":"Plausible.ClickhouseRepo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#aggregate/4","title":"Plausible.ClickhouseRepo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#all/2","title":"Plausible.ClickhouseRepo.all/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#checked_out?/0","title":"Plausible.ClickhouseRepo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#checkout/2","title":"Plausible.ClickhouseRepo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#child_spec/1","title":"Plausible.ClickhouseRepo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#config/0","title":"Plausible.ClickhouseRepo.config/0","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#default_options/1","title":"Plausible.ClickhouseRepo.default_options/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.ClickhouseRepo.html#disconnect_all/2","title":"Plausible.ClickhouseRepo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#exists?/2","title":"Plausible.ClickhouseRepo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get/3","title":"Plausible.ClickhouseRepo.get/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get!/3","title":"Plausible.ClickhouseRepo.get!/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get_by/3","title":"Plausible.ClickhouseRepo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get_by!/3","title":"Plausible.ClickhouseRepo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get_dynamic_repo/0","title":"Plausible.ClickhouseRepo.get_dynamic_repo/0","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.ClickhouseRepo.html#insert_stream/3","title":"Plausible.ClickhouseRepo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#load/2","title":"Plausible.ClickhouseRepo.load/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#one/2","title":"Plausible.ClickhouseRepo.one/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#one!/2","title":"Plausible.ClickhouseRepo.one!/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#parallel_tasks/1","title":"Plausible.ClickhouseRepo.parallel_tasks/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#preload/3","title":"Plausible.ClickhouseRepo.preload/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#prepare_query/3","title":"Plausible.ClickhouseRepo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#put_dynamic_repo/1","title":"Plausible.ClickhouseRepo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.ClickhouseRepo.html#query/3","title":"Plausible.ClickhouseRepo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.ClickhouseRepo.html#query!/3","title":"Plausible.ClickhouseRepo.query!/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#reload/2","title":"Plausible.ClickhouseRepo.reload/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#reload!/2","title":"Plausible.ClickhouseRepo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#start_link/1","title":"Plausible.ClickhouseRepo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#stop/1","title":"Plausible.ClickhouseRepo.stop/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#stream/2","title":"Plausible.ClickhouseRepo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.ClickhouseRepo.html#to_sql/2","title":"Plausible.ClickhouseRepo.to_sql/2","type":"function"},{"doc":"Session schema for when NumericIDs migration is complete","ref":"Plausible.ClickhouseSessionV2.html","title":"Plausible.ClickhouseSessionV2","type":"module"},{"doc":"","ref":"Plausible.ClickhouseSessionV2.html#random_uint64/0","title":"Plausible.ClickhouseSessionV2.random_uint64/0","type":"function"},{"doc":"Custom type to cast Bool as UInt8","ref":"Plausible.ClickhouseSessionV2.BoolUInt8.html","title":"Plausible.ClickhouseSessionV2.BoolUInt8","type":"module"},{"doc":"","ref":"Plausible.ClickhouseSessionV2.BoolUInt8.html#embed_as/1","title":"Plausible.ClickhouseSessionV2.BoolUInt8.embed_as/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseSessionV2.BoolUInt8.html#equal?/2","title":"Plausible.ClickhouseSessionV2.BoolUInt8.equal?/2","type":"function"},{"doc":"","ref":"Plausible.ConfigHelpers.html","title":"Plausible.ConfigHelpers","type":"module"},{"doc":"","ref":"Plausible.ConfigHelpers.html#get_int_from_path_or_env/3","title":"Plausible.ConfigHelpers.get_int_from_path_or_env/3","type":"function"},{"doc":"","ref":"Plausible.ConfigHelpers.html#get_var_from_path_or_env/3","title":"Plausible.ConfigHelpers.get_var_from_path_or_env/3","type":"function"},{"doc":"This module defines the setup for tests requiring\naccess to the application's data layer.\n\nYou may define functions here to be used as helpers in\nyour tests.\n\nFinally, if the test case interacts with the database,\nit cannot be async. For this reason, every test runs\ninside a transaction which is reset at the beginning\nof the test unless the test case is marked as async.","ref":"Plausible.DataCase.html","title":"Plausible.DataCase","type":"module"},{"doc":"Base module for coordinated Clickhouse data migrations\nrun via remote shell or otherwise (TBD).","ref":"Plausible.DataMigration.html","title":"Plausible.DataMigration","type":"module"},{"doc":"Numeric IDs migration, SQL files available at:\npriv/data_migrations/NumericIDs/sql","ref":"Plausible.DataMigration.NumericIDs.html","title":"Plausible.DataMigration.NumericIDs","type":"module"},{"doc":"","ref":"Plausible.DataMigration.NumericIDs.html#confirm/3","title":"Plausible.DataMigration.NumericIDs.confirm/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.NumericIDs.html#run/1","title":"Plausible.DataMigration.NumericIDs.run/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.NumericIDs.html#run_sql/2","title":"Plausible.DataMigration.NumericIDs.run_sql/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.NumericIDs.html#run_sql_confirm/2","title":"Plausible.DataMigration.NumericIDs.run_sql_confirm/2","type":"function"},{"doc":"Ecto.Repo for Clickhouse data migrations, to be started manually,\noutside of the main application supervision tree.","ref":"Plausible.DataMigration.Repo.html","title":"Plausible.DataMigration.Repo","type":"module"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#aggregate/3","title":"Plausible.DataMigration.Repo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#aggregate/4","title":"Plausible.DataMigration.Repo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#all/2","title":"Plausible.DataMigration.Repo.all/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#checked_out?/0","title":"Plausible.DataMigration.Repo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#checkout/2","title":"Plausible.DataMigration.Repo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#child_spec/1","title":"Plausible.DataMigration.Repo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#config/0","title":"Plausible.DataMigration.Repo.config/0","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#default_options/1","title":"Plausible.DataMigration.Repo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#delete/2","title":"Plausible.DataMigration.Repo.delete/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#delete!/2","title":"Plausible.DataMigration.Repo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#delete_all/2","title":"Plausible.DataMigration.Repo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.DataMigration.Repo.html#disconnect_all/2","title":"Plausible.DataMigration.Repo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#exists?/2","title":"Plausible.DataMigration.Repo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get/3","title":"Plausible.DataMigration.Repo.get/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get!/3","title":"Plausible.DataMigration.Repo.get!/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get_by/3","title":"Plausible.DataMigration.Repo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get_by!/3","title":"Plausible.DataMigration.Repo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get_dynamic_repo/0","title":"Plausible.DataMigration.Repo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert/2","title":"Plausible.DataMigration.Repo.insert/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert!/2","title":"Plausible.DataMigration.Repo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert_all/3","title":"Plausible.DataMigration.Repo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert_or_update/2","title":"Plausible.DataMigration.Repo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert_or_update!/2","title":"Plausible.DataMigration.Repo.insert_or_update!/2","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.DataMigration.Repo.html#insert_stream/3","title":"Plausible.DataMigration.Repo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#load/2","title":"Plausible.DataMigration.Repo.load/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#one/2","title":"Plausible.DataMigration.Repo.one/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#one!/2","title":"Plausible.DataMigration.Repo.one!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#preload/3","title":"Plausible.DataMigration.Repo.preload/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#prepare_query/3","title":"Plausible.DataMigration.Repo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#put_dynamic_repo/1","title":"Plausible.DataMigration.Repo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.DataMigration.Repo.html#query/3","title":"Plausible.DataMigration.Repo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.DataMigration.Repo.html#query!/3","title":"Plausible.DataMigration.Repo.query!/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#reload/2","title":"Plausible.DataMigration.Repo.reload/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#reload!/2","title":"Plausible.DataMigration.Repo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#start/2","title":"Plausible.DataMigration.Repo.start/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#start_link/1","title":"Plausible.DataMigration.Repo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#stop/1","title":"Plausible.DataMigration.Repo.stop/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#stream/2","title":"Plausible.DataMigration.Repo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.DataMigration.Repo.html#to_sql/2","title":"Plausible.DataMigration.Repo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#update/2","title":"Plausible.DataMigration.Repo.update/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#update!/2","title":"Plausible.DataMigration.Repo.update!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#update_all/3","title":"Plausible.DataMigration.Repo.update_all/3","type":"function"},{"doc":"A data fix migration that seeks funnels having steps\nwhose goals are equally named.\nIt then tries to rewrite the duplicate goals using the\noldest goal available. In extreme cases, e.g. when multiple\nduplicates are found for a single funnel, it will either\nreduce or completely remove the funnel.\nThis enables us to run a migration later on that will\ndelete duplicate goals and enforce goal uniqueness at the\ndatabase level via a CHECK constraint.\n\nTo run, just call the `run` function.","ref":"Plausible.DataMigration.RewriteFunnelDupes.html","title":"Plausible.DataMigration.RewriteFunnelDupes","type":"module"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#apply_change/2","title":"Plausible.DataMigration.RewriteFunnelDupes.apply_change/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#confirm/3","title":"Plausible.DataMigration.RewriteFunnelDupes.confirm/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#execute/1","title":"Plausible.DataMigration.RewriteFunnelDupes.execute/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#run/1","title":"Plausible.DataMigration.RewriteFunnelDupes.run/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#run_sql/2","title":"Plausible.DataMigration.RewriteFunnelDupes.run_sql/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#run_sql_confirm/2","title":"Plausible.DataMigration.RewriteFunnelDupes.run_sql_confirm/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#to_db_ops/1","title":"Plausible.DataMigration.RewriteFunnelDupes.to_db_ops/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#to_map/1","title":"Plausible.DataMigration.RewriteFunnelDupes.to_map/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#translate_to_db_ops/1","title":"Plausible.DataMigration.RewriteFunnelDupes.translate_to_db_ops/1","type":"function"},{"doc":"Function execution context (with arguments) to Sentry reports.","ref":"Plausible.DebugReplayInfo.html","title":"Plausible.DebugReplayInfo","type":"module"},{"doc":"","ref":"Plausible.DebugReplayInfo.html#deserialize/1","title":"Plausible.DebugReplayInfo.deserialize/1","type":"function"},{"doc":"","ref":"Plausible.DebugReplayInfo.html#include_sentry_replay_info/0","title":"Plausible.DebugReplayInfo.include_sentry_replay_info/0","type":"macro"},{"doc":"Custom type for event name. Accepts Strings and Integers and stores them as String. Returns\n cast error if any other type is provided. Accepting integers is important for 404 tracking.","ref":"Plausible.Ecto.EventName.html","title":"Plausible.Ecto.EventName","type":"module"},{"doc":"","ref":"Plausible.Ecto.EventName.html#cast/1","title":"Plausible.Ecto.EventName.cast/1","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#dump/1","title":"Plausible.Ecto.EventName.dump/1","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#embed_as/1","title":"Plausible.Ecto.EventName.embed_as/1","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#equal?/2","title":"Plausible.Ecto.EventName.equal?/2","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#load/1","title":"Plausible.Ecto.EventName.load/1","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#type/0","title":"Plausible.Ecto.EventName.type/0","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html","title":"Plausible.Event.WriteBuffer","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.Event.WriteBuffer.html#child_spec/1","title":"Plausible.Event.WriteBuffer.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html#flush/0","title":"Plausible.Event.WriteBuffer.flush/0","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html#init/1","title":"Plausible.Event.WriteBuffer.init/1","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html#insert/1","title":"Plausible.Event.WriteBuffer.insert/1","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html#start_link/1","title":"Plausible.Event.WriteBuffer.start_link/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html","title":"Plausible.Factory","type":"module"},{"doc":"","ref":"Plausible.Factory.html#api_key_factory/0","title":"Plausible.Factory.api_key_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#build/2","title":"Plausible.Factory.build/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#build_list/3","title":"Plausible.Factory.build_list/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#build_pair/2","title":"Plausible.Factory.build_pair/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#ch_session_factory/0","title":"Plausible.Factory.ch_session_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#create/1","title":"Plausible.Factory.create/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html#create/2","title":"Plausible.Factory.create/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#create_list/3","title":"Plausible.Factory.create_list/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#create_pair/2","title":"Plausible.Factory.create_pair/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#custom_domain_factory/0","title":"Plausible.Factory.custom_domain_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#enterprise_plan_factory/0","title":"Plausible.Factory.enterprise_plan_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#event_factory/0","title":"Plausible.Factory.event_factory/0","type":"function"},{"doc":"Raises a helpful error if no factory is defined.","ref":"Plausible.Factory.html#factory/1","title":"Plausible.Factory.factory/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html#goal_factory/0","title":"Plausible.Factory.goal_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#google_auth_factory/0","title":"Plausible.Factory.google_auth_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_browsers_factory/0","title":"Plausible.Factory.imported_browsers_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_devices_factory/0","title":"Plausible.Factory.imported_devices_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_entry_pages_factory/0","title":"Plausible.Factory.imported_entry_pages_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_exit_pages_factory/0","title":"Plausible.Factory.imported_exit_pages_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_locations_factory/0","title":"Plausible.Factory.imported_locations_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_operating_systems_factory/0","title":"Plausible.Factory.imported_operating_systems_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_pages_factory/0","title":"Plausible.Factory.imported_pages_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_sources_factory/0","title":"Plausible.Factory.imported_sources_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_visitors_factory/0","title":"Plausible.Factory.imported_visitors_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert/1","title":"Plausible.Factory.insert/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert/2","title":"Plausible.Factory.insert/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert/3","title":"Plausible.Factory.insert/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert_list/3","title":"Plausible.Factory.insert_list/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert_list/4","title":"Plausible.Factory.insert_list/4","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert_pair/2","title":"Plausible.Factory.insert_pair/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert_pair/3","title":"Plausible.Factory.insert_pair/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#invitation_factory/0","title":"Plausible.Factory.invitation_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#monthly_report_factory/0","title":"Plausible.Factory.monthly_report_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#pageview_factory/0","title":"Plausible.Factory.pageview_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#params_for/2","title":"Plausible.Factory.params_for/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#params_with_assocs/2","title":"Plausible.Factory.params_with_assocs/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#shared_link_factory/0","title":"Plausible.Factory.shared_link_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#site_factory/0","title":"Plausible.Factory.site_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#site_membership_factory/0","title":"Plausible.Factory.site_membership_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#spike_notification_factory/0","title":"Plausible.Factory.spike_notification_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#string_params_for/2","title":"Plausible.Factory.string_params_for/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#string_params_with_assocs/2","title":"Plausible.Factory.string_params_with_assocs/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#subscription_factory/0","title":"Plausible.Factory.subscription_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#user_factory/1","title":"Plausible.Factory.user_factory/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html#weekly_report_factory/0","title":"Plausible.Factory.weekly_report_factory/0","type":"function"},{"doc":"A funnel is a marketing term used to capture and describe the journey\nthat users go through, from initial step to conversion.\nA funnel consists of several steps (here: 2..8).\n\nThis module defines the database schema for storing funnels\nand changeset helpers for enumerating the steps within.\n\nEach step references a goal (either a Custom Event or Visit)\n- see: `Plausible.Goal`.","ref":"Plausible.Funnel.html","title":"Plausible.Funnel","type":"module"},{"doc":"","ref":"Plausible.Funnel.html#changeset/2","title":"Plausible.Funnel.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Funnel.html#max_steps/0","title":"Plausible.Funnel.max_steps/0","type":"macro"},{"doc":"","ref":"Plausible.Funnel.html#min_steps/0","title":"Plausible.Funnel.min_steps/0","type":"macro"},{"doc":"","ref":"Plausible.Funnel.html#put_step_orders/1","title":"Plausible.Funnel.put_step_orders/1","type":"function"},{"doc":"","ref":"Plausible.Funnel.html#t:t/0","title":"Plausible.Funnel.t/0","type":"type"},{"doc":"This module defines the database schema for a single Funnel step.\nSee: `Plausible.Funnel` for more information.","ref":"Plausible.Funnel.Step.html","title":"Plausible.Funnel.Step","type":"module"},{"doc":"","ref":"Plausible.Funnel.Step.html#changeset/2","title":"Plausible.Funnel.Step.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Funnel.Step.html#t:t/0","title":"Plausible.Funnel.Step.t/0","type":"type"},{"doc":"This module implements contextual Funnel interface, allowing listing,\ncreating and deleting funnel definitions.\n\nFor brief explanation of what a Funnel is, please see `Plausible.Funnel` schema.\nSee `Plausible.Stats.Funnel` for the evaluation logic.","ref":"Plausible.Funnels.html","title":"Plausible.Funnels","type":"module"},{"doc":"","ref":"Plausible.Funnels.html#create/3","title":"Plausible.Funnels.create/3","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#create_changeset/3","title":"Plausible.Funnels.create_changeset/3","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#delete/2","title":"Plausible.Funnels.delete/2","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#ephemeral_definition/3","title":"Plausible.Funnels.ephemeral_definition/3","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#get/2","title":"Plausible.Funnels.get/2","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#list/1","title":"Plausible.Funnels.list/1","type":"function"},{"doc":"This module provides an API for fetching IP geolocation.","ref":"Plausible.Geo.html","title":"Plausible.Geo","type":"module"},{"doc":"Waits for the database to start after calling `load_db/1` with the async option.","ref":"Plausible.Geo.html#await_loader/0","title":"Plausible.Geo.await_loader/0","type":"function"},{"doc":"Returns geodatabase type.\n\nUsed for deciding whether to show the DB-IP disclaimer or not.","ref":"Plausible.Geo.html#database_type/0","title":"Plausible.Geo.database_type/0","type":"function"},{"doc":"In the case of a DB-IP database:\n\n iex> database_type()\n \"DBIP-City-Lite\"\n\n In the case of a MaxMind database:\n\n iex> database_type()\n \"GeoLite2-City\"","ref":"Plausible.Geo.html#database_type/0-examples","title":"Examples - Plausible.Geo.database_type/0","type":"function"},{"doc":"Starts the geodatabase loading process. Two modes are supported: local file\nand MaxMind license key.","ref":"Plausible.Geo.html#load_db/1","title":"Plausible.Geo.load_db/1","type":"function"},{"doc":"* `:path` - the path to the .mmdb database local file. When present,\n `:license_key` and `:edition` are not required.\n\n * `:license_key` - the [license key](https://support.maxmind.com/hc/en-us/articles/4407111582235-Generate-a-License-Key)\n from MaxMind to authenticate requests to MaxMind.\n\n * `:edition` - the name of the MaxMind database to be downloaded from MaxMind\n servers. Defaults to `GeoLite2-City`.\n\n * `:async` - when used, configures the database loading to run\n asynchronously.","ref":"Plausible.Geo.html#load_db/1-options","title":"Options - Plausible.Geo.load_db/1","type":"function"},{"doc":"Loading from a local file:\n\n iex> load_db(path: \"/etc/plausible/dbip-city.mmdb\")\n :ok\n\n Downloading a MaxMind DB (this license key is no longer active):\n\n iex> load_db(license_key: \"LNpsJCCKPis6XvBP\", edition: \"GeoLite2-City\", async: true)\n :ok","ref":"Plausible.Geo.html#load_db/1-examples","title":"Examples - Plausible.Geo.load_db/1","type":"function"},{"doc":"Looks up geo info about an IP address.","ref":"Plausible.Geo.html#lookup/1","title":"Plausible.Geo.lookup/1","type":"function"},{"doc":"iex> lookup(\"8.7.6.5\")\n %{\n \"city\" => %{\n \"geoname_id\" => 5349755,\n \"names\" => %{\n \"de\" => \"Fontana\",\n \"en\" => \"Fontana\",\n \"ja\" => \"フォンタナ\",\n \"ru\" => \"Фонтана\"\n }\n },\n \"continent\" => %{\n \"code\" => \"NA\",\n \"geoname_id\" => 6255149,\n \"names\" => %{\n \"de\" => \"Nordamerika\",\n \"en\" => \"North America\",\n \"es\" => \"Norteamérica\",\n \"fr\" => \"Amérique du Nord\",\n \"ja\" => \"北アメリカ\",\n \"pt-BR\" => \"América do Norte\",\n \"ru\" => \"Северная Америка\",\n \"zh-CN\" => \"北美洲\"\n }\n },\n \"country\" => %{\n \"geoname_id\" => 6252001,\n \"iso_code\" => \"US\",\n \"names\" => %{\n \"de\" => \"Vereinigte Staaten\",\n \"en\" => \"United States\",\n \"es\" => \"Estados Unidos\",\n \"fr\" => \"États Unis\",\n \"ja\" => \"アメリカ\",\n \"pt-BR\" => \"EUA\",\n \"ru\" => \"США\",\n \"zh-CN\" => \"美国\"\n }\n },\n \"location\" => %{\n \"accuracy_radius\" => 50,\n \"latitude\" => 34.1211,\n \"longitude\" => -117.4362,\n \"metro_code\" => 803,\n \"time_zone\" => \"America/Los_Angeles\"\n },\n \"postal\" => %{\"code\" => \"92336\"},\n \"registered_country\" => %{\n \"geoname_id\" => 6252001,\n \"iso_code\" => \"US\",\n \"names\" => %{\n \"de\" => \"Vereinigte Staaten\",\n \"en\" => \"United States\",\n \"es\" => \"Estados Unidos\",\n \"fr\" => \"États Unis\",\n \"ja\" => \"アメリカ\",\n \"pt-BR\" => \"EUA\",\n \"ru\" => \"США\",\n \"zh-CN\" => \"美国\"\n }\n },\n \"subdivisions\" => [\n %{\n \"geoname_id\" => 5332921,\n \"iso_code\" => \"CA\",\n \"names\" => %{\n \"de\" => \"Kalifornien\",\n \"en\" => \"California\",\n \"es\" => \"California\",\n \"fr\" => \"Californie\",\n \"ja\" => \"カリフォルニア州\",\n \"pt-BR\" => \"Califórnia\",\n \"ru\" => \"Калифорния\",\n \"zh-CN\" => \"加州\"\n }\n }\n ]\n }","ref":"Plausible.Geo.html#lookup/1-examples","title":"Examples - Plausible.Geo.lookup/1","type":"function"},{"doc":"","ref":"Plausible.Goal.html","title":"Plausible.Goal","type":"module"},{"doc":"","ref":"Plausible.Goal.html#changeset/2","title":"Plausible.Goal.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Goal.html#currency_options/0","title":"Plausible.Goal.currency_options/0","type":"function"},{"doc":"","ref":"Plausible.Goal.html#revenue?/1","title":"Plausible.Goal.revenue?/1","type":"function"},{"doc":"","ref":"Plausible.Goal.html#valid_currencies/0","title":"Plausible.Goal.valid_currencies/0","type":"function"},{"doc":"","ref":"Plausible.Goal.html#t:t/0","title":"Plausible.Goal.t/0","type":"type"},{"doc":"","ref":"Plausible.Goals.html","title":"Plausible.Goals","type":"module"},{"doc":"","ref":"Plausible.Goals.html#count/1","title":"Plausible.Goals.count/1","type":"function"},{"doc":"Creates a Goal for a site.\n\nIf the created goal is a revenue goal, it sets site.updated_at to be\nrefreshed by the sites cache, as revenue goals are used during ingestion.","ref":"Plausible.Goals.html#create/3","title":"Plausible.Goals.create/3","type":"function"},{"doc":"If a goal belongs to funnel(s), we need to inspect their number of steps.\n\nIf it exceeds the minimum allowed (defined via `Plausible.Funnel.min_steps/0`),\nthe funnel will be reduced (i.e. a step associated with the goal to be deleted\nis removed), so that the minimum number of steps is preserved. This is done\nimplicitly, by postgres, as per on_delete: :delete_all.\n\nOtherwise, for associated funnel(s) consisting of minimum number steps only,\nfunnel record(s) are removed completely along with the targeted goal.","ref":"Plausible.Goals.html#delete/2","title":"Plausible.Goals.delete/2","type":"function"},{"doc":"","ref":"Plausible.Goals.html#find_or_create/2","title":"Plausible.Goals.find_or_create/2","type":"function"},{"doc":"","ref":"Plausible.Goals.html#for_site/2","title":"Plausible.Goals.for_site/2","type":"function"},{"doc":"","ref":"Plausible.Goals.html#for_site_query/2","title":"Plausible.Goals.for_site_query/2","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html","title":"Plausible.Google.Api","type":"module"},{"doc":"","ref":"Plausible.Google.Api.html#fetch_and_persist/3","title":"Plausible.Google.Api.fetch_and_persist/3","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#fetch_stats/3","title":"Plausible.Google.Api.fetch_stats/3","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#fetch_verified_properties/1","title":"Plausible.Google.Api.fetch_verified_properties/1","type":"function"},{"doc":"Returns a single Google Analytics view if the user has access to it.","ref":"Plausible.Google.Api.html#get_view/2","title":"Plausible.Google.Api.get_view/2","type":"function"},{"doc":"Imports stats from a Google Analytics UA view to a Plausible site.\n\nThis function fetches Google Analytics reports in batches of 7500 per\nrequest. The batches are then buffered to Clickhouse by the\n`Plausible.Google.Buffer` process.\n\nRequests to Google Analytics can fail, and are retried at most\n5 times with an exponential backoff. Returns `:ok` when\nimporting has finished or `{:error, term()}` when a request to GA failed too \nmany times.\n\nUseful links:\n\n- [Feature documentation](https://plausible.io/docs/google-analytics-import)\n- [GA API reference](https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet#ReportRequest)\n- [GA Dimensions reference](https://ga-dev-tools.web.app/dimensions-metrics-explorer)","ref":"Plausible.Google.Api.html#import_analytics/4","title":"Plausible.Google.Api.import_analytics/4","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#import_authorize_url/2","title":"Plausible.Google.Api.import_authorize_url/2","type":"function"},{"doc":"Lists Google Analytics views grouped by hostname.","ref":"Plausible.Google.Api.html#list_views/1","title":"Plausible.Google.Api.list_views/1","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#search_console_authorize_url/2","title":"Plausible.Google.Api.search_console_authorize_url/2","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#t:google_analytics_view/0","title":"Plausible.Google.Api.google_analytics_view/0","type":"type"},{"doc":"","ref":"Plausible.Google.Api.html#t:import_auth/0","title":"Plausible.Google.Api.import_auth/0","type":"type"},{"doc":"","ref":"Plausible.Google.Api.Mock.html","title":"Plausible.Google.Api.Mock","type":"module"},{"doc":"","ref":"Plausible.Google.Api.Mock.html#fetch_stats/3","title":"Plausible.Google.Api.Mock.fetch_stats/3","type":"function"},{"doc":"This GenServer inserts records into Clickhouse `imported_*` tables. Multiple buffers are\nautomatically created for each table. Records are flushed when the table buffer reaches the\nmaximum size, defined by `max_buffer_size/0`.","ref":"Plausible.Google.Buffer.html","title":"Plausible.Google.Buffer","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.Google.Buffer.html#child_spec/1","title":"Plausible.Google.Buffer.child_spec/1","type":"function"},{"doc":"Flushes all table buffers to Clickhouse.","ref":"Plausible.Google.Buffer.html#flush/2","title":"Plausible.Google.Buffer.flush/2","type":"function"},{"doc":"","ref":"Plausible.Google.Buffer.html#handle_continue/2","title":"Plausible.Google.Buffer.handle_continue/2","type":"function"},{"doc":"","ref":"Plausible.Google.Buffer.html#init/1","title":"Plausible.Google.Buffer.init/1","type":"function"},{"doc":"Puts the given records into the table buffer.","ref":"Plausible.Google.Buffer.html#insert_many/3","title":"Plausible.Google.Buffer.insert_many/3","type":"function"},{"doc":"Returns the total count of items in the given table buffer.","ref":"Plausible.Google.Buffer.html#size/2","title":"Plausible.Google.Buffer.size/2","type":"function"},{"doc":"","ref":"Plausible.Google.Buffer.html#start_link/0","title":"Plausible.Google.Buffer.start_link/0","type":"function"},{"doc":"","ref":"Plausible.Google.Buffer.html#stop/1","title":"Plausible.Google.Buffer.stop/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html","title":"Plausible.Google.HTTP","type":"module"},{"doc":"","ref":"Plausible.Google.HTTP.html#fetch_access_token/1","title":"Plausible.Google.HTTP.fetch_access_token/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#get_analytics_start_date/2","title":"Plausible.Google.HTTP.get_analytics_start_date/2","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#get_report/1","title":"Plausible.Google.HTTP.get_report/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#list_sites/1","title":"Plausible.Google.HTTP.list_sites/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#list_stats/5","title":"Plausible.Google.HTTP.list_stats/5","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#list_views_for_user/1","title":"Plausible.Google.HTTP.list_views_for_user/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#refresh_auth_token/1","title":"Plausible.Google.HTTP.refresh_auth_token/1","type":"function"},{"doc":"","ref":"Plausible.Google.ReportRequest.html","title":"Plausible.Google.ReportRequest","type":"module"},{"doc":"","ref":"Plausible.Google.ReportRequest.html#full_report/0","title":"Plausible.Google.ReportRequest.full_report/0","type":"function"},{"doc":"","ref":"Plausible.Google.ReportRequest.html#t:t/0","title":"Plausible.Google.ReportRequest.t/0","type":"type"},{"doc":"HTTP Client built on top of Finch.\n\nBy default, request parameters are json-encoded.\n\nIf a raw binary value is supplied, no encoding is performed.\nIf x-www-form-urlencoded content-type is set in headers,\nURL encoding is invoked.","ref":"Plausible.HTTPClient.html","title":"Plausible.HTTPClient","type":"module"},{"doc":"Make a GET request","ref":"Plausible.HTTPClient.html#get/3","title":"Plausible.HTTPClient.get/3","type":"function"},{"doc":"","ref":"Plausible.HTTPClient.html#impl/0","title":"Plausible.HTTPClient.impl/0","type":"function"},{"doc":"Make a POST request","ref":"Plausible.HTTPClient.html#post/4","title":"Plausible.HTTPClient.post/4","type":"function"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html","title":"Plausible.HTTPClient.Interface","type":"behaviour"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:get/1","title":"Plausible.HTTPClient.Interface.get/1","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:get/2","title":"Plausible.HTTPClient.Interface.get/2","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:get/3","title":"Plausible.HTTPClient.Interface.get/3","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:post/3","title":"Plausible.HTTPClient.Interface.post/3","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:post/4","title":"Plausible.HTTPClient.Interface.post/4","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:finch_request_opts/0","title":"Plausible.HTTPClient.Interface.finch_request_opts/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:headers/0","title":"Plausible.HTTPClient.Interface.headers/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:params/0","title":"Plausible.HTTPClient.Interface.params/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:response/0","title":"Plausible.HTTPClient.Interface.response/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:url/0","title":"Plausible.HTTPClient.Interface.url/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Non200Error.html","title":"Plausible.HTTPClient.Non200Error","type":"module"},{"doc":"","ref":"Plausible.HTTPClient.Non200Error.html#new/1","title":"Plausible.HTTPClient.Non200Error.new/1","type":"function"},{"doc":"","ref":"Plausible.HTTPClient.Non200Error.html#t:t/0","title":"Plausible.HTTPClient.Non200Error.t/0","type":"type"},{"doc":"A dedicated repo for import related mutations","ref":"Plausible.ImportDeletionRepo.html","title":"Plausible.ImportDeletionRepo","type":"module"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#aggregate/3","title":"Plausible.ImportDeletionRepo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#aggregate/4","title":"Plausible.ImportDeletionRepo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#all/2","title":"Plausible.ImportDeletionRepo.all/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#checked_out?/0","title":"Plausible.ImportDeletionRepo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#checkout/2","title":"Plausible.ImportDeletionRepo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#child_spec/1","title":"Plausible.ImportDeletionRepo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#config/0","title":"Plausible.ImportDeletionRepo.config/0","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#default_options/1","title":"Plausible.ImportDeletionRepo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#delete/2","title":"Plausible.ImportDeletionRepo.delete/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#delete!/2","title":"Plausible.ImportDeletionRepo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#delete_all/2","title":"Plausible.ImportDeletionRepo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.ImportDeletionRepo.html#disconnect_all/2","title":"Plausible.ImportDeletionRepo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#exists?/2","title":"Plausible.ImportDeletionRepo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get/3","title":"Plausible.ImportDeletionRepo.get/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get!/3","title":"Plausible.ImportDeletionRepo.get!/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get_by/3","title":"Plausible.ImportDeletionRepo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get_by!/3","title":"Plausible.ImportDeletionRepo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get_dynamic_repo/0","title":"Plausible.ImportDeletionRepo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert/2","title":"Plausible.ImportDeletionRepo.insert/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert!/2","title":"Plausible.ImportDeletionRepo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert_all/3","title":"Plausible.ImportDeletionRepo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert_or_update/2","title":"Plausible.ImportDeletionRepo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert_or_update!/2","title":"Plausible.ImportDeletionRepo.insert_or_update!/2","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.ImportDeletionRepo.html#insert_stream/3","title":"Plausible.ImportDeletionRepo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#load/2","title":"Plausible.ImportDeletionRepo.load/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#one/2","title":"Plausible.ImportDeletionRepo.one/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#one!/2","title":"Plausible.ImportDeletionRepo.one!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#preload/3","title":"Plausible.ImportDeletionRepo.preload/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#prepare_query/3","title":"Plausible.ImportDeletionRepo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#put_dynamic_repo/1","title":"Plausible.ImportDeletionRepo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.ImportDeletionRepo.html#query/3","title":"Plausible.ImportDeletionRepo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.ImportDeletionRepo.html#query!/3","title":"Plausible.ImportDeletionRepo.query!/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#reload/2","title":"Plausible.ImportDeletionRepo.reload/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#reload!/2","title":"Plausible.ImportDeletionRepo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#start_link/1","title":"Plausible.ImportDeletionRepo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#stop/1","title":"Plausible.ImportDeletionRepo.stop/1","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#stream/2","title":"Plausible.ImportDeletionRepo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.ImportDeletionRepo.html#to_sql/2","title":"Plausible.ImportDeletionRepo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#update/2","title":"Plausible.ImportDeletionRepo.update/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#update!/2","title":"Plausible.ImportDeletionRepo.update!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#update_all/3","title":"Plausible.ImportDeletionRepo.update_all/3","type":"function"},{"doc":"","ref":"Plausible.Imported.html","title":"Plausible.Imported","type":"module"},{"doc":"","ref":"Plausible.Imported.html#forget/1","title":"Plausible.Imported.forget/1","type":"function"},{"doc":"","ref":"Plausible.Imported.html#from_google_analytics/3","title":"Plausible.Imported.from_google_analytics/3","type":"function"},{"doc":"","ref":"Plausible.Imported.html#tables/0","title":"Plausible.Imported.tables/0","type":"function"},{"doc":"Write-centric Clickhouse access interface","ref":"Plausible.IngestRepo.html","title":"Plausible.IngestRepo","type":"module"},{"doc":"","ref":"Plausible.IngestRepo.html#aggregate/3","title":"Plausible.IngestRepo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#aggregate/4","title":"Plausible.IngestRepo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#all/2","title":"Plausible.IngestRepo.all/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#checked_out?/0","title":"Plausible.IngestRepo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#checkout/2","title":"Plausible.IngestRepo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#child_spec/1","title":"Plausible.IngestRepo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#config/0","title":"Plausible.IngestRepo.config/0","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#default_options/1","title":"Plausible.IngestRepo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#delete/2","title":"Plausible.IngestRepo.delete/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#delete!/2","title":"Plausible.IngestRepo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#delete_all/2","title":"Plausible.IngestRepo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.IngestRepo.html#disconnect_all/2","title":"Plausible.IngestRepo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#exists?/2","title":"Plausible.IngestRepo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get/3","title":"Plausible.IngestRepo.get/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get!/3","title":"Plausible.IngestRepo.get!/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get_by/3","title":"Plausible.IngestRepo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get_by!/3","title":"Plausible.IngestRepo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get_dynamic_repo/0","title":"Plausible.IngestRepo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert/2","title":"Plausible.IngestRepo.insert/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert!/2","title":"Plausible.IngestRepo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert_all/3","title":"Plausible.IngestRepo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert_or_update/2","title":"Plausible.IngestRepo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert_or_update!/2","title":"Plausible.IngestRepo.insert_or_update!/2","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.IngestRepo.html#insert_stream/3","title":"Plausible.IngestRepo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#load/2","title":"Plausible.IngestRepo.load/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#one/2","title":"Plausible.IngestRepo.one/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#one!/2","title":"Plausible.IngestRepo.one!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#preload/3","title":"Plausible.IngestRepo.preload/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#prepare_query/3","title":"Plausible.IngestRepo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#put_dynamic_repo/1","title":"Plausible.IngestRepo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.IngestRepo.html#query/3","title":"Plausible.IngestRepo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.IngestRepo.html#query!/3","title":"Plausible.IngestRepo.query!/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#reload/2","title":"Plausible.IngestRepo.reload/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#reload!/2","title":"Plausible.IngestRepo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#start_link/1","title":"Plausible.IngestRepo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#stop/1","title":"Plausible.IngestRepo.stop/1","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#stream/2","title":"Plausible.IngestRepo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.IngestRepo.html#to_sql/2","title":"Plausible.IngestRepo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#update/2","title":"Plausible.IngestRepo.update/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#update!/2","title":"Plausible.IngestRepo.update!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#update_all/3","title":"Plausible.IngestRepo.update_all/3","type":"function"},{"doc":"This is instrumentation necessary for keeping track of per-domain\ninternal metrics. Due to metric labels cardinality (domain x metric_name),\nthese statistics are not suitable for prometheus/grafana exposure,\nhence an internal storage is used.\n\nThe module installs `Counters.TelemetryHandler` and periodically\nflushes the internal counter aggregates via `Counters.Buffer` interface.\n\nThe underlying database schema is running `SummingMergeTree` engine.\nTo take advantage of automatic roll-ups it provides, upon dispatching the\nbuffered records to Clickhouse this module transforms each `event_timebucket`\naggregate into a 1-minute resolution.\n\nClickhouse connection is set to insert counters asynchronously every time\na pool checkout is made. Those properties are reverted once the insert is done\n(or naturally, if the connection crashes).","ref":"Plausible.Ingestion.Counters.html","title":"Plausible.Ingestion.Counters","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Counters.html#child_spec/1","title":"Plausible.Ingestion.Counters.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.html#enabled?/0","title":"Plausible.Ingestion.Counters.enabled?/0","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.html#stop/1","title":"Plausible.Ingestion.Counters.stop/1","type":"function"},{"doc":"A buffer aggregating counters for internal metrics, within 10 seconds time buckets.\n\nSee `Plausible.Ingestion.Counters` for integration.\n\nFlushing is by default possible only once the 10s bucket is complete\n(its window has moved). This is to avoid race conditions \nwhen clearing up the buffer on dequeue - because there is no atomic \"get and delete\",\nand items are buffered concurrently, there is a gap between get and delete\nin which items written may disappear otherwise.\n\n`aggregate_bucket_fn` and `flush_boundary_fn` control that semantics and\nare configurable only for test purposes.","ref":"Plausible.Ingestion.Counters.Buffer.html","title":"Plausible.Ingestion.Counters.Buffer","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#aggregate/4","title":"Plausible.Ingestion.Counters.Buffer.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#bucket_10s/1","title":"Plausible.Ingestion.Counters.Buffer.bucket_10s/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#flush/2","title":"Plausible.Ingestion.Counters.Buffer.flush/2","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#new/2","title":"Plausible.Ingestion.Counters.Buffer.new/2","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#previous_10s/1","title":"Plausible.Ingestion.Counters.Buffer.previous_10s/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#t:bucket_fn_opt/0","title":"Plausible.Ingestion.Counters.Buffer.bucket_fn_opt/0","type":"type"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#t:t/0","title":"Plausible.Ingestion.Counters.Buffer.t/0","type":"type"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#t:unix_timestamp/0","title":"Plausible.Ingestion.Counters.Buffer.unix_timestamp/0","type":"type"},{"doc":"Clickhouse schema for storing ingest counter metrics","ref":"Plausible.Ingestion.Counters.Record.html","title":"Plausible.Ingestion.Counters.Record","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Counters.Record.html#t:t/0","title":"Plausible.Ingestion.Counters.Record.t/0","type":"type"},{"doc":"Susbcribes to telemetry events emitted by `Plausible.Ingestion.Event`.\nEvery time a request derived event is either dispatched to clickhouse or dropped,\na telemetry event is emitted respectively. That event is captured here,\nits metadata is extracted and sent for internal stats aggregation via\n`Counters.Buffer` interface.","ref":"Plausible.Ingestion.Counters.TelemetryHandler.html","title":"Plausible.Ingestion.Counters.TelemetryHandler","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Counters.TelemetryHandler.html#handle_event/4","title":"Plausible.Ingestion.Counters.TelemetryHandler.handle_event/4","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.TelemetryHandler.html#install/1","title":"Plausible.Ingestion.Counters.TelemetryHandler.install/1","type":"function"},{"doc":"This module exposes the `build_and_buffer/1` function capable of\nturning %Plausible.Ingestion.Request{} into a series of events that in turn\nare uniformly either buffered in batches (to Clickhouse) or dropped\n(e.g. due to spam blocklist) from the processing pipeline.","ref":"Plausible.Ingestion.Event.html","title":"Plausible.Ingestion.Event","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Event.html#build_and_buffer/1","title":"Plausible.Ingestion.Event.build_and_buffer/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#emit_telemetry_buffered/1","title":"Plausible.Ingestion.Event.emit_telemetry_buffered/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#emit_telemetry_dropped/2","title":"Plausible.Ingestion.Event.emit_telemetry_dropped/2","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#telemetry_event_buffered/0","title":"Plausible.Ingestion.Event.telemetry_event_buffered/0","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#telemetry_event_dropped/0","title":"Plausible.Ingestion.Event.telemetry_event_dropped/0","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#t:drop_reason/0","title":"Plausible.Ingestion.Event.drop_reason/0","type":"type"},{"doc":"","ref":"Plausible.Ingestion.Event.html#t:t/0","title":"Plausible.Ingestion.Event.t/0","type":"type"},{"doc":"The %Plausible.Ingestion.Request{} struct stores all needed fields\nto create an event downstream. Pre-eliminary validation is made\nto detect user errors early.","ref":"Plausible.Ingestion.Request.html","title":"Plausible.Ingestion.Request","type":"module"},{"doc":"Builds and initially validates %Plausible.Ingestion.Request{} struct from %Plug.Conn{}.","ref":"Plausible.Ingestion.Request.html#build/2","title":"Plausible.Ingestion.Request.build/2","type":"function"},{"doc":"Removes the \"www\" part of a hostname.","ref":"Plausible.Ingestion.Request.html#sanitize_hostname/1","title":"Plausible.Ingestion.Request.sanitize_hostname/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Request.html#t:t/0","title":"Plausible.Ingestion.Request.t/0","type":"type"},{"doc":"","ref":"Plausible.Mailer.html","title":"Plausible.Mailer","type":"module"},{"doc":"","ref":"Plausible.Mailer.html#deliver/1","title":"Plausible.Mailer.deliver/1","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#deliver_later/2","title":"Plausible.Mailer.deliver_later/2","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#deliver_later!/2","title":"Plausible.Mailer.deliver_later!/2","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#deliver_now/2","title":"Plausible.Mailer.deliver_now/2","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#deliver_now!/2","title":"Plausible.Mailer.deliver_now!/2","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#send/1","title":"Plausible.Mailer.send/1","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#t:result/0","title":"Plausible.Mailer.result/0","type":"type"},{"doc":"[Custom OpenTelemetry sampler](https://hexdocs.pm/opentelemetry/readme.html#samplers)\nimplementation that ignores particular traces to reduce noise. Ingestion\nHTTP requests and queries to Oban tables are ignored, for example.","ref":"Plausible.OpenTelemetry.Sampler.html","title":"Plausible.OpenTelemetry.Sampler","type":"module"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html","title":"Plausible.PaddleApi.Mock","type":"module"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html#fetch_prices/1","title":"Plausible.PaddleApi.Mock.fetch_prices/1","type":"function"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html#get_invoices/1","title":"Plausible.PaddleApi.Mock.get_invoices/1","type":"function"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html#get_subscription/1","title":"Plausible.PaddleApi.Mock.get_subscription/1","type":"function"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html#update_subscription/2","title":"Plausible.PaddleApi.Mock.update_subscription/2","type":"function"},{"doc":"Plugins API context module for Goals.\nAll high level Goal operations should be implemented here.","ref":"Plausible.Plugins.API.Goals.html","title":"Plausible.Plugins.API.Goals","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.Goals.html#create/2","title":"Plausible.Plugins.API.Goals.create/2","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Goals.html#get/2","title":"Plausible.Plugins.API.Goals.get/2","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Goals.html#get_goals/2","title":"Plausible.Plugins.API.Goals.get_goals/2","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Goals.html#t:create_request/0","title":"Plausible.Plugins.API.Goals.create_request/0","type":"type"},{"doc":"Cursor-based pagination for the Plugins API.\nCan be moved to another namespace in case used elsewhere.","ref":"Plausible.Plugins.API.Pagination.html","title":"Plausible.Plugins.API.Pagination","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.Pagination.html#paginate/4","title":"Plausible.Plugins.API.Pagination.paginate/4","type":"function"},{"doc":"Plugins API context module for Shared Links.\nAll high level Shared Links operations should be implemented here.","ref":"Plausible.Plugins.API.SharedLinks.html","title":"Plausible.Plugins.API.SharedLinks","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.SharedLinks.html#get/2","title":"Plausible.Plugins.API.SharedLinks.get/2","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.SharedLinks.html#get_or_create/3","title":"Plausible.Plugins.API.SharedLinks.get_or_create/3","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.SharedLinks.html#get_shared_links/2","title":"Plausible.Plugins.API.SharedLinks.get_shared_links/2","type":"function"},{"doc":"Ecto schema for Plugins API Tokens.\nTokens are stored hashed and require a description.\n\nTokens are considered secret, although the Plugins API\nby nature will expose very little, if any, destructive/insecure operations.\n\nThe raw token version is meant to be presented to the user upon creation.\nIt is prefixed with a plain text identifier allowing source scanning\nfor leaked secrets.","ref":"Plausible.Plugins.API.Token.html","title":"Plausible.Plugins.API.Token","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.Token.html#generate/1","title":"Plausible.Plugins.API.Token.generate/1","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Token.html#hash/1","title":"Plausible.Plugins.API.Token.hash/1","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Token.html#insert_changeset/3","title":"Plausible.Plugins.API.Token.insert_changeset/3","type":"function"},{"doc":"Raw tokens are prefixed so that tools like\nhttps://docs.github.com/en/code-security/secret-scanning/about-secret-scanning\ncan scan repositories for accidental secret commits.","ref":"Plausible.Plugins.API.Token.html#prefix/0","title":"Plausible.Plugins.API.Token.prefix/0","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Token.html#t:t/0","title":"Plausible.Plugins.API.Token.t/0","type":"type"},{"doc":"Context module for Plugins API Tokens.\nExposes high-level operation for token-based authentication flows.","ref":"Plausible.Plugins.API.Tokens.html","title":"Plausible.Plugins.API.Tokens","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.Tokens.html#create/3","title":"Plausible.Plugins.API.Tokens.create/3","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Tokens.html#find/2","title":"Plausible.Plugins.API.Tokens.find/2","type":"function"},{"doc":"","ref":"Plausible.PromEx.html","title":"Plausible.PromEx","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.PromEx.html#child_spec/1","title":"Plausible.PromEx.child_spec/1","type":"function"},{"doc":"Custom PromEx plugin for instrumenting code within Plausible app.","ref":"Plausible.PromEx.Plugins.PlausibleMetrics.html","title":"Plausible.PromEx.Plugins.PlausibleMetrics","type":"module"},{"doc":"Add telemetry events for Cachex user agents and sessions","ref":"Plausible.PromEx.Plugins.PlausibleMetrics.html#execute_cache_metrics/0","title":"Plausible.PromEx.Plugins.PlausibleMetrics.execute_cache_metrics/0","type":"function"},{"doc":"Add telemetry events for Session and Event write buffers","ref":"Plausible.PromEx.Plugins.PlausibleMetrics.html#execute_write_buffer_metrics/0","title":"Plausible.PromEx.Plugins.PlausibleMetrics.execute_write_buffer_metrics/0","type":"function"},{"doc":"Context module for handling custom event props.","ref":"Plausible.Props.html","title":"Plausible.Props","type":"module"},{"doc":"Allows a prop key or a list of props keys to be included in ClickHouse\nqueries. Allowing prop keys does not affect ingestion, as we don't want any\ndata to be dropped or lost.","ref":"Plausible.Props.html#allow/2","title":"Plausible.Props.allow/2","type":"function"},{"doc":"","ref":"Plausible.Props.html#allow_changeset/2","title":"Plausible.Props.allow_changeset/2","type":"function"},{"doc":"Allows the 300 most frequent props keys for a specific site over\nthe past 6 months.","ref":"Plausible.Props.html#allow_existing_props/1","title":"Plausible.Props.allow_existing_props/1","type":"function"},{"doc":"Returns whether the site has configured custom props or not.","ref":"Plausible.Props.html#configured?/1","title":"Plausible.Props.configured?/1","type":"function"},{"doc":"Removes a previously allowed prop key from the allow list. This means this\nprop key won't be included in ClickHouse queries. This doesn't drop any\nClickHouse data, nor affects ingestion.","ref":"Plausible.Props.html#disallow/2","title":"Plausible.Props.disallow/2","type":"function"},{"doc":"Lists prop keys used internally.\n\nThese props should be allowed by default, and should not be displayed in the\nprops settings page. For example, `url` is a special prop key used for file\ndownloads and outbound links. It doesn't make sense to remove this prop key\nfrom the allow list, or to suggest users to add this prop key.","ref":"Plausible.Props.html#internal_keys/0","title":"Plausible.Props.internal_keys/0","type":"function"},{"doc":"","ref":"Plausible.Props.html#max_prop_key_length/0","title":"Plausible.Props.max_prop_key_length/0","type":"function"},{"doc":"","ref":"Plausible.Props.html#max_prop_value_length/0","title":"Plausible.Props.max_prop_value_length/0","type":"function"},{"doc":"","ref":"Plausible.Props.html#max_props/0","title":"Plausible.Props.max_props/0","type":"function"},{"doc":"Queries the events table to fetch the 300 most frequent prop keys\nfor a specific site over the past 6 months, excluding keys that are already\nallowed.","ref":"Plausible.Props.html#suggest_keys_to_allow/2","title":"Plausible.Props.suggest_keys_to_allow/2","type":"function"},{"doc":"","ref":"Plausible.Props.html#t:prop/0","title":"Plausible.Props.prop/0","type":"type"},{"doc":"Deletes data from a site.\n\nStats are stored on Clickhouse, and unlike other databases data deletion is\ndone asynchronously.\n\n- [Clickhouse `ALTER TABLE ... DELETE` Statement](https://clickhouse.com/docs/en/sql-reference/statements/alter/delete)\n- [Synchronicity of `ALTER` Queries](https://clickhouse.com/docs/en/sql-reference/statements/alter/#synchronicity-of-alter-queries)","ref":"Plausible.Purge.html","title":"Plausible.Purge","type":"module"},{"doc":"Deletes imported stats from Google Analytics, and clears the\n`stats_start_date` field.","ref":"Plausible.Purge.html#delete_imported_stats!/1","title":"Plausible.Purge.delete_imported_stats!/1","type":"function"},{"doc":"Move stats pointers so that no historical stats are available.","ref":"Plausible.Purge.html#delete_native_stats!/1","title":"Plausible.Purge.delete_native_stats!/1","type":"function"},{"doc":"","ref":"Plausible.Purge.html#reset!/1","title":"Plausible.Purge.reset!/1","type":"function"},{"doc":"","ref":"Plausible.Release.html","title":"Plausible.Release","type":"module"},{"doc":"","ref":"Plausible.Release.html#configure_ref_inspector/0","title":"Plausible.Release.configure_ref_inspector/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#configure_ua_inspector/0","title":"Plausible.Release.configure_ua_inspector/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#createdb/0","title":"Plausible.Release.createdb/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#migrate/0","title":"Plausible.Release.migrate/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#pending_migrations/0","title":"Plausible.Release.pending_migrations/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#rollback/0","title":"Plausible.Release.rollback/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#seed/0","title":"Plausible.Release.seed/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#selfhost?/0","title":"Plausible.Release.selfhost?/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#should_be_first_launch?/0","title":"Plausible.Release.should_be_first_launch?/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html","title":"Plausible.Repo","type":"module"},{"doc":"","ref":"Plausible.Repo.html#aggregate/3","title":"Plausible.Repo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#aggregate/4","title":"Plausible.Repo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.Repo.html#all/2","title":"Plausible.Repo.all/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#checked_out?/0","title":"Plausible.Repo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html#checkout/2","title":"Plausible.Repo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#child_spec/1","title":"Plausible.Repo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#config/0","title":"Plausible.Repo.config/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html#default_options/1","title":"Plausible.Repo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#delete/2","title":"Plausible.Repo.delete/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#delete!/2","title":"Plausible.Repo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#delete_all/2","title":"Plausible.Repo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.Repo.html#disconnect_all/2","title":"Plausible.Repo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#exists?/2","title":"Plausible.Repo.exists?/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes an EXPLAIN statement or similar\ndepending on the adapter to obtain statistics for the given query.\n\nSee `Ecto.Adapters.SQL.explain/4` for more information.","ref":"Plausible.Repo.html#explain/3","title":"Plausible.Repo.explain/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get/3","title":"Plausible.Repo.get/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get!/3","title":"Plausible.Repo.get!/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get_by/3","title":"Plausible.Repo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get_by!/3","title":"Plausible.Repo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get_dynamic_repo/0","title":"Plausible.Repo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html#in_transaction?/0","title":"Plausible.Repo.in_transaction?/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert/2","title":"Plausible.Repo.insert/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert!/2","title":"Plausible.Repo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert_all/3","title":"Plausible.Repo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert_or_update/2","title":"Plausible.Repo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert_or_update!/2","title":"Plausible.Repo.insert_or_update!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#load/2","title":"Plausible.Repo.load/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#one/2","title":"Plausible.Repo.one/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#one!/2","title":"Plausible.Repo.one!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#paginate/3","title":"Plausible.Repo.paginate/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#preload/3","title":"Plausible.Repo.preload/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#prepare_query/3","title":"Plausible.Repo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#put_dynamic_repo/1","title":"Plausible.Repo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.Repo.html#query/3","title":"Plausible.Repo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.Repo.html#query!/3","title":"Plausible.Repo.query!/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given multi-result query.\n\nSee `Ecto.Adapters.SQL.query_many/4` for more information.","ref":"Plausible.Repo.html#query_many/3","title":"Plausible.Repo.query_many/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given multi-result query.\n\nSee `Ecto.Adapters.SQL.query_many!/4` for more information.","ref":"Plausible.Repo.html#query_many!/3","title":"Plausible.Repo.query_many!/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#reload/2","title":"Plausible.Repo.reload/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#reload!/2","title":"Plausible.Repo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#rollback/1","title":"Plausible.Repo.rollback/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#start_link/1","title":"Plausible.Repo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#stop/1","title":"Plausible.Repo.stop/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#stream/2","title":"Plausible.Repo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.Repo.html#to_sql/2","title":"Plausible.Repo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#transaction/2","title":"Plausible.Repo.transaction/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#update/2","title":"Plausible.Repo.update/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#update!/2","title":"Plausible.Repo.update!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#update_all/3","title":"Plausible.Repo.update_all/3","type":"function"},{"doc":"","ref":"Plausible.Sentry.Client.html","title":"Plausible.Sentry.Client","type":"module"},{"doc":"The Sentry.HTTPClient behaviour requires a child spec to be supplied.\nIn this case we don't want Sentry to manage our Finch instances, hence it's fed\nwith a dummy module for the sake of the contract.\n\nXXX: Submit a Sentry PR making the child spec callback optional.","ref":"Plausible.Sentry.Client.html#child_spec/0","title":"Plausible.Sentry.Client.child_spec/0","type":"function"},{"doc":"","ref":"Plausible.Sentry.Client.html#post/3","title":"Plausible.Sentry.Client.post/3","type":"function"},{"doc":"Sentry callbacks for filtering and grouping events","ref":"Plausible.SentryFilter.html","title":"Plausible.SentryFilter","type":"module"},{"doc":"","ref":"Plausible.SentryFilter.html#before_send/1","title":"Plausible.SentryFilter.before_send/1","type":"function"},{"doc":"","ref":"Plausible.SentryFilter.html#exclude_exception?/2","title":"Plausible.SentryFilter.exclude_exception?/2","type":"function"},{"doc":"","ref":"Plausible.Session.CacheStore.html","title":"Plausible.Session.CacheStore","type":"module"},{"doc":"","ref":"Plausible.Session.CacheStore.html#on_event/3","title":"Plausible.Session.CacheStore.on_event/3","type":"function"},{"doc":"","ref":"Plausible.Session.Salts.html","title":"Plausible.Session.Salts","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.Session.Salts.html#child_spec/1","title":"Plausible.Session.Salts.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Session.Salts.html#fetch/0","title":"Plausible.Session.Salts.fetch/0","type":"function"},{"doc":"","ref":"Plausible.Session.Salts.html#rotate/0","title":"Plausible.Session.Salts.rotate/0","type":"function"},{"doc":"","ref":"Plausible.Session.Salts.html#start_link/1","title":"Plausible.Session.Salts.start_link/1","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html","title":"Plausible.Session.WriteBuffer","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.Session.WriteBuffer.html#child_spec/1","title":"Plausible.Session.WriteBuffer.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html#flush/0","title":"Plausible.Session.WriteBuffer.flush/0","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html#init/1","title":"Plausible.Session.WriteBuffer.init/1","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html#insert/1","title":"Plausible.Session.WriteBuffer.insert/1","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html#start_link/1","title":"Plausible.Session.WriteBuffer.start_link/1","type":"function"},{"doc":"Site schema","ref":"Plausible.Site.html","title":"Plausible.Site","type":"module"},{"doc":"","ref":"Plausible.Site.html#changeset/2","title":"Plausible.Site.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#crm_changeset/2","title":"Plausible.Site.crm_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#feature_toggle_change/3","title":"Plausible.Site.feature_toggle_change/3","type":"function"},{"doc":"","ref":"Plausible.Site.html#import_failure/1","title":"Plausible.Site.import_failure/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#import_success/1","title":"Plausible.Site.import_success/1","type":"function"},{"doc":"Returns the date of the first recorded stat in the timezone configured by the user.\nThis function does 2 transformations:\n UTC %NaiveDateTime{} -> Local %DateTime{} -> Local %Date","ref":"Plausible.Site.html#local_start_date/1","title":"Plausible.Site.local_start_date/1","type":"function"},{"doc":"iex> Plausible.Site.local_start_date(%Plausible.Site{stats_start_date: nil})\n nil\n\n iex> utc_start = ~N[2022-09-28 00:00:00]\n iex> tz = \"Europe/Helsinki\"\n iex> site = %Plausible.Site{stats_start_date: utc_start, timezone: tz}\n iex> Plausible.Site.local_start_date(site)\n ~D[2022-09-28]\n\n iex> utc_start = ~N[2022-09-28 00:00:00]\n iex> tz = \"America/Los_Angeles\"\n iex> site = %Plausible.Site{stats_start_date: utc_start, timezone: tz}\n iex> Plausible.Site.local_start_date(site)\n ~D[2022-09-27]","ref":"Plausible.Site.html#local_start_date/1-examples","title":"Examples - Plausible.Site.local_start_date/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#make_private/1","title":"Plausible.Site.make_private/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#make_public/1","title":"Plausible.Site.make_public/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#remove_imported_data/1","title":"Plausible.Site.remove_imported_data/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#set_imported_source/2","title":"Plausible.Site.set_imported_source/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#set_native_stats_start_at/2","title":"Plausible.Site.set_native_stats_start_at/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#set_stats_start_date/2","title":"Plausible.Site.set_stats_start_date/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#start_import/5","title":"Plausible.Site.start_import/5","type":"function"},{"doc":"","ref":"Plausible.Site.html#tz_offset/2","title":"Plausible.Site.tz_offset/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#update_changeset/3","title":"Plausible.Site.update_changeset/3","type":"function"},{"doc":"","ref":"Plausible.Site.html#t:t/0","title":"Plausible.Site.t/0","type":"type"},{"doc":"A \"sites by domain\" caching interface.\n\nServes as a thin wrapper around Cachex, but the underlying\nimplementation can be transparently swapped.\n\nEven though the Cachex process is started, cache access is disabled\nduring tests via the `:sites_by_domain_cache_enabled` application env key.\nThis can be overridden on case by case basis, using the child specs options.\n\nNOTE: the cache allows lookups by both `domain` and `domain_changed_from`\nfields - this is to allow traffic from sites whose domains changed within a certain\ngrace period (see: `Plausible.Site.Transfer`).\n\nWhen Cache is disabled via application env, the `get/1` function\nfalls back to pure database lookups. This should help with introducing\ncached lookups in existing code, so that no existing tests should break.\n\nTo differentiate cached Site structs from those retrieved directly from the\ndatabase, a virtual schema field `from_cache?: true` is set.\nThis indicates the `Plausible.Site` struct is incomplete in comparison to its\ndatabase counterpart -- to spare bandwidth and query execution time,\nonly selected database columns are retrieved and cached.\n\nThere are two modes of refreshing the cache: `:all` and `:updated_recently`.\n\n * `:all` means querying the database for all Site entries and should be done\n periodically (via `Cache.Warmer`). All stale Cache entries are cleared\n upon persisting the new batch.\n\n * `:updated_recently` attempts to re-query sites updated within the last\n 15 minutes only, to account for most recent changes. This refresh\n is lighter on the database and is meant to be executed more frequently\n (via `Cache.Warmer.RecentlyUpdated`).\n\nRefreshing the cache emits telemetry event defined as per `telemetry_event_refresh/2`.\n\nThe `@cached_schema_fields` attribute defines the list of DB columns\nqueried on each cache refresh.\n\nAlso see tests for more comprehensive examples.","ref":"Plausible.Site.Cache.html","title":"Plausible.Site.Cache","type":"module"},{"doc":"","ref":"Plausible.Site.Cache.html#child_spec/1","title":"Plausible.Site.Cache.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#enabled?/0","title":"Plausible.Site.Cache.enabled?/0","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#get/2","title":"Plausible.Site.Cache.get/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#get_site_id/2","title":"Plausible.Site.Cache.get_site_id/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#hit_rate/1","title":"Plausible.Site.Cache.hit_rate/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#merge/2","title":"Plausible.Site.Cache.merge/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#name/0","title":"Plausible.Site.Cache.name/0","type":"function"},{"doc":"Ensures the cache has non-zero size unless no sites exist.\nUseful for orchestrating app startup to prevent the service\ngoing up asynchronously with an empty cache.","ref":"Plausible.Site.Cache.html#ready?/1","title":"Plausible.Site.Cache.ready?/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#refresh_all/1","title":"Plausible.Site.Cache.refresh_all/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#refresh_updated_recently/1","title":"Plausible.Site.Cache.refresh_updated_recently/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#size/1","title":"Plausible.Site.Cache.size/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#telemetry_event_refresh/2","title":"Plausible.Site.Cache.telemetry_event_refresh/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#touch_site!/2","title":"Plausible.Site.Cache.touch_site!/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#t:t/0","title":"Plausible.Site.Cache.t/0","type":"type"},{"doc":"A periodic cache warmer.\nQueries all Sites from Postgres, every `interval` and pre-populates the cache.\nAfter each run the process is hibernated, triggering garbage collection.\n\nCurrently Cachex is used, but the underlying implementation can be transparently swapped.\n\nChild specification options available:\n\n * `interval` - the number of milliseconds for each warm-up cycle, defaults\n to `:sites_by_domain_cache_refresh_interval` application env value\n with random jitter added, for which the maximum is stored under\n `:sites_by_domain_cache_refresh_interval_max_jitter` key.\n * `cache_name` - defaults to Cache.name() but can be overriden for testing\n * `force_start?` - enforcess process startup for testing, even if it's barred\n by `Cache.enabled?`. This is useful for avoiding issues with DB ownership\n and async tests.\n * `warmer_fn` - used for testing, a custom function to retrieve the items meant\n to be cached during the warm-up cycle.\n\nSee tests for more comprehensive examples.","ref":"Plausible.Site.Cache.Warmer.html","title":"Plausible.Site.Cache.Warmer","type":"module"},{"doc":"","ref":"Plausible.Site.Cache.Warmer.html#child_spec/1","title":"Plausible.Site.Cache.Warmer.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.Warmer.html#interval/0","title":"Plausible.Site.Cache.Warmer.interval/0","type":"function"},{"doc":"A Cache.Warmer adapter that refreshes the Sites Cache fully.\nThis module exists only to make it explicit what the warmer\nrefreshes, to be used in the supervisor tree.","ref":"Plausible.Site.Cache.Warmer.All.html","title":"Plausible.Site.Cache.Warmer.All","type":"module"},{"doc":"","ref":"Plausible.Site.Cache.Warmer.All.html#child_spec/1","title":"Plausible.Site.Cache.Warmer.All.child_spec/1","type":"function"},{"doc":"A Cache.Warmer adapter that only refreshes the Cache\nwith recently updated sites every 30 seconds.","ref":"Plausible.Site.Cache.Warmer.RecentlyUpdated.html","title":"Plausible.Site.Cache.Warmer.RecentlyUpdated","type":"module"},{"doc":"","ref":"Plausible.Site.Cache.Warmer.RecentlyUpdated.html#child_spec/1","title":"Plausible.Site.Cache.Warmer.RecentlyUpdated.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Site.CustomDomain.html","title":"Plausible.Site.CustomDomain","type":"module"},{"doc":"Basic interface for domain changes.\n\nOnce `Plausible.DataMigration.NumericIDs` schema migration is ready, \ndomain change operation will be enabled, accessible to the users.\n\nWe will set a transition period of 72 hours\nduring which, both old and new domains, will be accepted as traffic\nidentifiers to the same site. \n\nA periodic worker will call the `expire/0` function to end it where applicable.\nSee: `Plausible.Workers.ExpireDomainChangeTransitions`.\n\nThe underlying changeset for domain change (see: `Plausible.Site`) relies\non database trigger installed via `Plausible.Repo.Migrations.AllowDomainChange`\nPostgres migration. The trigger checks if either `domain` or `domain_changed_from`\nexist to ensure unicity.","ref":"Plausible.Site.Domain.html","title":"Plausible.Site.Domain","type":"module"},{"doc":"","ref":"Plausible.Site.Domain.html#change/3","title":"Plausible.Site.Domain.change/3","type":"function"},{"doc":"","ref":"Plausible.Site.Domain.html#expire_change_transitions/1","title":"Plausible.Site.Domain.expire_change_transitions/1","type":"function"},{"doc":"Thin wrapper around Hammer for gate keeping domain-specific events\nduring the ingestion phase. When the site is allowed, gate keeping\ncheck returns `:allow`, otherwise a `:deny` tagged tuple is returned\nwith one of the following policy markers:\n * `:not_found` (indicates site not found in cache)\n * `:block` (indicates disabled sites)\n * `:throttle` (indicates rate limiting)\n\nRate Limiting buckets are configured per site (externally via the CRM).\nSee: `Plausible.Site`\n\nTo look up each site's configuration, the RateLimiter fetches\na Site by domain using `Plausible.Cache` interface.\n\nThe module defines two policies outside the regular bucket inspection:\n * when the the site is not found in cache: not_found\n * when the underlying rate limiting mechanism returns\n an internal error: :allow","ref":"Plausible.Site.GateKeeper.html","title":"Plausible.Site.GateKeeper","type":"module"},{"doc":"","ref":"Plausible.Site.GateKeeper.html#check/2","title":"Plausible.Site.GateKeeper.check/2","type":"function"},{"doc":"","ref":"Plausible.Site.GateKeeper.html#key/1","title":"Plausible.Site.GateKeeper.key/1","type":"function"},{"doc":"","ref":"Plausible.Site.GateKeeper.html#t:policy/0","title":"Plausible.Site.GateKeeper.policy/0","type":"type"},{"doc":"","ref":"Plausible.Site.GateKeeper.html#t:t/0","title":"Plausible.Site.GateKeeper.t/0","type":"type"},{"doc":"","ref":"Plausible.Site.GoogleAuth.html","title":"Plausible.Site.GoogleAuth","type":"module"},{"doc":"","ref":"Plausible.Site.GoogleAuth.html#changeset/2","title":"Plausible.Site.GoogleAuth.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.GoogleAuth.html#set_property/2","title":"Plausible.Site.GoogleAuth.set_property/2","type":"function"},{"doc":"Embedded schema for Google Analytics imports","ref":"Plausible.Site.ImportedData.html","title":"Plausible.Site.ImportedData","type":"module"},{"doc":"","ref":"Plausible.Site.Membership.html","title":"Plausible.Site.Membership","type":"module"},{"doc":"","ref":"Plausible.Site.Membership.html#new/2","title":"Plausible.Site.Membership.new/2","type":"function"},{"doc":"","ref":"Plausible.Site.Membership.html#set_role/2","title":"Plausible.Site.Membership.set_role/2","type":"function"},{"doc":"","ref":"Plausible.Site.Membership.html#t:t/0","title":"Plausible.Site.Membership.t/0","type":"type"},{"doc":"API for site memberships and invitations","ref":"Plausible.Site.Memberships.html","title":"Plausible.Site.Memberships","type":"module"},{"doc":"","ref":"Plausible.Site.Memberships.html#accept_invitation/2","title":"Plausible.Site.Memberships.accept_invitation/2","type":"function"},{"doc":"","ref":"Plausible.Site.Memberships.html#any?/1","title":"Plausible.Site.Memberships.any?/1","type":"function"},{"doc":"","ref":"Plausible.Site.Memberships.html#has_any_invitations?/1","title":"Plausible.Site.Memberships.has_any_invitations?/1","type":"function"},{"doc":"","ref":"Plausible.Site.Memberships.html#reject_invitation/2","title":"Plausible.Site.Memberships.reject_invitation/2","type":"function"},{"doc":"","ref":"Plausible.Site.Memberships.html#remove_invitation/2","title":"Plausible.Site.Memberships.remove_invitation/2","type":"function"},{"doc":"Service for accepting invitations, including ownership transfers.\n\nAccepting invitation accounts for the fact that it's possible\nthat accepting user has an existing membership for the site and\nacts permissively to not unnecessarily disrupt the flow while\nalso maintaining integrity of site memberships. This also applies\nto cases where users update their email address between issuing\nthe invitation and accepting it.","ref":"Plausible.Site.Memberships.AcceptInvitation.html","title":"Plausible.Site.Memberships.AcceptInvitation","type":"module"},{"doc":"","ref":"Plausible.Site.Memberships.AcceptInvitation.html#accept_invitation/3","title":"Plausible.Site.Memberships.AcceptInvitation.accept_invitation/3","type":"function"},{"doc":"Service for rejecting invitations.","ref":"Plausible.Site.Memberships.RejectInvitation.html","title":"Plausible.Site.Memberships.RejectInvitation","type":"module"},{"doc":"","ref":"Plausible.Site.Memberships.RejectInvitation.html#reject_invitation/2","title":"Plausible.Site.Memberships.RejectInvitation.reject_invitation/2","type":"function"},{"doc":"Service for removing invitations.","ref":"Plausible.Site.Memberships.RemoveInvitation.html","title":"Plausible.Site.Memberships.RemoveInvitation","type":"module"},{"doc":"","ref":"Plausible.Site.Memberships.RemoveInvitation.html#remove_invitation/2","title":"Plausible.Site.Memberships.RemoveInvitation.remove_invitation/2","type":"function"},{"doc":"","ref":"Plausible.Site.MonthlyReport.html","title":"Plausible.Site.MonthlyReport","type":"module"},{"doc":"","ref":"Plausible.Site.MonthlyReport.html#add_recipient/2","title":"Plausible.Site.MonthlyReport.add_recipient/2","type":"function"},{"doc":"","ref":"Plausible.Site.MonthlyReport.html#changeset/2","title":"Plausible.Site.MonthlyReport.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.MonthlyReport.html#remove_recipient/2","title":"Plausible.Site.MonthlyReport.remove_recipient/2","type":"function"},{"doc":"A site deletion service stub.","ref":"Plausible.Site.Removal.html","title":"Plausible.Site.Removal","type":"module"},{"doc":"","ref":"Plausible.Site.Removal.html#run/1","title":"Plausible.Site.Removal.run/1","type":"function"},{"doc":"","ref":"Plausible.Site.SharedLink.html","title":"Plausible.Site.SharedLink","type":"module"},{"doc":"","ref":"Plausible.Site.SharedLink.html#changeset/2","title":"Plausible.Site.SharedLink.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.SharedLink.html#t:t/0","title":"Plausible.Site.SharedLink.t/0","type":"type"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html","title":"Plausible.Site.SpikeNotification","type":"module"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html#add_recipient/2","title":"Plausible.Site.SpikeNotification.add_recipient/2","type":"function"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html#changeset/2","title":"Plausible.Site.SpikeNotification.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html#remove_recipient/2","title":"Plausible.Site.SpikeNotification.remove_recipient/2","type":"function"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html#was_sent/1","title":"Plausible.Site.SpikeNotification.was_sent/1","type":"function"},{"doc":"","ref":"Plausible.Site.WeeklyReport.html","title":"Plausible.Site.WeeklyReport","type":"module"},{"doc":"","ref":"Plausible.Site.WeeklyReport.html#add_recipient/2","title":"Plausible.Site.WeeklyReport.add_recipient/2","type":"function"},{"doc":"","ref":"Plausible.Site.WeeklyReport.html#changeset/2","title":"Plausible.Site.WeeklyReport.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.WeeklyReport.html#remove_recipient/2","title":"Plausible.Site.WeeklyReport.remove_recipient/2","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html","title":"Plausible.SiteAdmin","type":"module"},{"doc":"","ref":"Plausible.SiteAdmin.html#create_changeset/2","title":"Plausible.SiteAdmin.create_changeset/2","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#custom_index_query/3","title":"Plausible.SiteAdmin.custom_index_query/3","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#form_fields/1","title":"Plausible.SiteAdmin.form_fields/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#get_struct_fields/1","title":"Plausible.SiteAdmin.get_struct_fields/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#index/1","title":"Plausible.SiteAdmin.index/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#list_actions/1","title":"Plausible.SiteAdmin.list_actions/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#ordering/1","title":"Plausible.SiteAdmin.ordering/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#search_fields/1","title":"Plausible.SiteAdmin.search_fields/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#update_changeset/2","title":"Plausible.SiteAdmin.update_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html","title":"Plausible.Sites","type":"module"},{"doc":"","ref":"Plausible.Sites.html#bulk_transfer_ownership/4","title":"Plausible.Sites.bulk_transfer_ownership/4","type":"function"},{"doc":"","ref":"Plausible.Sites.html#create/2","title":"Plausible.Sites.create/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html#create_shared_link/3","title":"Plausible.Sites.create_shared_link/3","type":"function"},{"doc":"","ref":"Plausible.Sites.html#get_by_domain/1","title":"Plausible.Sites.get_by_domain/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#get_by_domain!/1","title":"Plausible.Sites.get_by_domain!/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#get_for_user/3","title":"Plausible.Sites.get_for_user/3","type":"function"},{"doc":"","ref":"Plausible.Sites.html#get_for_user!/3","title":"Plausible.Sites.get_for_user!/3","type":"function"},{"doc":"","ref":"Plausible.Sites.html#has_admin_access?/2","title":"Plausible.Sites.has_admin_access?/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html#has_goals?/1","title":"Plausible.Sites.has_goals?/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#has_stats?/1","title":"Plausible.Sites.has_stats?/1","type":"function"},{"doc":"Invites a new team member to the given site. Returns a\n%Plausible.Auth.Invitation{} struct and sends the invitee an email to accept\nthis invitation.\n\nThe inviter must have enough permissions to invite the new team member,\notherwise this function returns `{:error, :forbidden}`.\n\nIf the new team member role is `:owner`, this function handles the invitation\nas an ownership transfer and requires the inviter to be the owner of the site.","ref":"Plausible.Sites.html#invite/4","title":"Plausible.Sites.invite/4","type":"function"},{"doc":"","ref":"Plausible.Sites.html#is_member?/2","title":"Plausible.Sites.is_member?/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html#locked?/1","title":"Plausible.Sites.locked?/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#owned_site_ids/1","title":"Plausible.Sites.owned_site_ids/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#owned_sites_count/1","title":"Plausible.Sites.owned_sites_count/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#owned_sites_domains/1","title":"Plausible.Sites.owned_sites_domains/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#owner_for/1","title":"Plausible.Sites.owner_for/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#role/2","title":"Plausible.Sites.role/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html#shared_link_url/2","title":"Plausible.Sites.shared_link_url/2","type":"function"},{"doc":"Returns the date of the first event of the given site, or `nil` if the site\ndoes not have stats yet.\n\nIf this is the first time the function is called for the site, it queries\nClickhouse and saves the date in the sites table.","ref":"Plausible.Sites.html#stats_start_date/1","title":"Plausible.Sites.stats_start_date/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#t:invite_error/0","title":"Plausible.Sites.invite_error/0","type":"type"},{"doc":"","ref":"Plausible.Stats.html","title":"Plausible.Stats","type":"module"},{"doc":"","ref":"Plausible.Stats.html#aggregate/3","title":"Plausible.Stats.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.Stats.html#breakdown/5","title":"Plausible.Stats.breakdown/5","type":"function"},{"doc":"","ref":"Plausible.Stats.html#current_visitors/1","title":"Plausible.Stats.current_visitors/1","type":"function"},{"doc":"","ref":"Plausible.Stats.html#filter_suggestions/4","title":"Plausible.Stats.filter_suggestions/4","type":"function"},{"doc":"","ref":"Plausible.Stats.html#funnel/3","title":"Plausible.Stats.funnel/3","type":"function"},{"doc":"","ref":"Plausible.Stats.html#timeseries/3","title":"Plausible.Stats.timeseries/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Aggregate.html","title":"Plausible.Stats.Aggregate","type":"module"},{"doc":"","ref":"Plausible.Stats.Aggregate.html#aggregate/3","title":"Plausible.Stats.Aggregate.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html","title":"Plausible.Stats.Base","type":"module"},{"doc":"","ref":"Plausible.Stats.Base.html#apply_entry_prop_filter/3","title":"Plausible.Stats.Base.apply_entry_prop_filter/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#base_event_query/2","title":"Plausible.Stats.Base.base_event_query/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#filter_by_entry_props/2","title":"Plausible.Stats.Base.filter_by_entry_props/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#filter_converted_sessions/3","title":"Plausible.Stats.Base.filter_converted_sessions/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#page_regex/1","title":"Plausible.Stats.Base.page_regex/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#query_events/2","title":"Plausible.Stats.Base.query_events/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#query_sessions/2","title":"Plausible.Stats.Base.query_sessions/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#select_event_metrics/2","title":"Plausible.Stats.Base.select_event_metrics/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#select_session_metrics/3","title":"Plausible.Stats.Base.select_session_metrics/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#utc_boundaries/2","title":"Plausible.Stats.Base.utc_boundaries/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Breakdown.html","title":"Plausible.Stats.Breakdown","type":"module"},{"doc":"","ref":"Plausible.Stats.Breakdown.html#breakdown/5","title":"Plausible.Stats.Breakdown.breakdown/5","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html","title":"Plausible.Stats.Clickhouse","type":"module"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#current_visitors/2","title":"Plausible.Stats.Clickhouse.current_visitors/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#has_pageviews?/1","title":"Plausible.Stats.Clickhouse.has_pageviews?/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#imported_pageview_count/1","title":"Plausible.Stats.Clickhouse.imported_pageview_count/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#last_24h_visitors/1","title":"Plausible.Stats.Clickhouse.last_24h_visitors/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#pageview_start_date_local/1","title":"Plausible.Stats.Clickhouse.pageview_start_date_local/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#top_sources/6","title":"Plausible.Stats.Clickhouse.top_sources/6","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#usage_breakdown/1","title":"Plausible.Stats.Clickhouse.usage_breakdown/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#usage_breakdown/2","title":"Plausible.Stats.Clickhouse.usage_breakdown/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Compare.html","title":"Plausible.Stats.Compare","type":"module"},{"doc":"","ref":"Plausible.Stats.Compare.html#calculate_change/3","title":"Plausible.Stats.Compare.calculate_change/3","type":"function"},{"doc":"This module provides functions for comparing query periods.\n\nIt allows you to compare a given period with a previous period or with the\nsame period from the previous year. For example, you can compare this month's\nmain graph with last month or with the same month from last year.","ref":"Plausible.Stats.Comparisons.html","title":"Plausible.Stats.Comparisons","type":"module"},{"doc":"Generates a comparison query based on the source query and comparison mode.\n\nThe mode parameter specifies the type of comparison and can be one of the\nfollowing:\n\n * `\"previous_period\"` - shifts back the query by the same number of days the\n source query has.\n\n * `\"year_over_year\"` - shifts back the query by 1 year.\n\n * `\"custom\"` - compares the query using a custom date range. See options for\n more details.\n\nThe comparison query returned by the function has its end date restricted to\nthe current day. This can be overriden by the `now` option, described below.","ref":"Plausible.Stats.Comparisons.html#compare/4","title":"Plausible.Stats.Comparisons.compare/4","type":"function"},{"doc":"* `:now` - a `NaiveDateTime` struct with the current date and time. This is\n optional and used for testing purposes.\n\n * `:from` - a ISO-8601 date string used when mode is `\"custom\"`.\n\n * `:to` - a ISO-8601 date string used when mode is `\"custom\"`. Must be\n after `from`.\n\n * `:match_day_of_week?` - determines whether the comparison query should be\n adjusted to match the day of the week of the source query. When this option\n is set to true, the comparison query is shifted to start on the same day of\n the week as the source query, rather than on the exact same date. For\n example, if the source query starts on Sunday, January 1st, 2023 and the\n `year_over_year` comparison query is configured to `match_day_of_week?`,\n it will be shifted to start on Sunday, January 2nd, 2022 instead of\n January 1st. Defaults to false.","ref":"Plausible.Stats.Comparisons.html#compare/4-options","title":"Options - Plausible.Stats.Comparisons.compare/4","type":"function"},{"doc":"","ref":"Plausible.Stats.Comparisons.html#t:mode/0","title":"Plausible.Stats.Comparisons.mode/0","type":"type"},{"doc":"","ref":"Plausible.Stats.CurrentVisitors.html","title":"Plausible.Stats.CurrentVisitors","type":"module"},{"doc":"","ref":"Plausible.Stats.CurrentVisitors.html#current_visitors/1","title":"Plausible.Stats.CurrentVisitors.current_visitors/1","type":"function"},{"doc":"Module for querying user defined 'custom properties'.","ref":"Plausible.Stats.CustomProps.html","title":"Plausible.Stats.CustomProps","type":"module"},{"doc":"","ref":"Plausible.Stats.CustomProps.html#fetch_prop_names/2","title":"Plausible.Stats.CustomProps.fetch_prop_names/2","type":"function"},{"doc":"","ref":"Plausible.Stats.CustomProps.html#maybe_allowed_props_only/2","title":"Plausible.Stats.CustomProps.maybe_allowed_props_only/2","type":"function"},{"doc":"Returns a breakdown of event names with all existing custom\nproperties for each event name.","ref":"Plausible.Stats.CustomProps.html#props_for_all_event_names/2","title":"Plausible.Stats.CustomProps.props_for_all_event_names/2","type":"function"},{"doc":"A module for parsing filters used in stat queries.","ref":"Plausible.Stats.FilterParser.html","title":"Plausible.Stats.FilterParser","type":"module"},{"doc":"Parses different filter formats.\n\nDepending on the format and type of the `filters` argument, returns:\n\n * a decoded map, when `filters` is encoded JSON\n * a parsed filter map, when `filters` is a filter expression string\n * the same map, when `filters` is a map\n\nReturns an empty map when argument type is unexpected (e.g. `nil`).\n\n#","ref":"Plausible.Stats.FilterParser.html#parse_filters/1","title":"Plausible.Stats.FilterParser.parse_filters/1","type":"function"},{"doc":"iex> FilterParser.parse_filters(\"{\\\"page\\\":\\\"/blog/**\\\"}\")\n %{\"page\" => \"/blog/**\"}\n\n iex> FilterParser.parse_filters(\"visit:browser!=Chrome\")\n %{\"visit:browser\" => {:is_not, \"Chrome\"}}\n\n iex> FilterParser.parse_filters(nil)\n %{}","ref":"Plausible.Stats.FilterParser.html#parse_filters/1-examples","title":"Examples: - Plausible.Stats.FilterParser.parse_filters/1","type":"function"},{"doc":"","ref":"Plausible.Stats.FilterSuggestions.html","title":"Plausible.Stats.FilterSuggestions","type":"module"},{"doc":"","ref":"Plausible.Stats.FilterSuggestions.html#filter_suggestions/4","title":"Plausible.Stats.FilterSuggestions.filter_suggestions/4","type":"function"},{"doc":"","ref":"Plausible.Stats.Filters.html","title":"Plausible.Stats.Filters","type":"module"},{"doc":"","ref":"Plausible.Stats.Filters.html#add_prefix/1","title":"Plausible.Stats.Filters.add_prefix/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Filters.html#visit_props/0","title":"Plausible.Stats.Filters.visit_props/0","type":"function"},{"doc":"","ref":"Plausible.Stats.Fragments.html","title":"Plausible.Stats.Fragments","type":"module"},{"doc":"","ref":"Plausible.Stats.Fragments.html#bounce_rate/0","title":"Plausible.Stats.Fragments.bounce_rate/0","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#coalesce_string/2","title":"Plausible.Stats.Fragments.coalesce_string/2","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#sample_percent/0","title":"Plausible.Stats.Fragments.sample_percent/0","type":"macro"},{"doc":"Converts time or date and time to the specified timezone.\n\nReference: https://clickhouse.com/docs/en/sql-reference/functions/date-time-functions/#totimezone","ref":"Plausible.Stats.Fragments.html#to_timezone/2","title":"Plausible.Stats.Fragments.to_timezone/2","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#total/0","title":"Plausible.Stats.Fragments.total/0","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#uniq/1","title":"Plausible.Stats.Fragments.uniq/1","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#visit_duration/0","title":"Plausible.Stats.Fragments.visit_duration/0","type":"macro"},{"doc":"Returns the weekstart for `date`. If the weekstart is before the `not_before`\nboundary, `not_before` is returned.","ref":"Plausible.Stats.Fragments.html#weekstart_not_before/2","title":"Plausible.Stats.Fragments.weekstart_not_before/2","type":"macro"},{"doc":"In this pseudo-code example, the fragment returns the weekstart. The\n`not_before` boundary is set to the past Saturday, which is before the\nweekstart, therefore the cap does not apply.\n\n iex> this_wednesday = ~D[2022-11-09]\n ...> past_saturday = ~D[2022-11-05]\n ...> weekstart_not_before(this_wednesday, past_saturday)\n ~D[2022-11-07]\n\n\nIn this other example, the fragment returns Tuesday and not the weekstart.\nThe `not_before` boundary is set to Tuesday, which is past the weekstart,\ntherefore the cap applies.\n\n iex> this_wednesday = ~D[2022-11-09]\n ...> this_tuesday = ~D[2022-11-08]\n ...> weekstart_not_before(this_wednesday, this_tuesday)\n ~D[2022-11-08]","ref":"Plausible.Stats.Fragments.html#weekstart_not_before/2-examples","title":"Examples - Plausible.Stats.Fragments.weekstart_not_before/2","type":"macro"},{"doc":"Same as Plausible.Stats.Fragments.weekstart_not_before/2 but converts dates to\nthe specified timezone.","ref":"Plausible.Stats.Fragments.html#weekstart_not_before/3","title":"Plausible.Stats.Fragments.weekstart_not_before/3","type":"macro"},{"doc":"Module responsible for funnel evaluation, i.e. building and executing\nClickHouse funnel query based on `Plausible.Funnel` definition.","ref":"Plausible.Stats.Funnel.html","title":"Plausible.Stats.Funnel","type":"module"},{"doc":"","ref":"Plausible.Stats.Funnel.html#funnel/3","title":"Plausible.Stats.Funnel.funnel/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Imported.html","title":"Plausible.Stats.Imported","type":"module"},{"doc":"","ref":"Plausible.Stats.Imported.html#merge_imported/5","title":"Plausible.Stats.Imported.merge_imported/5","type":"function"},{"doc":"","ref":"Plausible.Stats.Imported.html#merge_imported_timeseries/4","title":"Plausible.Stats.Imported.merge_imported_timeseries/4","type":"function"},{"doc":"Collection of functions to work with intervals.\n\nThe interval of a query defines the granularity of the data. You can think of\nit as a `GROUP BY` clause. Possible values are `minute`, `hour`, `date`,\n`week`, and `month`.","ref":"Plausible.Stats.Interval.html","title":"Plausible.Stats.Interval","type":"module"},{"doc":"Returns the suggested interval for the given `Date.Range` struct.","ref":"Plausible.Stats.Interval.html#default_for_date_range/1","title":"Plausible.Stats.Interval.default_for_date_range/1","type":"function"},{"doc":"Returns the suggested interval for the given time period.","ref":"Plausible.Stats.Interval.html#default_for_period/1","title":"Plausible.Stats.Interval.default_for_period/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Interval.html#list/0","title":"Plausible.Stats.Interval.list/0","type":"function"},{"doc":"","ref":"Plausible.Stats.Interval.html#valid?/1","title":"Plausible.Stats.Interval.valid?/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Interval.html#valid_by_period/1","title":"Plausible.Stats.Interval.valid_by_period/1","type":"function"},{"doc":"Returns whether the given interval is valid for a time period.\n\nIntervals longer than periods are not supported, e.g. current month stats with\na month interval, or today stats with a week interval.\n\nThere are two dynamic states:\n* `custom` period is only applicable with `month` or `week` intervals,\n if the `opts[:from]` and `opts[:to]` range difference exceeds 12 months\n* `all` period's interval options depend on particular site's `stats_start_date`\n - daily interval is excluded if the all-time range exceeds 12 months","ref":"Plausible.Stats.Interval.html#valid_for_period?/3","title":"Plausible.Stats.Interval.valid_for_period?/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Interval.html#t:opt/0","title":"Plausible.Stats.Interval.opt/0","type":"type"},{"doc":"","ref":"Plausible.Stats.Interval.html#t:opts/0","title":"Plausible.Stats.Interval.opts/0","type":"type"},{"doc":"","ref":"Plausible.Stats.Interval.html#t:t/0","title":"Plausible.Stats.Interval.t/0","type":"type"},{"doc":"","ref":"Plausible.Stats.Props.html","title":"Plausible.Stats.Props","type":"module"},{"doc":"","ref":"Plausible.Stats.Props.html#event_props/0","title":"Plausible.Stats.Props.event_props/0","type":"function"},{"doc":"","ref":"Plausible.Stats.Props.html#valid_prop?/1","title":"Plausible.Stats.Props.valid_prop?/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html","title":"Plausible.Stats.Query","type":"module"},{"doc":"","ref":"Plausible.Stats.Query.html#from/2","title":"Plausible.Stats.Query.from/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#get_filter_by_prefix/2","title":"Plausible.Stats.Query.get_filter_by_prefix/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#has_event_filters?/1","title":"Plausible.Stats.Query.has_event_filters?/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#include_imported?/3","title":"Plausible.Stats.Query.include_imported?/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#put_filter/3","title":"Plausible.Stats.Query.put_filter/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#remove_event_filters/2","title":"Plausible.Stats.Query.remove_event_filters/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#trace/1","title":"Plausible.Stats.Query.trace/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#t:t/0","title":"Plausible.Stats.Query.t/0","type":"type"},{"doc":"","ref":"Plausible.Stats.Timeseries.html","title":"Plausible.Stats.Timeseries","type":"module"},{"doc":"","ref":"Plausible.Stats.Timeseries.html#timeseries/3","title":"Plausible.Stats.Timeseries.timeseries/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Timeseries.html#t:results/0","title":"Plausible.Stats.Timeseries.results/0","type":"type"},{"doc":"Utilities for modifying stat results","ref":"Plausible.Stats.Util.html","title":"Plausible.Stats.Util","type":"module"},{"doc":"","ref":"Plausible.Stats.Util.html#cast_revenue_metrics_to_money/2","title":"Plausible.Stats.Util.cast_revenue_metrics_to_money/2","type":"function"},{"doc":"Returns the common currency for the goal filters in a query. If there are no\ngoal filters, or multiple currencies, `nil` is returned and revenue metrics\nare dropped.\n\nAggregating revenue data works only for same currency goals. If the query is\nfiltered by goals with different currencies, for example, one USD and other\nEUR, revenue metrics are dropped.","ref":"Plausible.Stats.Util.html#get_revenue_tracking_currency/3","title":"Plausible.Stats.Util.get_revenue_tracking_currency/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Util.html#remove_internal_visits_metric/1","title":"Plausible.Stats.Util.remove_internal_visits_metric/1","type":"function"},{"doc":"`__internal_visits` is fetched when querying bounce rate and visit duration, as it\nis needed to calculate these from imported data. This function removes that metric\nfrom all entries in the results list.","ref":"Plausible.Stats.Util.html#remove_internal_visits_metric/2","title":"Plausible.Stats.Util.remove_internal_visits_metric/2","type":"function"},{"doc":"Floki wrappers to help make assertions about HTML/DOM structures","ref":"Plausible.Test.Support.HTML.html","title":"Plausible.Test.Support.HTML","type":"module"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#class_of_element/2","title":"Plausible.Test.Support.HTML.class_of_element/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#element_exists?/2","title":"Plausible.Test.Support.HTML.element_exists?/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#find/2","title":"Plausible.Test.Support.HTML.find/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#form_exists?/2","title":"Plausible.Test.Support.HTML.form_exists?/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#name_of/1","title":"Plausible.Test.Support.HTML.name_of/1","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#submit_button/2","title":"Plausible.Test.Support.HTML.submit_button/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#text/1","title":"Plausible.Test.Support.HTML.text/1","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#text_of_attr/2","title":"Plausible.Test.Support.HTML.text_of_attr/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#text_of_element/2","title":"Plausible.Test.Support.HTML.text_of_element/2","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html","title":"Plausible.TestUtils","type":"module"},{"doc":"","ref":"Plausible.TestUtils.html#add_imported_data/1","title":"Plausible.TestUtils.add_imported_data/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#await_clickhouse_count/2","title":"Plausible.TestUtils.await_clickhouse_count/2","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_api_key/1","title":"Plausible.TestUtils.create_api_key/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_events/1","title":"Plausible.TestUtils.create_events/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_new_site/1","title":"Plausible.TestUtils.create_new_site/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_pageviews/1","title":"Plausible.TestUtils.create_pageviews/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_sessions/1","title":"Plausible.TestUtils.create_sessions/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_site/1","title":"Plausible.TestUtils.create_site/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_user/1","title":"Plausible.TestUtils.create_user/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#eventually/3","title":"Plausible.TestUtils.eventually/3","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#init_session/1","title":"Plausible.TestUtils.init_session/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#log_in/1","title":"Plausible.TestUtils.log_in/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#patch_env/2","title":"Plausible.TestUtils.patch_env/2","type":"macro"},{"doc":"","ref":"Plausible.TestUtils.html#populate_stats/1","title":"Plausible.TestUtils.populate_stats/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#populate_stats/2","title":"Plausible.TestUtils.populate_stats/2","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#random_ip/0","title":"Plausible.TestUtils.random_ip/0","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#relative_time/1","title":"Plausible.TestUtils.relative_time/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#setup_patch_env/2","title":"Plausible.TestUtils.setup_patch_env/2","type":"macro"},{"doc":"","ref":"Plausible.TestUtils.html#to_naive_truncate/1","title":"Plausible.TestUtils.to_naive_truncate/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#use_api_key/1","title":"Plausible.TestUtils.use_api_key/1","type":"function"},{"doc":"","ref":"Plausible.Themes.html","title":"Plausible.Themes","type":"module"},{"doc":"","ref":"Plausible.Themes.html#options/0","title":"Plausible.Themes.options/0","type":"function"},{"doc":"","ref":"Plausible.Timezones.html","title":"Plausible.Timezones","type":"module"},{"doc":"","ref":"Plausible.Timezones.html#options/1","title":"Plausible.Timezones.options/1","type":"function"},{"doc":"User context","ref":"Plausible.Users.html","title":"Plausible.Users","type":"module"},{"doc":"","ref":"Plausible.Users.html#has_email_code?/1","title":"Plausible.Users.has_email_code?/1","type":"function"},{"doc":"","ref":"Plausible.Users.html#with_subscription/1","title":"Plausible.Users.with_subscription/1","type":"function"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html","title":"Plausible.Workers.CheckUsage","type":"module"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#check_enterprise_subscriber/2","title":"Plausible.Workers.CheckUsage.check_enterprise_subscriber/2","type":"function"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#day_of_month/1","title":"Plausible.Workers.CheckUsage.day_of_month/1","type":"macro"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#last_day_of_month/1","title":"Plausible.Workers.CheckUsage.last_day_of_month/1","type":"macro"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#least/2","title":"Plausible.Workers.CheckUsage.least/2","type":"macro"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#yesterday/0","title":"Plausible.Workers.CheckUsage.yesterday/0","type":"macro"},{"doc":"","ref":"Plausible.Workers.CleanEmailVerificationCodes.html","title":"Plausible.Workers.CleanEmailVerificationCodes","type":"module"},{"doc":"","ref":"Plausible.Workers.CleanInvitations.html","title":"Plausible.Workers.CleanInvitations","type":"module"},{"doc":"Periodic worker that expires domain change transition period.\nOld domains are frozen for a given time, so users can still access them\nbefore redeploying their scripts and integrations.","ref":"Plausible.Workers.ExpireDomainChangeTransitions.html","title":"Plausible.Workers.ExpireDomainChangeTransitions","type":"module"},{"doc":"","ref":"Plausible.Workers.ImportGoogleAnalytics.html","title":"Plausible.Workers.ImportGoogleAnalytics","type":"module"},{"doc":"","ref":"Plausible.Workers.ImportGoogleAnalytics.html#import_failed/1","title":"Plausible.Workers.ImportGoogleAnalytics.import_failed/1","type":"function"},{"doc":"","ref":"Plausible.Workers.LockSites.html","title":"Plausible.Workers.LockSites","type":"module"},{"doc":"","ref":"Plausible.Workers.NotifyAnnualRenewal.html","title":"Plausible.Workers.NotifyAnnualRenewal","type":"module"},{"doc":"Sends a notification at most 7 days and at least 1 day before the renewal of an annual subscription","ref":"Plausible.Workers.NotifyAnnualRenewal.html#perform/1","title":"Plausible.Workers.NotifyAnnualRenewal.perform/1","type":"function"},{"doc":"","ref":"Plausible.Workers.RotateSalts.html","title":"Plausible.Workers.RotateSalts","type":"module"},{"doc":"","ref":"Plausible.Workers.ScheduleEmailReports.html","title":"Plausible.Workers.ScheduleEmailReports","type":"module"},{"doc":"","ref":"Plausible.Workers.ScheduleEmailReports.html#first_of_month_9am/1","title":"Plausible.Workers.ScheduleEmailReports.first_of_month_9am/1","type":"function"},{"doc":"","ref":"Plausible.Workers.ScheduleEmailReports.html#monday_9am/1","title":"Plausible.Workers.ScheduleEmailReports.monday_9am/1","type":"function"},{"doc":"Email reports should be sent on Monday at 9am according to the timezone\nof a site. This job runs every day at midnight to ensure that all sites\nhave a scheduled job for email reports.","ref":"Plausible.Workers.ScheduleEmailReports.html#perform/1","title":"Plausible.Workers.ScheduleEmailReports.perform/1","type":"function"},{"doc":"","ref":"Plausible.Workers.SendCheckStatsEmails.html","title":"Plausible.Workers.SendCheckStatsEmails","type":"module"},{"doc":"","ref":"Plausible.Workers.SendEmailReport.html","title":"Plausible.Workers.SendEmailReport","type":"module"},{"doc":"","ref":"Plausible.Workers.SendSiteSetupEmails.html","title":"Plausible.Workers.SendSiteSetupEmails","type":"module"},{"doc":"","ref":"Plausible.Workers.SendTrialNotifications.html","title":"Plausible.Workers.SendTrialNotifications","type":"module"},{"doc":"","ref":"Plausible.Workers.SpikeNotifier.html","title":"Plausible.Workers.SpikeNotifier","type":"module"},{"doc":"","ref":"PlausibleWeb.html","title":"PlausibleWeb","type":"module"},{"doc":"When used, dispatch to the appropriate controller/view/etc.","ref":"PlausibleWeb.html#__using__/1","title":"PlausibleWeb.__using__/1","type":"macro"},{"doc":"","ref":"PlausibleWeb.html#channel/0","title":"PlausibleWeb.channel/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#controller/0","title":"PlausibleWeb.controller/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#open_api_schema/0","title":"PlausibleWeb.open_api_schema/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#plugins_api_controller/0","title":"PlausibleWeb.plugins_api_controller/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#plugins_api_view/0","title":"PlausibleWeb.plugins_api_view/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#router/0","title":"PlausibleWeb.router/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#view/0","title":"PlausibleWeb.view/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html","title":"PlausibleWeb.Api.ExternalController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html#error/2","title":"PlausibleWeb.Api.ExternalController.error/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html#event/2","title":"PlausibleWeb.Api.ExternalController.event/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html#health/2","title":"PlausibleWeb.Api.ExternalController.health/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html#info/2","title":"PlausibleWeb.Api.ExternalController.info/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html","title":"PlausibleWeb.Api.ExternalSitesController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#create_site/2","title":"PlausibleWeb.Api.ExternalSitesController.create_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#delete_goal/2","title":"PlausibleWeb.Api.ExternalSitesController.delete_goal/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#delete_site/2","title":"PlausibleWeb.Api.ExternalSitesController.delete_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#find_or_create_goal/2","title":"PlausibleWeb.Api.ExternalSitesController.find_or_create_goal/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#find_or_create_shared_link/2","title":"PlausibleWeb.Api.ExternalSitesController.find_or_create_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#get_site/2","title":"PlausibleWeb.Api.ExternalSitesController.get_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#update_site/2","title":"PlausibleWeb.Api.ExternalSitesController.update_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html","title":"PlausibleWeb.Api.ExternalStatsController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html#aggregate/2","title":"PlausibleWeb.Api.ExternalStatsController.aggregate/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html#breakdown/2","title":"PlausibleWeb.Api.ExternalStatsController.breakdown/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html#realtime_visitors/2","title":"PlausibleWeb.Api.ExternalStatsController.realtime_visitors/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html#timeseries/2","title":"PlausibleWeb.Api.ExternalStatsController.timeseries/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html","title":"PlausibleWeb.Api.Helpers","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#bad_request/2","title":"PlausibleWeb.Api.Helpers.bad_request/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#not_found/2","title":"PlausibleWeb.Api.Helpers.not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#payment_required/2","title":"PlausibleWeb.Api.Helpers.payment_required/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#too_many_requests/2","title":"PlausibleWeb.Api.Helpers.too_many_requests/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#unauthorized/2","title":"PlausibleWeb.Api.Helpers.unauthorized/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.InternalController.html","title":"PlausibleWeb.Api.InternalController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.InternalController.html#disable_feature/2","title":"PlausibleWeb.Api.InternalController.disable_feature/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.InternalController.html#domain_status/2","title":"PlausibleWeb.Api.InternalController.domain_status/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.InternalController.html#sites/2","title":"PlausibleWeb.Api.InternalController.sites/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.PaddleController.html","title":"PlausibleWeb.Api.PaddleController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.PaddleController.html#verified_signature?/1","title":"PlausibleWeb.Api.PaddleController.verified_signature?/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.PaddleController.html#verify_signature/2","title":"PlausibleWeb.Api.PaddleController.verify_signature/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.PaddleController.html#webhook/2","title":"PlausibleWeb.Api.PaddleController.webhook/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html","title":"PlausibleWeb.Api.StatsController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#all_custom_prop_values/2","title":"PlausibleWeb.Api.StatsController.all_custom_prop_values/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#browser_versions/2","title":"PlausibleWeb.Api.StatsController.browser_versions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#browsers/2","title":"PlausibleWeb.Api.StatsController.browsers/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#cities/2","title":"PlausibleWeb.Api.StatsController.cities/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#conversions/2","title":"PlausibleWeb.Api.StatsController.conversions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#countries/2","title":"PlausibleWeb.Api.StatsController.countries/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#current_visitors/2","title":"PlausibleWeb.Api.StatsController.current_visitors/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#custom_prop_values/2","title":"PlausibleWeb.Api.StatsController.custom_prop_values/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#entry_pages/2","title":"PlausibleWeb.Api.StatsController.entry_pages/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#exit_pages/2","title":"PlausibleWeb.Api.StatsController.exit_pages/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#filter_suggestions/2","title":"PlausibleWeb.Api.StatsController.filter_suggestions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#funnel/2","title":"PlausibleWeb.Api.StatsController.funnel/2","type":"function"},{"doc":"Returns a time-series based on given parameters.","ref":"PlausibleWeb.Api.StatsController.html#main_graph/2","title":"PlausibleWeb.Api.StatsController.main_graph/2","type":"function"},{"doc":"This API accepts the following parameters:\n\n * `period` - x-axis of the graph, e.g. `12mo`, `day`, `custom`.\n\n * `metric` - y-axis of the graph, e.g. `visits`, `visitors`, `pageviews`.\n See the Stats API [\"Metrics\"](https://plausible.io/docs/stats-api#metrics)\n section for more details. Defaults to `visitors`.\n\n * `interval` - granularity of the time-series data. You can think of it as\n a `GROUP BY` clause. Possible values are `minute`, `hour`, `date`, `week`,\n and `month`. The default depends on the `period` parameter. Check\n `Plausible.Query.from/2` for each default.\n\n * `filters` - optional filters to drill down data. See the Stats API\n [\"Filtering\"](https://plausible.io/docs/stats-api#filtering) section for\n more details.\n\n * `with_imported` - boolean indicating whether to include Google Analytics\n imported data or not. Defaults to `false`.\n\nFull example:\n```elixir\n%{\n \"from\" => \"2021-09-06\",\n \"interval\" => \"month\",\n \"metric\" => \"visitors\",\n \"period\" => \"custom\",\n \"to\" => \"2021-12-13\"\n}\n```","ref":"PlausibleWeb.Api.StatsController.html#main_graph/2-parameters","title":"Parameters - PlausibleWeb.Api.StatsController.main_graph/2","type":"function"},{"doc":"Returns a map with the following keys:\n\n * `plot` - list of values for the requested metric representing the y-axis\n of the graph.\n\n * `labels` - list of date times representing the x-axis of the graph.\n\n * `present_index` - index of the element representing the current date in\n `labels` and `plot` lists.\n\n * `interval` - the interval used for querying.\n\n * `with_imported` - boolean indicating whether the Google Analytics data\n was queried or not.\n\n * `imported_source` - the source of the imported data, when applicable.\n Currently only Google Analytics is supported.\n\n * `full_intervals` - map of dates indicating whether the interval has been\n cut off by the requested date range or not. For example, if looking at a\n month week-by-week, some weeks may be cut off by the month boundaries.\n It's useful to adjust the graph display slightly in case the interval is\n not 'full' so that the user understands why the numbers might be lower for\n those partial periods.\n\nFull example:\n```elixir\n%{\n \"full_intervals\" => %{\n \"2021-09-01\" => false,\n \"2021-10-01\" => true,\n \"2021-11-01\" => true,\n \"2021-12-01\" => false\n },\n \"imported_source\" => nil,\n \"interval\" => \"month\",\n \"labels\" => [\"2021-09-01\", \"2021-10-01\", \"2021-11-01\", \"2021-12-01\"],\n \"plot\" => [0, 0, 0, 0],\n \"present_index\" => nil,\n \"with_imported\" => false\n}\n```","ref":"PlausibleWeb.Api.StatsController.html#main_graph/2-response","title":"Response - PlausibleWeb.Api.StatsController.main_graph/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#operating_system_versions/2","title":"PlausibleWeb.Api.StatsController.operating_system_versions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#operating_systems/2","title":"PlausibleWeb.Api.StatsController.operating_systems/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#pages/2","title":"PlausibleWeb.Api.StatsController.pages/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#referrer_drilldown/2","title":"PlausibleWeb.Api.StatsController.referrer_drilldown/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#referrers/2","title":"PlausibleWeb.Api.StatsController.referrers/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#regions/2","title":"PlausibleWeb.Api.StatsController.regions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#screen_sizes/2","title":"PlausibleWeb.Api.StatsController.screen_sizes/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#sources/2","title":"PlausibleWeb.Api.StatsController.sources/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#top_stats/2","title":"PlausibleWeb.Api.StatsController.top_stats/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_campaigns/2","title":"PlausibleWeb.Api.StatsController.utm_campaigns/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_contents/2","title":"PlausibleWeb.Api.StatsController.utm_contents/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_mediums/2","title":"PlausibleWeb.Api.StatsController.utm_mediums/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_sources/2","title":"PlausibleWeb.Api.StatsController.utm_sources/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_terms/2","title":"PlausibleWeb.Api.StatsController.utm_terms/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html","title":"PlausibleWeb.AuthController","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthController.html#activate/2","title":"PlausibleWeb.AuthController.activate/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#activate_form/2","title":"PlausibleWeb.AuthController.activate_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#cancel_update_email/2","title":"PlausibleWeb.AuthController.cancel_update_email/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#create_api_key/2","title":"PlausibleWeb.AuthController.create_api_key/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#delete_api_key/2","title":"PlausibleWeb.AuthController.delete_api_key/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#delete_me/2","title":"PlausibleWeb.AuthController.delete_me/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#google_auth_callback/2","title":"PlausibleWeb.AuthController.google_auth_callback/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#login/2","title":"PlausibleWeb.AuthController.login/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#login_form/2","title":"PlausibleWeb.AuthController.login_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#logout/2","title":"PlausibleWeb.AuthController.logout/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#new_api_key/2","title":"PlausibleWeb.AuthController.new_api_key/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#password_reset/2","title":"PlausibleWeb.AuthController.password_reset/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#password_reset_form/2","title":"PlausibleWeb.AuthController.password_reset_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#password_reset_request/2","title":"PlausibleWeb.AuthController.password_reset_request/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#password_reset_request_form/2","title":"PlausibleWeb.AuthController.password_reset_request_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#register/2","title":"PlausibleWeb.AuthController.register/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#register_from_invitation/2","title":"PlausibleWeb.AuthController.register_from_invitation/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#request_activation_code/2","title":"PlausibleWeb.AuthController.request_activation_code/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#save_settings/2","title":"PlausibleWeb.AuthController.save_settings/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#update_email/2","title":"PlausibleWeb.AuthController.update_email/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#user_settings/2","title":"PlausibleWeb.AuthController.user_settings/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthPlug.html","title":"PlausibleWeb.AuthPlug","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthPlug.html#call/2","title":"PlausibleWeb.AuthPlug.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthPlug.html#init/1","title":"PlausibleWeb.AuthPlug.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html","title":"PlausibleWeb.AuthView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.AuthView.html#__resource__/0","title":"PlausibleWeb.AuthView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#activate.html/1","title":"PlausibleWeb.AuthView.activate.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#base_domain/0","title":"PlausibleWeb.AuthView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#delimit_integer/1","title":"PlausibleWeb.AuthView.delimit_integer/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#format_invoices/1","title":"PlausibleWeb.AuthView.format_invoices/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#login_form.html/1","title":"PlausibleWeb.AuthView.login_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#new_api_key.html/1","title":"PlausibleWeb.AuthView.new_api_key.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#password_reset_form.html/1","title":"PlausibleWeb.AuthView.password_reset_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#password_reset_request_form.html/1","title":"PlausibleWeb.AuthView.password_reset_request_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#password_reset_request_success.html/1","title":"PlausibleWeb.AuthView.password_reset_request_success.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#plausible_url/0","title":"PlausibleWeb.AuthView.plausible_url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#present_subscription_status/1","title":"PlausibleWeb.AuthView.present_subscription_status/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#register_success.html/1","title":"PlausibleWeb.AuthView.register_success.html/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.AuthView.html#render/2","title":"PlausibleWeb.AuthView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#subscription_colors/1","title":"PlausibleWeb.AuthView.subscription_colors/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#subscription_interval/1","title":"PlausibleWeb.AuthView.subscription_interval/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#subscription_quota/2","title":"PlausibleWeb.AuthView.subscription_quota/2","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.AuthView.html#template_not_found/2","title":"PlausibleWeb.AuthView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#user_settings.html/1","title":"PlausibleWeb.AuthView.user_settings.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeSiteAccess.html","title":"PlausibleWeb.AuthorizeSiteAccess","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthorizeSiteAccess.html#call/2","title":"PlausibleWeb.AuthorizeSiteAccess.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeSiteAccess.html#init/1","title":"PlausibleWeb.AuthorizeSiteAccess.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeSitesApiPlug.html","title":"PlausibleWeb.AuthorizeSitesApiPlug","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthorizeSitesApiPlug.html#call/2","title":"PlausibleWeb.AuthorizeSitesApiPlug.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeSitesApiPlug.html#init/1","title":"PlausibleWeb.AuthorizeSitesApiPlug.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeStatsApiPlug.html","title":"PlausibleWeb.AuthorizeStatsApiPlug","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthorizeStatsApiPlug.html#call/2","title":"PlausibleWeb.AuthorizeStatsApiPlug.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeStatsApiPlug.html#init/1","title":"PlausibleWeb.AuthorizeStatsApiPlug.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html","title":"PlausibleWeb.BillingController","type":"module"},{"doc":"","ref":"PlausibleWeb.BillingController.html#change_enterprise_plan/2","title":"PlausibleWeb.BillingController.change_enterprise_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#change_plan/2","title":"PlausibleWeb.BillingController.change_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#change_plan_form/2","title":"PlausibleWeb.BillingController.change_plan_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#change_plan_preview/2","title":"PlausibleWeb.BillingController.change_plan_preview/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#choose_plan/2","title":"PlausibleWeb.BillingController.choose_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#ping_subscription/2","title":"PlausibleWeb.BillingController.ping_subscription/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#preview_susbcription/2","title":"PlausibleWeb.BillingController.preview_susbcription/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#upgrade/2","title":"PlausibleWeb.BillingController.upgrade/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#upgrade_enterprise_plan/2","title":"PlausibleWeb.BillingController.upgrade_enterprise_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#upgrade_success/2","title":"PlausibleWeb.BillingController.upgrade_success/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#upgrade_to_enterprise_plan/2","title":"PlausibleWeb.BillingController.upgrade_to_enterprise_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html","title":"PlausibleWeb.BillingView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.BillingView.html#__resource__/0","title":"PlausibleWeb.BillingView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#base_domain/0","title":"PlausibleWeb.BillingView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#change_enterprise_plan_contact_us.html/1","title":"PlausibleWeb.BillingView.change_enterprise_plan_contact_us.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#change_plan.html/1","title":"PlausibleWeb.BillingView.change_plan.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#change_plan_preview.html/1","title":"PlausibleWeb.BillingView.change_plan_preview.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#choose_plan.html/1","title":"PlausibleWeb.BillingView.choose_plan.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#plausible_url/0","title":"PlausibleWeb.BillingView.plausible_url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#present_currency/1","title":"PlausibleWeb.BillingView.present_currency/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#present_date/1","title":"PlausibleWeb.BillingView.present_date/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#reccommended_plan/1","title":"PlausibleWeb.BillingView.reccommended_plan/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.BillingView.html#render/2","title":"PlausibleWeb.BillingView.render/2","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.BillingView.html#template_not_found/2","title":"PlausibleWeb.BillingView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#upgrade.html/1","title":"PlausibleWeb.BillingView.upgrade.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#upgrade_success.html/1","title":"PlausibleWeb.BillingView.upgrade_success.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#upgrade_to_enterprise_plan.html/1","title":"PlausibleWeb.BillingView.upgrade_to_enterprise_plan.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.CRMAuthPlug.html","title":"PlausibleWeb.CRMAuthPlug","type":"module"},{"doc":"","ref":"PlausibleWeb.CRMAuthPlug.html#call/2","title":"PlausibleWeb.CRMAuthPlug.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.CRMAuthPlug.html#init/1","title":"PlausibleWeb.CRMAuthPlug.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Captcha.html","title":"PlausibleWeb.Captcha","type":"module"},{"doc":"","ref":"PlausibleWeb.Captcha.html#enabled?/0","title":"PlausibleWeb.Captcha.enabled?/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Captcha.html#sitekey/0","title":"PlausibleWeb.Captcha.sitekey/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Captcha.html#verify/1","title":"PlausibleWeb.Captcha.verify/1","type":"function"},{"doc":"Generic reusable components","ref":"PlausibleWeb.Components.Generic.html","title":"PlausibleWeb.Components.Generic","type":"module"},{"doc":"","ref":"PlausibleWeb.Components.Generic.html#notice/1","title":"PlausibleWeb.Components.Generic.notice/1","type":"function"},{"doc":"* `title` (`:string`) - Defaults to `\"Notice\"`.\n* `class` (`:string`) - Defaults to `\"\"`.","ref":"PlausibleWeb.Components.Generic.html#notice/1-attributes","title":"Attributes - PlausibleWeb.Components.Generic.notice/1","type":"function"},{"doc":"* `inner_block`","ref":"PlausibleWeb.Components.Generic.html#notice/1-slots","title":"Slots - PlausibleWeb.Components.Generic.notice/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Components.Generic.html#styled_link/1","title":"PlausibleWeb.Components.Generic.styled_link/1","type":"function"},{"doc":"* `id` (`:any`) - Defaults to `nil`.\n* `href` (`:string`) (required)\n* `new_tab` (`:boolean`)\n* `class` (`:string`) - Defaults to `\"\"`.","ref":"PlausibleWeb.Components.Generic.html#styled_link/1-attributes","title":"Attributes - PlausibleWeb.Components.Generic.styled_link/1","type":"function"},{"doc":"* `inner_block`","ref":"PlausibleWeb.Components.Generic.html#styled_link/1-slots","title":"Slots - PlausibleWeb.Components.Generic.styled_link/1","type":"function"},{"doc":"Phoenix Component for rendering a user-facing feature toggle\ncapable of flipping booleans in `Plausible.Site` via the `toggle_feature` controller action.","ref":"PlausibleWeb.Components.Site.Feature.html","title":"PlausibleWeb.Components.Site.Feature","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.Components.Site.Feature.html#__resource__/0","title":"PlausibleWeb.Components.Site.Feature.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Components.Site.Feature.html#button_active/1","title":"PlausibleWeb.Components.Site.Feature.button_active/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Components.Site.Feature.html#button_inactive/1","title":"PlausibleWeb.Components.Site.Feature.button_inactive/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.Components.Site.Feature.html#render/2","title":"PlausibleWeb.Components.Site.Feature.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Components.Site.Feature.html#target/4","title":"PlausibleWeb.Components.Site.Feature.target/4","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.Components.Site.Feature.html#template_not_found/2","title":"PlausibleWeb.Components.Site.Feature.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Components.Site.Feature.html#toggle/1","title":"PlausibleWeb.Components.Site.Feature.toggle/1","type":"function"},{"doc":"* `site` (`Plausible.Site`) (required)\n* `setting` (`:atom`) (required)\n* `label` (`:string`) (required)\n* `conn` (`Plug.Conn`) (required)","ref":"PlausibleWeb.Components.Site.Feature.html#toggle/1-attributes","title":"Attributes - PlausibleWeb.Components.Site.Feature.toggle/1","type":"function"},{"doc":"* `inner_block`","ref":"PlausibleWeb.Components.Site.Feature.html#toggle/1-slots","title":"Slots - PlausibleWeb.Components.Site.Feature.toggle/1","type":"function"},{"doc":"This module defines the test case to be used by\ntests that require setting up a connection.\n\nSuch tests rely on `Phoenix.ConnTest` and also\nimport other functionality to make it easier\nto build common data structures and query the data layer.\n\nFinally, if the test case interacts with the database,\nit cannot be async. For this reason, every test runs\ninside a transaction which is reset at the beginning\nof the test unless the test case is marked as async.","ref":"PlausibleWeb.ConnCase.html","title":"PlausibleWeb.ConnCase","type":"module"},{"doc":"","ref":"PlausibleWeb.ControllerHelpers.html","title":"PlausibleWeb.ControllerHelpers","type":"module"},{"doc":"","ref":"PlausibleWeb.ControllerHelpers.html#render_error/2","title":"PlausibleWeb.ControllerHelpers.render_error/2","type":"function"},{"doc":"","ref":"PlausibleWeb.ControllerHelpers.html#render_error/3","title":"PlausibleWeb.ControllerHelpers.render_error/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html","title":"PlausibleWeb.Email","type":"module"},{"doc":"","ref":"PlausibleWeb.Email.html#activation_email/2","title":"PlausibleWeb.Email.activation_email/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#base_email/0","title":"PlausibleWeb.Email.base_email/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#base_email/1","title":"PlausibleWeb.Email.base_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#cancellation_email/1","title":"PlausibleWeb.Email.cancellation_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#check_stats_email/1","title":"PlausibleWeb.Email.check_stats_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#create_site_email/1","title":"PlausibleWeb.Email.create_site_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#dashboard_locked/4","title":"PlausibleWeb.Email.dashboard_locked/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#enterprise_over_limit_internal_email/5","title":"PlausibleWeb.Email.enterprise_over_limit_internal_email/5","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#error_report/3","title":"PlausibleWeb.Email.error_report/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#existing_user_invitation/1","title":"PlausibleWeb.Email.existing_user_invitation/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#import_failure/2","title":"PlausibleWeb.Email.import_failure/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#import_success/2","title":"PlausibleWeb.Email.import_success/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#invitation_accepted/1","title":"PlausibleWeb.Email.invitation_accepted/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#invitation_rejected/1","title":"PlausibleWeb.Email.invitation_rejected/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#mailer_email_from/0","title":"PlausibleWeb.Email.mailer_email_from/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#new_user_invitation/1","title":"PlausibleWeb.Email.new_user_invitation/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#over_limit_email/4","title":"PlausibleWeb.Email.over_limit_email/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#ownership_transfer_accepted/1","title":"PlausibleWeb.Email.ownership_transfer_accepted/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#ownership_transfer_rejected/1","title":"PlausibleWeb.Email.ownership_transfer_rejected/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#ownership_transfer_request/2","title":"PlausibleWeb.Email.ownership_transfer_request/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#password_reset_email/2","title":"PlausibleWeb.Email.password_reset_email/2","type":"function"},{"doc":"Unlike the default 'base' emails, priority emails cannot be unsubscribed from. This is achieved\n by sending them through a dedicated 'priority' message stream in Postmark.","ref":"PlausibleWeb.Email.html#priority_email/0","title":"PlausibleWeb.Email.priority_email/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#priority_email/1","title":"PlausibleWeb.Email.priority_email/1","type":"function"},{"doc":"Render an Phoenix template and set the body on the email.\n\nPass an atom as the template name (:welcome_email) to render HTML *and* plain\ntext emails. Use a string if you only want to render one type, e.g.\n\"welcome_email.text\" or \"welcome_email.html\". Scroll to the top for more examples.","ref":"PlausibleWeb.Email.html#render/3","title":"PlausibleWeb.Email.render/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#site_member_removed/1","title":"PlausibleWeb.Email.site_member_removed/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#site_setup_help/2","title":"PlausibleWeb.Email.site_setup_help/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#site_setup_success/2","title":"PlausibleWeb.Email.site_setup_success/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#spike_notification/5","title":"PlausibleWeb.Email.spike_notification/5","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#trial_one_week_reminder/1","title":"PlausibleWeb.Email.trial_one_week_reminder/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#trial_over_email/1","title":"PlausibleWeb.Email.trial_over_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#trial_upgrade_email/3","title":"PlausibleWeb.Email.trial_upgrade_email/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#weekly_report/3","title":"PlausibleWeb.Email.weekly_report/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#welcome_email/1","title":"PlausibleWeb.Email.welcome_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#yearly_expiration_notification/1","title":"PlausibleWeb.Email.yearly_expiration_notification/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#yearly_renewal_notification/1","title":"PlausibleWeb.Email.yearly_renewal_notification/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html","title":"PlausibleWeb.EmailView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.EmailView.html#__resource__/0","title":"PlausibleWeb.EmailView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#activation_email.html/1","title":"PlausibleWeb.EmailView.activation_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#base_domain/0","title":"PlausibleWeb.EmailView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#cancellation_email.html/1","title":"PlausibleWeb.EmailView.cancellation_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#check_stats_email.html/1","title":"PlausibleWeb.EmailView.check_stats_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#create_site_email.html/1","title":"PlausibleWeb.EmailView.create_site_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#dashboard_locked.html/1","title":"PlausibleWeb.EmailView.dashboard_locked.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#date_format/1","title":"PlausibleWeb.EmailView.date_format/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#enterprise_over_limit_internal.html/1","title":"PlausibleWeb.EmailView.enterprise_over_limit_internal.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#error_report_email.html/1","title":"PlausibleWeb.EmailView.error_report_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#existing_user_invitation.html/1","title":"PlausibleWeb.EmailView.existing_user_invitation.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#google_analytics_import.html/1","title":"PlausibleWeb.EmailView.google_analytics_import.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#greet_recipient/1","title":"PlausibleWeb.EmailView.greet_recipient/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#invitation_accepted.html/1","title":"PlausibleWeb.EmailView.invitation_accepted.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#invitation_rejected.html/1","title":"PlausibleWeb.EmailView.invitation_rejected.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#new_user_invitation.html/1","title":"PlausibleWeb.EmailView.new_user_invitation.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#over_limit.html/1","title":"PlausibleWeb.EmailView.over_limit.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#ownership_transfer_accepted.html/1","title":"PlausibleWeb.EmailView.ownership_transfer_accepted.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#ownership_transfer_rejected.html/1","title":"PlausibleWeb.EmailView.ownership_transfer_rejected.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#ownership_transfer_request.html/1","title":"PlausibleWeb.EmailView.ownership_transfer_request.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#password_reset_email.html/1","title":"PlausibleWeb.EmailView.password_reset_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#plausible_url/0","title":"PlausibleWeb.EmailView.plausible_url/0","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.EmailView.html#render/2","title":"PlausibleWeb.EmailView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#sentry_link/2","title":"PlausibleWeb.EmailView.sentry_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#site_member_removed.html/1","title":"PlausibleWeb.EmailView.site_member_removed.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#site_setup_help_email.html/1","title":"PlausibleWeb.EmailView.site_setup_help_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#site_setup_success_email.html/1","title":"PlausibleWeb.EmailView.site_setup_success_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#spike_notification.html/1","title":"PlausibleWeb.EmailView.spike_notification.html/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.EmailView.html#template_not_found/2","title":"PlausibleWeb.EmailView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#trial_one_week_reminder.html/1","title":"PlausibleWeb.EmailView.trial_one_week_reminder.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#trial_over_email.html/1","title":"PlausibleWeb.EmailView.trial_over_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#trial_upgrade_email.html/1","title":"PlausibleWeb.EmailView.trial_upgrade_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#welcome_email.html/1","title":"PlausibleWeb.EmailView.welcome_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#yearly_expiration_notification.html/1","title":"PlausibleWeb.EmailView.yearly_expiration_notification.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#yearly_renewal_notification.html/1","title":"PlausibleWeb.EmailView.yearly_renewal_notification.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html","title":"PlausibleWeb.Endpoint","type":"module"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#broadcast/3","title":"PlausibleWeb.Endpoint.broadcast/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#broadcast!/3","title":"PlausibleWeb.Endpoint.broadcast!/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#broadcast_from/4","title":"PlausibleWeb.Endpoint.broadcast_from/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#broadcast_from!/4","title":"PlausibleWeb.Endpoint.broadcast_from!/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#call/2","title":"PlausibleWeb.Endpoint.call/2","type":"function"},{"doc":"Returns the child specification to start the endpoint\nunder a supervision tree.","ref":"PlausibleWeb.Endpoint.html#child_spec/1","title":"PlausibleWeb.Endpoint.child_spec/1","type":"function"},{"doc":"Returns the endpoint configuration for `key`\n\nReturns `default` if the key does not exist.","ref":"PlausibleWeb.Endpoint.html#config/2","title":"PlausibleWeb.Endpoint.config/2","type":"function"},{"doc":"Reloads the configuration given the application environment changes.","ref":"PlausibleWeb.Endpoint.html#config_change/2","title":"PlausibleWeb.Endpoint.config_change/2","type":"function"},{"doc":"Returns the host for the given endpoint.","ref":"PlausibleWeb.Endpoint.html#host/0","title":"PlausibleWeb.Endpoint.host/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#init/1","title":"PlausibleWeb.Endpoint.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#local_broadcast/3","title":"PlausibleWeb.Endpoint.local_broadcast/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#local_broadcast_from/4","title":"PlausibleWeb.Endpoint.local_broadcast_from/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#patch_session_opts/0","title":"PlausibleWeb.Endpoint.patch_session_opts/0","type":"function"},{"doc":"Generates the path information when routing to this endpoint.","ref":"PlausibleWeb.Endpoint.html#path/1","title":"PlausibleWeb.Endpoint.path/1","type":"function"},{"doc":"Generates the script name.","ref":"PlausibleWeb.Endpoint.html#script_name/0","title":"PlausibleWeb.Endpoint.script_name/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#secure_cookie?/0","title":"PlausibleWeb.Endpoint.secure_cookie?/0","type":"function"},{"doc":"Starts the endpoint supervision tree.\n\nAll other options are merged into the endpoint configuration.","ref":"PlausibleWeb.Endpoint.html#start_link/1","title":"PlausibleWeb.Endpoint.start_link/1","type":"function"},{"doc":"Generates a base64-encoded cryptographic hash (sha512) to a static file\nin `priv/static`. Meant to be used for Subresource Integrity with CDNs.","ref":"PlausibleWeb.Endpoint.html#static_integrity/1","title":"PlausibleWeb.Endpoint.static_integrity/1","type":"function"},{"doc":"Returns a two item tuple with the first item being the `static_path`\nand the second item being the `static_integrity`.","ref":"PlausibleWeb.Endpoint.html#static_lookup/1","title":"PlausibleWeb.Endpoint.static_lookup/1","type":"function"},{"doc":"Generates a route to a static file in `priv/static`.","ref":"PlausibleWeb.Endpoint.html#static_path/1","title":"PlausibleWeb.Endpoint.static_path/1","type":"function"},{"doc":"Generates the static URL without any path information.\n\nIt uses the configuration under `:static_url` to generate\nsuch. It falls back to `:url` if `:static_url` is not set.","ref":"PlausibleWeb.Endpoint.html#static_url/0","title":"PlausibleWeb.Endpoint.static_url/0","type":"function"},{"doc":"Generates the endpoint base URL but as a `URI` struct.\n\nIt uses the configuration under `:url` to generate such.\nUseful for manipulating the URL data and passing it to\nURL helpers.","ref":"PlausibleWeb.Endpoint.html#struct_url/0","title":"PlausibleWeb.Endpoint.struct_url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#subscribe/2","title":"PlausibleWeb.Endpoint.subscribe/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#unsubscribe/1","title":"PlausibleWeb.Endpoint.unsubscribe/1","type":"function"},{"doc":"Generates the endpoint base URL without any path information.\n\nIt uses the configuration under `:url` to generate such.","ref":"PlausibleWeb.Endpoint.html#url/0","title":"PlausibleWeb.Endpoint.url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#websocket_url/0","title":"PlausibleWeb.Endpoint.websocket_url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorHelpers.html","title":"PlausibleWeb.ErrorHelpers","type":"module"},{"doc":"","ref":"PlausibleWeb.ErrorHelpers.html#error_tag/2","title":"PlausibleWeb.ErrorHelpers.error_tag/2","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorHelpers.html#translate_error/1","title":"PlausibleWeb.ErrorHelpers.translate_error/1","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorReportController.html","title":"PlausibleWeb.ErrorReportController","type":"module"},{"doc":"","ref":"PlausibleWeb.ErrorReportController.html#submit_error_report/2","title":"PlausibleWeb.ErrorReportController.submit_error_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorView.html","title":"PlausibleWeb.ErrorView","type":"module"},{"doc":"","ref":"PlausibleWeb.ErrorView.html#404_error.html/1","title":"PlausibleWeb.ErrorView.404_error.html/1","type":"function"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.ErrorView.html#__resource__/0","title":"PlausibleWeb.ErrorView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorView.html#generic_error.html/1","title":"PlausibleWeb.ErrorView.generic_error.html/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.ErrorView.html#render/2","title":"PlausibleWeb.ErrorView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorView.html#server_error.html/1","title":"PlausibleWeb.ErrorView.server_error.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorView.html#server_error_report_thanks.html/1","title":"PlausibleWeb.ErrorView.server_error_report_thanks.html/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.ErrorView.html#template_not_found/2","title":"PlausibleWeb.ErrorView.template_not_found/2","type":"function"},{"doc":"A Plug that fetches favicon images from DuckDuckGo and returns them\nto the Plausible frontend.\n\nThe proxying is there so we can reduce the number of third-party domains that\nthe browser clients need to connect to. Our goal is to have 0 third-party domain\nconnections on the website for privacy reasons.\n\nThis module also maps between categorized sources and their respective URLs for favicons.\nWhat does that mean exactly? During ingestion we use `PlausibleWeb.RefInspector.parse/1` to\ncategorize our referrer sources like so:\n\ngoogle.com -> Google\ngoogle.co.uk -> Google\ngoogle.com.au -> Google\n\nSo when we show Google as a source in the dashboard, the request to this plug will come as:\nhttps://plausible/io/favicon/sources/Google\n\nNow, when we want to show a favicon for Google, we need to convert Google -> google.com or\nsome other hostname owned by Google:\nhttps://icons.duckduckgo.com/ip3/google.com.ico\n\nThe mapping from source category -> source hostname is stored in \"priv/referer_favicon_domains.json\" and\nmanaged by `Mix.Tasks.GenerateReferrerFavicons.run/1`","ref":"PlausibleWeb.Favicon.html","title":"PlausibleWeb.Favicon","type":"module"},{"doc":"Proxies HTTP request to DuckDuckGo favicon service. Swallows hop-by-hop HTTP\nheaders that should not be forwarded as defined in [RFC 2616](https://www.rfc-editor.org/rfc/rfc2616#section-13.5.1)","ref":"PlausibleWeb.Favicon.html#call/2","title":"PlausibleWeb.Favicon.call/2","type":"function"},{"doc":"Cases where we show a placeholder icon instead:\n\n1. In case of network error to DuckDuckGo\n2. In case of non-2xx status code from DuckDuckGo\n3. In case of broken image response body from DuckDuckGo\n\nI'm not sure why DDG sometimes returns a broken PNG image in their response\nbut we filter that out. When the icon request fails, we show a placeholder\nfavicon instead. The placeholder is an emoji from\n[https://favicon.io/emoji-favicons/](https://favicon.io/emoji-favicons/)\n\nDuckDuckGo favicon service has some issues with [SVG favicons](https://css-tricks.com/svg-favicons-and-all-the-fun-things-we-can-do-with-them/).\nFor some reason, they return them with `content-type=image/x-icon` whereas SVG\nicons should be returned with `content-type=image/svg+xml`. This Plug detects\nwhen the response body starts with ` People. It's important to enforce permissions in this controller.\n\n Owner - Can manage users, can trigger a 'transfer ownership' request\n Admin - Can manage users\n Viewer - Can not access user management settings\n Anyone - Can accept invitations\n\n Everything else should be explicitly disallowed.","ref":"PlausibleWeb.Site.MembershipController.html","title":"PlausibleWeb.Site.MembershipController","type":"module"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#invite_member/2","title":"PlausibleWeb.Site.MembershipController.invite_member/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#invite_member_form/2","title":"PlausibleWeb.Site.MembershipController.invite_member_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#remove_member/2","title":"PlausibleWeb.Site.MembershipController.remove_member/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#transfer_ownership/2","title":"PlausibleWeb.Site.MembershipController.transfer_ownership/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#transfer_ownership_form/2","title":"PlausibleWeb.Site.MembershipController.transfer_ownership_form/2","type":"function"},{"doc":"Updates the role of a user. The user being updated could be the same or different from the user taking\n the action. When updating the role, it's important to enforce permissions:\n\n Owner - Can update anyone's role except for themselves. If they want to change their own role, they have to use the 'transfer ownership' feature.\n Admin - Can update anyone's role except for owners. Can downgrade their own access to 'viewer'. Can promote a viewer to admin.","ref":"PlausibleWeb.Site.MembershipController.html#update_role/2","title":"PlausibleWeb.Site.MembershipController.update_role/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipView.html","title":"PlausibleWeb.Site.MembershipView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.Site.MembershipView.html#__resource__/0","title":"PlausibleWeb.Site.MembershipView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipView.html#invite_member_form.html/1","title":"PlausibleWeb.Site.MembershipView.invite_member_form.html/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.Site.MembershipView.html#render/2","title":"PlausibleWeb.Site.MembershipView.render/2","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.Site.MembershipView.html#template_not_found/2","title":"PlausibleWeb.Site.MembershipView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipView.html#transfer_ownership_form.html/1","title":"PlausibleWeb.Site.MembershipView.transfer_ownership_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html","title":"PlausibleWeb.SiteController","type":"module"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_monthly_report_recipient/2","title":"PlausibleWeb.SiteController.add_monthly_report_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_snippet/2","title":"PlausibleWeb.SiteController.add_snippet/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_snippet_after_domain_change/2","title":"PlausibleWeb.SiteController.add_snippet_after_domain_change/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_spike_notification_recipient/2","title":"PlausibleWeb.SiteController.add_spike_notification_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_weekly_report_recipient/2","title":"PlausibleWeb.SiteController.add_weekly_report_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#change_domain/2","title":"PlausibleWeb.SiteController.change_domain/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#change_domain_submit/2","title":"PlausibleWeb.SiteController.change_domain_submit/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#create_shared_link/2","title":"PlausibleWeb.SiteController.create_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#create_site/2","title":"PlausibleWeb.SiteController.create_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#delete_custom_domain/2","title":"PlausibleWeb.SiteController.delete_custom_domain/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#delete_google_auth/2","title":"PlausibleWeb.SiteController.delete_google_auth/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#delete_shared_link/2","title":"PlausibleWeb.SiteController.delete_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#delete_site/2","title":"PlausibleWeb.SiteController.delete_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#disable_monthly_report/2","title":"PlausibleWeb.SiteController.disable_monthly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#disable_spike_notification/2","title":"PlausibleWeb.SiteController.disable_spike_notification/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#disable_weekly_report/2","title":"PlausibleWeb.SiteController.disable_weekly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#edit_shared_link/2","title":"PlausibleWeb.SiteController.edit_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#enable_monthly_report/2","title":"PlausibleWeb.SiteController.enable_monthly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#enable_spike_notification/2","title":"PlausibleWeb.SiteController.enable_spike_notification/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#enable_weekly_report/2","title":"PlausibleWeb.SiteController.enable_weekly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#forget_imported/2","title":"PlausibleWeb.SiteController.forget_imported/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google/2","title":"PlausibleWeb.SiteController.import_from_google/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google_confirm/2","title":"PlausibleWeb.SiteController.import_from_google_confirm/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google_user_metric_notice/2","title":"PlausibleWeb.SiteController.import_from_google_user_metric_notice/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google_view_id/2","title":"PlausibleWeb.SiteController.import_from_google_view_id/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google_view_id_form/2","title":"PlausibleWeb.SiteController.import_from_google_view_id_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#index/2","title":"PlausibleWeb.SiteController.index/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#make_private/2","title":"PlausibleWeb.SiteController.make_private/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#make_public/2","title":"PlausibleWeb.SiteController.make_public/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#new/2","title":"PlausibleWeb.SiteController.new/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#new_shared_link/2","title":"PlausibleWeb.SiteController.new_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#remove_monthly_report_recipient/2","title":"PlausibleWeb.SiteController.remove_monthly_report_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#remove_spike_notification_recipient/2","title":"PlausibleWeb.SiteController.remove_spike_notification_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#remove_weekly_report_recipient/2","title":"PlausibleWeb.SiteController.remove_weekly_report_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#reset_stats/2","title":"PlausibleWeb.SiteController.reset_stats/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings/2","title":"PlausibleWeb.SiteController.settings/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_custom_domain/2","title":"PlausibleWeb.SiteController.settings_custom_domain/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_danger_zone/2","title":"PlausibleWeb.SiteController.settings_danger_zone/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_email_reports/2","title":"PlausibleWeb.SiteController.settings_email_reports/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_funnels/2","title":"PlausibleWeb.SiteController.settings_funnels/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_general/2","title":"PlausibleWeb.SiteController.settings_general/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_goals/2","title":"PlausibleWeb.SiteController.settings_goals/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_people/2","title":"PlausibleWeb.SiteController.settings_people/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_props/2","title":"PlausibleWeb.SiteController.settings_props/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_search_console/2","title":"PlausibleWeb.SiteController.settings_search_console/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_visibility/2","title":"PlausibleWeb.SiteController.settings_visibility/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_feature_visibility/2","title":"PlausibleWeb.SiteController.update_feature_visibility/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_google_auth/2","title":"PlausibleWeb.SiteController.update_google_auth/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_settings/2","title":"PlausibleWeb.SiteController.update_settings/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_shared_link/2","title":"PlausibleWeb.SiteController.update_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_spike_notification/2","title":"PlausibleWeb.SiteController.update_spike_notification/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html","title":"PlausibleWeb.SiteView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.SiteView.html#__resource__/0","title":"PlausibleWeb.SiteView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#base_domain/0","title":"PlausibleWeb.SiteView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#change_domain.html/1","title":"PlausibleWeb.SiteView.change_domain.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#edit_shared_link.html/1","title":"PlausibleWeb.SiteView.edit_shared_link.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#goal_name/1","title":"PlausibleWeb.SiteView.goal_name/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#google_logo/1","title":"PlausibleWeb.SiteView.google_logo/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#gravatar/2","title":"PlausibleWeb.SiteView.gravatar/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#import_from_google_confirm.html/1","title":"PlausibleWeb.SiteView.import_from_google_confirm.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#import_from_google_user_metric_form.html/1","title":"PlausibleWeb.SiteView.import_from_google_user_metric_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#import_from_google_view_id_form.html/1","title":"PlausibleWeb.SiteView.import_from_google_view_id_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#index.html/1","title":"PlausibleWeb.SiteView.index.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#new.html/1","title":"PlausibleWeb.SiteView.new.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#new_shared_link.html/1","title":"PlausibleWeb.SiteView.new_shared_link.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#plausible_url/0","title":"PlausibleWeb.SiteView.plausible_url/0","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.SiteView.html#render/2","title":"PlausibleWeb.SiteView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#render_snippet/1","title":"PlausibleWeb.SiteView.render_snippet/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_custom_domain.html/1","title":"PlausibleWeb.SiteView.settings_custom_domain.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_danger_zone.html/1","title":"PlausibleWeb.SiteView.settings_danger_zone.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_email_reports.html/1","title":"PlausibleWeb.SiteView.settings_email_reports.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_funnels.html/1","title":"PlausibleWeb.SiteView.settings_funnels.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_general.html/1","title":"PlausibleWeb.SiteView.settings_general.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_goals.html/1","title":"PlausibleWeb.SiteView.settings_goals.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_people.html/1","title":"PlausibleWeb.SiteView.settings_people.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_props.html/1","title":"PlausibleWeb.SiteView.settings_props.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_search_console.html/1","title":"PlausibleWeb.SiteView.settings_search_console.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_visibility.html/1","title":"PlausibleWeb.SiteView.settings_visibility.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#shared_link_dest/2","title":"PlausibleWeb.SiteView.shared_link_dest/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#snippet.html/1","title":"PlausibleWeb.SiteView.snippet.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#snippet_after_domain_change.html/1","title":"PlausibleWeb.SiteView.snippet_after_domain_change.html/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.SiteView.html#template_not_found/2","title":"PlausibleWeb.SiteView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#with_indefinite_article/1","title":"PlausibleWeb.SiteView.with_indefinite_article/1","type":"function"},{"doc":"This controller is responsible for rendering stats dashboards.\n\nThe stats dashboards are currently the only part of the app that uses client-side\nrendering. Since the dashboards are heavily interactive, they are built with React\nwhich is an appropriate choice for highly interactive browser UIs.\n\n \nsequenceDiagram\n Browser->>StatsController: GET /mydomain.com\n StatsController-->>Browser: StatsView.render(\"stats.html\")\n Note left of Browser: ReactDom.render(Dashboard)\n\n Browser -) Api.StatsController: GET /api/stats/mydomain.com/top-stats\n Api.StatsController --) Browser: {\"top_stats\": [...]}\n Note left of Browser: TopStats.render()\n\n Browser -) Api.StatsController: GET /api/stats/mydomain.com/main-graph\n Api.StatsController --) Browser: [{\"plot\": [...], \"labels\": [...]}, ...]\n Note left of Browser: VisitorGraph.render()\n\n Browser -) Api.StatsController: GET /api/stats/mydomain.com/sources\n Api.StatsController --) Browser: [{\"name\": \"Google\", \"visitors\": 292150}, ...]\n Note left of Browser: Sources.render()\n\n Note over Browser,StatsController: And so on, for all reports in the viewport\n \n\nThis reasoning for this sequence is as follows:\n 1. First paint is fast because it doesn't do any data aggregation yet - good UX\n 2. The basic structure of the dashboard is rendered with spinners before reports are ready - good UX\n 2. Rendering on the frontend allows for maximum interactivity. Re-rendering and re-fetching can be as granular as needed.\n 3. Routing on the frontend allows the user to navigate the dashboard without reloading the page and losing context\n 4. Rendering on the frontend allows caching results in the browser to reduce pressure on backends and storage\n 3.1 No client-side caching has been implemented yet. This is still theoretical. See https://github.com/plausible/analytics/discussions/1278\n 3.2 This is a big potential opportunity, because analytics data is mostly immutable. Clients can cache all historical data.\n 5. Since frontend rendering & navigation is harder to build and maintain than regular server-rendered HTML, we don't use SPA-style rendering anywhere else\n .The only place currently where the benefits outweigh the costs is the dashboard.","ref":"PlausibleWeb.StatsController.html","title":"PlausibleWeb.StatsController","type":"module"},{"doc":"","ref":"PlausibleWeb.StatsController.html#authenticate_shared_link/2","title":"PlausibleWeb.StatsController.authenticate_shared_link/2","type":"function"},{"doc":"The export is limited to 300 entries for other reports and 100 entries for pages because bigger result sets\nstart causing failures. Since we request data like time on page or bounce_rate for pages in a separate query\nusing the IN filter, it causes the requests to balloon in payload size.","ref":"PlausibleWeb.StatsController.html#csv_export/2","title":"PlausibleWeb.StatsController.csv_export/2","type":"function"},{"doc":"Authorizes and renders a shared link:\n 1. Shared link with no password protection: needs to just make sure the shared link entry is still\n in our database. This check makes sure shared link access can be revoked by the site admins. If the\n shared link exists, render it directly.\n\n 2. Shared link with password protection: Same checks as without the password, but an extra step is taken to\n protect the page with a password. When the user passes the password challenge, a cookie is set with Plausible.Auth.Token.sign_shared_link().\n The cookie allows the user to access the dashboard for 24 hours without entering the password again.\n\n #","ref":"PlausibleWeb.StatsController.html#shared_link/2","title":"PlausibleWeb.StatsController.shared_link/2","type":"function"},{"doc":"The URL format for shared links was changed in [this pull request](https://github.com/plausible/analytics/pull/752) in order\n to make the URLs easier to bookmark. The old format is supported along with the new in order to not break old links.\n\n See: https://plausible.io/docs/shared-links","ref":"PlausibleWeb.StatsController.html#shared_link/2-backwards-compatibility","title":"Backwards compatibility - PlausibleWeb.StatsController.shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsController.html#stats/2","title":"PlausibleWeb.StatsController.stats/2","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html","title":"PlausibleWeb.StatsView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.StatsView.html#__resource__/0","title":"PlausibleWeb.StatsView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#base_domain/0","title":"PlausibleWeb.StatsView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#large_number_format/1","title":"PlausibleWeb.StatsView.large_number_format/1","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#plausible_url/0","title":"PlausibleWeb.StatsView.plausible_url/0","type":"function"},{"doc":"Returns a readable stats URL.\n\nNative Phoenix router functions percent-encode all diacritics, resulting in\nugly URLs, e.g. `https://plausible.io/café.com` transforms into\n`https://plausible.io/caf%C3%A9.com`.\n\nThis function encodes only the slash (`/`) character from the site's domain.","ref":"PlausibleWeb.StatsView.html#pretty_stats_url/1","title":"PlausibleWeb.StatsView.pretty_stats_url/1","type":"function"},{"doc":"iex> PlausibleWeb.StatsView.pretty_stats_url(%Plausible.Site{domain: \"user.gittea.io/repo\"})\n \"http://localhost:8000/user.gittea.io%2Frepo\"\n\n iex> PlausibleWeb.StatsView.pretty_stats_url(%Plausible.Site{domain: \"anakin.test\"})\n \"http://localhost:8000/anakin.test\"\n\n iex> PlausibleWeb.StatsView.pretty_stats_url(%Plausible.Site{domain: \"café.test\"})\n \"http://localhost:8000/café.test\"","ref":"PlausibleWeb.StatsView.html#pretty_stats_url/1-examples","title":"Examples - PlausibleWeb.StatsView.pretty_stats_url/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.StatsView.html#render/2","title":"PlausibleWeb.StatsView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#shared_link_password.html/1","title":"PlausibleWeb.StatsView.shared_link_password.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#site_locked.html/1","title":"PlausibleWeb.StatsView.site_locked.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#stats.html/1","title":"PlausibleWeb.StatsView.stats.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#stats_container_class/1","title":"PlausibleWeb.StatsView.stats_container_class/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.StatsView.html#template_not_found/2","title":"PlausibleWeb.StatsView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#waiting_first_pageview.html/1","title":"PlausibleWeb.StatsView.waiting_first_pageview.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Tracker.html","title":"PlausibleWeb.Tracker","type":"module"},{"doc":"","ref":"PlausibleWeb.Tracker.html#call/2","title":"PlausibleWeb.Tracker.call/2","type":"function"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"PlausibleWeb.Tracker.html#child_spec/1","title":"PlausibleWeb.Tracker.child_spec/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Tracker.html#init/1","title":"PlausibleWeb.Tracker.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.UnsubscribeController.html","title":"PlausibleWeb.UnsubscribeController","type":"module"},{"doc":"","ref":"PlausibleWeb.UnsubscribeController.html#monthly_report/2","title":"PlausibleWeb.UnsubscribeController.monthly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.UnsubscribeController.html#weekly_report/2","title":"PlausibleWeb.UnsubscribeController.weekly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.UnsubscribeView.html","title":"PlausibleWeb.UnsubscribeView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.UnsubscribeView.html#__resource__/0","title":"PlausibleWeb.UnsubscribeView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.UnsubscribeView.html#render/2","title":"PlausibleWeb.UnsubscribeView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.UnsubscribeView.html#success.html/1","title":"PlausibleWeb.UnsubscribeView.success.html/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.UnsubscribeView.html#template_not_found/2","title":"PlausibleWeb.UnsubscribeView.template_not_found/2","type":"function"},{"doc":"# Plausible Analytics\n\n \n \n \n \n \n \n Simple Metrics |\n Lightweight Script |\n Privacy Focused |\n Open Source |\n Docs |\n Contributing \n \n \n\n[Plausible Analytics](https://plausible.io/) is an easy to use, lightweight (< 1 KB), open source and privacy-friendly alternative to Google Analytics. It doesn’t use cookies and is fully compliant with GDPR, CCPA and PECR. You can self-host or have us run Plausible for you in the cloud. Here's [the live demo of our own website stats](https://plausible.io/plausible.io). Made and hosted in the EU 🇪🇺\n\nWe are dedicated to making web analytics more privacy-friendly. Our mission is to reduce corporate surveillance by providing an alternative web analytics tool which doesn’t come from the AdTech world. We are completely independent and solely funded by our subscribers.\n\n![Plausible Analytics](https://plausible.io/docs/img/plausible-analytics.png)","ref":"readme.html","title":"Introduction","type":"extras"},{"doc":"Here's what makes Plausible a great Google Analytics alternative and why we're trusted by 11,000+ paying subscribers to deliver their website and business insights:\n\n- **Clutter Free**: Plausible Analytics provides [simple web analytics](https://plausible.io/simple-web-analytics) and it cuts through the noise. No layers of menus, no need for custom reports. Get all the important insights on one single page. No training necessary.\n- **GDPR/CCPA/PECR compliant**: Measure traffic, not individuals. No personal data or IP addresses are ever stored in our database. We don't use cookies or any other persistent identifiers. [Read more about our data policy](https://plausible.io/data-policy)\n- **Lightweight**: Plausible Analytics works by loading a script on your website, like Google Analytics. Our script is [45x smaller](https://plausible.io/lightweight-web-analytics), making your website quicker to load. You can also send events directly to our [events API](https://plausible.io/docs/events-api).\n- **Email or Slack reports**: Keep an eye on your traffic with weekly and/or monthly email or Slack reports. You can also get traffic spike notifications.\n- **Invite team members and share stats**: You have the option to be transparent and open your web analytics to everyone. Your website stats are private by default but you can choose to make them public so anyone with your custom link can view them. You can [invite team members](https://plausible.io/docs/users-roles) and assign user roles too.\n- **Define key goals and track conversions**: Create custom events with custom dimensions to track conversions and attribution to understand and identify the trends that matter. Includes easy ways to track outbound link clicks, file downloads and 404 error pages.\n- **Search keywords**: Integrate your dashboard with Google Search Console to get the most accurate reporting on your search keywords.\n- **SPA support**: Plausible is built with modern web frameworks in mind and it works automatically with any pushState based router on the frontend. We also support frameworks that use the URL hash for routing. See [our documentation](https://plausible.io/docs/hash-based-routing).\n- **Smooth transition from Google Analytics**: There's a realtime dashboard, entry pages report and integration with Search Console. You can track your paid campaigns and conversions. You can invite team members. You can even [import your historical Google Analytics stats](https://plausible.io/docs/google-analytics-import). Learn how to [get the most out of your Plausible experience](https://plausible.io/docs/your-plausible-experience) and join thousands who have already migrated from Google Analytics.\n\nInterested to learn more? [Read more on our website](https://plausible.io), learn more about the team and the goals of the project on [our about page](https://plausible.io/about) or explore [the documentation](https://plausible.io/docs).","ref":"readme.html#why-plausible","title":"Why Plausible? - Introduction","type":"extras"},{"doc":"Plausible Analytics is an independently owned and actively developed project. To keep the project development going, to stay in business, to continue putting effort into building a better product and to cover our costs, we need to charge a fee.\n\nGoogle Analytics is free because Google has built their company and their wealth by collecting and analyzing huge amounts of personal information from web users and using these personal and behavioral insights to sell advertisements.\n\nPlausible has no part in that business model. No personal data is being collected and analyzed either. With Plausible, you 100% own and control all of your website data. This data is not being shared with or sold to any third-parties.\n\nWe choose the subscription business model rather than the business model of surveillance capitalism. See reasons why we believe you should [stop using Google Analytics on your website](https://plausible.io/blog/remove-google-analytics).","ref":"readme.html#why-is-plausible-analytics-cloud-not-free-like-google-analytics","title":"Why is Plausible Analytics Cloud not free like Google Analytics? - Introduction","type":"extras"},{"doc":"The easiest way to get started with Plausible is with [our official managed service in the cloud](https://plausible.io/#pricing). It takes 2 minutes to start counting your stats with a worldwide CDN, high availability, backups, security and maintenance all done for you by us.\n\nIn order to be compliant with the GDPR and the Schrems II ruling, all visitor data for our managed service in the cloud is exclusively processed on servers and cloud infrastructure owned and operated by European providers. Your website data never leaves the EU.\n\nOur managed hosting can save a substantial amount of developer time and resources. For most sites this ends up being the best value option and the revenue goes to funding the maintenance and further development of Plausible. So you’ll be supporting open source software and getting a great service!\n\n#","ref":"readme.html#getting-started-with-plausible","title":"Getting started with Plausible - Introduction","type":"extras"},{"doc":"Plausible is [open source web analytics](https://plausible.io/open-source-website-analytics) and we have a free as in beer [self-hosted solution](https://plausible.io/self-hosted-web-analytics). Here are the differences between Plausible Analytics managed hosting in the cloud and the self-hosting:\n\n| | Plausible Cloud | Self-Hosting |\n| ------------- | ------------- | ------------- |\n| Hosting | Easy and convenient. It takes 2 minutes to start counting your stats with a worldwide CDN, high availability, backups, security and maintenance all done for you by us. We manage everything so you don’t have to worry about anything and can focus on your stats. | You do it all yourself. You need to get a server and you need to manage your infrastructure. You are responsible for installation, maintenance, upgrades, server capacity, uptime, backup, security, stability, consistency, loading time and so on. |\n| Storage | All visitor data is exclusively processed on EU-owned cloud infrastructure. We keep your site data on a secure, encrypted and green energy powered server in Germany. This ensures that your site data is protected by the strict European Union data privacy laws and ensures compliance with GDPR. Your website data never leaves the EU. | You have full control and can host your instance on any server in any country that you wish. Host it on a server in your basement or host it with any cloud provider wherever you want, even those that are not GDPR compliant. |\n| Features | Continuously developed and improved with new features and updates multiple times per week. | [It's a long term release](https://plausible.io/blog/building-open-source) published twice per year. Selected premium features are not available as we aim to ensure a protective barrier around our cloud offering. |\n| Raw data | You see all your site stats and metrics on our modern-looking, simple to use and fast loading dashboard. You can only see the stats aggregated in the dashboard. You can download the stats using the [CSV export](https://plausible.io/docs/export-stats), [stats API](https://plausible.io/docs/stats-api) or tools such as the [Data Studio Connector](https://plausible.io/docs/integration-guides#google-data-studio). | Do you want access to the raw data? Self-hosting gives you that option. You can take the data directly from the ClickHouse database. |\n| Premium Support | Real support delivered by real human beings who build and maintain Plausible. | Premium support is not included. Self-hosting is community supported only. |\n| Costs | There's a cost associated with providing an analytics service so we charge a subscription fee. We choose the subscription business model rather than the business model of surveillance capitalism. Your money funds further development of Plausible. | You need to pay for your server, CDN, backups and whatever other cost there is associated with running the infrastructure. You never have to pay any fees to us. Your money goes to 3rd party companies with no connection to us.|\n\nInterested in self-hosting Plausible on your server? Take a look at our [self-hosting installation instructions](https://plausible.io/docs/self-hosting).\n\nPlausible Self-Hosted is a community supported project and there are no guarantees that you will get support from the creators of Plausible to troubleshoot your self-hosting issues. There is a [community supported forum](https://github.com/plausible/analytics/discussions/categories/self-hosted-support) where you can ask for help.\n\nOur only source of funding is our premium, managed service for running Plausible in the cloud. If you're looking for an alternative way to support the project, we've put together some sponsorship packages. If you choose to self-host Plausible you can [become a sponsor](https://github.com/sponsors/plausible) which is a great way to give back to the community and to contribute to the long-term sustainability of the project.","ref":"readme.html#can-plausible-analytics-be-self-hosted","title":"Can Plausible Analytics be self-hosted? - Introduction","type":"extras"},{"doc":"Plausible Analytics is a standard Elixir/Phoenix application backed by a PostgreSQL database for general data and a Clickhouse\ndatabase for stats. On the frontend we use [TailwindCSS](https://tailwindcss.com/) for styling and React to make the dashboard interactive.","ref":"readme.html#technology","title":"Technology - Introduction","type":"extras"},{"doc":"For anyone wishing to contribute to Plausible, we recommend taking a look at [our contributor guide](https://github.com/plausible/analytics/blob/master/CONTRIBUTING.md).","ref":"readme.html#contributors","title":"Contributors - Introduction","type":"extras"},{"doc":"We welcome feedback from our community. We have a public roadmap driven by the features suggested by the community members. Take a look at our [feedback board](https://plausible.io/feedback). Please let us know if you have any requests and vote on open issues so we can better prioritize.\n\nTo stay up to date with all the latest news and product updates, make sure to follow us on [X (formerly Twitter)](https://twitter.com/plausiblehq), [LinkedIn](https://www.linkedin.com/company/plausible-analytics/) or [Mastodon](https://fosstodon.org/@plausible).","ref":"readme.html#feedback-roadmap","title":"Feedback & Roadmap - Introduction","type":"extras"},{"doc":"Plausible is open source under the GNU Affero General Public License Version 3 (AGPLv3) or any later version. You can [find it here](https://github.com/plausible/analytics/blob/master/LICENSE.md).\n\nTo avoid issues with AGPL virality, we've released the JavaScript tracker which gets included on your website under the MIT license. You can [find it here](https://github.com/plausible/analytics/blob/master/tracker/LICENSE.md).\n\nCopyright (c) 2018-present Plausible Insights OÜ. Plausible Analytics name and logo are trademarks of Plausible Insights OÜ. Please see our [trademark guidelines](https://plausible.io/trademark) for info on acceptable usage.","ref":"readme.html#license-trademarks","title":"License & Trademarks - Introduction","type":"extras"},{"doc":"# Contributing\n\nWe welcome everyone to contribute to Plausible. This document is to help you on setting up your environment, finding a task, and opening pull requests.","ref":"contributing.html","title":"Contributing","type":"extras"},{"doc":"The easiest way to get up and running is to [install](https://docs.docker.com/get-docker/) and use Docker for running both Postgres and Clickhouse.\n\nMake sure Docker, Elixir, Erlang and Node.js are all installed on your development machine. The [`.tool-versions`](https://github.com/plausible/analytics/blob/master/.tool-versions) file is available to use with [asdf](https://github.com/asdf-vm/asdf) or similar tools.\n\n#","ref":"contributing.html#development-setup","title":"Development setup - Contributing","type":"extras"},{"doc":"1. Run both `make postgres` and `make clickhouse`.\n2. You can set up everything with `make install`, alternatively run each command separately:\n 1. Run `mix deps.get`. This will download the required Elixir dependencies.\n 2. Run `mix ecto.create`. This will create the required databases in both Postgres and Clickhouse.\n 3. Run `mix ecto.migrate` to build the database schema.\n 4. Run `mix run priv/repo/seeds.exs` to seed the database. Check the [Seeds](#Seeds) section for more.\n 5. Run `npm ci --prefix assets` to install the required client-side dependencies.\n 6. Run `npm ci --prefix tracker` to install the required tracker dependencies.\n 7. Run `npm run deploy --prefix tracker` to generate tracker files in `priv/tracker/js`\n 8. Run `mix download_country_database` to fetch geolocation database\n3. Run `make server` or `mix phx.server` to start the Phoenix server.\n4. The system is now available on `localhost:8000`.\n\n#","ref":"contributing.html#start-the-environment","title":"Start the environment - Contributing","type":"extras"},{"doc":"You can optionally seed your database to automatically create an account and a site with stats:\n\n1. Run `mix run priv/repo/seeds.exs` to seed the database.\n2. Start the server with `make server` and navigate to `http://localhost:8000/login`.\n3. Log in with the following e-mail and password combination: `user@plausible.test` and `plausible`.\n4. You should now have a `dummy.site` site with generated stats.\n\nAlternatively, you can manually create a new account:\n\n1. Navigate to `http://localhost:8000/register` and fill in the form.\n2. Fill in the rest of the forms and for the domain use `dummy.site`\n3. Skip the JS snippet and click start collecting data.\n4. Run `mix send_pageview` from the terminal to generate a fake pageview event for the dummy site.\n5. You should now be all set!\n\n#","ref":"contributing.html#seeds","title":"Seeds - Contributing","type":"extras"},{"doc":"1. Stop and remove the Postgres container with `make postgres-stop`.\n2. Stop and remove the Clickhouse container with `make clickhouse-stop`.\n\nVolumes are preserved. You'll find that the Postgres and Clickhouse state are retained when you bring them up again the next time: no need to re-register and so on.\n\nNote: Since we are deleting the containers, be careful when deleting volumes with `docker volume prune`. You might accidentally delete the database and would have to go through re-registration process.\n\n#","ref":"contributing.html#stopping-docker-containers","title":"Stopping Docker containers - Contributing","type":"extras"},{"doc":"`pre-commit` requires Python to be available locally and covers Elixir, JavaScript, and CSS. Set up with `pip install --user pre-commit` followed by `pre-commit install`. Conversely, if the prompts are far too bothersome, remove with `pre-commit uninstall`.","ref":"contributing.html#pre-commit-hooks","title":"Pre-commit hooks - Contributing","type":"extras"},{"doc":"Bugs can be found in our [issue tracker](https://github.com/plausible/analytics/issues). Issues are usually up for grabs.\n\nNew features need to be discussed with the core team and the community first. If you're tackling a feature, please make sure it has been already discussed in the [Discussions tab](https://github.com/plausible/analytics/discussions). We kindly ask contributors to use the discussion comment section to propose a solution before opening a pull request.\n\nPull requests without an associated issue or discussion may still be merged, but we will focus on changes that have already been talked through.","ref":"contributing.html#finding-a-task","title":"Finding a task - Contributing","type":"extras"},{"doc":"# Account locking\nThis document explains the account locking feature from a technical perspective. Account locking happens when users have outgrown their accounts, and despite e-mail and dashboard alerts, don't upgrade after a grace period.","ref":"account-locking.html","title":"Account locking","type":"extras"},{"doc":"The `Plausible.Workers.CheckUsage` daily background job alerts users they have reached their subscription limits. This runs for outgrown users one day after their last billing date.\n\nWhen users reach the number of sites limit, or use >110% of their pageview limit for 2 consecutive billing cycles, the background job sends them an e-mail alert. The e-mail suggests a suitable subscription plan based on usage. For enterprise users, only an internal e-mail is sent to `enterprise@plausible.io`.\n\nThe user is given 7 days to upgrade their account after the alert, and this is called grace period. The background starts this grace period by adding a `users.grace_period` JSON to the user record:\n\n```json\n// SELECT grace_period FROM users LIMIT 1\n\n{\n \"id\": \"1aa855bd-022d-4dfc-b572-6853442c3f19\",\n \"is_over\": true,\n \"end_date\": \"2022-03-09\",\n \"allowance_required\": 100,\n \"manual_lock\": false\n}\n```\n\n\nDuring this period, the following alert pops up on the dashboard for both standard and enterprise users:\n\n![](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN4GLWMwCrTuTcf31kYE9%2Fuploads%2FmsLk4CdSHKzU8TbfvaPq%2FPasted%20image%2020220909120933.png?alt=media&token=76f247a1-28cf-4d88-a0fa-06547268aee9)\n\nIf the user upgrades to a suitable plan, the grace period is removed (check `Plausible.Billing.subscription_updated/1`), otherwise [Account locking](#Account\\ locking) follows. For enterprise users, the grace period has a manual lock flag set to true, meaning enterprise accounts can only be locked/unlocked through the internal CRM.","ref":"account-locking.html#usage-alert-and-grace-period","title":"Usage alert and grace period - Account locking","type":"extras"},{"doc":"The grace period is checked daily by the `Plausible.Workers.LockSites` background job.\n\nFor users that expired their grace period, `sites.locked` is is set to `true`, restricting access to dashboards. This does not stop event ingestion, so users can have their stats up to date when they finally upgrade.\n\n![](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN4GLWMwCrTuTcf31kYE9%2Fuploads%2FAplurtG7UsGXMskZOlUO%2FPasted%20image%2020220909122622.png?alt=media&token=5c8156d7-d4a7-4c99-8bac-2f1e9b7d4cae)","ref":"account-locking.html#account-locking","title":"Account locking - Account locking","type":"extras"}]} \ No newline at end of file diff --git a/dist/search_data-E390E5CE.js b/dist/search_data-E390E5CE.js new file mode 100644 index 000000000..d0c87c474 --- /dev/null +++ b/dist/search_data-E390E5CE.js @@ -0,0 +1 @@ +searchData={"content_type":"text/markdown","items":[{"doc":"This task is meant to replicate the behavior of cancelling\na subscription. On production, this action is initiated by\na Paddle webhook. Currently, only the subscription status\nis changed with that action.","ref":"Mix.Tasks.CancelSubscription.html","title":"mix cancel_subscription","type":"task"},{"doc":"","ref":"Mix.Tasks.CancelSubscription.html#run/1","title":"Mix.Tasks.CancelSubscription.run/1","type":"function"},{"doc":"","ref":"Mix.Tasks.CleanClickhouse.html","title":"mix clean_clickhouse","type":"task"},{"doc":"","ref":"Mix.Tasks.CleanClickhouse.html#run/1","title":"Mix.Tasks.CleanClickhouse.run/1","type":"function"},{"doc":"","ref":"Mix.Tasks.CreateFreeSubscription.html","title":"mix create_free_subscription","type":"task"},{"doc":"","ref":"Mix.Tasks.CreateFreeSubscription.html#execute/1","title":"Mix.Tasks.CreateFreeSubscription.execute/1","type":"function"},{"doc":"","ref":"Mix.Tasks.CreateFreeSubscription.html#run/1","title":"Mix.Tasks.CreateFreeSubscription.run/1","type":"function"},{"doc":"This task downloads the Country Lite database from DB-IP for self-hosted or development purposes.\nPlausible Cloud runs a paid version of DB-IP with more detailed geolocation data.","ref":"Mix.Tasks.DownloadCountryDatabase.html","title":"mix download_country_database","type":"task"},{"doc":"","ref":"Mix.Tasks.DownloadCountryDatabase.html#run/1","title":"Mix.Tasks.DownloadCountryDatabase.run/1","type":"function"},{"doc":"","ref":"Mix.Tasks.GenerateReferrerFavicons.html","title":"mix generate_referrer_favicons","type":"task"},{"doc":"","ref":"Mix.Tasks.GenerateReferrerFavicons.html#run/1","title":"Mix.Tasks.GenerateReferrerFavicons.run/1","type":"function"},{"doc":"","ref":"Mix.Tasks.PullSandboxSubscription.html","title":"mix pull_sandbox_subscription","type":"task"},{"doc":"","ref":"Mix.Tasks.PullSandboxSubscription.html#run/1","title":"Mix.Tasks.PullSandboxSubscription.run/1","type":"function"},{"doc":"It's often necessary to generate fake events for development and testing purposes. This Mix Task provides a quick and easy\nway to generate a pageview or custom event, either in your development environment or a remote Plausible instance.\n\nSee Mix.Tasks.SendPageview.usage/1 for more detailed documentation.","ref":"Mix.Tasks.SendPageview.html","title":"mix send_pageview","type":"task"},{"doc":"","ref":"Mix.Tasks.SendPageview.html#run/1","title":"Mix.Tasks.SendPageview.run/1","type":"function"},{"doc":"","ref":"ObanErrorReporter.html","title":"ObanErrorReporter","type":"module"},{"doc":"","ref":"ObanErrorReporter.html#handle_event/4","title":"ObanErrorReporter.handle_event/4","type":"function"},{"doc":"Plausible keeps the contexts that define your domain\nand business logic.\n\nContexts are also responsible for managing your data, regardless\nif it comes from the database, an external API or others.","ref":"Plausible.html","title":"Plausible","type":"module"},{"doc":"Clickhouse access with async inserts enabled","ref":"Plausible.AsyncInsertRepo.html","title":"Plausible.AsyncInsertRepo","type":"module"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#aggregate/3","title":"Plausible.AsyncInsertRepo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#aggregate/4","title":"Plausible.AsyncInsertRepo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#all/2","title":"Plausible.AsyncInsertRepo.all/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#checked_out?/0","title":"Plausible.AsyncInsertRepo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#checkout/2","title":"Plausible.AsyncInsertRepo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#child_spec/1","title":"Plausible.AsyncInsertRepo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#config/0","title":"Plausible.AsyncInsertRepo.config/0","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#default_options/1","title":"Plausible.AsyncInsertRepo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#delete/2","title":"Plausible.AsyncInsertRepo.delete/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#delete!/2","title":"Plausible.AsyncInsertRepo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#delete_all/2","title":"Plausible.AsyncInsertRepo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.AsyncInsertRepo.html#disconnect_all/2","title":"Plausible.AsyncInsertRepo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#exists?/2","title":"Plausible.AsyncInsertRepo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get/3","title":"Plausible.AsyncInsertRepo.get/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get!/3","title":"Plausible.AsyncInsertRepo.get!/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get_by/3","title":"Plausible.AsyncInsertRepo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get_by!/3","title":"Plausible.AsyncInsertRepo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#get_dynamic_repo/0","title":"Plausible.AsyncInsertRepo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert/2","title":"Plausible.AsyncInsertRepo.insert/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert!/2","title":"Plausible.AsyncInsertRepo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert_all/3","title":"Plausible.AsyncInsertRepo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert_or_update/2","title":"Plausible.AsyncInsertRepo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#insert_or_update!/2","title":"Plausible.AsyncInsertRepo.insert_or_update!/2","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.AsyncInsertRepo.html#insert_stream/3","title":"Plausible.AsyncInsertRepo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#load/2","title":"Plausible.AsyncInsertRepo.load/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#one/2","title":"Plausible.AsyncInsertRepo.one/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#one!/2","title":"Plausible.AsyncInsertRepo.one!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#preload/3","title":"Plausible.AsyncInsertRepo.preload/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#prepare_query/3","title":"Plausible.AsyncInsertRepo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#put_dynamic_repo/1","title":"Plausible.AsyncInsertRepo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.AsyncInsertRepo.html#query/3","title":"Plausible.AsyncInsertRepo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.AsyncInsertRepo.html#query!/3","title":"Plausible.AsyncInsertRepo.query!/3","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#reload/2","title":"Plausible.AsyncInsertRepo.reload/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#reload!/2","title":"Plausible.AsyncInsertRepo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#start_link/1","title":"Plausible.AsyncInsertRepo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#stop/1","title":"Plausible.AsyncInsertRepo.stop/1","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#stream/2","title":"Plausible.AsyncInsertRepo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.AsyncInsertRepo.html#to_sql/2","title":"Plausible.AsyncInsertRepo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#update/2","title":"Plausible.AsyncInsertRepo.update/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#update!/2","title":"Plausible.AsyncInsertRepo.update!/2","type":"function"},{"doc":"","ref":"Plausible.AsyncInsertRepo.html#update_all/3","title":"Plausible.AsyncInsertRepo.update_all/3","type":"function"},{"doc":"","ref":"Plausible.Auth.html","title":"Plausible.Auth","type":"module"},{"doc":"","ref":"Plausible.Auth.html#create_user/3","title":"Plausible.Auth.create_user/3","type":"function"},{"doc":"","ref":"Plausible.Auth.html#delete_user/1","title":"Plausible.Auth.delete_user/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#enterprise_configured?/1","title":"Plausible.Auth.enterprise_configured?/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#find_user_by/1","title":"Plausible.Auth.find_user_by/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#has_active_sites?/2","title":"Plausible.Auth.has_active_sites?/2","type":"function"},{"doc":"","ref":"Plausible.Auth.html#is_super_admin?/1","title":"Plausible.Auth.is_super_admin?/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#issue_email_verification/1","title":"Plausible.Auth.issue_email_verification/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#user_owns_sites?/1","title":"Plausible.Auth.user_owns_sites?/1","type":"function"},{"doc":"","ref":"Plausible.Auth.html#verify_email/2","title":"Plausible.Auth.verify_email/2","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKey.html","title":"Plausible.Auth.ApiKey","type":"module"},{"doc":"","ref":"Plausible.Auth.ApiKey.html#changeset/2","title":"Plausible.Auth.ApiKey.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKey.html#do_hash/1","title":"Plausible.Auth.ApiKey.do_hash/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKey.html#process_key/1","title":"Plausible.Auth.ApiKey.process_key/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKey.html#update/2","title":"Plausible.Auth.ApiKey.update/2","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html","title":"Plausible.Auth.ApiKeyAdmin","type":"module"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#create_changeset/2","title":"Plausible.Auth.ApiKeyAdmin.create_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#custom_index_query/3","title":"Plausible.Auth.ApiKeyAdmin.custom_index_query/3","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#form_fields/1","title":"Plausible.Auth.ApiKeyAdmin.form_fields/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#index/1","title":"Plausible.Auth.ApiKeyAdmin.index/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#search_fields/1","title":"Plausible.Auth.ApiKeyAdmin.search_fields/1","type":"function"},{"doc":"","ref":"Plausible.Auth.ApiKeyAdmin.html#update_changeset/2","title":"Plausible.Auth.ApiKeyAdmin.update_changeset/2","type":"function"},{"doc":"This embedded schema stores information about the account locking grace\nperiod.\n\nUsers are given this 7-day grace period to upgrade their account after\noutgrowing their subscriptions. The actual account locking happens in\nbackground with `Plausible.Workers.LockSites`.\n\nThe grace period can also be manual, without an end date, being controlled\nmanually from the CRM, and not by the background site locker job. This is \nuseful for enterprise subscriptions.","ref":"Plausible.Auth.GracePeriod.html","title":"Plausible.Auth.GracePeriod","type":"module"},{"doc":"Returns whether the grace period is still active for a User. Defaults to\nfalse if the user is nil or there is no grace period.","ref":"Plausible.Auth.GracePeriod.html#active?/1","title":"Plausible.Auth.GracePeriod.active?/1","type":"function"},{"doc":"Ends an existing grace period by `setting users.grace_period.is_over` to true.\nThis means the grace period has expired.","ref":"Plausible.Auth.GracePeriod.html#end_changeset/1","title":"Plausible.Auth.GracePeriod.end_changeset/1","type":"function"},{"doc":"Returns whether the grace period has already expired for a User. Defaults to\nfalse if the user is nil or there is no grace period.","ref":"Plausible.Auth.GracePeriod.html#expired?/1","title":"Plausible.Auth.GracePeriod.expired?/1","type":"function"},{"doc":"Removes the grace period from the User completely.","ref":"Plausible.Auth.GracePeriod.html#remove_changeset/1","title":"Plausible.Auth.GracePeriod.remove_changeset/1","type":"function"},{"doc":"Starts a account locking grace period of 7 days by changing the User struct.","ref":"Plausible.Auth.GracePeriod.html#start_changeset/2","title":"Plausible.Auth.GracePeriod.start_changeset/2","type":"function"},{"doc":"Starts a manual account locking grace period by changing the User struct. \nManual locking means the grace period can only be removed manually from the\nCRM.","ref":"Plausible.Auth.GracePeriod.html#start_manual_lock_changeset/2","title":"Plausible.Auth.GracePeriod.start_manual_lock_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.GracePeriod.html#t:t/0","title":"Plausible.Auth.GracePeriod.t/0","type":"type"},{"doc":"","ref":"Plausible.Auth.Invitation.html","title":"Plausible.Auth.Invitation","type":"module"},{"doc":"","ref":"Plausible.Auth.Invitation.html#new/1","title":"Plausible.Auth.Invitation.new/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Invitation.html#t:t/0","title":"Plausible.Auth.Invitation.t/0","type":"type"},{"doc":"","ref":"Plausible.Auth.Password.html","title":"Plausible.Auth.Password","type":"module"},{"doc":"","ref":"Plausible.Auth.Password.html#dummy_calculation/0","title":"Plausible.Auth.Password.dummy_calculation/0","type":"function"},{"doc":"","ref":"Plausible.Auth.Password.html#hash/1","title":"Plausible.Auth.Password.hash/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Password.html#match?/2","title":"Plausible.Auth.Password.match?/2","type":"function"},{"doc":"","ref":"Plausible.Auth.Token.html","title":"Plausible.Auth.Token","type":"module"},{"doc":"","ref":"Plausible.Auth.Token.html#sign_password_reset/1","title":"Plausible.Auth.Token.sign_password_reset/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Token.html#sign_shared_link/1","title":"Plausible.Auth.Token.sign_shared_link/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Token.html#verify_password_reset/1","title":"Plausible.Auth.Token.verify_password_reset/1","type":"function"},{"doc":"","ref":"Plausible.Auth.Token.html#verify_shared_link/1","title":"Plausible.Auth.Token.verify_shared_link/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html","title":"Plausible.Auth.User","type":"module"},{"doc":"","ref":"Plausible.Auth.User.html#cancel_email_changeset/1","title":"Plausible.Auth.User.cancel_email_changeset/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#changeset/2","title":"Plausible.Auth.User.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#email_changeset/2","title":"Plausible.Auth.User.email_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#end_trial/1","title":"Plausible.Auth.User.end_trial/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#hash_password/1","title":"Plausible.Auth.User.hash_password/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#new/1","title":"Plausible.Auth.User.new/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#password_strength/1","title":"Plausible.Auth.User.password_strength/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#remove_trial_expiry/1","title":"Plausible.Auth.User.remove_trial_expiry/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#set_password/2","title":"Plausible.Auth.User.set_password/2","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#settings_changeset/2","title":"Plausible.Auth.User.settings_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#start_trial/1","title":"Plausible.Auth.User.start_trial/1","type":"function"},{"doc":"","ref":"Plausible.Auth.User.html#t:t/0","title":"Plausible.Auth.User.t/0","type":"type"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html","title":"Plausible.Auth.UserAdmin","type":"module"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#custom_index_query/3","title":"Plausible.Auth.UserAdmin.custom_index_query/3","type":"function"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#delete/2","title":"Plausible.Auth.UserAdmin.delete/2","type":"function"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#form_fields/1","title":"Plausible.Auth.UserAdmin.form_fields/1","type":"function"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#index/1","title":"Plausible.Auth.UserAdmin.index/1","type":"function"},{"doc":"","ref":"Plausible.Auth.UserAdmin.html#resource_actions/1","title":"Plausible.Auth.UserAdmin.resource_actions/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html","title":"Plausible.Billing","type":"module"},{"doc":"","ref":"Plausible.Billing.html#active_subscription_for/1","title":"Plausible.Billing.active_subscription_for/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#change_plan/2","title":"Plausible.Billing.change_plan/2","type":"function"},{"doc":"","ref":"Plausible.Billing.html#change_plan_preview/2","title":"Plausible.Billing.change_plan_preview/2","type":"function"},{"doc":"","ref":"Plausible.Billing.html#check_needs_to_upgrade/1","title":"Plausible.Billing.check_needs_to_upgrade/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#has_active_subscription?/1","title":"Plausible.Billing.has_active_subscription?/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#last_two_billing_cycles/2","title":"Plausible.Billing.last_two_billing_cycles/2","type":"function"},{"doc":"","ref":"Plausible.Billing.html#last_two_billing_months_usage/2","title":"Plausible.Billing.last_two_billing_months_usage/2","type":"function"},{"doc":"","ref":"Plausible.Billing.html#on_trial?/1","title":"Plausible.Billing.on_trial?/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#paddle_api/0","title":"Plausible.Billing.paddle_api/0","type":"function"},{"doc":"","ref":"Plausible.Billing.html#subscription_cancelled/1","title":"Plausible.Billing.subscription_cancelled/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#subscription_created/1","title":"Plausible.Billing.subscription_created/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#subscription_payment_succeeded/1","title":"Plausible.Billing.subscription_payment_succeeded/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#subscription_updated/1","title":"Plausible.Billing.subscription_updated/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#trial_days_left/1","title":"Plausible.Billing.trial_days_left/1","type":"function"},{"doc":"","ref":"Plausible.Billing.html#usage_breakdown/1","title":"Plausible.Billing.usage_breakdown/1","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlan.html","title":"Plausible.Billing.EnterprisePlan","type":"module"},{"doc":"","ref":"Plausible.Billing.EnterprisePlan.html#changeset/2","title":"Plausible.Billing.EnterprisePlan.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html","title":"Plausible.Billing.EnterprisePlanAdmin","type":"module"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html#custom_index_query/3","title":"Plausible.Billing.EnterprisePlanAdmin.custom_index_query/3","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html#form_fields/1","title":"Plausible.Billing.EnterprisePlanAdmin.form_fields/1","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html#index/1","title":"Plausible.Billing.EnterprisePlanAdmin.index/1","type":"function"},{"doc":"","ref":"Plausible.Billing.EnterprisePlanAdmin.html#search_fields/1","title":"Plausible.Billing.EnterprisePlanAdmin.search_fields/1","type":"function"},{"doc":"This module provides an interface for managing features, e.g. Revenue Goals,\nFunnels and Custom Properties.\n\nFeature modules have functions for toggling the feature on/off and checking\nwhether the feature is available for a site/user.\n\nWhen defining new features, the following options are expected by the\n`__using__` macro:\n\n * `:display_name` - human-readable display name of the feature\n\n * `:toggle_field` - the field in the %Plausible.Site{} schema that toggles\n the feature. If `nil` or not set, toggle/2 silently returns `:ok`\n\n * `:extra_feature` - an atom representing the feature name in the plan JSON\n file (see also Plausible.Billing.Plan). If `nil` or not set,\n `check_availability/1` silently returns `:ok`\n\nFunctions defined by `__using__` can be overridden if needed.","ref":"Plausible.Billing.Feature.html","title":"Plausible.Billing.Feature","type":"behaviour"},{"doc":"Checks whether the site owner or the user plan includes the given feature.","ref":"Plausible.Billing.Feature.html#c:check_availability/1","title":"Plausible.Billing.Feature.check_availability/1","type":"callback"},{"doc":"Returns the human-readable display name of the feature.","ref":"Plausible.Billing.Feature.html#c:display_name/0","title":"Plausible.Billing.Feature.display_name/0","type":"callback"},{"doc":"Checks whether a feature is enabled or not. Returns false when the feature is\ndisabled or the user does not have access to it.","ref":"Plausible.Billing.Feature.html#c:enabled?/1","title":"Plausible.Billing.Feature.enabled?/1","type":"callback"},{"doc":"Lists all available feature modules.","ref":"Plausible.Billing.Feature.html#list/0","title":"Plausible.Billing.Feature.list/0","type":"function"},{"doc":"Toggles the feature on and off for a site. Returns \n`{:error, :upgrade_required}` when toggling a feature the site owner does not\nhave access to.","ref":"Plausible.Billing.Feature.html#c:toggle/2","title":"Plausible.Billing.Feature.toggle/2","type":"callback"},{"doc":"Returns the %Plausible.Site{} field that toggles the feature on and off.","ref":"Plausible.Billing.Feature.html#c:toggle_field/0","title":"Plausible.Billing.Feature.toggle_field/0","type":"callback"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html","title":"Plausible.Billing.PaddleApi","type":"module"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#checkout_domain/0","title":"Plausible.Billing.PaddleApi.checkout_domain/0","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#fetch_prices/1","title":"Plausible.Billing.PaddleApi.fetch_prices/1","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#get_invoices/1","title":"Plausible.Billing.PaddleApi.get_invoices/1","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#get_subscription/1","title":"Plausible.Billing.PaddleApi.get_subscription/1","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#update_subscription/2","title":"Plausible.Billing.PaddleApi.update_subscription/2","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#update_subscription_preview/2","title":"Plausible.Billing.PaddleApi.update_subscription_preview/2","type":"function"},{"doc":"","ref":"Plausible.Billing.PaddleApi.html#vendors_domain/0","title":"Plausible.Billing.PaddleApi.vendors_domain/0","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html","title":"Plausible.Billing.Plans","type":"module"},{"doc":"","ref":"Plausible.Billing.Plans.html#available_plans_with_prices/1","title":"Plausible.Billing.Plans.available_plans_with_prices/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#business_plans/0","title":"Plausible.Billing.Plans.business_plans/0","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#business_tier?/1","title":"Plausible.Billing.Plans.business_tier?/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#get_price_for/1","title":"Plausible.Billing.Plans.get_price_for/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#get_regular_plan/2","title":"Plausible.Billing.Plans.get_regular_plan/2","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#get_subscription_plan/1","title":"Plausible.Billing.Plans.get_subscription_plan/1","type":"function"},{"doc":"Returns a list of growth plans available for the user to choose.\n\nAs new versions of plans are introduced, users who were on old plans can\nstill choose from old plans.","ref":"Plausible.Billing.Plans.html#growth_plans_for/1","title":"Plausible.Billing.Plans.growth_plans_for/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#latest_enterprise_plan_with_price/1","title":"Plausible.Billing.Plans.latest_enterprise_plan_with_price/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#subscription_interval/1","title":"Plausible.Billing.Plans.subscription_interval/1","type":"function"},{"doc":"Returns the most appropriate plan for a user based on their usage during a\ngiven cycle.\n\nIf the usage during the cycle exceeds the enterprise-level threshold, or if\nthe user already belongs to an enterprise plan, it suggests the :enterprise\nplan.\n\nOtherwise, it recommends the plan where the cycle usage falls just under the\nplan's limit from the available options for the user.","ref":"Plausible.Billing.Plans.html#suggest/2","title":"Plausible.Billing.Plans.suggest/2","type":"function"},{"doc":"This function takes a list of plans as an argument, gathers all product\nIDs in a single list, and makes an API call to Paddle. After a successful\nresponse, fills in the `monthly_cost` and `yearly_cost` fields for each\ngiven plan and returns the new list of plans with completed information.","ref":"Plausible.Billing.Plans.html#with_prices/1","title":"Plausible.Billing.Plans.with_prices/1","type":"function"},{"doc":"List yearly plans product IDs.","ref":"Plausible.Billing.Plans.html#yearly_product_ids/0","title":"Plausible.Billing.Plans.yearly_product_ids/0","type":"function"},{"doc":"This module provides functions to work with plans usage and limits.","ref":"Plausible.Billing.Quota.html","title":"Plausible.Billing.Quota","type":"module"},{"doc":"Returns a list of extra features the user can use. Trial users have the\nability to use all features during their trial.","ref":"Plausible.Billing.Quota.html#extra_features_limit/1","title":"Plausible.Billing.Quota.extra_features_limit/1","type":"function"},{"doc":"Returns a list of extra features the given user's sites uses.","ref":"Plausible.Billing.Quota.html#extra_features_usage/1","title":"Plausible.Billing.Quota.extra_features_usage/1","type":"function"},{"doc":"Returns the limit of pageviews for a subscription.","ref":"Plausible.Billing.Quota.html#monthly_pageview_limit/1","title":"Plausible.Billing.Quota.monthly_pageview_limit/1","type":"function"},{"doc":"Returns the amount of pageviews and custom events\nsent by the sites the user owns in last 30 days.","ref":"Plausible.Billing.Quota.html#monthly_pageview_usage/1","title":"Plausible.Billing.Quota.monthly_pageview_usage/1","type":"function"},{"doc":"Returns the limit of sites a user can have.\n\nFor enterprise customers, returns :unlimited. The site limit is checked in a\nbackground job so as to avoid service disruption.","ref":"Plausible.Billing.Quota.html#site_limit/1","title":"Plausible.Billing.Quota.site_limit/1","type":"function"},{"doc":"Returns the number of sites the given user owns.","ref":"Plausible.Billing.Quota.html#site_usage/1","title":"Plausible.Billing.Quota.site_usage/1","type":"function"},{"doc":"Returns the limit of team members a user can have in their sites.","ref":"Plausible.Billing.Quota.html#team_member_limit/1","title":"Plausible.Billing.Quota.team_member_limit/1","type":"function"},{"doc":"Returns the total count of team members and pending invitations associated\nwith the user's sites.","ref":"Plausible.Billing.Quota.html#team_member_usage/1","title":"Plausible.Billing.Quota.team_member_usage/1","type":"function"},{"doc":"Returns whether the limit has been exceeded or not.","ref":"Plausible.Billing.Quota.html#within_limit?/2","title":"Plausible.Billing.Quota.within_limit?/2","type":"function"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html","title":"Plausible.Billing.SiteLocker","type":"module"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#send_grace_period_end_email/1","title":"Plausible.Billing.SiteLocker.send_grace_period_end_email/1","type":"function"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#set_lock_status_for/2","title":"Plausible.Billing.SiteLocker.set_lock_status_for/2","type":"function"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#update_sites_for/2","title":"Plausible.Billing.SiteLocker.update_sites_for/2","type":"function"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#t:lock_reason/0","title":"Plausible.Billing.SiteLocker.lock_reason/0","type":"type"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#t:update_opt/0","title":"Plausible.Billing.SiteLocker.update_opt/0","type":"type"},{"doc":"The subscription statuses are stored in Paddle. They can only be changed\nthrough Paddle webhooks, which always send the current subscription status\nvia the payload.\n\n* `active` - All good with the payments. Can access stats.\n\n* `past_due` - The payment has failed, but we're trying to charge the customer\n again. Access to stats is still granted. There will be three retries - after\n 3, 5, and 7 days have passed from the first failure. After a failure on the\n final retry, the subscription status will change to `paused`. As soon as the\n customer updates their billing details, Paddle will charge them again, and\n after a successful payment, the subscription will become `active` again.\n\n* `paused` - we've tried to charge the customer but all the retries have failed.\n Stats access restricted. As soon as the customer updates their billing details,\n Paddle will charge them again, and after a successful payment, the subscription\n will become `active` again.\n\n* `deleted` - The customer has triggered the cancel subscription action. Access\n to stats should be granted for the time the customer has already paid for. If\n they want to upgrade again, new billing details have to be provided.\n\nPaddle documentation links for reference:\n\n* Subscription statuses -\n https://developer.paddle.com/classic/reference/zg9joji1mzu0mdi2-subscription-status-reference\n\n* Payment failures -\n https://developer.paddle.com/classic/guides/zg9joji1mzu0mduy-payment-failures","ref":"Plausible.Billing.Subscription.Status.html","title":"Plausible.Billing.Subscription.Status","type":"module"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#active/0","title":"Plausible.Billing.Subscription.Status.active/0","type":"macro"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#deleted/0","title":"Plausible.Billing.Subscription.Status.deleted/0","type":"macro"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#past_due/0","title":"Plausible.Billing.Subscription.Status.past_due/0","type":"macro"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#paused/0","title":"Plausible.Billing.Subscription.Status.paused/0","type":"macro"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#valid_statuses/0","title":"Plausible.Billing.Subscription.Status.valid_statuses/0","type":"function"},{"doc":"","ref":"Plausible.Billing.Subscription.Status.html#t:status/0","title":"Plausible.Billing.Subscription.Status.status/0","type":"type"},{"doc":"Helper function for working with Ecto changesets","ref":"Plausible.ChangesetHelpers.html","title":"Plausible.ChangesetHelpers","type":"module"},{"doc":"","ref":"Plausible.ChangesetHelpers.html#traverse_errors/1","title":"Plausible.ChangesetHelpers.traverse_errors/1","type":"function"},{"doc":"Provides the core functions to retrieve and manage\nthe CLDR data that supports formatting and localisation.\n\nIt provides the core functions to access formatted\nCLDR data, set and retrieve a current locale and validate\ncertain core data types such as locales, currencies and\nterritories.","ref":"Plausible.Cldr.html","title":"Plausible.Cldr","type":"module"},{"doc":"","ref":"Plausible.Cldr.html#available_locale_name?/1","title":"Plausible.Cldr.available_locale_name?/1","type":"function"},{"doc":"Returns the default `locale`.","ref":"Plausible.Cldr.html#default_locale/0","title":"Plausible.Cldr.default_locale/0","type":"function"},{"doc":"iex> Plausible.Cldr.default_locale()\n %Cldr.LanguageTag{\n backend: Plausible.Cldr,\n canonical_locale_name: \"en-001\",\n cldr_locale_name: :\"en-001\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: \"en\",\n language: \"en\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :en,\n requested_locale_name: \"en-001\",\n script: :Latn,\n territory: :\"001\",\n transform: %{},\n language_variants: []\n }","ref":"Plausible.Cldr.html#default_locale/0-example","title":"Example - Plausible.Cldr.default_locale/0","type":"function"},{"doc":"Returns the default territory when a locale\ndoes not specify one and none can be inferred.","ref":"Plausible.Cldr.html#default_territory/0","title":"Plausible.Cldr.default_territory/0","type":"function"},{"doc":"iex> Plausible.Cldr.default_territory()\n :\"001\"","ref":"Plausible.Cldr.html#default_territory/0-example","title":"Example - Plausible.Cldr.default_territory/0","type":"function"},{"doc":"Add locale-specific ellipsis to a string.","ref":"Plausible.Cldr.html#ellipsis/2","title":"Plausible.Cldr.ellipsis/2","type":"function"},{"doc":"* `string` is any `String.t` or a 2-element list\n of `String.t` between which the ellipsis is inserted.\n\n* `backend` is any module that includes `use Cldr` and therefore\n is a `Cldr` backend module. The default is `Cldr.default_backend!/0`.\n Note that `Cldr.default_backend!/0` will raise an exception if\n no `:default_backend` is configured under the `:ex_cldr` key in\n `config.exs`.\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.html#ellipsis/2-arguments","title":"Arguments - Plausible.Cldr.ellipsis/2","type":"function"},{"doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/1`.\n The default is `Cldr.get_locale/0`.\n\n* `:location` determines where to place the ellipsis. The options are\n `:after` (the default for a single string argument), `:between`\n (the default and only valid location for an argument that is a list\n of two strings) and `:before`.\n\n* `:format` formats based upon whether the ellipsis\n is inserted between words or sentences. The valid options are\n `:word` or `:sentence`. The default is `:sentence`.","ref":"Plausible.Cldr.html#ellipsis/2-options","title":"Options - Plausible.Cldr.ellipsis/2","type":"function"},{"doc":"iex> Plausible.Cldr.ellipsis \"And furthermore\"\n \"And furthermore…\"\n\n iex> Plausible.Cldr.ellipsis [\"And furthermore\", \"there is much to be done\"], locale: :ja\n \"And furthermore…there is much to be done\"\n\n iex> Plausible.Cldr.ellipsis \"And furthermore\", format: :word\n \"And furthermore …\"\n\n iex> Plausible.Cldr.ellipsis [\"And furthermore\", \"there is much to be done\"], locale: :ja, format: :word\n \"And furthermore … there is much to be done\"","ref":"Plausible.Cldr.html#ellipsis/2-examples","title":"Examples - Plausible.Cldr.ellipsis/2","type":"function"},{"doc":"Return the current locale to be used for `Cldr` functions that\ntake an optional locale parameter for which a locale is not supplied.","ref":"Plausible.Cldr.html#get_locale/0","title":"Plausible.Cldr.get_locale/0","type":"function"},{"doc":"iex> Plausible.Cldr.put_locale(\"pl\")\n iex> Plausible.Cldr.get_locale\n %Cldr.LanguageTag{\n backend: Elixir.Plausible.Cldr,\n canonical_locale_name: \"pl\",\n cldr_locale_name: :pl,\n extensions: %{},\n language: \"pl\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :pl,\n territory: :PL,\n requested_locale_name: \"pl\",\n script: :Latn,\n transform: %{},\n language_variants: []\n }","ref":"Plausible.Cldr.html#get_locale/0-example","title":"Example - Plausible.Cldr.get_locale/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#known_calendars/0","title":"Plausible.Cldr.known_calendars/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#known_currencies/0","title":"Plausible.Cldr.known_currencies/0","type":"function"},{"doc":"Returns either the Gettext `locale_name` in Cldr format or\n`false` based upon whether the locale name is configured in\n`Gettext`.","ref":"Plausible.Cldr.html#known_gettext_locale_name/1","title":"Plausible.Cldr.known_gettext_locale_name/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_gettext_locale_names/0`","ref":"Plausible.Cldr.html#known_gettext_locale_name/1-arguments","title":"Arguments - Plausible.Cldr.known_gettext_locale_name/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_gettext_locale_name \"en\"\n \"en\"\n\n iex> Plausible.Cldr.known_gettext_locale_name \"en-SA\"\n false","ref":"Plausible.Cldr.html#known_gettext_locale_name/1-examples","title":"Examples - Plausible.Cldr.known_gettext_locale_name/1","type":"function"},{"doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Gettext.","ref":"Plausible.Cldr.html#known_gettext_locale_name?/1","title":"Plausible.Cldr.known_gettext_locale_name?/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_gettext_locale_name?/1-arguments","title":"Arguments - Plausible.Cldr.known_gettext_locale_name?/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_gettext_locale_name?(\"en\")\n true\n\n iex> Plausible.Cldr.known_gettext_locale_name?(\"!!\")\n false","ref":"Plausible.Cldr.html#known_gettext_locale_name?/1-examples","title":"Examples - Plausible.Cldr.known_gettext_locale_name?/1","type":"function"},{"doc":"Returns a list of Gettext locale names but in CLDR format with\nunderscore replaced by hyphen in order to facilitate comparisons\nwith `Cldr` locale names.","ref":"Plausible.Cldr.html#known_gettext_locale_names/0","title":"Plausible.Cldr.known_gettext_locale_names/0","type":"function"},{"doc":"Returns either the `locale_name` or `false` based upon\nwhether the locale name is configured in `Cldr`.\n\nThis is helpful when building a list of `or` expressions\nto return the first known locale name from a list.","ref":"Plausible.Cldr.html#known_locale_name/1","title":"Plausible.Cldr.known_locale_name/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_locale_name/1-arguments","title":"Arguments - Plausible.Cldr.known_locale_name/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_locale_name :\"en-AU\"\n :\"en-AU\"\n\n iex> Plausible.Cldr.known_locale_name :\"en-SA\"\n false","ref":"Plausible.Cldr.html#known_locale_name/1-examples","title":"Examples - Plausible.Cldr.known_locale_name/1","type":"function"},{"doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Cldr.","ref":"Plausible.Cldr.html#known_locale_name?/1","title":"Plausible.Cldr.known_locale_name?/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_locale_name?/1-arguments","title":"Arguments - Plausible.Cldr.known_locale_name?/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_locale_name?(:en)\n true\n\n iex> Plausible.Cldr.known_locale_name?(:\"!!\")\n false","ref":"Plausible.Cldr.html#known_locale_name?/1-examples","title":"Examples - Plausible.Cldr.known_locale_name?/1","type":"function"},{"doc":"Returns a list of the known locale names.\n\nKnown locales are those locales which\nare the subset of all CLDR locales that\nhave been configured for use either\nin this module or in `Gettext`.","ref":"Plausible.Cldr.html#known_locale_names/0","title":"Plausible.Cldr.known_locale_names/0","type":"function"},{"doc":"Returns a list of atoms representing the number systems types known to `Cldr`.","ref":"Plausible.Cldr.html#known_number_system_types/0","title":"Plausible.Cldr.known_number_system_types/0","type":"function"},{"doc":"iex> Plausible.Cldr.known_number_system_types\n [:default, :finance, :native, :traditional]","ref":"Plausible.Cldr.html#known_number_system_types/0-example","title":"Example - Plausible.Cldr.known_number_system_types/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#known_number_systems/0","title":"Plausible.Cldr.known_number_systems/0","type":"function"},{"doc":"Returns either the RBNF `locale_name` or `false` based upon\nwhether the locale name is configured in `Cldr`\nand has RBNF rules defined.","ref":"Plausible.Cldr.html#known_rbnf_locale_name/1","title":"Plausible.Cldr.known_rbnf_locale_name/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_rbnf_locale_name/1-arguments","title":"Arguments - Plausible.Cldr.known_rbnf_locale_name/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_rbnf_locale_name :en\n :en\n\n iex> Plausible.Cldr.known_rbnf_locale_name :\"en-SA\"\n false","ref":"Plausible.Cldr.html#known_rbnf_locale_name/1-examples","title":"Examples - Plausible.Cldr.known_rbnf_locale_name/1","type":"function"},{"doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Cldr and supports\nrules based number formats (RBNF).","ref":"Plausible.Cldr.html#known_rbnf_locale_name?/1","title":"Plausible.Cldr.known_rbnf_locale_name?/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.html#known_rbnf_locale_name?/1-arguments","title":"Arguments - Plausible.Cldr.known_rbnf_locale_name?/1","type":"function"},{"doc":"iex> Plausible.Cldr.known_rbnf_locale_name?(:en)\n true\n\n iex> Plausible.Cldr.known_rbnf_locale_name?(:\"!!\")\n false","ref":"Plausible.Cldr.html#known_rbnf_locale_name?/1-examples","title":"Examples - Plausible.Cldr.known_rbnf_locale_name?/1","type":"function"},{"doc":"Returns a list of locale names which have rules-based number\nformats (RBNF).","ref":"Plausible.Cldr.html#known_rbnf_locale_names/0","title":"Plausible.Cldr.known_rbnf_locale_names/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#known_territories/0","title":"Plausible.Cldr.known_territories/0","type":"function"},{"doc":"Normalizes a string by applying transliteration\nof common symbols in numbers, currencies and dates","ref":"Plausible.Cldr.html#normalize_lenient_parse/3","title":"Plausible.Cldr.normalize_lenient_parse/3","type":"function"},{"doc":"Set the current locale to be used for `Cldr` functions that\ntake an optional locale parameter for which a locale is not supplied.","ref":"Plausible.Cldr.html#put_locale/1","title":"Plausible.Cldr.put_locale/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`\n\nSee [rfc5646](https://tools.ietf.org/html/rfc5646) for the specification\nof a language tag.","ref":"Plausible.Cldr.html#put_locale/1-arguments","title":"Arguments - Plausible.Cldr.put_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.put_locale(\"en\")\n {:ok,\n %Cldr.LanguageTag{\n backend: Plausible.Cldr,\n canonical_locale_name: \"en\",\n cldr_locale_name: :en,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: \"en\",\n language: \"en\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :en,\n requested_locale_name: \"en\",\n script: :Latn,\n territory: :US,\n transform: %{},\n language_variants: []\n }}\n\n iex> Plausible.Cldr.put_locale(\"invalid-locale!\")\n {:error, {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"!\\\" starting at position 15\"}}","ref":"Plausible.Cldr.html#put_locale/1-examples","title":"Examples - Plausible.Cldr.put_locale/1","type":"function"},{"doc":"Add locale-specific quotation marks around a string.","ref":"Plausible.Cldr.html#quote/2","title":"Plausible.Cldr.quote/2","type":"function"},{"doc":"* `string` is any valid Elixir string\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.html#quote/2-arguments","title":"Arguments - Plausible.Cldr.quote/2","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/1`.\n The default is `Cldr.get_locale/0`","ref":"Plausible.Cldr.html#quote/2-options","title":"Options - Plausible.Cldr.quote/2","type":"function"},{"doc":"iex> Plausible.Cldr.quote \"Quoted String\"\n \"“Quoted String”\"\n\n iex> Plausible.Cldr.quote \"Quoted String\", locale: :ja\n \"「Quoted String」\"","ref":"Plausible.Cldr.html#quote/2-examples","title":"Examples - Plausible.Cldr.quote/2","type":"function"},{"doc":"Returns a list of the locales names that are configured,\nbut not known in CLDR.\n\nSince there is a compile-time exception raised if there are\nany unknown locales this function should always\nreturn an empty list.","ref":"Plausible.Cldr.html#unknown_locale_names/0","title":"Plausible.Cldr.unknown_locale_names/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#validate_calendar/1","title":"Plausible.Cldr.validate_calendar/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#validate_currency/1","title":"Plausible.Cldr.validate_currency/1","type":"function"},{"doc":"Normalise and validate a locale name.","ref":"Plausible.Cldr.html#validate_locale/1","title":"Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.html#validate_locale/1-arguments","title":"Arguments - Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"* `{:ok, language_tag}`\n\n* `{:error, reason}`","ref":"Plausible.Cldr.html#validate_locale/1-returns","title":"Returns - Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"See [rfc5646](https://tools.ietf.org/html/rfc5646) for the specification\nof a language tag.","ref":"Plausible.Cldr.html#validate_locale/1-notes","title":"Notes - Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.validate_locale(:en)\n {:ok,\n %Cldr.LanguageTag{\n backend: Plausible.Cldr,\n canonical_locale_name: \"en\",\n cldr_locale_name: :en,\n extensions: %{},\n gettext_locale_name: \"en\",\n language: \"en\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :en,\n requested_locale_name: \"en\",\n script: :Latn,\n territory: :US,\n transform: %{},\n language_variants: []\n }}\n\n\n iex> Plausible.Cldr.validate_locale Plausible.Cldr.default_locale()\n {:ok,\n %Cldr.LanguageTag{\n backend: Plausible.Cldr,\n canonical_locale_name: \"en-001\",\n cldr_locale_name: :\"en-001\",\n extensions: %{},\n gettext_locale_name: \"en\",\n language: \"en\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :en,\n requested_locale_name: \"en-001\",\n script: :Latn,\n territory: :\"001\",\n transform: %{},\n language_variants: []\n }}\n\n iex> Plausible.Cldr.validate_locale(\"zzz\")\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zzz\\\" is invalid\"}}","ref":"Plausible.Cldr.html#validate_locale/1-examples","title":"Examples - Plausible.Cldr.validate_locale/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#validate_number_system/1","title":"Plausible.Cldr.validate_number_system/1","type":"function"},{"doc":"Normalise and validate a number system type.","ref":"Plausible.Cldr.html#validate_number_system_type/1","title":"Plausible.Cldr.validate_number_system_type/1","type":"function"},{"doc":"* `number_system_type` is any number system type returned by\n `Cldr.known_number_system_types/1`","ref":"Plausible.Cldr.html#validate_number_system_type/1-arguments","title":"Arguments - Plausible.Cldr.validate_number_system_type/1","type":"function"},{"doc":"* `{:ok, normalized_number_system_type}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.html#validate_number_system_type/1-returns","title":"Returns - Plausible.Cldr.validate_number_system_type/1","type":"function"},{"doc":"iex> Plausible.Cldr.validate_number_system_type :default\n {:ok, :default}\n\n iex> Plausible.Cldr.validate_number_system_type :traditional\n {:ok, :traditional}\n\n iex> Plausible.Cldr.validate_number_system_type :latn\n {\n :error,\n {Cldr.UnknownNumberSystemTypeError, \"The number system type :latn is unknown\"}\n }\n\n iex> Plausible.Cldr.validate_number_system_type \"bork\"\n {\n :error,\n {Cldr.UnknownNumberSystemTypeError, \"The number system type \\\"bork\\\" is invalid\"}\n }","ref":"Plausible.Cldr.html#validate_number_system_type/1-examples","title":"Examples - Plausible.Cldr.validate_number_system_type/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.html#validate_territory/1","title":"Plausible.Cldr.validate_territory/1","type":"function"},{"doc":"Execute a function with a locale ensuring that the\ncurrent locale is restored after the function.","ref":"Plausible.Cldr.html#with_locale/2","title":"Plausible.Cldr.with_locale/2","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/1`.\n\n* `fun` is any 0-arity function or function capture.","ref":"Plausible.Cldr.html#with_locale/2-arguments","title":"Arguments - Plausible.Cldr.with_locale/2","type":"function"},{"doc":"* The value returned by the function `fun/0` or\n\n* `{:error, {exception, reason}}` if the locale is invalid or\n\n* raises an exception if the current locale cannot be\n identified.","ref":"Plausible.Cldr.html#with_locale/2-returns","title":"Returns - Plausible.Cldr.with_locale/2","type":"function"},{"doc":"Parses HTTP `Accept-Language` header values as defined in\n[rfc2616](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4).\n\nThe Accept-Language request-header field is similar to Accept, but restricts\nthe set of natural languages that are preferred as a response to the request.\nLanguage tags function are provided in `Cldr.LanguageTag`.\n\nThe format of an `Accept-Language` header is as follows in `ABNF` format:\n\n Accept-Language = \"Accept-Language\" \":\"\n 1#( language-range [ \";\" \"q\" \"=\" qvalue ] )\n language-range = ( ( 1*8ALPHA *( \"-\" 1*8ALPHA ) ) | \"*\" )\n\nEach language-range MAY be given an associated quality value which represents an\nestimate of the user's preference for the languages specified by that range. The\nquality value defaults to \"q=1\". For example,\n\n Accept-Language: da, en-gb;q=0.8, en;q=0.7\n\nwould mean: \"I prefer Danish, but will accept British English and other types of English.\"","ref":"Plausible.Cldr.AcceptLanguage.html","title":"Plausible.Cldr.AcceptLanguage","type":"module"},{"doc":"Parse an `Accept-Language` string and return the best match for\na configured `Cldr` locale.","ref":"Plausible.Cldr.AcceptLanguage.html#best_match/1","title":"Plausible.Cldr.AcceptLanguage.best_match/1","type":"function"},{"doc":"* `accept_langauge` is a string representing an accept language header","ref":"Plausible.Cldr.AcceptLanguage.html#best_match/1-arguments","title":"Arguments - Plausible.Cldr.AcceptLanguage.best_match/1","type":"function"},{"doc":"* `{:ok, language_tag}` or\n\n* `{:error, reason}`","ref":"Plausible.Cldr.AcceptLanguage.html#best_match/1-returns","title":"Returns - Plausible.Cldr.AcceptLanguage.best_match/1","type":"function"},{"doc":"iex> Plausible.Cldr.AcceptLanguage.best_match(\"da;q=0.1,zh-TW;q=0.3\", TestBackend.Cldr)\n {:ok,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }}\n\n iex> Plausible.Cldr.AcceptLanguage.best_match(\"da;q=0.1,zh-TW;q=0.3\", TestBackend.Cldr)\n {:ok,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }}\n\n iex> Plausible.Cldr.AcceptLanguage.best_match(\"xx,yy;q=0.3\")\n {:error,\n {Cldr.NoMatchingLocale,\n \"No configured locale could be matched to \\\"xx,yy;q=0.3\\\"\"}}\n\n iex> Plausible.Cldr.AcceptLanguage.best_match(\"invalid_tag\")\n {:error, {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"g\\\" starting at position 11\"}}","ref":"Plausible.Cldr.AcceptLanguage.html#best_match/1-examples","title":"Examples - Plausible.Cldr.AcceptLanguage.best_match/1","type":"function"},{"doc":"Parses an `Accept-Language` header value in its string\nor tokenized form to return a tuple of the form\n`{:ok, [{quality, %Cldr.LanguageTag{}}, ...]}` sorted by quality.","ref":"Plausible.Cldr.AcceptLanguage.html#parse/1","title":"Plausible.Cldr.AcceptLanguage.parse/1","type":"function"},{"doc":"* `accept-language` is any string in the format defined by\n [rfc2616](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)\n\n* `backend` is any module that includes `use Cldr` and therefore\n is a `Cldr` backend module","ref":"Plausible.Cldr.AcceptLanguage.html#parse/1-arguments","title":"Arguments - Plausible.Cldr.AcceptLanguage.parse/1","type":"function"},{"doc":"* `{:ok, [{quality, language_tag}, ...]}` or\n\n* `{:error, {Cldr.AcceptLanguageError, String.t}}`\n\nIf at least one valid language tag is found but errors are also\ndetected on one more more tags, an `{ok, list}` tuple is returned\nwuth an error tuple for each invalid tag added at the end of the list.","ref":"Plausible.Cldr.AcceptLanguage.html#parse/1-returns","title":"Returns - Plausible.Cldr.AcceptLanguage.parse/1","type":"function"},{"doc":"iex> Cldr.AcceptLanguage.parse(\"da,zh-TW;q=0.3\", TestBackend.Cldr)\n {:ok,\n [\n {1.0,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"da\",\n cldr_locale_name: :da,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"da\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :da,\n requested_locale_name: \"da\",\n script: :Latn,\n territory: :DK,\n transform: %{},\n language_variants: []\n }},\n {0.3,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }}\n ]}\n\n iex> Plausible.Cldr.AcceptLanguage.parse(\"invalid_tag\")\n {:error,\n {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"g\\\" starting at position 11\"}}\n\n iex> Plausible.Cldr.AcceptLanguage.parse(\"da,zh-TW;q=0.3,invalid_tag\")\n {:ok,\n [\n {1.0,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"da\",\n cldr_locale_name: :da,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"da\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :da,\n requested_locale_name: \"da\",\n script: :Latn,\n territory: :DK,\n transform: %{},\n language_variants: []\n }},\n {0.3,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }},\n {:error,\n {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"g\\\" starting at position 11\"}}\n ]}","ref":"Plausible.Cldr.AcceptLanguage.html#parse/1-example","title":"Example - Plausible.Cldr.AcceptLanguage.parse/1","type":"function"},{"doc":"Parses an `Accept-Language` header value in its string\nor tokenized form to produce a list of tuples of the form\n`[{quality, %Cldr.LanguageTag{}}, ...]` sorted by quality\nin descending order.","ref":"Plausible.Cldr.AcceptLanguage.html#parse!/1","title":"Plausible.Cldr.AcceptLanguage.parse!/1","type":"function"},{"doc":"* `accept-language` is any string in the format defined by [rfc2616](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)","ref":"Plausible.Cldr.AcceptLanguage.html#parse!/1-arguments","title":"Arguments - Plausible.Cldr.AcceptLanguage.parse!/1","type":"function"},{"doc":"* `{:ok, [{quality, language_tag}, ...]}` or\n\n* raises a `Cldr.AcceptLanguageError` exception\n\nIf at least one valid language tag is found but errors are also\ndetected on one more more tags, an `{ok, list}` tuple is returned\nwuth an error tuple for each invalid tag added at the end of the list.","ref":"Plausible.Cldr.AcceptLanguage.html#parse!/1-returns","title":"Returns - Plausible.Cldr.AcceptLanguage.parse!/1","type":"function"},{"doc":"iex> Plausible.Cldr.AcceptLanguage.parse!(\"da,zh-TW;q=0.3\")\n [\n {1.0,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"da\",\n cldr_locale_name: :da,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"da\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :da,\n requested_locale_name: \"da\",\n script: :Latn,\n territory: :DK,\n transform: %{},\n language_variants: []\n }},\n {0.3,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }}\n ]\n\n Plausible.Cldr.AcceptLanguage.parse! \"invalid_tag\"\n ** (Cldr.AcceptLanguageError) \"Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11\n (ex_cldr) lib/cldr/accept_language.ex:304: Cldr.AcceptLanguage.parse!/1\n\n iex> Plausible.Cldr.AcceptLanguage.parse!(\"da,zh-TW;q=0.3,invalid_tag\")\n [\n {1.0,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"da\",\n cldr_locale_name: :da,\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"da\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :da,\n requested_locale_name: \"da\",\n script: :Latn,\n territory: :DK,\n transform: %{},\n language_variants: []\n }},\n {0.3,\n %Cldr.LanguageTag{\n backend: TestBackend.Cldr,\n canonical_locale_name: \"zh-TW\",\n cldr_locale_name: :\"zh-Hant\",\n language_subtags: [],\n extensions: %{},\n gettext_locale_name: nil,\n language: \"zh\",\n locale: %{},\n private_use: [],\n rbnf_locale_name: :\"zh-Hant\",\n requested_locale_name: \"zh-TW\",\n script: :Hant,\n territory: :TW,\n transform: %{},\n language_variants: []\n }},\n {:error,\n {Cldr.LanguageTag.ParseError,\n \"Expected a BCP47 language tag. Could not parse the remaining \\\"g\\\" starting at position 11\"}}\n ]","ref":"Plausible.Cldr.AcceptLanguage.html#parse!/1-example","title":"Example - Plausible.Cldr.AcceptLanguage.parse!/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Currency.html","title":"Plausible.Cldr.Currency","type":"module"},{"doc":"Returns a map of the metadata for all currencies for\na given locale.","ref":"Plausible.Cldr.Currency.html#currencies_for_locale/3","title":"Plausible.Cldr.Currency.currencies_for_locale/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`\n\n* `currency_status` is `:all`, `:current`, `:historic`,\n `unannotated` or `:tender`; or a list of one or more status.\n The default is `:all`. See `Cldr.Currency.currency_filter/2`.","ref":"Plausible.Cldr.Currency.html#currencies_for_locale/3-arguments","title":"Arguments - Plausible.Cldr.Currency.currencies_for_locale/3","type":"function"},{"doc":"* `{:ok, currency_map}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#currencies_for_locale/3-returns","title":"Returns - Plausible.Cldr.Currency.currencies_for_locale/3","type":"function"},{"doc":"MyApp.Cldr.Currency.currencies_for_locale \"en\"\n => {:ok,\n %{\n FJD: %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"FJD\",\n count: %{one: \"Fijian dollar\", other: \"Fijian dollars\"},\n digits: 2,\n from: nil,\n iso_digits: 2,\n name: \"Fijian Dollar\",\n narrow_symbol: \"$\",\n rounding: 0,\n symbol: \"FJD\",\n tender: true,\n to: nil\n },\n SUR: %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"SUR\",\n count: %{one: \"Soviet rouble\", other: \"Soviet roubles\"},\n digits: 2,\n from: nil,\n iso_digits: nil,\n name: \"Soviet Rouble\",\n narrow_symbol: nil,\n rounding: 0,\n symbol: \"SUR\",\n tender: true,\n to: nil\n },\n ...\n }}","ref":"Plausible.Cldr.Currency.html#currencies_for_locale/3-example","title":"Example - Plausible.Cldr.Currency.currencies_for_locale/3","type":"function"},{"doc":"Returns a map of the metadata for all currencies for\na given locale and raises on error.","ref":"Plausible.Cldr.Currency.html#currencies_for_locale!/3","title":"Plausible.Cldr.Currency.currencies_for_locale!/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`\n\n* `currency_status` is `:all`, `:current`, `:historic`,\n `unannotated` or `:tender`; or a list of one or more status.\n The default is `:all`. See `Cldr.Currency.currency_filter/2`.","ref":"Plausible.Cldr.Currency.html#currencies_for_locale!/3-arguments","title":"Arguments - Plausible.Cldr.Currency.currencies_for_locale!/3","type":"function"},{"doc":"* `{:ok, currency_map}` or\n\n* raises an exception","ref":"Plausible.Cldr.Currency.html#currencies_for_locale!/3-returns","title":"Returns - Plausible.Cldr.Currency.currencies_for_locale!/3","type":"function"},{"doc":"MyApp.Cldr.Currency.currencies_for_locale! \"en\"\n => %{\n FJD: %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"FJD\",\n count: %{one: \"Fijian dollar\", other: \"Fijian dollars\"},\n digits: 2,\n from: nil,\n iso_digits: 2,\n name: \"Fijian Dollar\",\n narrow_symbol: \"$\",\n rounding: 0,\n symbol: \"FJD\",\n tender: true,\n to: nil\n },\n SUR: %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"SUR\",\n count: %{one: \"Soviet rouble\", other: \"Soviet roubles\"},\n digits: 2,\n from: nil,\n iso_digits: nil,\n name: \"Soviet Rouble\",\n narrow_symbol: nil,\n rounding: 0,\n symbol: \"SUR\",\n tender: true,\n to: nil\n },\n ...\n }","ref":"Plausible.Cldr.Currency.html#currencies_for_locale!/3-example","title":"Example - Plausible.Cldr.Currency.currencies_for_locale!/3","type":"function"},{"doc":"Returns the currency metadata for the requested currency code.","ref":"Plausible.Cldr.Currency.html#currency_for_code/2","title":"Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"* `currency_or_currency_code` is a `binary` or `atom` representation\n of an ISO 4217 currency code, or a `%Cldr.Currency{}` struct.","ref":"Plausible.Cldr.Currency.html#currency_for_code/2-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`","ref":"Plausible.Cldr.Currency.html#currency_for_code/2-options","title":"Options - Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"* A `{:ok, currency}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#currency_for_code/2-returns","title":"Returns - Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.currency_for_code(\"AUD\")\n {:ok,\n %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"AUD\",\n count: %{one: \"Australian dollar\", other: \"Australian dollars\"},\n digits: 2,\n iso_digits: 2,\n name: \"Australian Dollar\",\n narrow_symbol: \"$\",\n rounding: 0,\n symbol: \"A$\",\n tender: true\n }}\n\n iex> Plausible.Cldr.Currency.currency_for_code(\"THB\")\n {:ok,\n %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"THB\",\n count: %{one: \"Thai baht\", other: \"Thai baht\"},\n digits: 2,\n iso_digits: 2,\n name: \"Thai Baht\",\n narrow_symbol: \"฿\",\n rounding: 0,\n symbol: \"THB\",\n tender: true\n }}","ref":"Plausible.Cldr.Currency.html#currency_for_code/2-examples","title":"Examples - Plausible.Cldr.Currency.currency_for_code/2","type":"function"},{"doc":"Returns the currency metadata for the requested currency code.","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2","title":"Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"* `currency_or_currency_code` is a `binary` or `atom` representation\n of an ISO 4217 currency code, or a `%Cldr.Currency{}` struct.","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2-options","title":"Options - Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"* A `t:Cldr.Current.t/0` or\n\n* raises an exception","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2-returns","title":"Returns - Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.currency_for_code!(\"AUD\")\n %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"AUD\",\n count: %{one: \"Australian dollar\", other: \"Australian dollars\"},\n digits: 2,\n iso_digits: 2,\n name: \"Australian Dollar\",\n narrow_symbol: \"$\",\n rounding: 0,\n symbol: \"A$\",\n tender: true\n }\n\n iex> Plausible.Cldr.Currency.currency_for_code!(\"THB\")\n %Cldr.Currency{\n cash_digits: 2,\n cash_rounding: 0,\n code: \"THB\",\n count: %{one: \"Thai baht\", other: \"Thai baht\"},\n digits: 2,\n iso_digits: 2,\n name: \"Thai Baht\",\n narrow_symbol: \"฿\",\n rounding: 0,\n symbol: \"THB\",\n tender: true\n }","ref":"Plausible.Cldr.Currency.html#currency_for_code!/2-examples","title":"Examples - Plausible.Cldr.Currency.currency_for_code!/2","type":"function"},{"doc":"Returns the effective currency for a given locale","ref":"Plausible.Cldr.Currency.html#currency_from_locale/1","title":"Plausible.Cldr.Currency.currency_from_locale/1","type":"function"},{"doc":"* `locale` is a `Cldr.LanguageTag` struct returned by\n `Cldr.Locale.new!/2`","ref":"Plausible.Cldr.Currency.html#currency_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_from_locale/1","type":"function"},{"doc":"* A ISO 4217 currency code as an upcased atom","ref":"Plausible.Cldr.Currency.html#currency_from_locale/1-returns","title":"Returns - Plausible.Cldr.Currency.currency_from_locale/1","type":"function"},{"doc":"iex> {:ok, locale} = Plausible.Cldr.validate_locale \"en\"\n iex> Plausible.Cldr.Currency.currency_from_locale locale\n :USD\n\n iex> {:ok, locale} = Plausible.Cldr.validate_locale \"en-AU\"\n iex> Plausible.Cldr.Currency.currency_from_locale locale\n :AUD\n\n iex> Plausible.Cldr.Currency.currency_from_locale \"en-GB\"\n :GBP","ref":"Plausible.Cldr.Currency.html#currency_from_locale/1-examples","title":"Examples - Plausible.Cldr.Currency.currency_from_locale/1","type":"function"},{"doc":"Returns a list of historic and the current\ncurrency for a given locale.","ref":"Plausible.Cldr.Currency.html#currency_history_for_locale/1","title":"Plausible.Cldr.Currency.currency_history_for_locale/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Currency.html#currency_history_for_locale/1-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_history_for_locale/1","type":"function"},{"doc":"iex> MyApp.Cldr.Currency.currency_history_for_locale \"en\"\n {:ok,\n %{\n USD: %{from: ~D[1792-01-01], to: nil},\n USN: %{tender: false},\n USS: %{from: nil, tender: false, to: ~D[2014-03-01]}\n }\n }","ref":"Plausible.Cldr.Currency.html#currency_history_for_locale/1-example","title":"Example - Plausible.Cldr.Currency.currency_history_for_locale/1","type":"function"},{"doc":"Returns a map that matches a currency string to a\ncurrency code.\n\nA currency string is a localised name or symbol\nrepresenting a currency in a locale-specific manner.","ref":"Plausible.Cldr.Currency.html#currency_strings/3","title":"Plausible.Cldr.Currency.currency_strings/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`\n\n* `currency_status` is `:all`, `:current`, `:historic`,\n `unannotated` or `:tender`; or a list of one or more status.\n The default is `:all`. See `Cldr.Currency.currency_filter/2`.","ref":"Plausible.Cldr.Currency.html#currency_strings/3-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_strings/3","type":"function"},{"doc":"* `{:ok, currency_string_map}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#currency_strings/3-returns","title":"Returns - Plausible.Cldr.Currency.currency_strings/3","type":"function"},{"doc":"MyApp.Cldr.Currency.currency_strings \"en\"\n => {:ok,\n %{\n \"mexican silver pesos\" => :MXP,\n \"sudanese dinar\" => :SDD,\n \"bad\" => :BAD,\n \"rsd\" => :RSD,\n \"swazi lilangeni\" => :SZL,\n \"zairean new zaire\" => :ZRN,\n \"guyanaese dollars\" => :GYD,\n \"equatorial guinean ekwele\" => :GQE,\n ...\n }}","ref":"Plausible.Cldr.Currency.html#currency_strings/3-example","title":"Example - Plausible.Cldr.Currency.currency_strings/3","type":"function"},{"doc":"Returns a map that matches a currency string to a\ncurrency code or raises an exception.\n\nA currency string is a localised name or symbol\nrepresenting a currency in a locale-specific manner.","ref":"Plausible.Cldr.Currency.html#currency_strings!/3","title":"Plausible.Cldr.Currency.currency_strings!/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`\n\n* `currency_status` is `:all`, `:current`, `:historic`,\n `unannotated` or `:tender`; or a list of one or more status.\n The default is `:all`. See `Cldr.Currency.currency_filter/2`.","ref":"Plausible.Cldr.Currency.html#currency_strings!/3-arguments","title":"Arguments - Plausible.Cldr.Currency.currency_strings!/3","type":"function"},{"doc":"* `{:ok, currency_string_map}` or\n\n* raises an exception","ref":"Plausible.Cldr.Currency.html#currency_strings!/3-returns","title":"Returns - Plausible.Cldr.Currency.currency_strings!/3","type":"function"},{"doc":"MyApp.Cldr.Currency.currency_strings! \"en\"\n => %{\n \"mexican silver pesos\" => :MXP,\n \"sudanese dinar\" => :SDD,\n \"bad\" => :BAD,\n \"rsd\" => :RSD,\n \"swazi lilangeni\" => :SZL,\n \"zairean new zaire\" => :ZRN,\n \"guyanaese dollars\" => :GYD,\n \"equatorial guinean ekwele\" => :GQE,\n ...\n }","ref":"Plausible.Cldr.Currency.html#currency_strings!/3-example","title":"Example - Plausible.Cldr.Currency.currency_strings!/3","type":"function"},{"doc":"Returns the current currency for a given locale.\n\nThis function does not consider the `U` extenion\nparameters `cu` or `rg`. It is recommended to us\n`Cldr.Currency.currency_from_locale/1` in most\ncircumstances.","ref":"Plausible.Cldr.Currency.html#current_currency_from_locale/1","title":"Plausible.Cldr.Currency.current_currency_from_locale/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Currency.html#current_currency_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Currency.current_currency_from_locale/1","type":"function"},{"doc":"iex> MyApp.Cldr.Currency.current_currency_from_locale \"en\"\n :USD\n\n iex> MyApp.Cldr.Currency.current_currency_from_locale \"en-AU\"\n :AUD","ref":"Plausible.Cldr.Currency.html#current_currency_from_locale/1-example","title":"Example - Plausible.Cldr.Currency.current_currency_from_locale/1","type":"function"},{"doc":"Returns a mapping from a territory code to its\ncurrent currency code.\n\nIf a territory has no current currency (like\nAntartica, territory code `:AQ`) then no\nmapping is returned for that territory.","ref":"Plausible.Cldr.Currency.html#current_territory_currencies/0","title":"Plausible.Cldr.Currency.current_territory_currencies/0","type":"function"},{"doc":"* A map of `{territory_code => Cldr.Currency.t}`","ref":"Plausible.Cldr.Currency.html#current_territory_currencies/0-returns","title":"Returns - Plausible.Cldr.Currency.current_territory_currencies/0","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.current_territory_currencies()","ref":"Plausible.Cldr.Currency.html#current_territory_currencies/0-example","title":"Example - Plausible.Cldr.Currency.current_territory_currencies/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Currency.html#known_currencies/0","title":"Plausible.Cldr.Currency.known_currencies/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Currency.html#known_currency?/1","title":"Plausible.Cldr.Currency.known_currency?/1","type":"function"},{"doc":"Returns a 2-tuple indicating if the supplied currency code is known.","ref":"Plausible.Cldr.Currency.html#known_currency_code/1","title":"Plausible.Cldr.Currency.known_currency_code/1","type":"function"},{"doc":"* `currency_code` is a `binary` or `atom` representing an ISO4217\n currency code","ref":"Plausible.Cldr.Currency.html#known_currency_code/1-arguments","title":"Arguments - Plausible.Cldr.Currency.known_currency_code/1","type":"function"},{"doc":"* `{:ok, currency_code}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#known_currency_code/1-returns","title":"Returns - Plausible.Cldr.Currency.known_currency_code/1","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.known_currency_code \"AUD\"\n {:ok, :AUD}\n\n iex> Plausible.Cldr.Currency.known_currency_code \"GGG\"\n {:error, {Cldr.UnknownCurrencyError, \"The currency \\\"GGG\\\" is invalid\"}}","ref":"Plausible.Cldr.Currency.html#known_currency_code/1-examples","title":"Examples - Plausible.Cldr.Currency.known_currency_code/1","type":"function"},{"doc":"Returns a boolean indicating if the supplied currency code is known.","ref":"Plausible.Cldr.Currency.html#known_currency_code?/1","title":"Plausible.Cldr.Currency.known_currency_code?/1","type":"function"},{"doc":"* `currency_code` is a `binary` or `atom` representing an ISO4217\n currency code","ref":"Plausible.Cldr.Currency.html#known_currency_code?/1-arguments","title":"Arguments - Plausible.Cldr.Currency.known_currency_code?/1","type":"function"},{"doc":"* `true` or `false`","ref":"Plausible.Cldr.Currency.html#known_currency_code?/1-returns","title":"Returns - Plausible.Cldr.Currency.known_currency_code?/1","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.known_currency_code? \"AUD\"\n true\n\n iex> Plausible.Cldr.Currency.known_currency_code? \"GGG\"\n false\n\n iex> Plausible.Cldr.Currency.known_currency_code? :XCV\n false","ref":"Plausible.Cldr.Currency.html#known_currency_code?/1-examples","title":"Examples - Plausible.Cldr.Currency.known_currency_code?/1","type":"function"},{"doc":"Returns a list of all known currency codes.","ref":"Plausible.Cldr.Currency.html#known_currency_codes/0","title":"Plausible.Cldr.Currency.known_currency_codes/0","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.known_currency_codes","ref":"Plausible.Cldr.Currency.html#known_currency_codes/0-example","title":"Example - Plausible.Cldr.Currency.known_currency_codes/0","type":"function"},{"doc":"Returns a `Currency` struct created from the arguments.","ref":"Plausible.Cldr.Currency.html#new/2","title":"Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"* `currency` is a private use currency code in a format defined by\n [ISO4217](https://en.wikipedia.org/wiki/ISO_4217)\n which is `X` followed by two alphanumeric characters.\n\n* `options` is a map of options representing the optional elements of\n the `Cldr.Currency.t` struct.","ref":"Plausible.Cldr.Currency.html#new/2-arguments","title":"Arguments - Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"* `:name` is the name of the currency. Required.\n* `:digits` is the precision of the currency. Required.\n* `:symbol` is the currency symbol. Optional.\n* `:narrow_symbol` is an alternative narrow symbol. Optional.\n* `:round_nearest` is the rounding precision such as `0.05`. Optional.\n* `:alt_code` is an alternative currency code for application use.\n* `:cash_digits` is the precision of the currency when used as cash. Optional.\n* `:cash_rounding_nearest` is the rounding precision when used as cash\n such as `0.05`. Optional.","ref":"Plausible.Cldr.Currency.html#new/2-options","title":"Options - Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"* `{:ok, Cldr.Currency.t}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Currency.html#new/2-returns","title":"Returns - Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.new(:XAE, name: \"Custom Name\", digits: 0)\n {:ok,\n %Cldr.Currency{\n alt_code: :XAE,\n cash_digits: 0,\n cash_rounding: nil,\n code: :XAE,\n count: %{other: \"Custom Name\"},\n digits: 0,\n from: nil,\n iso_digits: 0,\n name: \"Custom Name\",\n narrow_symbol: nil,\n rounding: 0,\n symbol: \"XAE\",\n tender: false,\n to: nil\n }}\n iex> MyApp.Cldr.Currency.new(:XAH, name: \"Custom Name\")\n {:error, \"Required options are missing. Required options are [:name, :digits]\"}\n iex> Plausible.Cldr.Currency.new(:XAE, name: \"XAE\", digits: 0)\n {:error, {Cldr.CurrencyAlreadyDefined, \"Currency :XAE is already defined.\"}}","ref":"Plausible.Cldr.Currency.html#new/2-example","title":"Example - Plausible.Cldr.Currency.new/2","type":"function"},{"doc":"Returns the appropriate currency display name for the `currency`, based\non the plural rules in effect for the `locale`.","ref":"Plausible.Cldr.Currency.html#pluralize/3","title":"Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"* `number` is an integer, float or `Decimal`\n\n* `currency` is any currency returned by `Cldr.Currency.known_currencies/0`\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Currency.html#pluralize/3-arguments","title":"Arguments - Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`. The\n default is `Plausible.Cldr.get_locale/0`","ref":"Plausible.Cldr.Currency.html#pluralize/3-options","title":"Options - Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"* `{:ok, plural_string}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Currency.html#pluralize/3-returns","title":"Returns - Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"iex> Plausible.Cldr.Currency.pluralize 1, :USD\n {:ok, \"US dollar\"}\n\n iex> Plausible.Cldr.Currency.pluralize 3, :USD\n {:ok, \"US dollars\"}\n\n iex> Plausible.Cldr.Currency.pluralize 12, :USD, locale: \"zh\"\n {:ok, \"美元\"}\n\n iex> Plausible.Cldr.Currency.pluralize 12, :USD, locale: \"fr\"\n {:ok, \"dollars des États-Unis\"}\n\n iex> Plausible.Cldr.Currency.pluralize 1, :USD, locale: \"fr\"\n {:ok, \"dollar des États-Unis\"}","ref":"Plausible.Cldr.Currency.html#pluralize/3-examples","title":"Examples - Plausible.Cldr.Currency.pluralize/3","type":"function"},{"doc":"Returns the strings associated with a currency\nin a given locale.","ref":"Plausible.Cldr.Currency.html#strings_for_currency/2","title":"Plausible.Cldr.Currency.strings_for_currency/2","type":"function"},{"doc":"* `currency` is an ISO4217 currency code\n\n* `locale` is any valid locale name returned by `MyApp.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `MyApp.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Currency.html#strings_for_currency/2-arguments","title":"Arguments - Plausible.Cldr.Currency.strings_for_currency/2","type":"function"},{"doc":"* A list of strings or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Currency.html#strings_for_currency/2-returns","title":"Returns - Plausible.Cldr.Currency.strings_for_currency/2","type":"function"},{"doc":"iex> MyApp.Cldr.Currency.strings_for_currency :AUD, \"en\"\n [\"a$\", \"australian dollars\", \"aud\", \"australian dollar\"]","ref":"Plausible.Cldr.Currency.html#strings_for_currency/2-example","title":"Example - Plausible.Cldr.Currency.strings_for_currency/2","type":"function"},{"doc":"Backend module that provides functions\nto define new locales and display human-readable\nlocale names for presentation purposes.","ref":"Plausible.Cldr.Locale.html","title":"Plausible.Cldr.Locale","type":"module"},{"doc":"Returns the list of fallback locale names, starting\nwith the provided locale name.\n\nFallbacks are a list of locate names which can\nbe used to resolve translation or other localization\ndata if such localised data does not exist for\nthis specific locale..","ref":"Plausible.Cldr.Locale.html#fallback_locale_names/1","title":"Plausible.Cldr.Locale.fallback_locale_names/1","type":"function"},{"doc":"* `locale_name` is any locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.Locale.html#fallback_locale_names/1-arguments","title":"Arguments - Plausible.Cldr.Locale.fallback_locale_names/1","type":"function"},{"doc":"* `{:ok, list_of_locale_names}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#fallback_locale_names/1-returns","title":"Returns - Plausible.Cldr.Locale.fallback_locale_names/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.fallback_locale_names(:\"fr-CA\")\n {:ok, [:\"fr-CA\", :fr, :und]}\n\n # Fallbacks are typically formed by progressively\n # stripping variant, territory and script from the\n # given locale name. But not always - there are\n # certain fallbacks that take a different path.\n\n iex> Plausible.Cldr.Locale.fallback_locale_names(:nb)\n {:ok, [:nb, :no, :und]}","ref":"Plausible.Cldr.Locale.html#fallback_locale_names/1-examples","title":"Examples - Plausible.Cldr.Locale.fallback_locale_names/1","type":"function"},{"doc":"Returns the list of fallback locales, starting\nwith the provided locale name.\n\nFallbacks are a list of locate names which can\nbe used to resolve translation or other localization\ndata if such localised data does not exist for\nthis specific locale.","ref":"Plausible.Cldr.Locale.html#fallback_locales/1","title":"Plausible.Cldr.Locale.fallback_locales/1","type":"function"},{"doc":"* `locale_name` is any locale name returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.Locale.html#fallback_locales/1-arguments","title":"Arguments - Plausible.Cldr.Locale.fallback_locales/1","type":"function"},{"doc":"* `{:ok, list_of_locales}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#fallback_locales/1-returns","title":"Returns - Plausible.Cldr.Locale.fallback_locales/1","type":"function"},{"doc":"Plausible.Cldr.Locale.fallback_locales(:\"fr-CA\")\n => {:ok,\n [#Cldr.LanguageTag , #Cldr.LanguageTag ,\n #Cldr.LanguageTag ]}\n\n # Fallbacks are typically formed by progressively\n # stripping variant, territory and script from the\n # given locale name. But not always - there are\n # certain fallbacks that take a different path.\n\n Plausible.Cldr.Locale.fallback_locales(:nb))\n => {:ok,\n [#Cldr.LanguageTag , #Cldr.LanguageTag ,\n #Cldr.LanguageTag ]}","ref":"Plausible.Cldr.Locale.html#fallback_locales/1-examples","title":"Examples - Plausible.Cldr.Locale.fallback_locales/1","type":"function"},{"doc":"Returns the \"best fit\" locale for a given territory.\n\nUsing the population percentage data from CLDR, the\nlanguage most commonly spoken in the given territory\nis used to form a locale name which is then validated\nagainst the given backend.\n\nFirst a territory-specific locale is validated and if\nthat fails, the base language only is validate.\n\nFor example, if the territory is `AU` then then the\nlanguage most spoken is \"en\". First, the locale \"en-AU\"\nis validated and if that fails, \"en\" is validated.","ref":"Plausible.Cldr.Locale.html#locale_for_territory/1","title":"Plausible.Cldr.Locale.locale_for_territory/1","type":"function"},{"doc":"* `territory` is any ISO 3166 Alpha-2 territory\n code that can be validated by `Cldr.validate_territory/1`","ref":"Plausible.Cldr.Locale.html#locale_for_territory/1-arguments","title":"Arguments - Plausible.Cldr.Locale.locale_for_territory/1","type":"function"},{"doc":"* `{:ok, language_tag}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#locale_for_territory/1-returns","title":"Returns - Plausible.Cldr.Locale.locale_for_territory/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.locale_for_territory(:AU)\n Elixir.Plausible.Cldr.validate_locale(:\"en-AU\")\n\n iex> Plausible.Cldr.Locale.locale_for_territory(:US)\n Elixir.Plausible.Cldr.validate_locale(:\"en-US\")\n\n iex> Plausible.Cldr.Locale.locale_for_territory(:ZZ)\n {:error, {Cldr.UnknownTerritoryError, \"The territory :ZZ is unknown\"}}","ref":"Plausible.Cldr.Locale.html#locale_for_territory/1-examples","title":"Examples - Plausible.Cldr.Locale.locale_for_territory/1","type":"function"},{"doc":"Returns a \"best fit\" locale for a host name.","ref":"Plausible.Cldr.Locale.html#locale_from_host/2","title":"Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"* `host` is any valid host name\n\n* `options` is a keyword list of options. The default\n is `[]`.","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-arguments","title":"Arguments - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"* `:tlds` is a list of territory codes as upper-cased\n atoms that are to be considered as top-level domains.\n See `Cldr.Locale.locale_from_host/2` for the default\n list.","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-options","title":"Options - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"* `{:ok, langauge_tag}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-returns","title":"Returns - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"Certain top-level domains have become associated with content\nunderlated to the territory for who the domain is registered.\nTherefore Google (and perhaps others) do not associate these\nTLDs as belonging to the territory but rather are considered\ngeneric top-level domain names.","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-notes","title":"Notes - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.locale_from_host \"a.b.com.au\"\n Elixir.Plausible.Cldr.validate_locale(:\"en-AU\")\n\n iex> Plausible.Cldr.Locale.locale_from_host(\"a.b.com.tv\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"tv\\\"\"}}\n\n iex> Plausible.Cldr.Locale.locale_from_host(\"a.b.com\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"com\\\"\"}}","ref":"Plausible.Cldr.Locale.html#locale_from_host/2-examples","title":"Examples - Plausible.Cldr.Locale.locale_from_host/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Locale.html#new/1","title":"Plausible.Cldr.Locale.new/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Locale.html#new!/1","title":"Plausible.Cldr.Locale.new!/1","type":"function"},{"doc":"Returns the script direction for a locale.","ref":"Plausible.Cldr.Locale.html#script_direction_from_locale/1","title":"Plausible.Cldr.Locale.script_direction_from_locale/1","type":"function"},{"doc":"* `language_tag` is any language tag returned by `Cldr.Locale.new/2`\n or any `locale_name` returned by `Cldr.known_locale_names/1`.","ref":"Plausible.Cldr.Locale.html#script_direction_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Locale.script_direction_from_locale/1","type":"function"},{"doc":"* The script direction which is either `:ltr` (for left-to-right\n scripts) or `:rtl` (for right-to-left scripts).","ref":"Plausible.Cldr.Locale.html#script_direction_from_locale/1-returns","title":"Returns - Plausible.Cldr.Locale.script_direction_from_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.script_direction_from_locale \"en-US\"\n :ltr\n\n iex> Plausible.Cldr.Locale.script_direction_from_locale :ar\n :rtl","ref":"Plausible.Cldr.Locale.html#script_direction_from_locale/1-examples","title":"Examples - Plausible.Cldr.Locale.script_direction_from_locale/1","type":"function"},{"doc":"Returns the last segment of a host that might\nbe a territory.","ref":"Plausible.Cldr.Locale.html#territory_from_host/1","title":"Plausible.Cldr.Locale.territory_from_host/1","type":"function"},{"doc":"* `host` is any valid host name","ref":"Plausible.Cldr.Locale.html#territory_from_host/1-arguments","title":"Arguments - Plausible.Cldr.Locale.territory_from_host/1","type":"function"},{"doc":"* `{:ok, territory}` or\n\n* `{:error, {exception, reason}}`","ref":"Plausible.Cldr.Locale.html#territory_from_host/1-returns","title":"Returns - Plausible.Cldr.Locale.territory_from_host/1","type":"function"},{"doc":"iex> Cldr.Locale.territory_from_host(\"a.b.com.au\")\n {:ok, :AU}\n\n iex> Cldr.Locale.territory_from_host(\"a.b.com\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"com\\\"\"}}","ref":"Plausible.Cldr.Locale.html#territory_from_host/1-examples","title":"Examples - Plausible.Cldr.Locale.territory_from_host/1","type":"function"},{"doc":"Returns the territory from a language tag or\nlocale name.","ref":"Plausible.Cldr.Locale.html#territory_from_locale/1","title":"Plausible.Cldr.Locale.territory_from_locale/1","type":"function"},{"doc":"* `locale` is any language tag returned by\n `Plausible.Cldr.Locale.new/1`\n or a locale name in the list returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.Locale.html#territory_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Locale.territory_from_locale/1","type":"function"},{"doc":"* A territory code as an atom","ref":"Plausible.Cldr.Locale.html#territory_from_locale/1-returns","title":"Returns - Plausible.Cldr.Locale.territory_from_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.territory_from_locale \"en-US\"\n :US\n\n iex> Plausible.Cldr.Locale.territory_from_locale \"en-US-u-rg-GBzzzz\"\n :GB","ref":"Plausible.Cldr.Locale.html#territory_from_locale/1-examples","title":"Examples - Plausible.Cldr.Locale.territory_from_locale/1","type":"function"},{"doc":"Returns the time zone from a language tag or\nlocale name.","ref":"Plausible.Cldr.Locale.html#timezone_from_locale/1","title":"Plausible.Cldr.Locale.timezone_from_locale/1","type":"function"},{"doc":"* `locale` is any language tag returned by\n `Plausible.Cldr.Locale.new/1`\n or a locale name in the list returned by\n `Plausible.Cldr.known_locale_names/0`","ref":"Plausible.Cldr.Locale.html#timezone_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Locale.timezone_from_locale/1","type":"function"},{"doc":"* A time zone ID as a string or\n\n* `:error` if no time zone can be determined","ref":"Plausible.Cldr.Locale.html#timezone_from_locale/1-returns","title":"Returns - Plausible.Cldr.Locale.timezone_from_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.Locale.timezone_from_locale \"en-US-u-tz-ausyd\"\n \"Australia/Sydney\"","ref":"Plausible.Cldr.Locale.html#timezone_from_locale/1-examples","title":"Examples - Plausible.Cldr.Locale.timezone_from_locale/1","type":"function"},{"doc":"Formats numbers and currencies based upon CLDR's decimal formats specification.\n\nThe format specification is documentated in [Unicode TR35](http://unicode.org/reports/tr35/tr35-numbers.html#Number_Formats).\nThere are several classes of formatting including non-scientific, scientific,\nrules based (for spelling and ordinal formats), compact formats that display `1k`\nrather than `1,000` and so on. See `Cldr.Number.to_string/2` for specific formatting\noptions.\n\n#","ref":"Plausible.Cldr.Number.html","title":"Plausible.Cldr.Number","type":"module"},{"doc":"The following description applies to formats that do not use scientific\nnotation or significant digits:\n\n* If the number of actual integer digits exceeds the maximum integer digits,\n then only the least significant digits are shown. For example, 1997 is\n formatted as \"97\" if the maximum integer digits is set to 2.\n\n* If the number of actual integer digits is less than the minimum integer\n digits, then leading zeros are added. For example, 1997 is formatted as\n \"01997\" if the minimum integer digits is set to 5.\n\n* If the number of actual fraction digits exceeds the maximum fraction\n digits, then half-even rounding it performed to the maximum fraction\n digits. For example, 0.125 is formatted as \"0.12\" if the maximum fraction\n digits is 2. This behavior can be changed by specifying a rounding\n increment and a rounding mode.\n\n* If the number of actual fraction digits is less than the minimum fraction\n digits, then trailing zeros are added. For example, 0.125 is formatted as\n \"0.1250\" if the minimum fraction digits is set to 4.\n\n* Trailing fractional zeros are not displayed if they occur j positions after\n the decimal, where j is less than the maximum fraction digits. For example,\n 0.10004 is formatted as \"0.1\" if the maximum fraction digits is four or\n less.\n\n#","ref":"Plausible.Cldr.Number.html#module-non-scientific-notation-formatting","title":"Non-Scientific Notation Formatting - Plausible.Cldr.Number","type":"module"},{"doc":"Numbers in scientific notation are expressed as the product of a mantissa and\na power of ten, for example, 1234 can be expressed as 1.234 x 10^3. The\nmantissa is typically in the half-open interval [1.0, 10.0) or sometimes\n[0.0, 1.0), but it need not be. In a pattern, the exponent character\nimmediately followed by one or more digit characters indicates scientific\nnotation. Example: \"0.###E0\" formats the number 1234 as \"1.234E3\".\n\n* The number of digit characters after the exponent character gives the\n minimum exponent digit count. There is no maximum. Negative exponents are\n formatted using the localized minus sign, not the prefix and suffix from\n the pattern. This allows patterns such as \"0.###E0 m/s\". To prefix positive\n exponents with a localized plus sign, specify '+' between the exponent and\n the digits: \"0.###E+0\" will produce formats \"1E+1\", \"1E+0\", \"1E-1\", and so\n on. (In localized patterns, use the localized plus sign rather than '+'.)\n\n* The minimum number of integer digits is achieved by adjusting the exponent.\n Example: 0.00123 formatted with \"00.###E0\" yields \"12.3E-4\". This only\n happens if there is no maximum number of integer digits. If there is a\n maximum, then the minimum number of integer digits is fixed at one.\n\n* The maximum number of integer digits, if present, specifies the exponent\n grouping. The most common use of this is to generate engineering notation,\n in which the exponent is a multiple of three, for example, \"##0.###E0\". The\n number 12345 is formatted using \"##0.####E0\" as \"12.345E3\".\n\n* When using scientific notation, the formatter controls the digit counts\n using significant digits logic. The maximum number of significant digits\n limits the total number of integer and fraction digits that will be shown\n in the mantissa; it does not affect parsing. For example, 12345 formatted\n with \"##0.##E0\" is \"12.3E3\". Exponential patterns may not contain grouping\n separators.\n\n#","ref":"Plausible.Cldr.Number.html#module-scientific-notation-formatting","title":"Scientific Notation Formatting - Plausible.Cldr.Number","type":"module"},{"doc":"There are two ways of controlling how many digits are shows: (a)\nsignificant digits counts, or (b) integer and fraction digit counts. Integer\nand fraction digit counts are described above. When a formatter is using\nsignificant digits counts, it uses however many integer and fraction digits\nare required to display the specified number of significant digits. It may\nignore min/max integer/fraction digits, or it may use them to the extent\npossible.","ref":"Plausible.Cldr.Number.html#module-significant-digits","title":"Significant Digits - Plausible.Cldr.Number","type":"module"},{"doc":"Parse a string locale-aware manner and return\na number.","ref":"Plausible.Cldr.Number.html#parse/2","title":"Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"* `string` is any `String.t`\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#parse/2-arguments","title":"Arguments - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"* `:number` is one of `:integer`, `:float`,\n `:decimal` or `nil`. The default is `nil`\n meaning that the type auto-detected as either\n an `integer` or a `float`.\n\n* `:locale` is any locale returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag.t`. The default is\n `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.html#parse/2-options","title":"Options - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"* A number of the requested or default type or\n\n* `{:error, {exception, error}}` if no number could be determined","ref":"Plausible.Cldr.Number.html#parse/2-returns","title":"Returns - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"This function parses a string to return a number but\nin a locale-aware manner. It will normalise grouping\ncharacters and decimal separators, different forms of\nthe `+` and `-` symbols that appear in Unicode and\nstrips any `_` characters that might be used for\nformatting in a string. It then parses the number\nusing the Elixir standard library functions.","ref":"Plausible.Cldr.Number.html#parse/2-notes","title":"Notes - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.parse(\"+1.000,34\", locale: \"de\")\n {:ok, 1000.34}\n\n iex> Plausible.Cldr.Number.parse(\"-1_000_000.34\")\n {:ok, -1000000.34}\n\n iex> Plausible.Cldr.Number.parse(\"1.000\", locale: \"de\", number: :integer)\n {:ok, 1000}\n\n iex> Plausible.Cldr.Number.parse(\"+1.000,34\", locale: \"de\", number: :integer)\n {:error,\n {Cldr.Number.ParseError,\n \"The string \\\"+1.000,34\\\" could not be parsed as a number\"}}","ref":"Plausible.Cldr.Number.html#parse/2-examples","title":"Examples - Plausible.Cldr.Number.parse/2","type":"function"},{"doc":"Resolve curencies from strings within\na list.","ref":"Plausible.Cldr.Number.html#resolve_currencies/2","title":"Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"* `list` is any list in which currency\n names and symbols are expected\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#resolve_currencies/2-arguments","title":"Arguments - Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"* `:locale` is any valid locale returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n The default is `Plausible.Cldr.get_locale()`\n\n* `:only` is an `atom` or list of `atoms` representing the\n currencies or currency types to be considered for a match.\n The equates to a list of acceptable currencies for parsing.\n See the notes below for currency types.\n\n* `:except` is an `atom` or list of `atoms` representing the\n currencies or currency types to be not considered for a match.\n This equates to a list of unacceptable currencies for parsing.\n See the notes below for currency types.\n\n* `:fuzzy` is a float greater than `0.0` and less than or\n equal to `1.0` which is used as input to\n `String.jaro_distance/2` to determine is the provided\n currency string is *close enough* to a known currency\n string for it to identify definitively a currency code.\n It is recommended to use numbers greater than `0.8` in\n order to reduce false positives.","ref":"Plausible.Cldr.Number.html#resolve_currencies/2-options","title":"Options - Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"The `:only` and `:except` options accept a list of\ncurrency codes and/or currency types. The following\ntypes are recognised.\n\nIf both `:only` and `:except` are specified,\nthe `:except` entries take priority - that means\nany entries in `:except` are removed from the `:only`\nentries.\n\n * `:all`, the default, considers all currencies\n\n * `:current` considers those currencies that have a `:to`\n date of nil and which also is a known ISO4217 currency\n\n * `:historic` is the opposite of `:current`\n\n * `:tender` considers currencies that are legal tender\n\n * `:unannotated` considers currencies that don't have\n \"(some string)\" in their names. These are usually\n financial instruments.","ref":"Plausible.Cldr.Number.html#resolve_currencies/2-notes","title":"Notes - Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.scan(\"100 US dollars\")\n ...> |> Plausible.Cldr.Number.resolve_currencies\n [100, :USD]\n\n iex> Plausible.Cldr.Number.scan(\"100 eurosports\")\n ...> |> Plausible.Cldr.Number.resolve_currencies(fuzzy: 0.75)\n [100, :EUR]\n\n iex> Plausible.Cldr.Number.scan(\"100 dollars des États-Unis\")\n ...> |> Plausible.Cldr.Number.resolve_currencies(locale: \"fr\")\n [100, :USD]","ref":"Plausible.Cldr.Number.html#resolve_currencies/2-examples","title":"Examples - Plausible.Cldr.Number.resolve_currencies/2","type":"function"},{"doc":"Resolve a currency from a string","ref":"Plausible.Cldr.Number.html#resolve_currency/2","title":"Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"* `list` is any list in which currency\n names and symbols are expected\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#resolve_currency/2-arguments","title":"Arguments - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"* `:locale` is any valid locale returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n The default is `Plausible.Cldr.get_locale()`\n\n* `:only` is an `atom` or list of `atoms` representing the\n currencies or currency types to be considered for a match.\n The equates to a list of acceptable currencies for parsing.\n See the notes below for currency types.\n\n* `:except` is an `atom` or list of `atoms` representing the\n currencies or currency types to be not considered for a match.\n This equates to a list of unacceptable currencies for parsing.\n See the notes below for currency types.\n\n* `:fuzzy` is a float greater than `0.0` and less than or\n equal to `1.0` which is used as input to\n `String.jaro_distance/2` to determine is the provided\n currency string is *close enough* to a known currency\n string for it to identify definitively a currency code.\n It is recommended to use numbers greater than `0.8` in\n order to reduce false positives.","ref":"Plausible.Cldr.Number.html#resolve_currency/2-options","title":"Options - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"* An ISO4217 currency code as an atom or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.html#resolve_currency/2-returns","title":"Returns - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"The `:only` and `:except` options accept a list of\ncurrency codes and/or currency types. The following\ntypes are recognised.\n\nIf both `:only` and `:except` are specified,\nthe `:except` entries take priority - that means\nany entries in `:except` are removed from the `:only`\nentries.\n\n * `:all`, the default, considers all currencies\n\n * `:current` considers those currencies that have a `:to`\n date of nil and which also is a known ISO4217 currency\n\n * `:historic` is the opposite of `:current`\n\n * `:tender` considers currencies that are legal tender\n\n * `:unannotated` considers currencies that don't have\n \"(some string)\" in their names. These are usually\n financial instruments.","ref":"Plausible.Cldr.Number.html#resolve_currency/2-notes","title":"Notes - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.resolve_currency(\"US dollars\")\n [:USD]\n\n iex> Plausible.Cldr.Number.resolve_currency(\"100 eurosports\", fuzzy: 0.75)\n [:EUR]\n\n iex> Plausible.Cldr.Number.resolve_currency(\"dollars des États-Unis\", locale: \"fr\")\n [:USD]\n\n iex> Plausible.Cldr.Number.resolve_currency(\"not a known currency\", locale: \"fr\")\n {:error,\n {Cldr.UnknownCurrencyError,\n \"The currency \\\"not a known currency\\\" is unknown or not supported\"}}","ref":"Plausible.Cldr.Number.html#resolve_currency/2-examples","title":"Examples - Plausible.Cldr.Number.resolve_currency/2","type":"function"},{"doc":"Resolve and tokenize percent or permille\nfrom the beginning and/or the end of a string","ref":"Plausible.Cldr.Number.html#resolve_per/2","title":"Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"* `list` is any list in which percent\n and permille symbols are expected\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#resolve_per/2-arguments","title":"Arguments - Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"* `:locale` is any valid locale returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n The default is `options[:backend].get_locale()`","ref":"Plausible.Cldr.Number.html#resolve_per/2-options","title":"Options - Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"* An `:percent` or `permille` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.html#resolve_per/2-returns","title":"Returns - Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.resolve_per \"11%\"\n [\"11\", :percent]\n\n iex> Plausible.Cldr.Number.resolve_per \"% of linguists\"\n [:percent, \" of linguists\"]\n\n iex> Plausible.Cldr.Number.resolve_per \"% of linguists %\"\n [:percent, \" of linguists \", :percent]","ref":"Plausible.Cldr.Number.html#resolve_per/2-examples","title":"Examples - Plausible.Cldr.Number.resolve_per/2","type":"function"},{"doc":"Resolve and tokenize percent and permille\nsybols from strings within a list.\n\nPercent and permille symbols can be identified\nat the beginning and/or the end of a string.","ref":"Plausible.Cldr.Number.html#resolve_pers/2","title":"Plausible.Cldr.Number.resolve_pers/2","type":"function"},{"doc":"* `list` is any list in which percent and\n permille symbols are expected\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#resolve_pers/2-arguments","title":"Arguments - Plausible.Cldr.Number.resolve_pers/2","type":"function"},{"doc":"* `:locale` is any valid locale returned by `Cldr.known_locale_names/1`\n or a `t:Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n The default is `options[:backend].get_locale()`","ref":"Plausible.Cldr.Number.html#resolve_pers/2-options","title":"Options - Plausible.Cldr.Number.resolve_pers/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.scan(\"100%\")\n ...> |> Plausible.Cldr.Number.resolve_pers()\n [100, :percent]","ref":"Plausible.Cldr.Number.html#resolve_pers/2-examples","title":"Examples - Plausible.Cldr.Number.resolve_pers/2","type":"function"},{"doc":"Scans a string locale-aware manner and returns\na list of strings and numbers.","ref":"Plausible.Cldr.Number.html#scan/2","title":"Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"* `string` is any `String.t`\n\n* `options` is a keyword list of options","ref":"Plausible.Cldr.Number.html#scan/2-arguments","title":"Arguments - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"* `:number` is one of `:integer`, `:float`,\n `:decimal` or `nil`. The default is `nil`\n meaning that the type auto-detected as either\n an `integer` or a `float`.\n\n* `:locale` is any locale returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag.t`. The default is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.html#scan/2-options","title":"Options - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"* A list of strings and numbers","ref":"Plausible.Cldr.Number.html#scan/2-returns","title":"Returns - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"Number parsing is performed by `Cldr.Number.Parser.parse/2`\nand any options provided are passed to that function.","ref":"Plausible.Cldr.Number.html#scan/2-notes","title":"Notes - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.scan(\"£1_000_000.34\")\n [\"£\", 1000000.34]\n\n iex> Plausible.Cldr.Number.scan(\"I want £1_000_000 dollars\")\n [\"I want £\", 1000000, \" dollars\"]\n\n iex> Plausible.Cldr.Number.scan(\"The prize is 23\")\n [\"The prize is \", 23]\n\n iex> Plausible.Cldr.Number.scan(\"The lottery number is 23 for the next draw\")\n [\"The lottery number is \", 23, \" for the next draw\"]\n\n iex> Plausible.Cldr.Number.scan(\"The loss is -1.000 euros\", locale: \"de\", number: :integer)\n [\"The loss is \", -1000, \" euros\"]","ref":"Plausible.Cldr.Number.html#scan/2-examples","title":"Examples - Plausible.Cldr.Number.scan/2","type":"function"},{"doc":"Formats a number and applies the `:approximately` format for\na locale and number system.","ref":"Plausible.Cldr.Number.html#to_approx_string/2","title":"Plausible.Cldr.Number.to_approx_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.\n See `Cldr.Number.to_string/3` for a description of the available\n options.","ref":"Plausible.Cldr.Number.html#to_approx_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_approx_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_approx_string 1234\n {:ok, \"~1,234\"}","ref":"Plausible.Cldr.Number.html#to_approx_string/2-example","title":"Example - Plausible.Cldr.Number.to_approx_string/2","type":"function"},{"doc":"Formats a number and applies the `:at_least` format for\na locale and number system.","ref":"Plausible.Cldr.Number.html#to_at_least_string/2","title":"Plausible.Cldr.Number.to_at_least_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.\n See `Plausible.Cldr.Number.to_string/2` for a description of the available\n options.","ref":"Plausible.Cldr.Number.html#to_at_least_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_at_least_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_at_least_string 1234\n {:ok, \"1,234+\"}","ref":"Plausible.Cldr.Number.html#to_at_least_string/2-example","title":"Example - Plausible.Cldr.Number.to_at_least_string/2","type":"function"},{"doc":"Formats a number and applies the `:at_most` format for\na locale and number system.","ref":"Plausible.Cldr.Number.html#to_at_most_string/2","title":"Plausible.Cldr.Number.to_at_most_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.\n See `Cldr.Number.to_string/3` for a description of the available\n options.","ref":"Plausible.Cldr.Number.html#to_at_most_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_at_most_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_at_most_string 1234\n {:ok, \"≤1,234\"}","ref":"Plausible.Cldr.Number.html#to_at_most_string/2-example","title":"Example - Plausible.Cldr.Number.to_at_most_string/2","type":"function"},{"doc":"Formats the first and last numbers of a range and applies\nthe `:range` format for a locale and number system.","ref":"Plausible.Cldr.Number.html#to_range_string/2","title":"Plausible.Cldr.Number.to_range_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.\n See `Cldr.Number.to_string/3` for a description of the available\n options.","ref":"Plausible.Cldr.Number.html#to_range_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_range_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_range_string 1234..5678\n {:ok, \"1,234–5,678\"}","ref":"Plausible.Cldr.Number.html#to_range_string/2-example","title":"Example - Plausible.Cldr.Number.to_range_string/2","type":"function"},{"doc":"Returns a number formatted into a string according to a format pattern and options.","ref":"Plausible.Cldr.Number.html#to_string/2","title":"Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted.","ref":"Plausible.Cldr.Number.html#to_string/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"* `format`: the format style or a format string defining how the number is\n formatted. See `Cldr.Number.Format` for how format strings can be constructed.\n See `Cldr.Number.Format.format_styles_for/3` to return available format styles\n for a locale. The default `format` is `:standard`.\n\n* If `:format` is set to `:long` or `:short` then the formatting depends on\n whether `:currency` is specified. If not specified then the number is\n formatted as `:decimal_long` or `:decimal_short`. If `:currency` is\n specified the number is formatted as `:currency_long` or\n `:currency_short` and `:fractional_digits` is set to 0 as a default.\n\n* `:format` may also be a format defined by CLDR's Rules Based Number\n Formats (RBNF). Further information is found in the module `Cldr.Rbnf`.\n The most commonly used formats in this category are to spell out the\n number in a the locales language. The applicable formats are `:spellout`,\n `:spellout_year`, `:ordinal`. A number can also be formatted as roman\n numbers by using the format `:roman` or `:roman_lower`.\n\n* `currency`: is the currency for which the number is formatted. For\n available currencies see `Cldr.Currency.known_currencies/0`. This option\n is required if `:format` is set to `:currency`. If `currency` is set\n and no `:format` is set, `:format` will be set to `:currency` as well.\n\n* `currency_symbol`: Allows overriding a currency symbol. The alternatives\n are:\n * `:iso` the ISO currency code will be used instead of the default\n currency symbol.\n * `:narrow` uses the narrow symbol defined for the locale. The same\n narrow symbol can be defined for more than one currency and therefore this\n should be used with care. If no narrow symbol is defined, the standard\n symbol is used.\n * `:symbol` uses the standard symbol defined in CLDR. A symbol is unique\n for each currency and can be safely used.\n * \"string\" uses `string` as the currency symbol\n * `:standard` (the default and recommended) uses the CLDR-defined symbol\n based upon the currency format for the locale.\n\n* `:cash`: a boolean which indicates whether a number being formatted as a\n `:currency` is to be considered a cash value or not. Currencies can be\n rounded differently depending on whether `:cash` is `true` or `false`.\n *This option is deprecated in favour of `currency_digits: :cash`.\n\n* `:currency_digits` indicates which of the rounding and digits should be\n used. The options are `:accounting` which is the default, `:cash` or\n `:iso`\n\n* `:rounding_mode`: determines how a number is rounded to meet the precision\n of the format requested. The available rounding modes are `:down`,\n :half_up, :half_even, :ceiling, :floor, :half_down, :up. The default is\n `:half_even`.\n\n* `:number_system`: determines which of the number systems for a locale\n should be used to define the separators and digits for the formatted\n number. If `number_system` is an `atom` then `number_system` is\n interpreted as a number system. If the `:number_system` is\n `binary` then it is interpreted as a number system name. See\n `Cldr.Number.System.number_system_names_for/2`. The default is `:default`.\n\n* `:locale`: determines the locale in which the number is formatted. See\n `Cldr.known_locale_names/0`. The default is`Cldr.get_locale/0` which is the\n locale currently in affect for this `Process` and which is set by\n `Cldr.put_locale/1`.\n\n* If `:fractional_digits` is set to a positive integer value then the number\n will be rounded to that number of digits and displayed accordingly - overriding\n settings that would be applied by default. For example, currencies have\n fractional digits defined reflecting each currencies minor unit. Setting\n `:fractional_digits` will override that setting.\n\n* If `:maximum_integer_digits` is set to a positive integer value then the\n number is left truncated before formatting. For example if the number `1234`\n is formatted with the option `maximum_integer_digits: 2`, the number is\n truncated to `34` and formatted.\n\n* If `:round_nearest` is set to a positive integer value then the number\n will be rounded to nearest increment of that value - overriding\n settings that would be applied by default.\n\n* `:minimum_grouping_digits` overrides the CLDR definition of minimum grouping\n digits. For example in the locale `es` the number `1234` is formatted by default\n as `1345` because the locale defines the `minimium_grouping_digits` as `2`. If\n `minimum_grouping_digits: 1` is set as an option the number is formatting as\n `1.345`. The `:minimum_grouping_digits` is added to the grouping defined by\n the number format. If the sum of these two digits is greater than the number\n of digits in the integer (or fractional) part of the number then no grouping\n is performed.\n\n* `:wrapper` is a 2-arity function that will be called for each number component\n with parameters `string` and `tag` where `tag` is one of `:number`,\n `:currency_symbol`, `:currency_space`, `:literal`, `:quote`, `:percent`,\n `:permille`, `:minus` or `:plus`. The function must return a string. The\n function can be used to wrap format elements in HTML or other tags.","ref":"Plausible.Cldr.Number.html#to_string/2-options","title":"Options - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"A locale identifier can specify options that affect number formatting.\nThese options are:\n\n* `nu`: defines the number system to be used if none is specified by the `:number_system`\n option to `to_string/2`\n\nThis key is part of the [u extension](https://unicode.org/reports/tr35/#u_Extension) and\nthat document should be consulted for details on how to construct a locale identifier with these\nextensions.","ref":"Plausible.Cldr.Number.html#to_string/2-locale-extensions-affecting-formatting","title":"Locale extensions affecting formatting - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"Wrapping elements is particularly useful when formatting a number with a\ncurrency symbol and the requirement is to have different HTML formatting\napplied to the symbol than the number. For example:\n\n iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn\n ...> string, :currency_symbol -> \" \" string \" \"\n ...> string, :number -> \" \" string \" \"\n ...> string, :currency_space -> \" \" string \" \"\n ...> string, _other -> string\n ...> end)\n {:ok, \" $ 100.00 \"}\n\nIt is also possible and recommended to use the `Phoenix.HTML.Tag.content_tag/3`\nfunction if wrapping HTML tags since these will ensure HTML entities are\ncorrectly encoded. For example:\n\n iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn\n ...> string, :currency_symbol -> Phoenix.HTML.Tag.content_tag(:span, string, class: \"symbol\")\n ...> string, :number -> Phoenix.HTML.Tag.content_tag(:span, string, class: \"number\")\n ...> string, :currency_space -> Phoenix.HTML.Tag.content_tag(:span, string)\n ...> string, _other -> string\n ...> end)\n {:ok, \" $ 100.00 \"}\n\nWhen formatting a number the format is parsed into format elements that might include\na currency symbol, a literal string, inserted text between a currency symbol and the\ncurrency amount, a percent sign, the number itself and several other elements. In\nsome cases it is helpful to be apply specific formatting to each element.\nThis can be achieved by specifying a `:wrapper` option. This option takes a 2-arity\nfunction as an argument. For each element of the format the wrapper function is called\nwith two parameters: the format element as a string and an atom representing the\nelement type. The wrapper function is required to return a string that is then\ninserted in the final formatted number.","ref":"Plausible.Cldr.Number.html#to_string/2-wrapping-format-elements","title":"Wrapping format elements - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"* `{:ok, string}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.html#to_string/2-returns","title":"Returns - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_string 12345\n {:ok, \"12,345\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, locale: \"fr\"\n {:ok, \"12 345\"}\n\n iex> Plausible.Cldr.Number.to_string 1345.32, currency: :EUR, locale: \"es\", minimum_grouping_digits: 1\n {:ok, \"1.345,32 €\"}\n\n iex> Plausible.Cldr.Number.to_string 1345.32, currency: :EUR, locale: \"es\"\n {:ok, \"1345,32 €\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, locale: \"fr\", currency: \"USD\"\n {:ok, \"12 345,00 $US\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, format: \"#E0\"\n {:ok, \"1.2345E4\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\"\n {:ok, \"THB 12,345.00\"}\n\n iex> Plausible.Cldr.Number.to_string -12345, format: :accounting, currency: \"THB\"\n {:ok, \"(THB 12,345.00)\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\",\n ...> locale: \"th\"\n {:ok, \"฿12,345.00\"}\n\n iex> Plausible.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\",\n ...> locale: \"th\", number_system: :native\n {:ok, \"฿๑๒,๓๔๕.๐๐\"}\n\n iex> Plausible.Cldr.Number.to_string 1244.30, format: :long\n {:ok, \"1 thousand\"}\n\n iex> Plausible.Cldr.Number.to_string 1244.30, format: :long, currency: \"USD\"\n {:ok, \"1,244 US dollars\"}\n\n iex> Plausible.Cldr.Number.to_string 1244.30, format: :short\n {:ok, \"1K\"}\n\n iex> Plausible.Cldr.Number.to_string 1244.30, format: :short, currency: \"EUR\"\n {:ok, \"€1K\"}\n\n iex> Plausible.Cldr.Number.to_string 1234, format: :spellout\n {:ok, \"one thousand two hundred thirty-four\"}\n\n iex> Plausible.Cldr.Number.to_string 1234, format: :spellout_verbose\n {:ok, \"one thousand two hundred and thirty-four\"}\n\n iex> Plausible.Cldr.Number.to_string 1989, format: :spellout_year\n {:ok, \"nineteen eighty-nine\"}\n\n iex> Plausible.Cldr.Number.to_string 123, format: :ordinal\n {:ok, \"123rd\"}\n\n iex> Plausible.Cldr.Number.to_string 123, format: :roman\n {:ok, \"CXXIII\"}\n\n iex> Plausible.Cldr.Number.to_string 123, locale: \"th-u-nu-thai\"\n {:ok, \"๑๒๓\"}","ref":"Plausible.Cldr.Number.html#to_string/2-examples","title":"Examples - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"An error tuple `{:error, reason}` will be returned if an error is detected.\nThe two most likely causes of an error return are:\n\n * A format cannot be compiled. In this case the error tuple will look like:\n\n```\n iex> Plausible.Cldr.Number.to_string(12345, format: \"0#\")\n {:error, {Cldr.FormatCompileError,\n \"Decimal format compiler: syntax error before: \\\"#\\\"\"}}\n```\n\n * The format style requested is not defined for the `locale` and\n `number_system`. This happens typically when the number system is\n `:algorithmic` rather than the more common `:numeric`. In this case the error\n return looks like:\n\n```\n iex> Plausible.Cldr.Number.to_string(1234, locale: \"he\", number_system: \"hebr\")\n {:error, {Cldr.UnknownFormatError,\n \"The locale :he with number system :hebr does not define a format :standard\"}}\n```","ref":"Plausible.Cldr.Number.html#to_string/2-errors","title":"Errors - Plausible.Cldr.Number.to_string/2","type":"function"},{"doc":"Same as the execution of `to_string/2` but raises an exception if an error would be\nreturned.","ref":"Plausible.Cldr.Number.html#to_string!/2","title":"Plausible.Cldr.Number.to_string!/2","type":"function"},{"doc":"* `number` is an integer, float or Decimal to be formatted\n\n* `options` is a keyword list defining how the number is to be formatted. See\n `Plausible.Cldr.Number.to_string/2`","ref":"Plausible.Cldr.Number.html#to_string!/2-arguments","title":"Arguments - Plausible.Cldr.Number.to_string!/2","type":"function"},{"doc":"* a formatted number as a string or\n\n* raises an exception","ref":"Plausible.Cldr.Number.html#to_string!/2-returns","title":"Returns - Plausible.Cldr.Number.to_string!/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.to_string! 12345\n \"12,345\"\n\n iex> Plausible.Cldr.Number.to_string! 12345, locale: \"fr\"\n \"12 345\"","ref":"Plausible.Cldr.Number.html#to_string!/2-examples","title":"Examples - Plausible.Cldr.Number.to_string!/2","type":"function"},{"doc":"Return a valid number system from a provided locale and number\nsystem name or type.\n\nThe number system or number system type must be valid for the\ngiven locale. If a number system type is provided, the\nunderlying number system is returned.","ref":"Plausible.Cldr.Number.html#validate_number_system/2","title":"Plausible.Cldr.Number.validate_number_system/2","type":"function"},{"doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/1`\n or a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`\n\n* `system_name` is any number system name returned by\n `Cldr.known_number_systems/0` or a number system type\n returned by `Cldr.known_number_system_types/0`","ref":"Plausible.Cldr.Number.html#validate_number_system/2-arguments","title":"Arguments - Plausible.Cldr.Number.validate_number_system/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.validate_number_system \"en\", :latn\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.validate_number_system \"en\", :default\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.validate_number_system \"en\", :unknown\n {:error,\n {Cldr.UnknownNumberSystemError, \"The number system :unknown is unknown\"}}\n\n iex> Plausible.Cldr.Number.validate_number_system \"zz\", :default\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Plausible.Cldr.Number.html#validate_number_system/2-examples","title":"Examples - Plausible.Cldr.Number.validate_number_system/2","type":"function"},{"doc":"Implements cardinal plural rules for numbers.","ref":"Plausible.Cldr.Number.Cardinal.html","title":"Plausible.Cldr.Number.Cardinal","type":"module"},{"doc":"The locale names for which plural rules are defined.","ref":"Plausible.Cldr.Number.Cardinal.html#available_locale_names/0","title":"Plausible.Cldr.Number.Cardinal.available_locale_names/0","type":"function"},{"doc":"The configured locales for which plural rules are defined.\n\nReturns the intersection of `Plausible.Cldr.known_locale_names/0` and\nthe locales for which Cardinal plural rules are defined.\n\nThere are many `Cldr` locales which don't have their own plural\nrules so this list is the intersection of `Cldr`'s configured\nlocales and those that have rules.","ref":"Plausible.Cldr.Number.Cardinal.html#known_locale_names/0","title":"Plausible.Cldr.Number.Cardinal.known_locale_names/0","type":"function"},{"doc":"Return the plural key for a given number in a given locale\n\nReturns which plural key (`:zero`, `:one`, `:two`, `:few`,\n`:many` or `:other`) a given number fits into within the\ncontext of a given locale.\n\nNote that these key names should not be interpreted\nliterally. For example, the key returned from\n`Cldr.Number.Ordinal.plural_rule(0, \"en\")` is actually\n`:other`, not `:zero`.\n\nThis key can then be used to format a number, date, time, unit,\nlist or other content in a plural-sensitive way.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rule/3","title":"Plausible.Cldr.Number.Cardinal.plural_rule/3","type":"function"},{"doc":"* `number` is any `integer`, `float` or `Decimal`\n\n* `locale` is any locale returned by `Cldr.Locale.new!/2` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\n* `rounding` is one of `[:down, :up, :ceiling, :floor, :half_even, :half_up, :half_down]`. The\n default is `:half_even`.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rule/3-arguments","title":"Arguments - Plausible.Cldr.Number.Cardinal.plural_rule/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Cardinal.plural_rule 0, \"fr\"\n :one\n\n iex> Plausible.Cldr.Number.Cardinal.plural_rule 0, \"en\"\n :other","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rule/3-examples","title":"Examples - Plausible.Cldr.Number.Cardinal.plural_rule/3","type":"function"},{"doc":"Returns all the plural rules defined in CLDR.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rules/0","title":"Plausible.Cldr.Number.Cardinal.plural_rules/0","type":"function"},{"doc":"Return the plural rules for a locale.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rules_for/1","title":"Plausible.Cldr.Number.Cardinal.plural_rules_for/1","type":"function"},{"doc":"* `locale` is any locale returned by `Plausible.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\nThe rules are returned in AST form after parsing.","ref":"Plausible.Cldr.Number.Cardinal.html#plural_rules_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Cardinal.plural_rules_for/1","type":"function"},{"doc":"Pluralize a number using cardinal plural rules\nand a substitution map.","ref":"Plausible.Cldr.Number.Cardinal.html#pluralize/3","title":"Plausible.Cldr.Number.Cardinal.pluralize/3","type":"function"},{"doc":"* `number` is an integer, float or Decimal\n\n* `locale` is any locale returned by `Plausible.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\n* `substitutions` is a map that maps plural keys to a string.\n The valid substitution keys are `:zero`, `:one`, `:two`,\n `:few`, `:many` and `:other`.\n\nSee also `Plausible.Cldr.Number.Cardinal.Cardinal.plural_rule/3`.","ref":"Plausible.Cldr.Number.Cardinal.html#pluralize/3-arguments","title":"Arguments - Plausible.Cldr.Number.Cardinal.pluralize/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Cardinal.pluralize 1, \"en\", %{one: \"one\"}\n \"one\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 2, \"en\", %{one: \"one\"}\n nil\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 2, \"en\", %{one: \"one\", two: \"two\", other: \"other\"}\n \"other\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 22, \"en\", %{one: \"one\", two: \"two\", other: \"other\"}\n \"other\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(1), \"en\", %{one: \"one\"}\n \"one\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), \"en\", %{one: \"one\"}\n nil\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), \"en\", %{one: \"one\", two: \"two\"}\n nil\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, \"ar\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"few\"\n\n iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, \"en\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"","ref":"Plausible.Cldr.Number.Cardinal.html#pluralize/3-examples","title":"Examples - Plausible.Cldr.Number.Cardinal.pluralize/3","type":"function"},{"doc":"Functions to manage the collection of number patterns defined in Cldr.\n\nNumber patterns affect how numbers are interpreted in a localized context.\nHere are some examples, based on the French locale. The \".\" shows where the\ndecimal point should go. The \",\" shows where the thousands separator should\ngo. A \"0\" indicates zero-padding: if the number is too short, a zero (in the\nlocale's numeric set) will go there. A \"#\" indicates no padding: if the\nnumber is too short, nothing goes there. A \"¤\" shows where the currency sign\nwill go. The following illustrates the effects of different patterns for the\nFrench locale, with the number \"1234.567\". Notice how the pattern characters\n',' and '.' are replaced by the characters appropriate for the locale.","ref":"Plausible.Cldr.Number.Format.html","title":"Plausible.Cldr.Number.Format","type":"module"},{"doc":"| Pattern\t | Currency\t | Text |\n| ------------- | :-------------: | ----------: |\n| #,##0.##\t | n/a\t | 1 234,57 |\n| #,##0.###\t | n/a\t | 1 234,567 |\n| ###0.#####\t | n/a\t | 1234,567 |\n| ###0.0000#\t | n/a\t | 1234,5670 |\n| 00000.0000\t | n/a\t | 01234,5670 |\n| #,##0.00 ¤\t | EUR\t | 1 234,57 € |\n\nThe number of # placeholder characters before the decimal do not matter,\nsince no limit is placed on the maximum number of digits. There should,\nhowever, be at least one zero some place in the pattern. In currency formats,\nthe number of digits after the decimal also do not matter, since the\ninformation in the supplemental data (see Supplemental Currency Data) is used\nto override the number of decimal places — and the rounding — according to\nthe currency that is being formatted. That can be seen in the above chart,\nwith the difference between Yen and Euro formatting.\n\nDetails of the number formats are described in the\n[Unicode documentation](http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns)","ref":"Plausible.Cldr.Number.Format.html#module-number-pattern-examples","title":"Number Pattern Examples - Plausible.Cldr.Number.Format","type":"module"},{"doc":"Returns the decimal formats defined for a given locale.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for/1","title":"Plausible.Cldr.Number.Format.all_formats_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.all_formats_for/1","type":"function"},{"doc":"* `{:ok, map}` where map is a map of decimal formats\n keyed by number system or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.Format.html#all_formats_for/1-returns","title":"Returns - Plausible.Cldr.Number.Format.all_formats_for/1","type":"function"},{"doc":"Returns the decimal formats defined for a given locale.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for!/1","title":"Plausible.Cldr.Number.Format.all_formats_for!/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for!/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.all_formats_for!/1","type":"function"},{"doc":"* `{:ok, map}` where map is a map of decimal formats\n keyed by number system or\n\n* raises an exception\n\nSee `Plausible.Cldr.Number.Format.Number.Format.all_formats_for/1` for further information.","ref":"Plausible.Cldr.Number.Format.html#all_formats_for!/1-returns","title":"Returns - Plausible.Cldr.Number.Format.all_formats_for!/1","type":"function"},{"doc":"Returns the currency space for a given locale and\nnumber system.","ref":"Plausible.Cldr.Number.Format.html#currency_spacing/2","title":"Plausible.Cldr.Number.Format.currency_spacing/2","type":"function"},{"doc":"Returns the list of decimal formats in the configured locales including\nthe list of locales configured for precompilation in `config.exs`.\n\nThis function exists to allow the decimal formatter\nto precompile all the known formats at compile time.","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list/0","title":"Plausible.Cldr.Number.Format.decimal_format_list/0","type":"function"},{"doc":"#=> Plausible.Cldr.Number.Format.Format.decimal_format_list\n [\"#\", \"#,##,##0%\",\n \"#,##,##0.###\", \"#,##,##0.00¤\", \"#,##,##0.00¤;(#,##,##0.00¤)\",\n \"#,##,##0 %\", \"#,##0%\", \"#,##0.###\", \"#,##0.00 ¤\",\n \"#,##0.00 ¤;(#,##0.00 ¤)\", \"#,##0.00¤\", \"#,##0.00¤;(#,##0.00¤)\",\n \"#,##0 %\", \"#0%\", \"#0.######\", \"#0.00 ¤\", \"#E0\", \"%#,##0\", \"% #,##0\",\n \"0\", \"0.000000E+000\", \"0000 M ¤\", \"0000¤\", \"000G ¤\", \"000K ¤\", \"000M ¤\",\n \"000T ¤\", \"000mM ¤\", \"000m ¤\", \"000 Bio'.' ¤\", \"000 Bln ¤\", \"000 Bn ¤\",\n \"000 B ¤\", \"000 E ¤\", \"000 K ¤\", \"000 MRD ¤\", \"000 Md ¤\", \"000 Mio'.' ¤\",\n \"000 Mio ¤\", \"000 Mld ¤\", \"000 Mln ¤\", \"000 Mn ¤\", \"000 Mrd'.' ¤\",\n \"000 Mrd ¤\", \"000 Mr ¤\", \"000 M ¤\", \"000 NT ¤\", \"000 N ¤\", \"000 Tn ¤\",\n \"000 Tr ¤\", ...]","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list/0-example","title":"Example - Plausible.Cldr.Number.Format.decimal_format_list/0","type":"function"},{"doc":"Returns the list of decimal formats for a configured locale.","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list_for/1","title":"Plausible.Cldr.Number.Format.decimal_format_list_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.\n\nThis function exists to allow the decimal formatter to precompile all\nthe known formats at compile time. Its use is not otherwise recommended.","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.decimal_format_list_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.decimal_format_list_for(:en)\n {:ok, [\"#,##0%\", \"#,##0.###\", \"#,##0.00\", \"#,##0.00;(#,##0.00)\",\"#E0\",\n \"0 billion\", \"0 million\", \"0 thousand\",\n \"0 trillion\", \"00 billion\", \"00 million\", \"00 thousand\", \"00 trillion\",\n \"000 billion\", \"000 million\", \"000 thousand\", \"000 trillion\", \"000B\", \"000K\",\n \"000M\", \"000T\", \"00B\", \"00K\", \"00M\", \"00T\", \"0B\", \"0K\", \"0M\", \"0T\",\n \"¤#,##0.00\", \"¤#,##0.00;(¤#,##0.00)\", \"¤000B\", \"¤000K\", \"¤000M\",\n \"¤000T\", \"¤00B\", \"¤00K\", \"¤00M\", \"¤00T\", \"¤0B\", \"¤0K\", \"¤0M\", \"¤0T\",\n \"¤ #,##0.00\", \"¤ #,##0.00;(¤ #,##0.00)\", \"¤ 000B\", \"¤ 000K\", \"¤ 000M\",\n \"¤ 000T\", \"¤ 00B\", \"¤ 00K\", \"¤ 00M\", \"¤ 00T\", \"¤ 0B\", \"¤ 0K\", \"¤ 0M\", \"¤ 0T\"]}","ref":"Plausible.Cldr.Number.Format.html#decimal_format_list_for/1-example","title":"Example - Plausible.Cldr.Number.Format.decimal_format_list_for/1","type":"function"},{"doc":"Returns the default grouping for a locale as a map.","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for/1","title":"Plausible.Cldr.Number.Format.default_grouping_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.default_grouping_for/1","type":"function"},{"doc":"* `{:ok, grouping}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for/1-returns","title":"Returns - Plausible.Cldr.Number.Format.default_grouping_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.default_grouping_for(:en)\n {:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for/1-examples","title":"Examples - Plausible.Cldr.Number.Format.default_grouping_for/1","type":"function"},{"doc":"Returns the default grouping for a locale\nor raises on error.","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for!/1","title":"Plausible.Cldr.Number.Format.default_grouping_for!/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for!/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.default_grouping_for!/1","type":"function"},{"doc":"* `grouping` as a map or\n\n* raises an exception","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for!/1-returns","title":"Returns - Plausible.Cldr.Number.Format.default_grouping_for!/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.default_grouping_for!(:en)\n %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}","ref":"Plausible.Cldr.Number.Format.html#default_grouping_for!/1-examples","title":"Examples - Plausible.Cldr.Number.Format.default_grouping_for!/1","type":"function"},{"doc":"Return the predfined formats for a given `locale` and `number_system`.","ref":"Plausible.Cldr.Number.Format.html#formats_for/2","title":"Plausible.Cldr.Number.Format.formats_for/2","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.\n\n* `number_system` is any valid number system or number system type returned\n by `Plausible.Cldr.Number.System.number_systems_for/1`.","ref":"Plausible.Cldr.Number.Format.html#formats_for/2-arguments","title":"Arguments - Plausible.Cldr.Number.Format.formats_for/2","type":"function"},{"doc":"Plausible.Cldr.Number.Format.formats_for :fr, :native\n #=> %Cldr.Number.Format{\n accounting: \"#,##0.00 ¤;(#,##0.00 ¤)\",\n currency: \"#,##0.00 ¤\",\n percent: \"#,##0 %\",\n scientific: \"#E0\",\n standard: \"#,##0.###\"\n currency_short: [{\"1000\", [one: \"0 k ¤\", other: \"0 k ¤\"]},\n {\"10000\", [one: \"00 k ¤\", other: \"00 k ¤\"]},\n {\"100000\", [one: \"000 k ¤\", other: \"000 k ¤\"]},\n {\"1000000\", [one: \"0 M ¤\", other: \"0 M ¤\"]},\n {\"10000000\", [one: \"00 M ¤\", other: \"00 M ¤\"]},\n {\"100000000\", [one: \"000 M ¤\", other: \"000 M ¤\"]},\n {\"1000000000\", [one: \"0 Md ¤\", other: \"0 Md ¤\"]},\n {\"10000000000\", [one: \"00 Md ¤\", other: \"00 Md ¤\"]},\n {\"100000000000\", [one: \"000 Md ¤\", other: \"000 Md ¤\"]},\n {\"1000000000000\", [one: \"0 Bn ¤\", other: \"0 Bn ¤\"]},\n {\"10000000000000\", [one: \"00 Bn ¤\", other: \"00 Bn ¤\"]},\n {\"100000000000000\", [one: \"000 Bn ¤\", other: \"000 Bn ¤\"]}],\n ...\n }","ref":"Plausible.Cldr.Number.Format.html#formats_for/2-example","title":"Example - Plausible.Cldr.Number.Format.formats_for/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Format.html#formats_for!/2","title":"Plausible.Cldr.Number.Format.formats_for!/2","type":"function"},{"doc":"Returns the minimum grouping digits for a locale.","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for/1","title":"Plausible.Cldr.Number.Format.minimum_grouping_digits_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.minimum_grouping_digits_for/1","type":"function"},{"doc":"* `{:ok, minumum_digits}` or\n\n* `{:error, {exception, message}}`","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for/1-returns","title":"Returns - Plausible.Cldr.Number.Format.minimum_grouping_digits_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for(\"en\")\n {:ok, 1}","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for/1-examples","title":"Examples - Plausible.Cldr.Number.Format.minimum_grouping_digits_for/1","type":"function"},{"doc":"Returns the minimum grouping digits for a locale\nor raises on error.","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for!/1","title":"Plausible.Cldr.Number.Format.minimum_grouping_digits_for!/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-arguments","title":"Arguments - Plausible.Cldr.Number.Format.minimum_grouping_digits_for!/1","type":"function"},{"doc":"* `minumum_digits` or\n\n* raises an exception","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-returns","title":"Returns - Plausible.Cldr.Number.Format.minimum_grouping_digits_for!/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for!(\"en\")\n 1","ref":"Plausible.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-examples","title":"Examples - Plausible.Cldr.Number.Format.minimum_grouping_digits_for!/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Formatter.Decimal.html","title":"Plausible.Cldr.Number.Formatter.Decimal","type":"module"},{"doc":"","ref":"Plausible.Cldr.Number.Formatter.Decimal.html#metadata!/1","title":"Plausible.Cldr.Number.Formatter.Decimal.metadata!/1","type":"function"},{"doc":"Formats a number according to a decimal format string.","ref":"Plausible.Cldr.Number.Formatter.Decimal.html#to_string/3","title":"Plausible.Cldr.Number.Formatter.Decimal.to_string/3","type":"function"},{"doc":"* `number` is an integer, float or Decimal\n\n* `format` is a format string. See `Plausible.Cldr.Number` for further information.\n\n* `options` is a map of options. See `Plausible.Cldr.Number.to_string/2`\n for further information.","ref":"Plausible.Cldr.Number.Formatter.Decimal.html#to_string/3-arguments","title":"Arguments - Plausible.Cldr.Number.Formatter.Decimal.to_string/3","type":"function"},{"doc":"Implements ordinal plural rules for numbers.","ref":"Plausible.Cldr.Number.Ordinal.html","title":"Plausible.Cldr.Number.Ordinal","type":"module"},{"doc":"The locale names for which plural rules are defined.","ref":"Plausible.Cldr.Number.Ordinal.html#available_locale_names/0","title":"Plausible.Cldr.Number.Ordinal.available_locale_names/0","type":"function"},{"doc":"The configured locales for which plural rules are defined.\n\nReturns the intersection of `Plausible.Cldr.known_locale_names/0` and\nthe locales for which Ordinal plural rules are defined.\n\nThere are many `Cldr` locales which don't have their own plural\nrules so this list is the intersection of `Cldr`'s configured\nlocales and those that have rules.","ref":"Plausible.Cldr.Number.Ordinal.html#known_locale_names/0","title":"Plausible.Cldr.Number.Ordinal.known_locale_names/0","type":"function"},{"doc":"Return the plural key for a given number in a given locale\n\nReturns which plural key (`:zero`, `:one`, `:two`, `:few`,\n`:many` or `:other`) a given number fits into within the\ncontext of a given locale.\n\nNote that these key names should not be interpreted\nliterally. For example, the key returned from\n`Cldr.Number.Ordinal.plural_rule(0, \"en\")` is actually\n`:other`, not `:zero`.\n\nThis key can then be used to format a number, date, time, unit,\nlist or other content in a plural-sensitive way.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rule/3","title":"Plausible.Cldr.Number.Ordinal.plural_rule/3","type":"function"},{"doc":"* `number` is any `integer`, `float` or `Decimal`\n\n* `locale` is any locale returned by `Cldr.Locale.new!/2` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\n* `rounding` is one of `[:down, :up, :ceiling, :floor, :half_even, :half_up, :half_down]`. The\n default is `:half_even`.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rule/3-arguments","title":"Arguments - Plausible.Cldr.Number.Ordinal.plural_rule/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Ordinal.plural_rule 0, \"fr\"\n :other\n\n iex> Plausible.Cldr.Number.Ordinal.plural_rule 1, \"en\"\n :one","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rule/3-examples","title":"Examples - Plausible.Cldr.Number.Ordinal.plural_rule/3","type":"function"},{"doc":"Returns all the plural rules defined in CLDR.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rules/0","title":"Plausible.Cldr.Number.Ordinal.plural_rules/0","type":"function"},{"doc":"Return the plural rules for a locale.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rules_for/1","title":"Plausible.Cldr.Number.Ordinal.plural_rules_for/1","type":"function"},{"doc":"* `locale` is any locale returned by `Plausible.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\nThe rules are returned in AST form after parsing.","ref":"Plausible.Cldr.Number.Ordinal.html#plural_rules_for/1-arguments","title":"Arguments - Plausible.Cldr.Number.Ordinal.plural_rules_for/1","type":"function"},{"doc":"Pluralize a number using ordinal plural rules\nand a substitution map.","ref":"Plausible.Cldr.Number.Ordinal.html#pluralize/3","title":"Plausible.Cldr.Number.Ordinal.pluralize/3","type":"function"},{"doc":"* `number` is an integer, float or Decimal or a `Range.t{}`. When a range, The\n is that in any usage, the start value is strictly less than the end value,\n and that no values are negative. Results for any cases that do not meet\n these criteria are undefined.\n\n* `locale` is any locale returned by `Plausible.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Plausible.Cldr.known_locale_names/0`\n\n* `substitutions` is a map that maps plural keys to a string.\n The valid substitution keys are `:zero`, `:one`, `:two`,\n `:few`, `:many` and `:other`.\n\nSee also `Plausible.Cldr.Number.Ordinal.Ordinal.plural_rule/3`.","ref":"Plausible.Cldr.Number.Ordinal.html#pluralize/3-arguments","title":"Arguments - Plausible.Cldr.Number.Ordinal.pluralize/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Ordinal.pluralize 1, :en, %{one: \"one\"}\n \"one\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: \"one\"}\n nil\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: \"one\", two: \"two\"}\n \"two\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 22, :en, %{one: \"one\", two: \"two\", other: \"other\"}\n \"two\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: \"one\"}\n \"one\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: \"one\"}\n nil\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: \"one\", two: \"two\"}\n \"two\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, \"ar\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"\n\n iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, \"en\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"","ref":"Plausible.Cldr.Number.Ordinal.html#pluralize/3-examples","title":"Examples - Plausible.Cldr.Number.Ordinal.pluralize/3","type":"function"},{"doc":"Implements plural rules for ranges","ref":"Plausible.Cldr.Number.PluralRule.Range.html","title":"Plausible.Cldr.Number.PluralRule.Range","type":"module"},{"doc":"Returns a final plural type for a start-of-range plural\ntype, an end-of-range plural type and a locale.","ref":"Plausible.Cldr.Number.PluralRule.Range.html#plural_rule/3","title":"Plausible.Cldr.Number.PluralRule.Range.plural_rule/3","type":"function"},{"doc":"* `first` is a plural type for the start of a range\n\n* `last` is a plural type for the end of a range\n\n* `locale` is any `Cldr.LanguageTag.t` or a language name\n (not locale name)","ref":"Plausible.Cldr.Number.PluralRule.Range.html#plural_rule/3-arguments","title":"Arguments - Plausible.Cldr.Number.PluralRule.Range.plural_rule/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.PluralRule.Range.plural_rule :other, :few, \"ar\"\n :few","ref":"Plausible.Cldr.Number.PluralRule.Range.html#plural_rule/3-example","title":"Example - Plausible.Cldr.Number.PluralRule.Range.plural_rule/3","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Symbol.html","title":"Plausible.Cldr.Number.Symbol","type":"module"},{"doc":"Returns a list of all decimal symbols defined\nby the locales configured in this backend as\na list.","ref":"Plausible.Cldr.Number.Symbol.html#all_decimal_symbols/0","title":"Plausible.Cldr.Number.Symbol.all_decimal_symbols/0","type":"function"},{"doc":"Returns a list of all decimal symbols defined\nby the locales configured in this backend as\na string.\n\nThis string can be used as a character class\nwhen builing a regular expression.","ref":"Plausible.Cldr.Number.Symbol.html#all_decimal_symbols_class/0","title":"Plausible.Cldr.Number.Symbol.all_decimal_symbols_class/0","type":"function"},{"doc":"Returns a list of all grouping symbols defined\nby the locales configured in this backend as\na list.","ref":"Plausible.Cldr.Number.Symbol.html#all_grouping_symbols/0","title":"Plausible.Cldr.Number.Symbol.all_grouping_symbols/0","type":"function"},{"doc":"Returns a list of all grouping symbols defined\nby the locales configured in this backend as\na string.\n\nThis string can be used as a character class\nwhen builing a regular expression.","ref":"Plausible.Cldr.Number.Symbol.html#all_grouping_symbols_class/0","title":"Plausible.Cldr.Number.Symbol.all_grouping_symbols_class/0","type":"function"},{"doc":"Returns a map of `Cldr.Number.Symbol.t` structs of the number symbols for each\nof the number systems of a locale.","ref":"Plausible.Cldr.Number.Symbol.html#number_symbols_for/1","title":"Plausible.Cldr.Number.Symbol.number_symbols_for/1","type":"function"},{"doc":"* `locale` is any valid locale name returned by\n `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Plausible.Cldr.Locale.new!/1`. The default\n is `Plausible.Cldr.get_locale/0`.","ref":"Plausible.Cldr.Number.Symbol.html#number_symbols_for/1-options","title":"Options - Plausible.Cldr.Number.Symbol.number_symbols_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Symbol.number_symbols_for(:th)\n {:ok, %{\n latn: %Cldr.Number.Symbol{\n decimal: \".\",\n exponential: \"E\",\n group: \",\",\n infinity: \"∞\",\n list: \";\",\n minus_sign: \"-\",\n nan: \"NaN\",\n per_mille: \"‰\",\n percent_sign: \"%\",\n plus_sign: \"+\",\n superscripting_exponent: \"×\",\n time_separator: \":\"\n },\n thai: %Cldr.Number.Symbol{\n decimal: \".\",\n exponential: \"E\",\n group: \",\",\n infinity: \"∞\",\n list: \";\",\n minus_sign: \"-\",\n nan: \"NaN\",\n per_mille: \"‰\",\n percent_sign: \"%\",\n plus_sign: \"+\",\n superscripting_exponent: \"×\",\n time_separator: \":\"\n }\n }}","ref":"Plausible.Cldr.Number.Symbol.html#number_symbols_for/1-example","title":"Example: - Plausible.Cldr.Number.Symbol.number_symbols_for/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Symbol.html#number_symbols_for/2","title":"Plausible.Cldr.Number.Symbol.number_symbols_for/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html","title":"Plausible.Cldr.Number.System","type":"module"},{"doc":"Returns the actual number system from a number system type.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by ``Cldr.Locale.new!/2``\n\n* `system_name` is any number system name returned by\n `Cldr.known_number_systems/0` or a number system type\n returned by `Cldr.known_number_system_types/0`\n\nThis function will decode a number system type into the actual\nnumber system. If the number system provided can't be decoded\nit is returned as is.","ref":"Plausible.Cldr.Number.System.html#number_system_for/2","title":"Plausible.Cldr.Number.System.number_system_for/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.number_system_for \"th\", :latn\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Plausible.Cldr.Number.System.number_system_for \"en\", :default\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Plausible.Cldr.Number.System.number_system_for \"he\", :traditional\n {:ok, %{rules: \"hebrew\", type: :algorithmic}}\n\n iex> Plausible.Cldr.Number.System.number_system_for \"en\", :native\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Plausible.Cldr.Number.System.number_system_for \"en\", :finance\n {\n :error,\n {Cldr.UnknownNumberSystemError,\n \"The number system :finance is unknown for the locale named :en. Valid number systems are %{default: :latn, native: :latn}\"}\n }","ref":"Plausible.Cldr.Number.System.html#number_system_for/2-examples","title":"Examples - Plausible.Cldr.Number.System.number_system_for/2","type":"function"},{"doc":"Returns the number system from a language tag or\nlocale name.","ref":"Plausible.Cldr.Number.System.html#number_system_from_locale/1","title":"Plausible.Cldr.Number.System.number_system_from_locale/1","type":"function"},{"doc":"* `locale` is any language tag returned be `Cldr.Locale.new/2`\n or a locale name in the list returned by `Cldr.known_locale_names/1`","ref":"Plausible.Cldr.Number.System.html#number_system_from_locale/1-arguments","title":"Arguments - Plausible.Cldr.Number.System.number_system_from_locale/1","type":"function"},{"doc":"* A number system name as an atom","ref":"Plausible.Cldr.Number.System.html#number_system_from_locale/1-returns","title":"Returns - Plausible.Cldr.Number.System.number_system_from_locale/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.number_system_from_locale \"en-US-u-nu-thai\"\n :thai\n\n iex> Plausible.Cldr.Number.System.number_system_from_locale \"en-US\"\n :latn","ref":"Plausible.Cldr.Number.System.html#number_system_from_locale/1-examples","title":"Examples - Plausible.Cldr.Number.System.number_system_from_locale/1","type":"function"},{"doc":"Returns the number systems available for a locale\nor `{:error, message}` if the locale is not known.\n\n* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Number.System.html#number_system_names_for/1","title":"Plausible.Cldr.Number.System.number_system_names_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.number_system_names_for \"en\"\n {:ok, [:latn]}\n\n iex> Plausible.Cldr.Number.System.number_system_names_for \"zz\"\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Plausible.Cldr.Number.System.html#number_system_names_for/1-examples","title":"Examples - Plausible.Cldr.Number.System.number_system_names_for/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html#number_system_names_for!/1","title":"Plausible.Cldr.Number.System.number_system_names_for!/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html#number_system_types_for/1","title":"Plausible.Cldr.Number.System.number_system_types_for/1","type":"function"},{"doc":"Returns the number systems available for a locale\nor `{:error, message}` if the locale is not known.\n\n* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`","ref":"Plausible.Cldr.Number.System.html#number_systems_for/1","title":"Plausible.Cldr.Number.System.number_systems_for/1","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.number_systems_for \"en\"\n {:ok, %{default: :latn, native: :latn}}\n\n iex> Plausible.Cldr.Number.System.number_systems_for \"th\"\n {:ok, %{default: :latn, native: :thai}}\n\n iex> Plausible.Cldr.Number.System.number_systems_for \"zz\"\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Plausible.Cldr.Number.System.html#number_systems_for/1-examples","title":"Examples - Plausible.Cldr.Number.System.number_systems_for/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html#number_systems_for!/1","title":"Plausible.Cldr.Number.System.number_systems_for!/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.System.html#number_systems_like/2","title":"Plausible.Cldr.Number.System.number_systems_like/2","type":"function"},{"doc":"Returns a number system name for a given locale and number system reference.\n\n* `system_name` is any number system name returned by\n `Plausible.Cldr.known_number_systems/0` or a number system type\n returned by `Plausible.Cldr.known_number_system_types/0`\n\n* `locale` is any valid locale name returned by `Plausible.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Plausible.Cldr.Locale.new!/1`\n\nNumber systems can be references in one of two ways:\n\n* As a number system type such as :default, :native, :traditional and\n :finance. This allows references to a number system for a locale in a\n consistent fashion for a given use\n\n* WIth the number system name directly, such as :latn, :arab or any of the\n other 70 or so\n\nThis function dereferences the supplied `system_name` and returns the\nactual system name.","ref":"Plausible.Cldr.Number.System.html#system_name_from/2","title":"Plausible.Cldr.Number.System.system_name_from/2","type":"function"},{"doc":"ex> Plausible.Cldr.Number.System.system_name_from(:default, \"en\")\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.System.system_name_from(\"latn\", \"en\")\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.System.system_name_from(:native, \"en\")\n {:ok, :latn}\n\n iex> Plausible.Cldr.Number.System.system_name_from(:nope, \"en\")\n {\n :error,\n {Cldr.UnknownNumberSystemError, \"The number system :nope is unknown\"}\n }\n\nNote that return value is not guaranteed to be a valid\nnumber system for the given locale as demonstrated in the third example.","ref":"Plausible.Cldr.Number.System.html#system_name_from/2-examples","title":"Examples - Plausible.Cldr.Number.System.system_name_from/2","type":"function"},{"doc":"Converts a number into the representation of\na non-latin number system.\n\nThis function converts numbers to a known\nnumber system only, it does not provide number\nformatting.\n\n* `number` is a `float`, `integer` or `Decimal`\n\n* `system_name` is any number system name returned by\n `Cldr.known_number_systems/0` or a number system type\n returned by `Cldr.known_number_system_types/0`\n\nThere are two types of number systems in CLDR:\n\n* `:numeric` in which the number system defines\n a direct mapping between the latin digits `0..9`\n into a the number system equivalent. In this case,\n` to_system/2` invokes `Cldr.Number.Transliterate.transliterate_digits/3`\n for the given number.\n\n* `:algorithmic` in which the number system\n does not have the same structure as the `:latn`\n number system and therefore the conversion is\n done algorithmically. For CLDR the algorithm\n is implemented through `Cldr.Rbnf` rulesets.\n These rulesets are considered by CLDR to be\n less rigorous than the `:numeric` number systems\n and caution and testing for a specific use case\n is recommended.","ref":"Plausible.Cldr.Number.System.html#to_system/2","title":"Plausible.Cldr.Number.System.to_system/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.to_system 123456, :hebr\n {:ok, \"קכ״ג׳תנ״ו\"}\n\n iex> Plausible.Cldr.Number.System.to_system 123, :hans\n {:ok, \"一百二十三\"}\n\n iex> Plausible.Cldr.Number.System.to_system 123, :hant\n {:ok, \"一百二十三\"}\n\n iex> Plausible.Cldr.Number.System.to_system 123, :hansfin\n {:ok, \"壹佰贰拾叁\"}","ref":"Plausible.Cldr.Number.System.html#to_system/2-examples","title":"Examples - Plausible.Cldr.Number.System.to_system/2","type":"function"},{"doc":"Converts a number into the representation of\na non-latin number system. Returns a converted\nstring or raises on error.\n\n* `number` is a `float`, `integer` or `Decimal`\n\n* `system_name` is any number system name returned by\n `Plausible.Cldr.known_number_systems/0` or a number system type\n returned by `Plausible.Cldr.known_number_system_types/0`\n\nSee `Plausible.Cldr.Number.System.to_system/2` for further\ninformation.","ref":"Plausible.Cldr.Number.System.html#to_system!/2","title":"Plausible.Cldr.Number.System.to_system!/2","type":"function"},{"doc":"iex> Plausible.Cldr.Number.System.to_system! 123, :hans\n \"一百二十三\"\n\n iex> Plausible.Cldr.Number.System.to_system! 123, :hant\n \"一百二十三\"\n\n iex> Plausible.Cldr.Number.System.to_system! 123, :hansfin\n \"壹佰贰拾叁\"","ref":"Plausible.Cldr.Number.System.html#to_system!/2-examples","title":"Examples - Plausible.Cldr.Number.System.to_system!/2","type":"function"},{"doc":"Transliteration for digits and separators.\n\nTransliterating a string is an expensive business. First the string has to\nbe exploded into its component graphemes. Then for each grapheme we have\nto map to the equivalent in the other `{locale, number_system}`. Then we\nhave to reassemble the string.\n\nEffort is made to short circuit where possible. Transliteration is not\nrequired for any `{locale, number_system}` that is the same as `{\"en\",\n\"latn\"}` since the implementation uses this combination for the placeholders during\nformatting already. When short circuiting is possible (typically the en-*\nlocales with \"latn\" number_system - the total number of short circuited\nlocales is 211 of the 537 in CLDR) the overall number formatting is twice as\nfast than when formal transliteration is required.\n\n#","ref":"Plausible.Cldr.Number.Transliterate.html","title":"Plausible.Cldr.Number.Transliterate","type":"module"},{"doc":"This module includes `Cldr.Number.Transliterate.transliterate_digits/3` which transliterates\ndigits between number systems. For example from :arabic to :latn. Since generating a\ntransliteration map is slow, pairs of transliterations can be configured so that the\ntransliteration map is created at compile time and therefore speeding up transliteration at\nrun time.\n\nTo configure these transliteration pairs, add the to the `use Cldr` configuration\nin a backend module:\n\n defmodule MyApp.Cldr do\n use Cldr,\n locale: [\"en\", \"fr\", \"th\"],\n default_locale: \"en\",\n precompile_transliterations: [{:latn, :thai}, {:arab, :thai}]\n end\n\nWhere each tuple in the list configures one transliteration map. In this example, two maps are\nconfigured: from `:latn` to `:thai` and from `:arab` to `:thai`.\n\nA list of configurable number systems is returned by `Cldr.Number.System.systems_with_digits/0`.\n\nIf a transliteration is requested between two number pairs that have not been configured for\nprecompilation, a warning is logged.","ref":"Plausible.Cldr.Number.Transliterate.html#module-configuring-precompilation-of-digit-transliterations","title":"Configuring precompilation of digit transliterations - Plausible.Cldr.Number.Transliterate","type":"module"},{"doc":"Transliterates from latin digits to another number system's digits.\n\nTransliterates the latin digits 0..9 to their equivalents in\nanother number system. Also transliterates the decimal and grouping\nseparators as well as the plus, minus and exponent symbols. Any other character\nin the string will be returned \"as is\".","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate/3","title":"Plausible.Cldr.Number.Transliterate.transliterate/3","type":"function"},{"doc":"* `sequence` is the string to be transliterated.\n\n* `locale` is any known locale, defaulting to `Plausible.Cldr.get_locale/0`.\n\n* `number_system` is any known number system. If expressed as a `string` it\n is the actual name of a known number system. If epressed as an `atom` it is\n used as a key to look up a number system for the locale (the usual keys are\n `:default` and `:native` but :traditional and :finance are also part of the\n standard). See `Plausible.Cldr.Number.System.number_systems_for/1` for a locale to\n see what number system types are defined. The default is `:default`.\n\nFor available number systems see `Cldr.Number.System.number_systems/0`\nand `Plausible.Cldr.Number.System.number_systems_for/1`. Also see\n`Plausible.Cldr.Number.Symbol.number_symbols_for/1`.","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate/3-arguments","title":"Arguments - Plausible.Cldr.Number.Transliterate.transliterate/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123556\")\n \"123556\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123,556.000\", \"fr\", :default)\n \"123 556,000\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", :default)\n \"123556\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", \"thai\")\n \"๑๒๓๕๕๖\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", :native)\n \"๑๒๓๕๕๖\"\n\n iex> Plausible.Cldr.Number.Transliterate.transliterate(\"Some number is: 123556\", \"th\", \"thai\")\n \"Some number is: ๑๒๓๕๕๖\"","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate/3-examples","title":"Examples - Plausible.Cldr.Number.Transliterate.transliterate/3","type":"function"},{"doc":"","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate!/3","title":"Plausible.Cldr.Number.Transliterate.transliterate!/3","type":"function"},{"doc":"Transliterates digits from one number system to another number system\n\n* `digits` is binary representation of a number\n\n* `from_system` and `to_system` are number system names in atom form. See\n`Cldr.Number.System.systems_with_digits/0` for available number systems.","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate_digits/3","title":"Plausible.Cldr.Number.Transliterate.transliterate_digits/3","type":"function"},{"doc":"iex> Plausible.Cldr.Number.Transliterate.transliterate_digits \"٠١٢٣٤٥٦٧٨٩\", :arab, :latn\n \"0123456789\"","ref":"Plausible.Cldr.Number.Transliterate.html#transliterate_digits/3-example","title":"Example - Plausible.Cldr.Number.Transliterate.transliterate_digits/3","type":"function"},{"doc":"Functions to implement the number system rule-based-number-format rules of CLDR.\n\nThese rules are defined only on the \"und\" locale and represent specialised\nnumber formatting.\n\nThe standard public API for RBNF is via the `Cldr.Number.to_string/2` function.\n\nThe functions on this module are defined at compile time based upon the RBNF rules\ndefined in the Unicode CLDR data repository. Available rules are identified by:\n\n iex> Plausible.Cldr.Rbnf.NumberSystem.rule_sets(:und)\n ...> |> Enum.sort()\n [\n :armenian_lower,\n :armenian_upper,\n :cyrillic_lower,\n :ethiopic,\n :georgian,\n :greek_lower,\n :greek_upper,\n :hebrew,\n :hebrew_item,\n :roman_lower,\n :roman_upper,\n :tamil,\n :zz_default\n ]\n\nA rule can then be invoked on an available rule_set. For example\n\n iex> Plausible.Cldr.Rbnf.NumberSystem.roman_upper(123, :und)\n \"CXXIII\"\n\nThis particular call is equivalent to the call through the public API of:\n\n iex> Plausible.Cldr.Number.to_string(123, format: :roman)\n {:ok, \"CXXIII\"}","ref":"Plausible.Cldr.Rbnf.NumberSystem.html","title":"Plausible.Cldr.Rbnf.NumberSystem","type":"module"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#all_rule_sets/0","title":"Plausible.Cldr.Rbnf.NumberSystem.all_rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#armenian_lower/1","title":"Plausible.Cldr.Rbnf.NumberSystem.armenian_lower/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#armenian_lower/2","title":"Plausible.Cldr.Rbnf.NumberSystem.armenian_lower/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#armenian_upper/1","title":"Plausible.Cldr.Rbnf.NumberSystem.armenian_upper/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#armenian_upper/2","title":"Plausible.Cldr.Rbnf.NumberSystem.armenian_upper/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower/1","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_1_10/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower_1_10/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_final/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower_final/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_post/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower_post/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_thousands/2","title":"Plausible.Cldr.Rbnf.NumberSystem.cyrillic_lower_thousands/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic/1","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic_p1/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic_p1/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic_p2/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic_p2/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic_p3/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic_p3/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#ethiopic_p/2","title":"Plausible.Cldr.Rbnf.NumberSystem.ethiopic_p/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#georgian/1","title":"Plausible.Cldr.Rbnf.NumberSystem.georgian/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#georgian/2","title":"Plausible.Cldr.Rbnf.NumberSystem.georgian/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_lower/1","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_lower/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_lower/2","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_lower/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_numeral_majuscules/2","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_numeral_majuscules/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_numeral_minuscules/2","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_numeral_minuscules/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_upper/1","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_upper/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#greek_upper/2","title":"Plausible.Cldr.Rbnf.NumberSystem.greek_upper/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew/1","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_0_99/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_0_99/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_item/1","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_item/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_item/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_item/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_item_hundreds/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_item_hundreds/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#hebrew_thousands/2","title":"Plausible.Cldr.Rbnf.NumberSystem.hebrew_thousands/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#roman_lower/1","title":"Plausible.Cldr.Rbnf.NumberSystem.roman_lower/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#roman_lower/2","title":"Plausible.Cldr.Rbnf.NumberSystem.roman_lower/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#roman_upper/1","title":"Plausible.Cldr.Rbnf.NumberSystem.roman_upper/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#roman_upper/2","title":"Plausible.Cldr.Rbnf.NumberSystem.roman_upper/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#rule_sets/0","title":"Plausible.Cldr.Rbnf.NumberSystem.rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#rule_sets/1","title":"Plausible.Cldr.Rbnf.NumberSystem.rule_sets/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#tamil/1","title":"Plausible.Cldr.Rbnf.NumberSystem.tamil/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#tamil/2","title":"Plausible.Cldr.Rbnf.NumberSystem.tamil/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#tamil_thousands/2","title":"Plausible.Cldr.Rbnf.NumberSystem.tamil_thousands/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#zz_default/1","title":"Plausible.Cldr.Rbnf.NumberSystem.zz_default/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.NumberSystem.html#zz_default/2","title":"Plausible.Cldr.Rbnf.NumberSystem.zz_default/2","type":"function"},{"doc":"Functions to implement the ordinal rule-based-number-format rules of CLDR.\n\nAs CLDR notes, the data is incomplete or non-existent for many languages. It\nis considered complete for English however.\n\nThe standard public API for RBNF is via the `Cldr.Number.to_string/2` function.\n\nThe functions on this module are defined at compile time based upon the RBNF rules\ndefined in the Unicode CLDR data repository. Available rules are identified by:\n\n iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets(:en)\n [:digits_ordinal]\n\n iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets(\"fr\")\n ...> |> Enum.sort()\n [\n :digits_ordinal,\n :digits_ordinal_feminine,\n :digits_ordinal_feminine_plural,\n :digits_ordinal_masculine,\n :digits_ordinal_masculine_plural\n ]\n\nA rule can then be invoked on an available rule_set. For example\n\n iex> Plausible.Cldr.Rbnf.Ordinal.digits_ordinal(123, :en)\n \"123rd\"\n\nThis call is equivalent to the call through the public API of:\n\n iex> Plausible.Cldr.Number.to_string(123, format: :ordinal)\n {:ok, \"123rd\"}","ref":"Plausible.Cldr.Rbnf.Ordinal.html","title":"Plausible.Cldr.Rbnf.Ordinal","type":"module"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Ordinal.html#all_rule_sets/0","title":"Plausible.Cldr.Rbnf.Ordinal.all_rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Ordinal.html#digits_ordinal/2","title":"Plausible.Cldr.Rbnf.Ordinal.digits_ordinal/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Ordinal.html#rule_sets/0","title":"Plausible.Cldr.Rbnf.Ordinal.rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Ordinal.html#rule_sets/1","title":"Plausible.Cldr.Rbnf.Ordinal.rule_sets/1","type":"function"},{"doc":"Functions to implement the spellout rule-based-number-format rules of CLDR.\n\nAs CLDR notes, the data is incomplete or non-existent for many languages. It\nis considered complete for English however.\n\nThe standard public API for RBNF is via the `Cldr.Number.to_string/2` function.\n\nThe functions on this module are defined at compile time based upon the RBNF rules\ndefined in the Unicode CLDR data repository. Available rules are identified by:\n\n iex> Plausible.Cldr.Rbnf.Spellout.rule_sets(\"en\")\n ...> |> Enum.sort()\n [\n :spellout_cardinal,\n :spellout_cardinal_verbose,\n :spellout_numbering,\n :spellout_numbering_verbose,\n :spellout_numbering_year,\n :spellout_ordinal,\n :spellout_ordinal_verbose\n ]\n\nA rule can then be invoked on an available rule_set. For example:\n\n iex> Plausible.Cldr.Rbnf.Spellout.spellout_ordinal(123, \"en\")\n \"one hundred twenty-third\"\n\nThis call is equivalent to the call through the public API of:\n\n iex> Plausible.Cldr.Number.to_string(123, format: :spellout)\n {:ok, \"one hundred twenty-three\"}","ref":"Plausible.Cldr.Rbnf.Spellout.html","title":"Plausible.Cldr.Rbnf.Spellout","type":"module"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#all_rule_sets/0","title":"Plausible.Cldr.Rbnf.Spellout.all_rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#and/2","title":"Plausible.Cldr.Rbnf.Spellout.and/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#and_o/2","title":"Plausible.Cldr.Rbnf.Spellout.and_o/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#commas/2","title":"Plausible.Cldr.Rbnf.Spellout.commas/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#commas_o/2","title":"Plausible.Cldr.Rbnf.Spellout.commas_o/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#r2d_year/2","title":"Plausible.Cldr.Rbnf.Spellout.r2d_year/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#rule_sets/0","title":"Plausible.Cldr.Rbnf.Spellout.rule_sets/0","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#rule_sets/1","title":"Plausible.Cldr.Rbnf.Spellout.rule_sets/1","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_cardinal/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_cardinal/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_cardinal_verbose/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_cardinal_verbose/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_numbering/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_numbering/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_numbering_verbose/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_numbering_verbose/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_numbering_year/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_numbering_year/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_ordinal/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_ordinal/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#spellout_ordinal_verbose/2","title":"Plausible.Cldr.Rbnf.Spellout.spellout_ordinal_verbose/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#th/2","title":"Plausible.Cldr.Rbnf.Spellout.th/2","type":"function"},{"doc":"","ref":"Plausible.Cldr.Rbnf.Spellout.html#tieth/2","title":"Plausible.Cldr.Rbnf.Spellout.tieth/2","type":"function"},{"doc":"Event schema for when NumericIDs migration is complete","ref":"Plausible.ClickhouseEventV2.html","title":"Plausible.ClickhouseEventV2","type":"module"},{"doc":"","ref":"Plausible.ClickhouseEventV2.html#new/1","title":"Plausible.ClickhouseEventV2.new/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html","title":"Plausible.ClickhouseRepo","type":"module"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#aggregate/3","title":"Plausible.ClickhouseRepo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#aggregate/4","title":"Plausible.ClickhouseRepo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#all/2","title":"Plausible.ClickhouseRepo.all/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#checked_out?/0","title":"Plausible.ClickhouseRepo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#checkout/2","title":"Plausible.ClickhouseRepo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#child_spec/1","title":"Plausible.ClickhouseRepo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#config/0","title":"Plausible.ClickhouseRepo.config/0","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#default_options/1","title":"Plausible.ClickhouseRepo.default_options/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.ClickhouseRepo.html#disconnect_all/2","title":"Plausible.ClickhouseRepo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#exists?/2","title":"Plausible.ClickhouseRepo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get/3","title":"Plausible.ClickhouseRepo.get/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get!/3","title":"Plausible.ClickhouseRepo.get!/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get_by/3","title":"Plausible.ClickhouseRepo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get_by!/3","title":"Plausible.ClickhouseRepo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#get_dynamic_repo/0","title":"Plausible.ClickhouseRepo.get_dynamic_repo/0","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.ClickhouseRepo.html#insert_stream/3","title":"Plausible.ClickhouseRepo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#load/2","title":"Plausible.ClickhouseRepo.load/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#one/2","title":"Plausible.ClickhouseRepo.one/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#one!/2","title":"Plausible.ClickhouseRepo.one!/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#parallel_tasks/1","title":"Plausible.ClickhouseRepo.parallel_tasks/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#preload/3","title":"Plausible.ClickhouseRepo.preload/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#prepare_query/3","title":"Plausible.ClickhouseRepo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#put_dynamic_repo/1","title":"Plausible.ClickhouseRepo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.ClickhouseRepo.html#query/3","title":"Plausible.ClickhouseRepo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.ClickhouseRepo.html#query!/3","title":"Plausible.ClickhouseRepo.query!/3","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#reload/2","title":"Plausible.ClickhouseRepo.reload/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#reload!/2","title":"Plausible.ClickhouseRepo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#start_link/1","title":"Plausible.ClickhouseRepo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#stop/1","title":"Plausible.ClickhouseRepo.stop/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseRepo.html#stream/2","title":"Plausible.ClickhouseRepo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.ClickhouseRepo.html#to_sql/2","title":"Plausible.ClickhouseRepo.to_sql/2","type":"function"},{"doc":"Session schema for when NumericIDs migration is complete","ref":"Plausible.ClickhouseSessionV2.html","title":"Plausible.ClickhouseSessionV2","type":"module"},{"doc":"","ref":"Plausible.ClickhouseSessionV2.html#random_uint64/0","title":"Plausible.ClickhouseSessionV2.random_uint64/0","type":"function"},{"doc":"Custom type to cast Bool as UInt8","ref":"Plausible.ClickhouseSessionV2.BoolUInt8.html","title":"Plausible.ClickhouseSessionV2.BoolUInt8","type":"module"},{"doc":"","ref":"Plausible.ClickhouseSessionV2.BoolUInt8.html#embed_as/1","title":"Plausible.ClickhouseSessionV2.BoolUInt8.embed_as/1","type":"function"},{"doc":"","ref":"Plausible.ClickhouseSessionV2.BoolUInt8.html#equal?/2","title":"Plausible.ClickhouseSessionV2.BoolUInt8.equal?/2","type":"function"},{"doc":"","ref":"Plausible.ConfigHelpers.html","title":"Plausible.ConfigHelpers","type":"module"},{"doc":"","ref":"Plausible.ConfigHelpers.html#get_int_from_path_or_env/3","title":"Plausible.ConfigHelpers.get_int_from_path_or_env/3","type":"function"},{"doc":"","ref":"Plausible.ConfigHelpers.html#get_var_from_path_or_env/3","title":"Plausible.ConfigHelpers.get_var_from_path_or_env/3","type":"function"},{"doc":"This module defines the setup for tests requiring\naccess to the application's data layer.\n\nYou may define functions here to be used as helpers in\nyour tests.\n\nFinally, if the test case interacts with the database,\nit cannot be async. For this reason, every test runs\ninside a transaction which is reset at the beginning\nof the test unless the test case is marked as async.","ref":"Plausible.DataCase.html","title":"Plausible.DataCase","type":"module"},{"doc":"Base module for coordinated Clickhouse data migrations\nrun via remote shell or otherwise (TBD).","ref":"Plausible.DataMigration.html","title":"Plausible.DataMigration","type":"module"},{"doc":"Numeric IDs migration, SQL files available at:\npriv/data_migrations/NumericIDs/sql","ref":"Plausible.DataMigration.NumericIDs.html","title":"Plausible.DataMigration.NumericIDs","type":"module"},{"doc":"","ref":"Plausible.DataMigration.NumericIDs.html#confirm/3","title":"Plausible.DataMigration.NumericIDs.confirm/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.NumericIDs.html#run/1","title":"Plausible.DataMigration.NumericIDs.run/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.NumericIDs.html#run_sql/2","title":"Plausible.DataMigration.NumericIDs.run_sql/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.NumericIDs.html#run_sql_confirm/2","title":"Plausible.DataMigration.NumericIDs.run_sql_confirm/2","type":"function"},{"doc":"Ecto.Repo for Clickhouse data migrations, to be started manually,\noutside of the main application supervision tree.","ref":"Plausible.DataMigration.Repo.html","title":"Plausible.DataMigration.Repo","type":"module"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#aggregate/3","title":"Plausible.DataMigration.Repo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#aggregate/4","title":"Plausible.DataMigration.Repo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#all/2","title":"Plausible.DataMigration.Repo.all/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#checked_out?/0","title":"Plausible.DataMigration.Repo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#checkout/2","title":"Plausible.DataMigration.Repo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#child_spec/1","title":"Plausible.DataMigration.Repo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#config/0","title":"Plausible.DataMigration.Repo.config/0","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#default_options/1","title":"Plausible.DataMigration.Repo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#delete/2","title":"Plausible.DataMigration.Repo.delete/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#delete!/2","title":"Plausible.DataMigration.Repo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#delete_all/2","title":"Plausible.DataMigration.Repo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.DataMigration.Repo.html#disconnect_all/2","title":"Plausible.DataMigration.Repo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#exists?/2","title":"Plausible.DataMigration.Repo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get/3","title":"Plausible.DataMigration.Repo.get/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get!/3","title":"Plausible.DataMigration.Repo.get!/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get_by/3","title":"Plausible.DataMigration.Repo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get_by!/3","title":"Plausible.DataMigration.Repo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#get_dynamic_repo/0","title":"Plausible.DataMigration.Repo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert/2","title":"Plausible.DataMigration.Repo.insert/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert!/2","title":"Plausible.DataMigration.Repo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert_all/3","title":"Plausible.DataMigration.Repo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert_or_update/2","title":"Plausible.DataMigration.Repo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#insert_or_update!/2","title":"Plausible.DataMigration.Repo.insert_or_update!/2","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.DataMigration.Repo.html#insert_stream/3","title":"Plausible.DataMigration.Repo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#load/2","title":"Plausible.DataMigration.Repo.load/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#one/2","title":"Plausible.DataMigration.Repo.one/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#one!/2","title":"Plausible.DataMigration.Repo.one!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#preload/3","title":"Plausible.DataMigration.Repo.preload/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#prepare_query/3","title":"Plausible.DataMigration.Repo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#put_dynamic_repo/1","title":"Plausible.DataMigration.Repo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.DataMigration.Repo.html#query/3","title":"Plausible.DataMigration.Repo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.DataMigration.Repo.html#query!/3","title":"Plausible.DataMigration.Repo.query!/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#reload/2","title":"Plausible.DataMigration.Repo.reload/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#reload!/2","title":"Plausible.DataMigration.Repo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#start/2","title":"Plausible.DataMigration.Repo.start/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#start_link/1","title":"Plausible.DataMigration.Repo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#stop/1","title":"Plausible.DataMigration.Repo.stop/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#stream/2","title":"Plausible.DataMigration.Repo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.DataMigration.Repo.html#to_sql/2","title":"Plausible.DataMigration.Repo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#update/2","title":"Plausible.DataMigration.Repo.update/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#update!/2","title":"Plausible.DataMigration.Repo.update!/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.Repo.html#update_all/3","title":"Plausible.DataMigration.Repo.update_all/3","type":"function"},{"doc":"A data fix migration that seeks funnels having steps\nwhose goals are equally named.\nIt then tries to rewrite the duplicate goals using the\noldest goal available. In extreme cases, e.g. when multiple\nduplicates are found for a single funnel, it will either\nreduce or completely remove the funnel.\nThis enables us to run a migration later on that will\ndelete duplicate goals and enforce goal uniqueness at the\ndatabase level via a CHECK constraint.\n\nTo run, just call the `run` function.","ref":"Plausible.DataMigration.RewriteFunnelDupes.html","title":"Plausible.DataMigration.RewriteFunnelDupes","type":"module"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#apply_change/2","title":"Plausible.DataMigration.RewriteFunnelDupes.apply_change/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#confirm/3","title":"Plausible.DataMigration.RewriteFunnelDupes.confirm/3","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#execute/1","title":"Plausible.DataMigration.RewriteFunnelDupes.execute/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#run/1","title":"Plausible.DataMigration.RewriteFunnelDupes.run/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#run_sql/2","title":"Plausible.DataMigration.RewriteFunnelDupes.run_sql/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#run_sql_confirm/2","title":"Plausible.DataMigration.RewriteFunnelDupes.run_sql_confirm/2","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#to_db_ops/1","title":"Plausible.DataMigration.RewriteFunnelDupes.to_db_ops/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#to_map/1","title":"Plausible.DataMigration.RewriteFunnelDupes.to_map/1","type":"function"},{"doc":"","ref":"Plausible.DataMigration.RewriteFunnelDupes.html#translate_to_db_ops/1","title":"Plausible.DataMigration.RewriteFunnelDupes.translate_to_db_ops/1","type":"function"},{"doc":"Function execution context (with arguments) to Sentry reports.","ref":"Plausible.DebugReplayInfo.html","title":"Plausible.DebugReplayInfo","type":"module"},{"doc":"","ref":"Plausible.DebugReplayInfo.html#deserialize/1","title":"Plausible.DebugReplayInfo.deserialize/1","type":"function"},{"doc":"","ref":"Plausible.DebugReplayInfo.html#include_sentry_replay_info/0","title":"Plausible.DebugReplayInfo.include_sentry_replay_info/0","type":"macro"},{"doc":"Custom type for event name. Accepts Strings and Integers and stores them as String. Returns\n cast error if any other type is provided. Accepting integers is important for 404 tracking.","ref":"Plausible.Ecto.EventName.html","title":"Plausible.Ecto.EventName","type":"module"},{"doc":"","ref":"Plausible.Ecto.EventName.html#cast/1","title":"Plausible.Ecto.EventName.cast/1","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#dump/1","title":"Plausible.Ecto.EventName.dump/1","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#embed_as/1","title":"Plausible.Ecto.EventName.embed_as/1","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#equal?/2","title":"Plausible.Ecto.EventName.equal?/2","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#load/1","title":"Plausible.Ecto.EventName.load/1","type":"function"},{"doc":"","ref":"Plausible.Ecto.EventName.html#type/0","title":"Plausible.Ecto.EventName.type/0","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html","title":"Plausible.Event.WriteBuffer","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.Event.WriteBuffer.html#child_spec/1","title":"Plausible.Event.WriteBuffer.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html#flush/0","title":"Plausible.Event.WriteBuffer.flush/0","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html#init/1","title":"Plausible.Event.WriteBuffer.init/1","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html#insert/1","title":"Plausible.Event.WriteBuffer.insert/1","type":"function"},{"doc":"","ref":"Plausible.Event.WriteBuffer.html#start_link/1","title":"Plausible.Event.WriteBuffer.start_link/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html","title":"Plausible.Factory","type":"module"},{"doc":"","ref":"Plausible.Factory.html#api_key_factory/0","title":"Plausible.Factory.api_key_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#build/2","title":"Plausible.Factory.build/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#build_list/3","title":"Plausible.Factory.build_list/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#build_pair/2","title":"Plausible.Factory.build_pair/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#ch_session_factory/0","title":"Plausible.Factory.ch_session_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#create/1","title":"Plausible.Factory.create/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html#create/2","title":"Plausible.Factory.create/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#create_list/3","title":"Plausible.Factory.create_list/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#create_pair/2","title":"Plausible.Factory.create_pair/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#custom_domain_factory/0","title":"Plausible.Factory.custom_domain_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#enterprise_plan_factory/0","title":"Plausible.Factory.enterprise_plan_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#event_factory/0","title":"Plausible.Factory.event_factory/0","type":"function"},{"doc":"Raises a helpful error if no factory is defined.","ref":"Plausible.Factory.html#factory/1","title":"Plausible.Factory.factory/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html#goal_factory/0","title":"Plausible.Factory.goal_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#google_auth_factory/0","title":"Plausible.Factory.google_auth_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_browsers_factory/0","title":"Plausible.Factory.imported_browsers_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_devices_factory/0","title":"Plausible.Factory.imported_devices_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_entry_pages_factory/0","title":"Plausible.Factory.imported_entry_pages_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_exit_pages_factory/0","title":"Plausible.Factory.imported_exit_pages_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_locations_factory/0","title":"Plausible.Factory.imported_locations_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_operating_systems_factory/0","title":"Plausible.Factory.imported_operating_systems_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_pages_factory/0","title":"Plausible.Factory.imported_pages_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_sources_factory/0","title":"Plausible.Factory.imported_sources_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#imported_visitors_factory/0","title":"Plausible.Factory.imported_visitors_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert/1","title":"Plausible.Factory.insert/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert/2","title":"Plausible.Factory.insert/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert/3","title":"Plausible.Factory.insert/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert_list/3","title":"Plausible.Factory.insert_list/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert_list/4","title":"Plausible.Factory.insert_list/4","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert_pair/2","title":"Plausible.Factory.insert_pair/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#insert_pair/3","title":"Plausible.Factory.insert_pair/3","type":"function"},{"doc":"","ref":"Plausible.Factory.html#invitation_factory/0","title":"Plausible.Factory.invitation_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#monthly_report_factory/0","title":"Plausible.Factory.monthly_report_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#pageview_factory/0","title":"Plausible.Factory.pageview_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#params_for/2","title":"Plausible.Factory.params_for/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#params_with_assocs/2","title":"Plausible.Factory.params_with_assocs/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#shared_link_factory/0","title":"Plausible.Factory.shared_link_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#site_factory/1","title":"Plausible.Factory.site_factory/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html#site_membership_factory/0","title":"Plausible.Factory.site_membership_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#spike_notification_factory/0","title":"Plausible.Factory.spike_notification_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#string_params_for/2","title":"Plausible.Factory.string_params_for/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#string_params_with_assocs/2","title":"Plausible.Factory.string_params_with_assocs/2","type":"function"},{"doc":"","ref":"Plausible.Factory.html#subscription_factory/0","title":"Plausible.Factory.subscription_factory/0","type":"function"},{"doc":"","ref":"Plausible.Factory.html#user_factory/1","title":"Plausible.Factory.user_factory/1","type":"function"},{"doc":"","ref":"Plausible.Factory.html#weekly_report_factory/0","title":"Plausible.Factory.weekly_report_factory/0","type":"function"},{"doc":"A funnel is a marketing term used to capture and describe the journey\nthat users go through, from initial step to conversion.\nA funnel consists of several steps (here: 2..8).\n\nThis module defines the database schema for storing funnels\nand changeset helpers for enumerating the steps within.\n\nEach step references a goal (either a Custom Event or Visit)\n- see: `Plausible.Goal`.","ref":"Plausible.Funnel.html","title":"Plausible.Funnel","type":"module"},{"doc":"","ref":"Plausible.Funnel.html#changeset/2","title":"Plausible.Funnel.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Funnel.html#max_steps/0","title":"Plausible.Funnel.max_steps/0","type":"macro"},{"doc":"","ref":"Plausible.Funnel.html#min_steps/0","title":"Plausible.Funnel.min_steps/0","type":"macro"},{"doc":"","ref":"Plausible.Funnel.html#put_step_orders/1","title":"Plausible.Funnel.put_step_orders/1","type":"function"},{"doc":"","ref":"Plausible.Funnel.html#t:t/0","title":"Plausible.Funnel.t/0","type":"type"},{"doc":"This module defines the database schema for a single Funnel step.\nSee: `Plausible.Funnel` for more information.","ref":"Plausible.Funnel.Step.html","title":"Plausible.Funnel.Step","type":"module"},{"doc":"","ref":"Plausible.Funnel.Step.html#changeset/2","title":"Plausible.Funnel.Step.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Funnel.Step.html#t:t/0","title":"Plausible.Funnel.Step.t/0","type":"type"},{"doc":"This module implements contextual Funnel interface, allowing listing,\ncreating and deleting funnel definitions.\n\nFor brief explanation of what a Funnel is, please see `Plausible.Funnel` schema.\nSee `Plausible.Stats.Funnel` for the evaluation logic.","ref":"Plausible.Funnels.html","title":"Plausible.Funnels","type":"module"},{"doc":"","ref":"Plausible.Funnels.html#create/3","title":"Plausible.Funnels.create/3","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#create_changeset/3","title":"Plausible.Funnels.create_changeset/3","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#delete/2","title":"Plausible.Funnels.delete/2","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#ephemeral_definition/3","title":"Plausible.Funnels.ephemeral_definition/3","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#get/2","title":"Plausible.Funnels.get/2","type":"function"},{"doc":"","ref":"Plausible.Funnels.html#list/1","title":"Plausible.Funnels.list/1","type":"function"},{"doc":"This module provides an API for fetching IP geolocation.","ref":"Plausible.Geo.html","title":"Plausible.Geo","type":"module"},{"doc":"Waits for the database to start after calling `load_db/1` with the async option.","ref":"Plausible.Geo.html#await_loader/0","title":"Plausible.Geo.await_loader/0","type":"function"},{"doc":"Returns geodatabase type.\n\nUsed for deciding whether to show the DB-IP disclaimer or not.","ref":"Plausible.Geo.html#database_type/0","title":"Plausible.Geo.database_type/0","type":"function"},{"doc":"In the case of a DB-IP database:\n\n iex> database_type()\n \"DBIP-City-Lite\"\n\n In the case of a MaxMind database:\n\n iex> database_type()\n \"GeoLite2-City\"","ref":"Plausible.Geo.html#database_type/0-examples","title":"Examples - Plausible.Geo.database_type/0","type":"function"},{"doc":"Starts the geodatabase loading process. Two modes are supported: local file\nand MaxMind license key.","ref":"Plausible.Geo.html#load_db/1","title":"Plausible.Geo.load_db/1","type":"function"},{"doc":"* `:path` - the path to the .mmdb database local file. When present,\n `:license_key` and `:edition` are not required.\n\n * `:license_key` - the [license key](https://support.maxmind.com/hc/en-us/articles/4407111582235-Generate-a-License-Key)\n from MaxMind to authenticate requests to MaxMind.\n\n * `:edition` - the name of the MaxMind database to be downloaded from MaxMind\n servers. Defaults to `GeoLite2-City`.\n\n * `:async` - when used, configures the database loading to run\n asynchronously.","ref":"Plausible.Geo.html#load_db/1-options","title":"Options - Plausible.Geo.load_db/1","type":"function"},{"doc":"Loading from a local file:\n\n iex> load_db(path: \"/etc/plausible/dbip-city.mmdb\")\n :ok\n\n Downloading a MaxMind DB (this license key is no longer active):\n\n iex> load_db(license_key: \"LNpsJCCKPis6XvBP\", edition: \"GeoLite2-City\", async: true)\n :ok","ref":"Plausible.Geo.html#load_db/1-examples","title":"Examples - Plausible.Geo.load_db/1","type":"function"},{"doc":"Looks up geo info about an IP address.","ref":"Plausible.Geo.html#lookup/1","title":"Plausible.Geo.lookup/1","type":"function"},{"doc":"iex> lookup(\"8.7.6.5\")\n %{\n \"city\" => %{\n \"geoname_id\" => 5349755,\n \"names\" => %{\n \"de\" => \"Fontana\",\n \"en\" => \"Fontana\",\n \"ja\" => \"フォンタナ\",\n \"ru\" => \"Фонтана\"\n }\n },\n \"continent\" => %{\n \"code\" => \"NA\",\n \"geoname_id\" => 6255149,\n \"names\" => %{\n \"de\" => \"Nordamerika\",\n \"en\" => \"North America\",\n \"es\" => \"Norteamérica\",\n \"fr\" => \"Amérique du Nord\",\n \"ja\" => \"北アメリカ\",\n \"pt-BR\" => \"América do Norte\",\n \"ru\" => \"Северная Америка\",\n \"zh-CN\" => \"北美洲\"\n }\n },\n \"country\" => %{\n \"geoname_id\" => 6252001,\n \"iso_code\" => \"US\",\n \"names\" => %{\n \"de\" => \"Vereinigte Staaten\",\n \"en\" => \"United States\",\n \"es\" => \"Estados Unidos\",\n \"fr\" => \"États Unis\",\n \"ja\" => \"アメリカ\",\n \"pt-BR\" => \"EUA\",\n \"ru\" => \"США\",\n \"zh-CN\" => \"美国\"\n }\n },\n \"location\" => %{\n \"accuracy_radius\" => 50,\n \"latitude\" => 34.1211,\n \"longitude\" => -117.4362,\n \"metro_code\" => 803,\n \"time_zone\" => \"America/Los_Angeles\"\n },\n \"postal\" => %{\"code\" => \"92336\"},\n \"registered_country\" => %{\n \"geoname_id\" => 6252001,\n \"iso_code\" => \"US\",\n \"names\" => %{\n \"de\" => \"Vereinigte Staaten\",\n \"en\" => \"United States\",\n \"es\" => \"Estados Unidos\",\n \"fr\" => \"États Unis\",\n \"ja\" => \"アメリカ\",\n \"pt-BR\" => \"EUA\",\n \"ru\" => \"США\",\n \"zh-CN\" => \"美国\"\n }\n },\n \"subdivisions\" => [\n %{\n \"geoname_id\" => 5332921,\n \"iso_code\" => \"CA\",\n \"names\" => %{\n \"de\" => \"Kalifornien\",\n \"en\" => \"California\",\n \"es\" => \"California\",\n \"fr\" => \"Californie\",\n \"ja\" => \"カリフォルニア州\",\n \"pt-BR\" => \"Califórnia\",\n \"ru\" => \"Калифорния\",\n \"zh-CN\" => \"加州\"\n }\n }\n ]\n }","ref":"Plausible.Geo.html#lookup/1-examples","title":"Examples - Plausible.Geo.lookup/1","type":"function"},{"doc":"","ref":"Plausible.Goal.html","title":"Plausible.Goal","type":"module"},{"doc":"","ref":"Plausible.Goal.html#changeset/2","title":"Plausible.Goal.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Goal.html#currency_options/0","title":"Plausible.Goal.currency_options/0","type":"function"},{"doc":"","ref":"Plausible.Goal.html#revenue?/1","title":"Plausible.Goal.revenue?/1","type":"function"},{"doc":"","ref":"Plausible.Goal.html#valid_currencies/0","title":"Plausible.Goal.valid_currencies/0","type":"function"},{"doc":"","ref":"Plausible.Goal.html#t:t/0","title":"Plausible.Goal.t/0","type":"type"},{"doc":"","ref":"Plausible.Goals.html","title":"Plausible.Goals","type":"module"},{"doc":"","ref":"Plausible.Goals.html#count/1","title":"Plausible.Goals.count/1","type":"function"},{"doc":"Creates a Goal for a site.\n\nIf the created goal is a revenue goal, it sets site.updated_at to be\nrefreshed by the sites cache, as revenue goals are used during ingestion.","ref":"Plausible.Goals.html#create/3","title":"Plausible.Goals.create/3","type":"function"},{"doc":"If a goal belongs to funnel(s), we need to inspect their number of steps.\n\nIf it exceeds the minimum allowed (defined via `Plausible.Funnel.min_steps/0`),\nthe funnel will be reduced (i.e. a step associated with the goal to be deleted\nis removed), so that the minimum number of steps is preserved. This is done\nimplicitly, by postgres, as per on_delete: :delete_all.\n\nOtherwise, for associated funnel(s) consisting of minimum number steps only,\nfunnel record(s) are removed completely along with the targeted goal.","ref":"Plausible.Goals.html#delete/2","title":"Plausible.Goals.delete/2","type":"function"},{"doc":"","ref":"Plausible.Goals.html#find_or_create/2","title":"Plausible.Goals.find_or_create/2","type":"function"},{"doc":"","ref":"Plausible.Goals.html#for_site/2","title":"Plausible.Goals.for_site/2","type":"function"},{"doc":"","ref":"Plausible.Goals.html#for_site_query/2","title":"Plausible.Goals.for_site_query/2","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html","title":"Plausible.Google.Api","type":"module"},{"doc":"","ref":"Plausible.Google.Api.html#fetch_and_persist/3","title":"Plausible.Google.Api.fetch_and_persist/3","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#fetch_stats/3","title":"Plausible.Google.Api.fetch_stats/3","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#fetch_verified_properties/1","title":"Plausible.Google.Api.fetch_verified_properties/1","type":"function"},{"doc":"Returns a single Google Analytics view if the user has access to it.","ref":"Plausible.Google.Api.html#get_view/2","title":"Plausible.Google.Api.get_view/2","type":"function"},{"doc":"Imports stats from a Google Analytics UA view to a Plausible site.\n\nThis function fetches Google Analytics reports in batches of 7500 per\nrequest. The batches are then buffered to Clickhouse by the\n`Plausible.Google.Buffer` process.\n\nRequests to Google Analytics can fail, and are retried at most\n5 times with an exponential backoff. Returns `:ok` when\nimporting has finished or `{:error, term()}` when a request to GA failed too \nmany times.\n\nUseful links:\n\n- [Feature documentation](https://plausible.io/docs/google-analytics-import)\n- [GA API reference](https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet#ReportRequest)\n- [GA Dimensions reference](https://ga-dev-tools.web.app/dimensions-metrics-explorer)","ref":"Plausible.Google.Api.html#import_analytics/4","title":"Plausible.Google.Api.import_analytics/4","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#import_authorize_url/2","title":"Plausible.Google.Api.import_authorize_url/2","type":"function"},{"doc":"Lists Google Analytics views grouped by hostname.","ref":"Plausible.Google.Api.html#list_views/1","title":"Plausible.Google.Api.list_views/1","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#search_console_authorize_url/2","title":"Plausible.Google.Api.search_console_authorize_url/2","type":"function"},{"doc":"","ref":"Plausible.Google.Api.html#t:google_analytics_view/0","title":"Plausible.Google.Api.google_analytics_view/0","type":"type"},{"doc":"","ref":"Plausible.Google.Api.html#t:import_auth/0","title":"Plausible.Google.Api.import_auth/0","type":"type"},{"doc":"","ref":"Plausible.Google.Api.Mock.html","title":"Plausible.Google.Api.Mock","type":"module"},{"doc":"","ref":"Plausible.Google.Api.Mock.html#fetch_stats/3","title":"Plausible.Google.Api.Mock.fetch_stats/3","type":"function"},{"doc":"This GenServer inserts records into Clickhouse `imported_*` tables. Multiple buffers are\nautomatically created for each table. Records are flushed when the table buffer reaches the\nmaximum size, defined by `max_buffer_size/0`.","ref":"Plausible.Google.Buffer.html","title":"Plausible.Google.Buffer","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.Google.Buffer.html#child_spec/1","title":"Plausible.Google.Buffer.child_spec/1","type":"function"},{"doc":"Flushes all table buffers to Clickhouse.","ref":"Plausible.Google.Buffer.html#flush/2","title":"Plausible.Google.Buffer.flush/2","type":"function"},{"doc":"","ref":"Plausible.Google.Buffer.html#handle_continue/2","title":"Plausible.Google.Buffer.handle_continue/2","type":"function"},{"doc":"","ref":"Plausible.Google.Buffer.html#init/1","title":"Plausible.Google.Buffer.init/1","type":"function"},{"doc":"Puts the given records into the table buffer.","ref":"Plausible.Google.Buffer.html#insert_many/3","title":"Plausible.Google.Buffer.insert_many/3","type":"function"},{"doc":"Returns the total count of items in the given table buffer.","ref":"Plausible.Google.Buffer.html#size/2","title":"Plausible.Google.Buffer.size/2","type":"function"},{"doc":"","ref":"Plausible.Google.Buffer.html#start_link/0","title":"Plausible.Google.Buffer.start_link/0","type":"function"},{"doc":"","ref":"Plausible.Google.Buffer.html#stop/1","title":"Plausible.Google.Buffer.stop/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html","title":"Plausible.Google.HTTP","type":"module"},{"doc":"","ref":"Plausible.Google.HTTP.html#fetch_access_token/1","title":"Plausible.Google.HTTP.fetch_access_token/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#get_analytics_start_date/2","title":"Plausible.Google.HTTP.get_analytics_start_date/2","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#get_report/1","title":"Plausible.Google.HTTP.get_report/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#list_sites/1","title":"Plausible.Google.HTTP.list_sites/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#list_stats/5","title":"Plausible.Google.HTTP.list_stats/5","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#list_views_for_user/1","title":"Plausible.Google.HTTP.list_views_for_user/1","type":"function"},{"doc":"","ref":"Plausible.Google.HTTP.html#refresh_auth_token/1","title":"Plausible.Google.HTTP.refresh_auth_token/1","type":"function"},{"doc":"","ref":"Plausible.Google.ReportRequest.html","title":"Plausible.Google.ReportRequest","type":"module"},{"doc":"","ref":"Plausible.Google.ReportRequest.html#full_report/0","title":"Plausible.Google.ReportRequest.full_report/0","type":"function"},{"doc":"","ref":"Plausible.Google.ReportRequest.html#t:t/0","title":"Plausible.Google.ReportRequest.t/0","type":"type"},{"doc":"HTTP Client built on top of Finch.\n\nBy default, request parameters are json-encoded.\n\nIf a raw binary value is supplied, no encoding is performed.\nIf x-www-form-urlencoded content-type is set in headers,\nURL encoding is invoked.","ref":"Plausible.HTTPClient.html","title":"Plausible.HTTPClient","type":"module"},{"doc":"Make a GET request","ref":"Plausible.HTTPClient.html#get/3","title":"Plausible.HTTPClient.get/3","type":"function"},{"doc":"","ref":"Plausible.HTTPClient.html#impl/0","title":"Plausible.HTTPClient.impl/0","type":"function"},{"doc":"Make a POST request","ref":"Plausible.HTTPClient.html#post/4","title":"Plausible.HTTPClient.post/4","type":"function"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html","title":"Plausible.HTTPClient.Interface","type":"behaviour"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:get/1","title":"Plausible.HTTPClient.Interface.get/1","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:get/2","title":"Plausible.HTTPClient.Interface.get/2","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:get/3","title":"Plausible.HTTPClient.Interface.get/3","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:post/3","title":"Plausible.HTTPClient.Interface.post/3","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#c:post/4","title":"Plausible.HTTPClient.Interface.post/4","type":"callback"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:finch_request_opts/0","title":"Plausible.HTTPClient.Interface.finch_request_opts/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:headers/0","title":"Plausible.HTTPClient.Interface.headers/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:params/0","title":"Plausible.HTTPClient.Interface.params/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:response/0","title":"Plausible.HTTPClient.Interface.response/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Interface.html#t:url/0","title":"Plausible.HTTPClient.Interface.url/0","type":"type"},{"doc":"","ref":"Plausible.HTTPClient.Non200Error.html","title":"Plausible.HTTPClient.Non200Error","type":"module"},{"doc":"","ref":"Plausible.HTTPClient.Non200Error.html#new/1","title":"Plausible.HTTPClient.Non200Error.new/1","type":"function"},{"doc":"","ref":"Plausible.HTTPClient.Non200Error.html#t:t/0","title":"Plausible.HTTPClient.Non200Error.t/0","type":"type"},{"doc":"A dedicated repo for import related mutations","ref":"Plausible.ImportDeletionRepo.html","title":"Plausible.ImportDeletionRepo","type":"module"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#aggregate/3","title":"Plausible.ImportDeletionRepo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#aggregate/4","title":"Plausible.ImportDeletionRepo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#all/2","title":"Plausible.ImportDeletionRepo.all/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#checked_out?/0","title":"Plausible.ImportDeletionRepo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#checkout/2","title":"Plausible.ImportDeletionRepo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#child_spec/1","title":"Plausible.ImportDeletionRepo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#config/0","title":"Plausible.ImportDeletionRepo.config/0","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#default_options/1","title":"Plausible.ImportDeletionRepo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#delete/2","title":"Plausible.ImportDeletionRepo.delete/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#delete!/2","title":"Plausible.ImportDeletionRepo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#delete_all/2","title":"Plausible.ImportDeletionRepo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.ImportDeletionRepo.html#disconnect_all/2","title":"Plausible.ImportDeletionRepo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#exists?/2","title":"Plausible.ImportDeletionRepo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get/3","title":"Plausible.ImportDeletionRepo.get/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get!/3","title":"Plausible.ImportDeletionRepo.get!/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get_by/3","title":"Plausible.ImportDeletionRepo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get_by!/3","title":"Plausible.ImportDeletionRepo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#get_dynamic_repo/0","title":"Plausible.ImportDeletionRepo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert/2","title":"Plausible.ImportDeletionRepo.insert/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert!/2","title":"Plausible.ImportDeletionRepo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert_all/3","title":"Plausible.ImportDeletionRepo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert_or_update/2","title":"Plausible.ImportDeletionRepo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#insert_or_update!/2","title":"Plausible.ImportDeletionRepo.insert_or_update!/2","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.ImportDeletionRepo.html#insert_stream/3","title":"Plausible.ImportDeletionRepo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#load/2","title":"Plausible.ImportDeletionRepo.load/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#one/2","title":"Plausible.ImportDeletionRepo.one/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#one!/2","title":"Plausible.ImportDeletionRepo.one!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#preload/3","title":"Plausible.ImportDeletionRepo.preload/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#prepare_query/3","title":"Plausible.ImportDeletionRepo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#put_dynamic_repo/1","title":"Plausible.ImportDeletionRepo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.ImportDeletionRepo.html#query/3","title":"Plausible.ImportDeletionRepo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.ImportDeletionRepo.html#query!/3","title":"Plausible.ImportDeletionRepo.query!/3","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#reload/2","title":"Plausible.ImportDeletionRepo.reload/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#reload!/2","title":"Plausible.ImportDeletionRepo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#start_link/1","title":"Plausible.ImportDeletionRepo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#stop/1","title":"Plausible.ImportDeletionRepo.stop/1","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#stream/2","title":"Plausible.ImportDeletionRepo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.ImportDeletionRepo.html#to_sql/2","title":"Plausible.ImportDeletionRepo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#update/2","title":"Plausible.ImportDeletionRepo.update/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#update!/2","title":"Plausible.ImportDeletionRepo.update!/2","type":"function"},{"doc":"","ref":"Plausible.ImportDeletionRepo.html#update_all/3","title":"Plausible.ImportDeletionRepo.update_all/3","type":"function"},{"doc":"","ref":"Plausible.Imported.html","title":"Plausible.Imported","type":"module"},{"doc":"","ref":"Plausible.Imported.html#forget/1","title":"Plausible.Imported.forget/1","type":"function"},{"doc":"","ref":"Plausible.Imported.html#from_google_analytics/3","title":"Plausible.Imported.from_google_analytics/3","type":"function"},{"doc":"","ref":"Plausible.Imported.html#tables/0","title":"Plausible.Imported.tables/0","type":"function"},{"doc":"Write-centric Clickhouse access interface","ref":"Plausible.IngestRepo.html","title":"Plausible.IngestRepo","type":"module"},{"doc":"","ref":"Plausible.IngestRepo.html#aggregate/3","title":"Plausible.IngestRepo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#aggregate/4","title":"Plausible.IngestRepo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#all/2","title":"Plausible.IngestRepo.all/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#checked_out?/0","title":"Plausible.IngestRepo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#checkout/2","title":"Plausible.IngestRepo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#child_spec/1","title":"Plausible.IngestRepo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#config/0","title":"Plausible.IngestRepo.config/0","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#default_options/1","title":"Plausible.IngestRepo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#delete/2","title":"Plausible.IngestRepo.delete/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#delete!/2","title":"Plausible.IngestRepo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#delete_all/2","title":"Plausible.IngestRepo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.IngestRepo.html#disconnect_all/2","title":"Plausible.IngestRepo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#exists?/2","title":"Plausible.IngestRepo.exists?/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get/3","title":"Plausible.IngestRepo.get/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get!/3","title":"Plausible.IngestRepo.get!/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get_by/3","title":"Plausible.IngestRepo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get_by!/3","title":"Plausible.IngestRepo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#get_dynamic_repo/0","title":"Plausible.IngestRepo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert/2","title":"Plausible.IngestRepo.insert/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert!/2","title":"Plausible.IngestRepo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert_all/3","title":"Plausible.IngestRepo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert_or_update/2","title":"Plausible.IngestRepo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#insert_or_update!/2","title":"Plausible.IngestRepo.insert_or_update!/2","type":"function"},{"doc":"Similar to `insert_all/2` but with the following differences:\n\n - accepts rows as streams or lists\n - sends rows as a chunked request\n - doesn't autogenerate ids or does any other preprocessing\n\nExample:\n\n Repo.query!(\"create table ecto_ch_demo(a UInt64, b String) engine Null\")\n\n defmodule Demo do\n use Ecto.Schema\n\n @primary_key false\n schema \"ecto_ch_demo\" do\n field :a, Ch, type: \"UInt64\"\n field :b, :string\n end\n end\n\n rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)\n {100_000, nil} = Repo.insert_stream(Demo, rows)\n\n # schemaless\n {100_000, nil} = Repo.insert_stream(\"ecto_ch_demo\", rows, types: [a: Ch.Types.u64(), b: :string])","ref":"Plausible.IngestRepo.html#insert_stream/3","title":"Plausible.IngestRepo.insert_stream/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#load/2","title":"Plausible.IngestRepo.load/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#one/2","title":"Plausible.IngestRepo.one/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#one!/2","title":"Plausible.IngestRepo.one!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#preload/3","title":"Plausible.IngestRepo.preload/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#prepare_query/3","title":"Plausible.IngestRepo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#put_dynamic_repo/1","title":"Plausible.IngestRepo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.IngestRepo.html#query/3","title":"Plausible.IngestRepo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.IngestRepo.html#query!/3","title":"Plausible.IngestRepo.query!/3","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#reload/2","title":"Plausible.IngestRepo.reload/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#reload!/2","title":"Plausible.IngestRepo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#start_link/1","title":"Plausible.IngestRepo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#stop/1","title":"Plausible.IngestRepo.stop/1","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#stream/2","title":"Plausible.IngestRepo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.IngestRepo.html#to_sql/2","title":"Plausible.IngestRepo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#update/2","title":"Plausible.IngestRepo.update/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#update!/2","title":"Plausible.IngestRepo.update!/2","type":"function"},{"doc":"","ref":"Plausible.IngestRepo.html#update_all/3","title":"Plausible.IngestRepo.update_all/3","type":"function"},{"doc":"This is instrumentation necessary for keeping track of per-domain\ninternal metrics. Due to metric labels cardinality (domain x metric_name),\nthese statistics are not suitable for prometheus/grafana exposure,\nhence an internal storage is used.\n\nThe module installs `Counters.TelemetryHandler` and periodically\nflushes the internal counter aggregates via `Counters.Buffer` interface.\n\nThe underlying database schema is running `SummingMergeTree` engine.\nTo take advantage of automatic roll-ups it provides, upon dispatching the\nbuffered records to Clickhouse this module transforms each `event_timebucket`\naggregate into a 1-minute resolution.\n\nClickhouse connection is set to insert counters asynchronously every time\na pool checkout is made. Those properties are reverted once the insert is done\n(or naturally, if the connection crashes).","ref":"Plausible.Ingestion.Counters.html","title":"Plausible.Ingestion.Counters","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Counters.html#child_spec/1","title":"Plausible.Ingestion.Counters.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.html#enabled?/0","title":"Plausible.Ingestion.Counters.enabled?/0","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.html#stop/1","title":"Plausible.Ingestion.Counters.stop/1","type":"function"},{"doc":"A buffer aggregating counters for internal metrics, within 10 seconds time buckets.\n\nSee `Plausible.Ingestion.Counters` for integration.\n\nFlushing is by default possible only once the 10s bucket is complete\n(its window has moved). This is to avoid race conditions \nwhen clearing up the buffer on dequeue - because there is no atomic \"get and delete\",\nand items are buffered concurrently, there is a gap between get and delete\nin which items written may disappear otherwise.\n\n`aggregate_bucket_fn` and `flush_boundary_fn` control that semantics and\nare configurable only for test purposes.","ref":"Plausible.Ingestion.Counters.Buffer.html","title":"Plausible.Ingestion.Counters.Buffer","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#aggregate/4","title":"Plausible.Ingestion.Counters.Buffer.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#bucket_10s/1","title":"Plausible.Ingestion.Counters.Buffer.bucket_10s/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#flush/2","title":"Plausible.Ingestion.Counters.Buffer.flush/2","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#new/2","title":"Plausible.Ingestion.Counters.Buffer.new/2","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#previous_10s/1","title":"Plausible.Ingestion.Counters.Buffer.previous_10s/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#t:bucket_fn_opt/0","title":"Plausible.Ingestion.Counters.Buffer.bucket_fn_opt/0","type":"type"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#t:t/0","title":"Plausible.Ingestion.Counters.Buffer.t/0","type":"type"},{"doc":"","ref":"Plausible.Ingestion.Counters.Buffer.html#t:unix_timestamp/0","title":"Plausible.Ingestion.Counters.Buffer.unix_timestamp/0","type":"type"},{"doc":"Clickhouse schema for storing ingest counter metrics","ref":"Plausible.Ingestion.Counters.Record.html","title":"Plausible.Ingestion.Counters.Record","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Counters.Record.html#t:t/0","title":"Plausible.Ingestion.Counters.Record.t/0","type":"type"},{"doc":"Susbcribes to telemetry events emitted by `Plausible.Ingestion.Event`.\nEvery time a request derived event is either dispatched to clickhouse or dropped,\na telemetry event is emitted respectively. That event is captured here,\nits metadata is extracted and sent for internal stats aggregation via\n`Counters.Buffer` interface.","ref":"Plausible.Ingestion.Counters.TelemetryHandler.html","title":"Plausible.Ingestion.Counters.TelemetryHandler","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Counters.TelemetryHandler.html#handle_event/4","title":"Plausible.Ingestion.Counters.TelemetryHandler.handle_event/4","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Counters.TelemetryHandler.html#install/1","title":"Plausible.Ingestion.Counters.TelemetryHandler.install/1","type":"function"},{"doc":"This module exposes the `build_and_buffer/1` function capable of\nturning %Plausible.Ingestion.Request{} into a series of events that in turn\nare uniformly either buffered in batches (to Clickhouse) or dropped\n(e.g. due to spam blocklist) from the processing pipeline.","ref":"Plausible.Ingestion.Event.html","title":"Plausible.Ingestion.Event","type":"module"},{"doc":"","ref":"Plausible.Ingestion.Event.html#build_and_buffer/1","title":"Plausible.Ingestion.Event.build_and_buffer/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#emit_telemetry_buffered/1","title":"Plausible.Ingestion.Event.emit_telemetry_buffered/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#emit_telemetry_dropped/2","title":"Plausible.Ingestion.Event.emit_telemetry_dropped/2","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#telemetry_event_buffered/0","title":"Plausible.Ingestion.Event.telemetry_event_buffered/0","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#telemetry_event_dropped/0","title":"Plausible.Ingestion.Event.telemetry_event_dropped/0","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Event.html#t:drop_reason/0","title":"Plausible.Ingestion.Event.drop_reason/0","type":"type"},{"doc":"","ref":"Plausible.Ingestion.Event.html#t:t/0","title":"Plausible.Ingestion.Event.t/0","type":"type"},{"doc":"The %Plausible.Ingestion.Request{} struct stores all needed fields\nto create an event downstream. Pre-eliminary validation is made\nto detect user errors early.","ref":"Plausible.Ingestion.Request.html","title":"Plausible.Ingestion.Request","type":"module"},{"doc":"Builds and initially validates %Plausible.Ingestion.Request{} struct from %Plug.Conn{}.","ref":"Plausible.Ingestion.Request.html#build/2","title":"Plausible.Ingestion.Request.build/2","type":"function"},{"doc":"Removes the \"www\" part of a hostname.","ref":"Plausible.Ingestion.Request.html#sanitize_hostname/1","title":"Plausible.Ingestion.Request.sanitize_hostname/1","type":"function"},{"doc":"","ref":"Plausible.Ingestion.Request.html#t:t/0","title":"Plausible.Ingestion.Request.t/0","type":"type"},{"doc":"","ref":"Plausible.Mailer.html","title":"Plausible.Mailer","type":"module"},{"doc":"","ref":"Plausible.Mailer.html#deliver/1","title":"Plausible.Mailer.deliver/1","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#deliver_later/2","title":"Plausible.Mailer.deliver_later/2","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#deliver_later!/2","title":"Plausible.Mailer.deliver_later!/2","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#deliver_now/2","title":"Plausible.Mailer.deliver_now/2","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#deliver_now!/2","title":"Plausible.Mailer.deliver_now!/2","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#send/1","title":"Plausible.Mailer.send/1","type":"function"},{"doc":"","ref":"Plausible.Mailer.html#t:result/0","title":"Plausible.Mailer.result/0","type":"type"},{"doc":"[Custom OpenTelemetry sampler](https://hexdocs.pm/opentelemetry/readme.html#samplers)\nimplementation that ignores particular traces to reduce noise. Ingestion\nHTTP requests and queries to Oban tables are ignored, for example.","ref":"Plausible.OpenTelemetry.Sampler.html","title":"Plausible.OpenTelemetry.Sampler","type":"module"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html","title":"Plausible.PaddleApi.Mock","type":"module"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html#fetch_prices/1","title":"Plausible.PaddleApi.Mock.fetch_prices/1","type":"function"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html#get_invoices/1","title":"Plausible.PaddleApi.Mock.get_invoices/1","type":"function"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html#get_subscription/1","title":"Plausible.PaddleApi.Mock.get_subscription/1","type":"function"},{"doc":"","ref":"Plausible.PaddleApi.Mock.html#update_subscription/2","title":"Plausible.PaddleApi.Mock.update_subscription/2","type":"function"},{"doc":"Plugins API context module for Goals.\nAll high level Goal operations should be implemented here.","ref":"Plausible.Plugins.API.Goals.html","title":"Plausible.Plugins.API.Goals","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.Goals.html#create/2","title":"Plausible.Plugins.API.Goals.create/2","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Goals.html#get/2","title":"Plausible.Plugins.API.Goals.get/2","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Goals.html#get_goals/2","title":"Plausible.Plugins.API.Goals.get_goals/2","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Goals.html#t:create_request/0","title":"Plausible.Plugins.API.Goals.create_request/0","type":"type"},{"doc":"Cursor-based pagination for the Plugins API.\nCan be moved to another namespace in case used elsewhere.","ref":"Plausible.Plugins.API.Pagination.html","title":"Plausible.Plugins.API.Pagination","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.Pagination.html#paginate/4","title":"Plausible.Plugins.API.Pagination.paginate/4","type":"function"},{"doc":"Plugins API context module for Shared Links.\nAll high level Shared Links operations should be implemented here.","ref":"Plausible.Plugins.API.SharedLinks.html","title":"Plausible.Plugins.API.SharedLinks","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.SharedLinks.html#get/2","title":"Plausible.Plugins.API.SharedLinks.get/2","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.SharedLinks.html#get_or_create/3","title":"Plausible.Plugins.API.SharedLinks.get_or_create/3","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.SharedLinks.html#get_shared_links/2","title":"Plausible.Plugins.API.SharedLinks.get_shared_links/2","type":"function"},{"doc":"Ecto schema for Plugins API Tokens.\nTokens are stored hashed and require a description.\n\nTokens are considered secret, although the Plugins API\nby nature will expose very little, if any, destructive/insecure operations.\n\nThe raw token version is meant to be presented to the user upon creation.\nIt is prefixed with a plain text identifier allowing source scanning\nfor leaked secrets.","ref":"Plausible.Plugins.API.Token.html","title":"Plausible.Plugins.API.Token","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.Token.html#generate/1","title":"Plausible.Plugins.API.Token.generate/1","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Token.html#hash/1","title":"Plausible.Plugins.API.Token.hash/1","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Token.html#insert_changeset/3","title":"Plausible.Plugins.API.Token.insert_changeset/3","type":"function"},{"doc":"Raw tokens are prefixed so that tools like\nhttps://docs.github.com/en/code-security/secret-scanning/about-secret-scanning\ncan scan repositories for accidental secret commits.","ref":"Plausible.Plugins.API.Token.html#prefix/0","title":"Plausible.Plugins.API.Token.prefix/0","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Token.html#t:t/0","title":"Plausible.Plugins.API.Token.t/0","type":"type"},{"doc":"Context module for Plugins API Tokens.\nExposes high-level operation for token-based authentication flows.","ref":"Plausible.Plugins.API.Tokens.html","title":"Plausible.Plugins.API.Tokens","type":"module"},{"doc":"","ref":"Plausible.Plugins.API.Tokens.html#create/3","title":"Plausible.Plugins.API.Tokens.create/3","type":"function"},{"doc":"","ref":"Plausible.Plugins.API.Tokens.html#find/2","title":"Plausible.Plugins.API.Tokens.find/2","type":"function"},{"doc":"","ref":"Plausible.PromEx.html","title":"Plausible.PromEx","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.PromEx.html#child_spec/1","title":"Plausible.PromEx.child_spec/1","type":"function"},{"doc":"Custom PromEx plugin for instrumenting code within Plausible app.","ref":"Plausible.PromEx.Plugins.PlausibleMetrics.html","title":"Plausible.PromEx.Plugins.PlausibleMetrics","type":"module"},{"doc":"Add telemetry events for Cachex user agents and sessions","ref":"Plausible.PromEx.Plugins.PlausibleMetrics.html#execute_cache_metrics/0","title":"Plausible.PromEx.Plugins.PlausibleMetrics.execute_cache_metrics/0","type":"function"},{"doc":"Add telemetry events for Session and Event write buffers","ref":"Plausible.PromEx.Plugins.PlausibleMetrics.html#execute_write_buffer_metrics/0","title":"Plausible.PromEx.Plugins.PlausibleMetrics.execute_write_buffer_metrics/0","type":"function"},{"doc":"Context module for handling custom event props.","ref":"Plausible.Props.html","title":"Plausible.Props","type":"module"},{"doc":"Allows a prop key or a list of props keys to be included in ClickHouse\nqueries. Allowing prop keys does not affect ingestion, as we don't want any\ndata to be dropped or lost.","ref":"Plausible.Props.html#allow/2","title":"Plausible.Props.allow/2","type":"function"},{"doc":"","ref":"Plausible.Props.html#allow_changeset/2","title":"Plausible.Props.allow_changeset/2","type":"function"},{"doc":"Allows the 300 most frequent props keys for a specific site over\nthe past 6 months.","ref":"Plausible.Props.html#allow_existing_props/1","title":"Plausible.Props.allow_existing_props/1","type":"function"},{"doc":"Returns whether the site has configured custom props or not.","ref":"Plausible.Props.html#configured?/1","title":"Plausible.Props.configured?/1","type":"function"},{"doc":"Removes a previously allowed prop key from the allow list. This means this\nprop key won't be included in ClickHouse queries. This doesn't drop any\nClickHouse data, nor affects ingestion.","ref":"Plausible.Props.html#disallow/2","title":"Plausible.Props.disallow/2","type":"function"},{"doc":"Lists prop keys used internally.\n\nThese props should be allowed by default, and should not be displayed in the\nprops settings page. For example, `url` is a special prop key used for file\ndownloads and outbound links. It doesn't make sense to remove this prop key\nfrom the allow list, or to suggest users to add this prop key.","ref":"Plausible.Props.html#internal_keys/0","title":"Plausible.Props.internal_keys/0","type":"function"},{"doc":"","ref":"Plausible.Props.html#max_prop_key_length/0","title":"Plausible.Props.max_prop_key_length/0","type":"function"},{"doc":"","ref":"Plausible.Props.html#max_prop_value_length/0","title":"Plausible.Props.max_prop_value_length/0","type":"function"},{"doc":"","ref":"Plausible.Props.html#max_props/0","title":"Plausible.Props.max_props/0","type":"function"},{"doc":"Queries the events table to fetch the 300 most frequent prop keys\nfor a specific site over the past 6 months, excluding keys that are already\nallowed.","ref":"Plausible.Props.html#suggest_keys_to_allow/2","title":"Plausible.Props.suggest_keys_to_allow/2","type":"function"},{"doc":"","ref":"Plausible.Props.html#t:prop/0","title":"Plausible.Props.prop/0","type":"type"},{"doc":"Deletes data from a site.\n\nStats are stored on Clickhouse, and unlike other databases data deletion is\ndone asynchronously.\n\n- [Clickhouse `ALTER TABLE ... DELETE` Statement](https://clickhouse.com/docs/en/sql-reference/statements/alter/delete)\n- [Synchronicity of `ALTER` Queries](https://clickhouse.com/docs/en/sql-reference/statements/alter/#synchronicity-of-alter-queries)","ref":"Plausible.Purge.html","title":"Plausible.Purge","type":"module"},{"doc":"Deletes imported stats from Google Analytics, and clears the\n`stats_start_date` field.","ref":"Plausible.Purge.html#delete_imported_stats!/1","title":"Plausible.Purge.delete_imported_stats!/1","type":"function"},{"doc":"Move stats pointers so that no historical stats are available.","ref":"Plausible.Purge.html#delete_native_stats!/1","title":"Plausible.Purge.delete_native_stats!/1","type":"function"},{"doc":"","ref":"Plausible.Purge.html#reset!/1","title":"Plausible.Purge.reset!/1","type":"function"},{"doc":"","ref":"Plausible.Release.html","title":"Plausible.Release","type":"module"},{"doc":"","ref":"Plausible.Release.html#configure_ref_inspector/0","title":"Plausible.Release.configure_ref_inspector/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#configure_ua_inspector/0","title":"Plausible.Release.configure_ua_inspector/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#createdb/0","title":"Plausible.Release.createdb/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#migrate/0","title":"Plausible.Release.migrate/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#pending_migrations/0","title":"Plausible.Release.pending_migrations/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#rollback/0","title":"Plausible.Release.rollback/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#seed/0","title":"Plausible.Release.seed/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#selfhost?/0","title":"Plausible.Release.selfhost?/0","type":"function"},{"doc":"","ref":"Plausible.Release.html#should_be_first_launch?/0","title":"Plausible.Release.should_be_first_launch?/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html","title":"Plausible.Repo","type":"module"},{"doc":"","ref":"Plausible.Repo.html#aggregate/3","title":"Plausible.Repo.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#aggregate/4","title":"Plausible.Repo.aggregate/4","type":"function"},{"doc":"","ref":"Plausible.Repo.html#all/2","title":"Plausible.Repo.all/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#checked_out?/0","title":"Plausible.Repo.checked_out?/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html#checkout/2","title":"Plausible.Repo.checkout/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#child_spec/1","title":"Plausible.Repo.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#config/0","title":"Plausible.Repo.config/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html#default_options/1","title":"Plausible.Repo.default_options/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#delete/2","title":"Plausible.Repo.delete/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#delete!/2","title":"Plausible.Repo.delete!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#delete_all/2","title":"Plausible.Repo.delete_all/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that forces all connections in the\npool to disconnect within the given interval.\n\nSee `Ecto.Adapters.SQL.disconnect_all/3` for more information.","ref":"Plausible.Repo.html#disconnect_all/2","title":"Plausible.Repo.disconnect_all/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#exists?/2","title":"Plausible.Repo.exists?/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes an EXPLAIN statement or similar\ndepending on the adapter to obtain statistics for the given query.\n\nSee `Ecto.Adapters.SQL.explain/4` for more information.","ref":"Plausible.Repo.html#explain/3","title":"Plausible.Repo.explain/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get/3","title":"Plausible.Repo.get/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get!/3","title":"Plausible.Repo.get!/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get_by/3","title":"Plausible.Repo.get_by/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get_by!/3","title":"Plausible.Repo.get_by!/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#get_dynamic_repo/0","title":"Plausible.Repo.get_dynamic_repo/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html#in_transaction?/0","title":"Plausible.Repo.in_transaction?/0","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert/2","title":"Plausible.Repo.insert/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert!/2","title":"Plausible.Repo.insert!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert_all/3","title":"Plausible.Repo.insert_all/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert_or_update/2","title":"Plausible.Repo.insert_or_update/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#insert_or_update!/2","title":"Plausible.Repo.insert_or_update!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#load/2","title":"Plausible.Repo.load/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#one/2","title":"Plausible.Repo.one/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#one!/2","title":"Plausible.Repo.one!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#paginate/3","title":"Plausible.Repo.paginate/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#preload/3","title":"Plausible.Repo.preload/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#prepare_query/3","title":"Plausible.Repo.prepare_query/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#put_dynamic_repo/1","title":"Plausible.Repo.put_dynamic_repo/1","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Plausible.Repo.html#query/3","title":"Plausible.Repo.query/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Plausible.Repo.html#query!/3","title":"Plausible.Repo.query!/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given multi-result query.\n\nSee `Ecto.Adapters.SQL.query_many/4` for more information.","ref":"Plausible.Repo.html#query_many/3","title":"Plausible.Repo.query_many/3","type":"function"},{"doc":"A convenience function for SQL-based repositories that executes the given multi-result query.\n\nSee `Ecto.Adapters.SQL.query_many!/4` for more information.","ref":"Plausible.Repo.html#query_many!/3","title":"Plausible.Repo.query_many!/3","type":"function"},{"doc":"","ref":"Plausible.Repo.html#reload/2","title":"Plausible.Repo.reload/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#reload!/2","title":"Plausible.Repo.reload!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#rollback/1","title":"Plausible.Repo.rollback/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#start_link/1","title":"Plausible.Repo.start_link/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#stop/1","title":"Plausible.Repo.stop/1","type":"function"},{"doc":"","ref":"Plausible.Repo.html#stream/2","title":"Plausible.Repo.stream/2","type":"function"},{"doc":"A convenience function for SQL-based repositories that translates the given query to SQL.\n\nSee `Ecto.Adapters.SQL.to_sql/3` for more information.","ref":"Plausible.Repo.html#to_sql/2","title":"Plausible.Repo.to_sql/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#transaction/2","title":"Plausible.Repo.transaction/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#update/2","title":"Plausible.Repo.update/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#update!/2","title":"Plausible.Repo.update!/2","type":"function"},{"doc":"","ref":"Plausible.Repo.html#update_all/3","title":"Plausible.Repo.update_all/3","type":"function"},{"doc":"","ref":"Plausible.Sentry.Client.html","title":"Plausible.Sentry.Client","type":"module"},{"doc":"The Sentry.HTTPClient behaviour requires a child spec to be supplied.\nIn this case we don't want Sentry to manage our Finch instances, hence it's fed\nwith a dummy module for the sake of the contract.\n\nXXX: Submit a Sentry PR making the child spec callback optional.","ref":"Plausible.Sentry.Client.html#child_spec/0","title":"Plausible.Sentry.Client.child_spec/0","type":"function"},{"doc":"","ref":"Plausible.Sentry.Client.html#post/3","title":"Plausible.Sentry.Client.post/3","type":"function"},{"doc":"Sentry callbacks for filtering and grouping events","ref":"Plausible.SentryFilter.html","title":"Plausible.SentryFilter","type":"module"},{"doc":"","ref":"Plausible.SentryFilter.html#before_send/1","title":"Plausible.SentryFilter.before_send/1","type":"function"},{"doc":"","ref":"Plausible.SentryFilter.html#exclude_exception?/2","title":"Plausible.SentryFilter.exclude_exception?/2","type":"function"},{"doc":"","ref":"Plausible.Session.CacheStore.html","title":"Plausible.Session.CacheStore","type":"module"},{"doc":"","ref":"Plausible.Session.CacheStore.html#on_event/3","title":"Plausible.Session.CacheStore.on_event/3","type":"function"},{"doc":"","ref":"Plausible.Session.Salts.html","title":"Plausible.Session.Salts","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.Session.Salts.html#child_spec/1","title":"Plausible.Session.Salts.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Session.Salts.html#fetch/0","title":"Plausible.Session.Salts.fetch/0","type":"function"},{"doc":"","ref":"Plausible.Session.Salts.html#rotate/0","title":"Plausible.Session.Salts.rotate/0","type":"function"},{"doc":"","ref":"Plausible.Session.Salts.html#start_link/1","title":"Plausible.Session.Salts.start_link/1","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html","title":"Plausible.Session.WriteBuffer","type":"module"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Plausible.Session.WriteBuffer.html#child_spec/1","title":"Plausible.Session.WriteBuffer.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html#flush/0","title":"Plausible.Session.WriteBuffer.flush/0","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html#init/1","title":"Plausible.Session.WriteBuffer.init/1","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html#insert/1","title":"Plausible.Session.WriteBuffer.insert/1","type":"function"},{"doc":"","ref":"Plausible.Session.WriteBuffer.html#start_link/1","title":"Plausible.Session.WriteBuffer.start_link/1","type":"function"},{"doc":"Site schema","ref":"Plausible.Site.html","title":"Plausible.Site","type":"module"},{"doc":"","ref":"Plausible.Site.html#changeset/2","title":"Plausible.Site.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#crm_changeset/2","title":"Plausible.Site.crm_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#import_failure/1","title":"Plausible.Site.import_failure/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#import_success/1","title":"Plausible.Site.import_success/1","type":"function"},{"doc":"Returns the date of the first recorded stat in the timezone configured by the user.\nThis function does 2 transformations:\n UTC %NaiveDateTime{} -> Local %DateTime{} -> Local %Date","ref":"Plausible.Site.html#local_start_date/1","title":"Plausible.Site.local_start_date/1","type":"function"},{"doc":"iex> Plausible.Site.local_start_date(%Plausible.Site{stats_start_date: nil})\n nil\n\n iex> utc_start = ~N[2022-09-28 00:00:00]\n iex> tz = \"Europe/Helsinki\"\n iex> site = %Plausible.Site{stats_start_date: utc_start, timezone: tz}\n iex> Plausible.Site.local_start_date(site)\n ~D[2022-09-28]\n\n iex> utc_start = ~N[2022-09-28 00:00:00]\n iex> tz = \"America/Los_Angeles\"\n iex> site = %Plausible.Site{stats_start_date: utc_start, timezone: tz}\n iex> Plausible.Site.local_start_date(site)\n ~D[2022-09-27]","ref":"Plausible.Site.html#local_start_date/1-examples","title":"Examples - Plausible.Site.local_start_date/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#make_private/1","title":"Plausible.Site.make_private/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#make_public/1","title":"Plausible.Site.make_public/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#remove_imported_data/1","title":"Plausible.Site.remove_imported_data/1","type":"function"},{"doc":"","ref":"Plausible.Site.html#set_imported_source/2","title":"Plausible.Site.set_imported_source/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#set_native_stats_start_at/2","title":"Plausible.Site.set_native_stats_start_at/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#set_stats_start_date/2","title":"Plausible.Site.set_stats_start_date/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#start_import/5","title":"Plausible.Site.start_import/5","type":"function"},{"doc":"","ref":"Plausible.Site.html#tz_offset/2","title":"Plausible.Site.tz_offset/2","type":"function"},{"doc":"","ref":"Plausible.Site.html#update_changeset/3","title":"Plausible.Site.update_changeset/3","type":"function"},{"doc":"","ref":"Plausible.Site.html#t:t/0","title":"Plausible.Site.t/0","type":"type"},{"doc":"A \"sites by domain\" caching interface.\n\nServes as a thin wrapper around Cachex, but the underlying\nimplementation can be transparently swapped.\n\nEven though the Cachex process is started, cache access is disabled\nduring tests via the `:sites_by_domain_cache_enabled` application env key.\nThis can be overridden on case by case basis, using the child specs options.\n\nNOTE: the cache allows lookups by both `domain` and `domain_changed_from`\nfields - this is to allow traffic from sites whose domains changed within a certain\ngrace period (see: `Plausible.Site.Transfer`).\n\nWhen Cache is disabled via application env, the `get/1` function\nfalls back to pure database lookups. This should help with introducing\ncached lookups in existing code, so that no existing tests should break.\n\nTo differentiate cached Site structs from those retrieved directly from the\ndatabase, a virtual schema field `from_cache?: true` is set.\nThis indicates the `Plausible.Site` struct is incomplete in comparison to its\ndatabase counterpart -- to spare bandwidth and query execution time,\nonly selected database columns are retrieved and cached.\n\nThere are two modes of refreshing the cache: `:all` and `:updated_recently`.\n\n * `:all` means querying the database for all Site entries and should be done\n periodically (via `Cache.Warmer`). All stale Cache entries are cleared\n upon persisting the new batch.\n\n * `:updated_recently` attempts to re-query sites updated within the last\n 15 minutes only, to account for most recent changes. This refresh\n is lighter on the database and is meant to be executed more frequently\n (via `Cache.Warmer.RecentlyUpdated`).\n\nRefreshing the cache emits telemetry event defined as per `telemetry_event_refresh/2`.\n\nThe `@cached_schema_fields` attribute defines the list of DB columns\nqueried on each cache refresh.\n\nAlso see tests for more comprehensive examples.","ref":"Plausible.Site.Cache.html","title":"Plausible.Site.Cache","type":"module"},{"doc":"","ref":"Plausible.Site.Cache.html#child_spec/1","title":"Plausible.Site.Cache.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#enabled?/0","title":"Plausible.Site.Cache.enabled?/0","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#get/2","title":"Plausible.Site.Cache.get/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#get_site_id/2","title":"Plausible.Site.Cache.get_site_id/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#hit_rate/1","title":"Plausible.Site.Cache.hit_rate/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#merge/2","title":"Plausible.Site.Cache.merge/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#name/0","title":"Plausible.Site.Cache.name/0","type":"function"},{"doc":"Ensures the cache has non-zero size unless no sites exist.\nUseful for orchestrating app startup to prevent the service\ngoing up asynchronously with an empty cache.","ref":"Plausible.Site.Cache.html#ready?/1","title":"Plausible.Site.Cache.ready?/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#refresh_all/1","title":"Plausible.Site.Cache.refresh_all/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#refresh_updated_recently/1","title":"Plausible.Site.Cache.refresh_updated_recently/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#size/1","title":"Plausible.Site.Cache.size/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#telemetry_event_refresh/2","title":"Plausible.Site.Cache.telemetry_event_refresh/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#touch_site!/2","title":"Plausible.Site.Cache.touch_site!/2","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.html#t:t/0","title":"Plausible.Site.Cache.t/0","type":"type"},{"doc":"A periodic cache warmer.\nQueries all Sites from Postgres, every `interval` and pre-populates the cache.\nAfter each run the process is hibernated, triggering garbage collection.\n\nCurrently Cachex is used, but the underlying implementation can be transparently swapped.\n\nChild specification options available:\n\n * `interval` - the number of milliseconds for each warm-up cycle, defaults\n to `:sites_by_domain_cache_refresh_interval` application env value\n with random jitter added, for which the maximum is stored under\n `:sites_by_domain_cache_refresh_interval_max_jitter` key.\n * `cache_name` - defaults to Cache.name() but can be overriden for testing\n * `force_start?` - enforcess process startup for testing, even if it's barred\n by `Cache.enabled?`. This is useful for avoiding issues with DB ownership\n and async tests.\n * `warmer_fn` - used for testing, a custom function to retrieve the items meant\n to be cached during the warm-up cycle.\n\nSee tests for more comprehensive examples.","ref":"Plausible.Site.Cache.Warmer.html","title":"Plausible.Site.Cache.Warmer","type":"module"},{"doc":"","ref":"Plausible.Site.Cache.Warmer.html#child_spec/1","title":"Plausible.Site.Cache.Warmer.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Site.Cache.Warmer.html#interval/0","title":"Plausible.Site.Cache.Warmer.interval/0","type":"function"},{"doc":"A Cache.Warmer adapter that refreshes the Sites Cache fully.\nThis module exists only to make it explicit what the warmer\nrefreshes, to be used in the supervisor tree.","ref":"Plausible.Site.Cache.Warmer.All.html","title":"Plausible.Site.Cache.Warmer.All","type":"module"},{"doc":"","ref":"Plausible.Site.Cache.Warmer.All.html#child_spec/1","title":"Plausible.Site.Cache.Warmer.All.child_spec/1","type":"function"},{"doc":"A Cache.Warmer adapter that only refreshes the Cache\nwith recently updated sites every 30 seconds.","ref":"Plausible.Site.Cache.Warmer.RecentlyUpdated.html","title":"Plausible.Site.Cache.Warmer.RecentlyUpdated","type":"module"},{"doc":"","ref":"Plausible.Site.Cache.Warmer.RecentlyUpdated.html#child_spec/1","title":"Plausible.Site.Cache.Warmer.RecentlyUpdated.child_spec/1","type":"function"},{"doc":"","ref":"Plausible.Site.CustomDomain.html","title":"Plausible.Site.CustomDomain","type":"module"},{"doc":"Basic interface for domain changes.\n\nOnce `Plausible.DataMigration.NumericIDs` schema migration is ready, \ndomain change operation will be enabled, accessible to the users.\n\nWe will set a transition period of 72 hours\nduring which, both old and new domains, will be accepted as traffic\nidentifiers to the same site. \n\nA periodic worker will call the `expire/0` function to end it where applicable.\nSee: `Plausible.Workers.ExpireDomainChangeTransitions`.\n\nThe underlying changeset for domain change (see: `Plausible.Site`) relies\non database trigger installed via `Plausible.Repo.Migrations.AllowDomainChange`\nPostgres migration. The trigger checks if either `domain` or `domain_changed_from`\nexist to ensure unicity.","ref":"Plausible.Site.Domain.html","title":"Plausible.Site.Domain","type":"module"},{"doc":"","ref":"Plausible.Site.Domain.html#change/3","title":"Plausible.Site.Domain.change/3","type":"function"},{"doc":"","ref":"Plausible.Site.Domain.html#expire_change_transitions/1","title":"Plausible.Site.Domain.expire_change_transitions/1","type":"function"},{"doc":"Thin wrapper around Hammer for gate keeping domain-specific events\nduring the ingestion phase. When the site is allowed, gate keeping\ncheck returns `:allow`, otherwise a `:deny` tagged tuple is returned\nwith one of the following policy markers:\n * `:not_found` (indicates site not found in cache)\n * `:block` (indicates disabled sites)\n * `:throttle` (indicates rate limiting)\n\nRate Limiting buckets are configured per site (externally via the CRM).\nSee: `Plausible.Site`\n\nTo look up each site's configuration, the RateLimiter fetches\na Site by domain using `Plausible.Cache` interface.\n\nThe module defines two policies outside the regular bucket inspection:\n * when the the site is not found in cache: not_found\n * when the underlying rate limiting mechanism returns\n an internal error: :allow","ref":"Plausible.Site.GateKeeper.html","title":"Plausible.Site.GateKeeper","type":"module"},{"doc":"","ref":"Plausible.Site.GateKeeper.html#check/2","title":"Plausible.Site.GateKeeper.check/2","type":"function"},{"doc":"","ref":"Plausible.Site.GateKeeper.html#key/1","title":"Plausible.Site.GateKeeper.key/1","type":"function"},{"doc":"","ref":"Plausible.Site.GateKeeper.html#t:policy/0","title":"Plausible.Site.GateKeeper.policy/0","type":"type"},{"doc":"","ref":"Plausible.Site.GateKeeper.html#t:t/0","title":"Plausible.Site.GateKeeper.t/0","type":"type"},{"doc":"","ref":"Plausible.Site.GoogleAuth.html","title":"Plausible.Site.GoogleAuth","type":"module"},{"doc":"","ref":"Plausible.Site.GoogleAuth.html#changeset/2","title":"Plausible.Site.GoogleAuth.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.GoogleAuth.html#set_property/2","title":"Plausible.Site.GoogleAuth.set_property/2","type":"function"},{"doc":"Embedded schema for Google Analytics imports","ref":"Plausible.Site.ImportedData.html","title":"Plausible.Site.ImportedData","type":"module"},{"doc":"","ref":"Plausible.Site.Membership.html","title":"Plausible.Site.Membership","type":"module"},{"doc":"","ref":"Plausible.Site.Membership.html#new/2","title":"Plausible.Site.Membership.new/2","type":"function"},{"doc":"","ref":"Plausible.Site.Membership.html#set_role/2","title":"Plausible.Site.Membership.set_role/2","type":"function"},{"doc":"","ref":"Plausible.Site.Membership.html#t:t/0","title":"Plausible.Site.Membership.t/0","type":"type"},{"doc":"API for site memberships and invitations","ref":"Plausible.Site.Memberships.html","title":"Plausible.Site.Memberships","type":"module"},{"doc":"","ref":"Plausible.Site.Memberships.html#accept_invitation/2","title":"Plausible.Site.Memberships.accept_invitation/2","type":"function"},{"doc":"","ref":"Plausible.Site.Memberships.html#any?/1","title":"Plausible.Site.Memberships.any?/1","type":"function"},{"doc":"","ref":"Plausible.Site.Memberships.html#has_any_invitations?/1","title":"Plausible.Site.Memberships.has_any_invitations?/1","type":"function"},{"doc":"","ref":"Plausible.Site.Memberships.html#reject_invitation/2","title":"Plausible.Site.Memberships.reject_invitation/2","type":"function"},{"doc":"","ref":"Plausible.Site.Memberships.html#remove_invitation/2","title":"Plausible.Site.Memberships.remove_invitation/2","type":"function"},{"doc":"Service for accepting invitations, including ownership transfers.\n\nAccepting invitation accounts for the fact that it's possible\nthat accepting user has an existing membership for the site and\nacts permissively to not unnecessarily disrupt the flow while\nalso maintaining integrity of site memberships. This also applies\nto cases where users update their email address between issuing\nthe invitation and accepting it.","ref":"Plausible.Site.Memberships.AcceptInvitation.html","title":"Plausible.Site.Memberships.AcceptInvitation","type":"module"},{"doc":"","ref":"Plausible.Site.Memberships.AcceptInvitation.html#accept_invitation/3","title":"Plausible.Site.Memberships.AcceptInvitation.accept_invitation/3","type":"function"},{"doc":"Service for rejecting invitations.","ref":"Plausible.Site.Memberships.RejectInvitation.html","title":"Plausible.Site.Memberships.RejectInvitation","type":"module"},{"doc":"","ref":"Plausible.Site.Memberships.RejectInvitation.html#reject_invitation/2","title":"Plausible.Site.Memberships.RejectInvitation.reject_invitation/2","type":"function"},{"doc":"Service for removing invitations.","ref":"Plausible.Site.Memberships.RemoveInvitation.html","title":"Plausible.Site.Memberships.RemoveInvitation","type":"module"},{"doc":"","ref":"Plausible.Site.Memberships.RemoveInvitation.html#remove_invitation/2","title":"Plausible.Site.Memberships.RemoveInvitation.remove_invitation/2","type":"function"},{"doc":"","ref":"Plausible.Site.MonthlyReport.html","title":"Plausible.Site.MonthlyReport","type":"module"},{"doc":"","ref":"Plausible.Site.MonthlyReport.html#add_recipient/2","title":"Plausible.Site.MonthlyReport.add_recipient/2","type":"function"},{"doc":"","ref":"Plausible.Site.MonthlyReport.html#changeset/2","title":"Plausible.Site.MonthlyReport.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.MonthlyReport.html#remove_recipient/2","title":"Plausible.Site.MonthlyReport.remove_recipient/2","type":"function"},{"doc":"A site deletion service stub.","ref":"Plausible.Site.Removal.html","title":"Plausible.Site.Removal","type":"module"},{"doc":"","ref":"Plausible.Site.Removal.html#run/1","title":"Plausible.Site.Removal.run/1","type":"function"},{"doc":"","ref":"Plausible.Site.SharedLink.html","title":"Plausible.Site.SharedLink","type":"module"},{"doc":"","ref":"Plausible.Site.SharedLink.html#changeset/2","title":"Plausible.Site.SharedLink.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.SharedLink.html#t:t/0","title":"Plausible.Site.SharedLink.t/0","type":"type"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html","title":"Plausible.Site.SpikeNotification","type":"module"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html#add_recipient/2","title":"Plausible.Site.SpikeNotification.add_recipient/2","type":"function"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html#changeset/2","title":"Plausible.Site.SpikeNotification.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html#remove_recipient/2","title":"Plausible.Site.SpikeNotification.remove_recipient/2","type":"function"},{"doc":"","ref":"Plausible.Site.SpikeNotification.html#was_sent/1","title":"Plausible.Site.SpikeNotification.was_sent/1","type":"function"},{"doc":"","ref":"Plausible.Site.WeeklyReport.html","title":"Plausible.Site.WeeklyReport","type":"module"},{"doc":"","ref":"Plausible.Site.WeeklyReport.html#add_recipient/2","title":"Plausible.Site.WeeklyReport.add_recipient/2","type":"function"},{"doc":"","ref":"Plausible.Site.WeeklyReport.html#changeset/2","title":"Plausible.Site.WeeklyReport.changeset/2","type":"function"},{"doc":"","ref":"Plausible.Site.WeeklyReport.html#remove_recipient/2","title":"Plausible.Site.WeeklyReport.remove_recipient/2","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html","title":"Plausible.SiteAdmin","type":"module"},{"doc":"","ref":"Plausible.SiteAdmin.html#create_changeset/2","title":"Plausible.SiteAdmin.create_changeset/2","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#custom_index_query/3","title":"Plausible.SiteAdmin.custom_index_query/3","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#form_fields/1","title":"Plausible.SiteAdmin.form_fields/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#get_struct_fields/1","title":"Plausible.SiteAdmin.get_struct_fields/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#index/1","title":"Plausible.SiteAdmin.index/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#list_actions/1","title":"Plausible.SiteAdmin.list_actions/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#ordering/1","title":"Plausible.SiteAdmin.ordering/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#search_fields/1","title":"Plausible.SiteAdmin.search_fields/1","type":"function"},{"doc":"","ref":"Plausible.SiteAdmin.html#update_changeset/2","title":"Plausible.SiteAdmin.update_changeset/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html","title":"Plausible.Sites","type":"module"},{"doc":"","ref":"Plausible.Sites.html#bulk_transfer_ownership/4","title":"Plausible.Sites.bulk_transfer_ownership/4","type":"function"},{"doc":"","ref":"Plausible.Sites.html#create/2","title":"Plausible.Sites.create/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html#create_shared_link/3","title":"Plausible.Sites.create_shared_link/3","type":"function"},{"doc":"","ref":"Plausible.Sites.html#get_by_domain/1","title":"Plausible.Sites.get_by_domain/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#get_by_domain!/1","title":"Plausible.Sites.get_by_domain!/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#get_for_user/3","title":"Plausible.Sites.get_for_user/3","type":"function"},{"doc":"","ref":"Plausible.Sites.html#get_for_user!/3","title":"Plausible.Sites.get_for_user!/3","type":"function"},{"doc":"","ref":"Plausible.Sites.html#has_admin_access?/2","title":"Plausible.Sites.has_admin_access?/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html#has_goals?/1","title":"Plausible.Sites.has_goals?/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#has_stats?/1","title":"Plausible.Sites.has_stats?/1","type":"function"},{"doc":"Invites a new team member to the given site. Returns a\n%Plausible.Auth.Invitation{} struct and sends the invitee an email to accept\nthis invitation.\n\nThe inviter must have enough permissions to invite the new team member,\notherwise this function returns `{:error, :forbidden}`.\n\nIf the new team member role is `:owner`, this function handles the invitation\nas an ownership transfer and requires the inviter to be the owner of the site.","ref":"Plausible.Sites.html#invite/4","title":"Plausible.Sites.invite/4","type":"function"},{"doc":"","ref":"Plausible.Sites.html#is_member?/2","title":"Plausible.Sites.is_member?/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html#locked?/1","title":"Plausible.Sites.locked?/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#owned_site_ids/1","title":"Plausible.Sites.owned_site_ids/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#owned_sites_count/1","title":"Plausible.Sites.owned_sites_count/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#owned_sites_domains/1","title":"Plausible.Sites.owned_sites_domains/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#role/2","title":"Plausible.Sites.role/2","type":"function"},{"doc":"","ref":"Plausible.Sites.html#shared_link_url/2","title":"Plausible.Sites.shared_link_url/2","type":"function"},{"doc":"Returns the date of the first event of the given site, or `nil` if the site\ndoes not have stats yet.\n\nIf this is the first time the function is called for the site, it queries\nClickhouse and saves the date in the sites table.","ref":"Plausible.Sites.html#stats_start_date/1","title":"Plausible.Sites.stats_start_date/1","type":"function"},{"doc":"","ref":"Plausible.Sites.html#t:invite_error/0","title":"Plausible.Sites.invite_error/0","type":"type"},{"doc":"","ref":"Plausible.Stats.html","title":"Plausible.Stats","type":"module"},{"doc":"","ref":"Plausible.Stats.html#aggregate/3","title":"Plausible.Stats.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.Stats.html#breakdown/5","title":"Plausible.Stats.breakdown/5","type":"function"},{"doc":"","ref":"Plausible.Stats.html#current_visitors/1","title":"Plausible.Stats.current_visitors/1","type":"function"},{"doc":"","ref":"Plausible.Stats.html#filter_suggestions/4","title":"Plausible.Stats.filter_suggestions/4","type":"function"},{"doc":"","ref":"Plausible.Stats.html#funnel/3","title":"Plausible.Stats.funnel/3","type":"function"},{"doc":"","ref":"Plausible.Stats.html#timeseries/3","title":"Plausible.Stats.timeseries/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Aggregate.html","title":"Plausible.Stats.Aggregate","type":"module"},{"doc":"","ref":"Plausible.Stats.Aggregate.html#aggregate/3","title":"Plausible.Stats.Aggregate.aggregate/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html","title":"Plausible.Stats.Base","type":"module"},{"doc":"","ref":"Plausible.Stats.Base.html#apply_entry_prop_filter/3","title":"Plausible.Stats.Base.apply_entry_prop_filter/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#base_event_query/2","title":"Plausible.Stats.Base.base_event_query/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#filter_by_entry_props/2","title":"Plausible.Stats.Base.filter_by_entry_props/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#filter_converted_sessions/3","title":"Plausible.Stats.Base.filter_converted_sessions/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#page_regex/1","title":"Plausible.Stats.Base.page_regex/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#query_events/2","title":"Plausible.Stats.Base.query_events/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#query_sessions/2","title":"Plausible.Stats.Base.query_sessions/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#select_event_metrics/2","title":"Plausible.Stats.Base.select_event_metrics/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#select_session_metrics/3","title":"Plausible.Stats.Base.select_session_metrics/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Base.html#utc_boundaries/2","title":"Plausible.Stats.Base.utc_boundaries/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Breakdown.html","title":"Plausible.Stats.Breakdown","type":"module"},{"doc":"","ref":"Plausible.Stats.Breakdown.html#breakdown/5","title":"Plausible.Stats.Breakdown.breakdown/5","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html","title":"Plausible.Stats.Clickhouse","type":"module"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#current_visitors/2","title":"Plausible.Stats.Clickhouse.current_visitors/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#has_pageviews?/1","title":"Plausible.Stats.Clickhouse.has_pageviews?/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#imported_pageview_count/1","title":"Plausible.Stats.Clickhouse.imported_pageview_count/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#last_24h_visitors/1","title":"Plausible.Stats.Clickhouse.last_24h_visitors/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#pageview_start_date_local/1","title":"Plausible.Stats.Clickhouse.pageview_start_date_local/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#top_sources/6","title":"Plausible.Stats.Clickhouse.top_sources/6","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#usage_breakdown/1","title":"Plausible.Stats.Clickhouse.usage_breakdown/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Clickhouse.html#usage_breakdown/2","title":"Plausible.Stats.Clickhouse.usage_breakdown/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Compare.html","title":"Plausible.Stats.Compare","type":"module"},{"doc":"","ref":"Plausible.Stats.Compare.html#calculate_change/3","title":"Plausible.Stats.Compare.calculate_change/3","type":"function"},{"doc":"This module provides functions for comparing query periods.\n\nIt allows you to compare a given period with a previous period or with the\nsame period from the previous year. For example, you can compare this month's\nmain graph with last month or with the same month from last year.","ref":"Plausible.Stats.Comparisons.html","title":"Plausible.Stats.Comparisons","type":"module"},{"doc":"Generates a comparison query based on the source query and comparison mode.\n\nThe mode parameter specifies the type of comparison and can be one of the\nfollowing:\n\n * `\"previous_period\"` - shifts back the query by the same number of days the\n source query has.\n\n * `\"year_over_year\"` - shifts back the query by 1 year.\n\n * `\"custom\"` - compares the query using a custom date range. See options for\n more details.\n\nThe comparison query returned by the function has its end date restricted to\nthe current day. This can be overriden by the `now` option, described below.","ref":"Plausible.Stats.Comparisons.html#compare/4","title":"Plausible.Stats.Comparisons.compare/4","type":"function"},{"doc":"* `:now` - a `NaiveDateTime` struct with the current date and time. This is\n optional and used for testing purposes.\n\n * `:from` - a ISO-8601 date string used when mode is `\"custom\"`.\n\n * `:to` - a ISO-8601 date string used when mode is `\"custom\"`. Must be\n after `from`.\n\n * `:match_day_of_week?` - determines whether the comparison query should be\n adjusted to match the day of the week of the source query. When this option\n is set to true, the comparison query is shifted to start on the same day of\n the week as the source query, rather than on the exact same date. For\n example, if the source query starts on Sunday, January 1st, 2023 and the\n `year_over_year` comparison query is configured to `match_day_of_week?`,\n it will be shifted to start on Sunday, January 2nd, 2022 instead of\n January 1st. Defaults to false.","ref":"Plausible.Stats.Comparisons.html#compare/4-options","title":"Options - Plausible.Stats.Comparisons.compare/4","type":"function"},{"doc":"","ref":"Plausible.Stats.Comparisons.html#t:mode/0","title":"Plausible.Stats.Comparisons.mode/0","type":"type"},{"doc":"","ref":"Plausible.Stats.CurrentVisitors.html","title":"Plausible.Stats.CurrentVisitors","type":"module"},{"doc":"","ref":"Plausible.Stats.CurrentVisitors.html#current_visitors/1","title":"Plausible.Stats.CurrentVisitors.current_visitors/1","type":"function"},{"doc":"Module for querying user defined 'custom properties'.","ref":"Plausible.Stats.CustomProps.html","title":"Plausible.Stats.CustomProps","type":"module"},{"doc":"","ref":"Plausible.Stats.CustomProps.html#fetch_prop_names/2","title":"Plausible.Stats.CustomProps.fetch_prop_names/2","type":"function"},{"doc":"","ref":"Plausible.Stats.CustomProps.html#maybe_allowed_props_only/2","title":"Plausible.Stats.CustomProps.maybe_allowed_props_only/2","type":"function"},{"doc":"Returns a breakdown of event names with all existing custom\nproperties for each event name.","ref":"Plausible.Stats.CustomProps.html#props_for_all_event_names/2","title":"Plausible.Stats.CustomProps.props_for_all_event_names/2","type":"function"},{"doc":"A module for parsing filters used in stat queries.","ref":"Plausible.Stats.FilterParser.html","title":"Plausible.Stats.FilterParser","type":"module"},{"doc":"Parses different filter formats.\n\nDepending on the format and type of the `filters` argument, returns:\n\n * a decoded map, when `filters` is encoded JSON\n * a parsed filter map, when `filters` is a filter expression string\n * the same map, when `filters` is a map\n\nReturns an empty map when argument type is unexpected (e.g. `nil`).\n\n#","ref":"Plausible.Stats.FilterParser.html#parse_filters/1","title":"Plausible.Stats.FilterParser.parse_filters/1","type":"function"},{"doc":"iex> FilterParser.parse_filters(\"{\\\"page\\\":\\\"/blog/**\\\"}\")\n %{\"page\" => \"/blog/**\"}\n\n iex> FilterParser.parse_filters(\"visit:browser!=Chrome\")\n %{\"visit:browser\" => {:is_not, \"Chrome\"}}\n\n iex> FilterParser.parse_filters(nil)\n %{}","ref":"Plausible.Stats.FilterParser.html#parse_filters/1-examples","title":"Examples: - Plausible.Stats.FilterParser.parse_filters/1","type":"function"},{"doc":"","ref":"Plausible.Stats.FilterSuggestions.html","title":"Plausible.Stats.FilterSuggestions","type":"module"},{"doc":"","ref":"Plausible.Stats.FilterSuggestions.html#filter_suggestions/4","title":"Plausible.Stats.FilterSuggestions.filter_suggestions/4","type":"function"},{"doc":"","ref":"Plausible.Stats.Filters.html","title":"Plausible.Stats.Filters","type":"module"},{"doc":"","ref":"Plausible.Stats.Filters.html#add_prefix/1","title":"Plausible.Stats.Filters.add_prefix/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Filters.html#visit_props/0","title":"Plausible.Stats.Filters.visit_props/0","type":"function"},{"doc":"","ref":"Plausible.Stats.Fragments.html","title":"Plausible.Stats.Fragments","type":"module"},{"doc":"","ref":"Plausible.Stats.Fragments.html#bounce_rate/0","title":"Plausible.Stats.Fragments.bounce_rate/0","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#coalesce_string/2","title":"Plausible.Stats.Fragments.coalesce_string/2","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#sample_percent/0","title":"Plausible.Stats.Fragments.sample_percent/0","type":"macro"},{"doc":"Converts time or date and time to the specified timezone.\n\nReference: https://clickhouse.com/docs/en/sql-reference/functions/date-time-functions/#totimezone","ref":"Plausible.Stats.Fragments.html#to_timezone/2","title":"Plausible.Stats.Fragments.to_timezone/2","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#total/0","title":"Plausible.Stats.Fragments.total/0","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#uniq/1","title":"Plausible.Stats.Fragments.uniq/1","type":"macro"},{"doc":"","ref":"Plausible.Stats.Fragments.html#visit_duration/0","title":"Plausible.Stats.Fragments.visit_duration/0","type":"macro"},{"doc":"Returns the weekstart for `date`. If the weekstart is before the `not_before`\nboundary, `not_before` is returned.","ref":"Plausible.Stats.Fragments.html#weekstart_not_before/2","title":"Plausible.Stats.Fragments.weekstart_not_before/2","type":"macro"},{"doc":"In this pseudo-code example, the fragment returns the weekstart. The\n`not_before` boundary is set to the past Saturday, which is before the\nweekstart, therefore the cap does not apply.\n\n iex> this_wednesday = ~D[2022-11-09]\n ...> past_saturday = ~D[2022-11-05]\n ...> weekstart_not_before(this_wednesday, past_saturday)\n ~D[2022-11-07]\n\n\nIn this other example, the fragment returns Tuesday and not the weekstart.\nThe `not_before` boundary is set to Tuesday, which is past the weekstart,\ntherefore the cap applies.\n\n iex> this_wednesday = ~D[2022-11-09]\n ...> this_tuesday = ~D[2022-11-08]\n ...> weekstart_not_before(this_wednesday, this_tuesday)\n ~D[2022-11-08]","ref":"Plausible.Stats.Fragments.html#weekstart_not_before/2-examples","title":"Examples - Plausible.Stats.Fragments.weekstart_not_before/2","type":"macro"},{"doc":"Same as Plausible.Stats.Fragments.weekstart_not_before/2 but converts dates to\nthe specified timezone.","ref":"Plausible.Stats.Fragments.html#weekstart_not_before/3","title":"Plausible.Stats.Fragments.weekstart_not_before/3","type":"macro"},{"doc":"Module responsible for funnel evaluation, i.e. building and executing\nClickHouse funnel query based on `Plausible.Funnel` definition.","ref":"Plausible.Stats.Funnel.html","title":"Plausible.Stats.Funnel","type":"module"},{"doc":"","ref":"Plausible.Stats.Funnel.html#funnel/3","title":"Plausible.Stats.Funnel.funnel/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Imported.html","title":"Plausible.Stats.Imported","type":"module"},{"doc":"","ref":"Plausible.Stats.Imported.html#merge_imported/5","title":"Plausible.Stats.Imported.merge_imported/5","type":"function"},{"doc":"","ref":"Plausible.Stats.Imported.html#merge_imported_timeseries/4","title":"Plausible.Stats.Imported.merge_imported_timeseries/4","type":"function"},{"doc":"Collection of functions to work with intervals.\n\nThe interval of a query defines the granularity of the data. You can think of\nit as a `GROUP BY` clause. Possible values are `minute`, `hour`, `date`,\n`week`, and `month`.","ref":"Plausible.Stats.Interval.html","title":"Plausible.Stats.Interval","type":"module"},{"doc":"Returns the suggested interval for the given `Date.Range` struct.","ref":"Plausible.Stats.Interval.html#default_for_date_range/1","title":"Plausible.Stats.Interval.default_for_date_range/1","type":"function"},{"doc":"Returns the suggested interval for the given time period.","ref":"Plausible.Stats.Interval.html#default_for_period/1","title":"Plausible.Stats.Interval.default_for_period/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Interval.html#list/0","title":"Plausible.Stats.Interval.list/0","type":"function"},{"doc":"","ref":"Plausible.Stats.Interval.html#valid?/1","title":"Plausible.Stats.Interval.valid?/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Interval.html#valid_by_period/1","title":"Plausible.Stats.Interval.valid_by_period/1","type":"function"},{"doc":"Returns whether the given interval is valid for a time period.\n\nIntervals longer than periods are not supported, e.g. current month stats with\na month interval, or today stats with a week interval.\n\nThere are two dynamic states:\n* `custom` period is only applicable with `month` or `week` intervals,\n if the `opts[:from]` and `opts[:to]` range difference exceeds 12 months\n* `all` period's interval options depend on particular site's `stats_start_date`\n - daily interval is excluded if the all-time range exceeds 12 months","ref":"Plausible.Stats.Interval.html#valid_for_period?/3","title":"Plausible.Stats.Interval.valid_for_period?/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Interval.html#t:opt/0","title":"Plausible.Stats.Interval.opt/0","type":"type"},{"doc":"","ref":"Plausible.Stats.Interval.html#t:opts/0","title":"Plausible.Stats.Interval.opts/0","type":"type"},{"doc":"","ref":"Plausible.Stats.Interval.html#t:t/0","title":"Plausible.Stats.Interval.t/0","type":"type"},{"doc":"","ref":"Plausible.Stats.Props.html","title":"Plausible.Stats.Props","type":"module"},{"doc":"","ref":"Plausible.Stats.Props.html#event_props/0","title":"Plausible.Stats.Props.event_props/0","type":"function"},{"doc":"","ref":"Plausible.Stats.Props.html#valid_prop?/1","title":"Plausible.Stats.Props.valid_prop?/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html","title":"Plausible.Stats.Query","type":"module"},{"doc":"","ref":"Plausible.Stats.Query.html#from/2","title":"Plausible.Stats.Query.from/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#get_filter_by_prefix/2","title":"Plausible.Stats.Query.get_filter_by_prefix/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#has_event_filters?/1","title":"Plausible.Stats.Query.has_event_filters?/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#include_imported?/3","title":"Plausible.Stats.Query.include_imported?/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#put_filter/3","title":"Plausible.Stats.Query.put_filter/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#remove_event_filters/2","title":"Plausible.Stats.Query.remove_event_filters/2","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#trace/1","title":"Plausible.Stats.Query.trace/1","type":"function"},{"doc":"","ref":"Plausible.Stats.Query.html#t:t/0","title":"Plausible.Stats.Query.t/0","type":"type"},{"doc":"","ref":"Plausible.Stats.Timeseries.html","title":"Plausible.Stats.Timeseries","type":"module"},{"doc":"","ref":"Plausible.Stats.Timeseries.html#timeseries/3","title":"Plausible.Stats.Timeseries.timeseries/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Timeseries.html#t:results/0","title":"Plausible.Stats.Timeseries.results/0","type":"type"},{"doc":"Utilities for modifying stat results","ref":"Plausible.Stats.Util.html","title":"Plausible.Stats.Util","type":"module"},{"doc":"","ref":"Plausible.Stats.Util.html#cast_revenue_metrics_to_money/2","title":"Plausible.Stats.Util.cast_revenue_metrics_to_money/2","type":"function"},{"doc":"Returns the common currency for the goal filters in a query. If there are no\ngoal filters, or multiple currencies, `nil` is returned and revenue metrics\nare dropped.\n\nAggregating revenue data works only for same currency goals. If the query is\nfiltered by goals with different currencies, for example, one USD and other\nEUR, revenue metrics are dropped.","ref":"Plausible.Stats.Util.html#get_revenue_tracking_currency/3","title":"Plausible.Stats.Util.get_revenue_tracking_currency/3","type":"function"},{"doc":"","ref":"Plausible.Stats.Util.html#remove_internal_visits_metric/1","title":"Plausible.Stats.Util.remove_internal_visits_metric/1","type":"function"},{"doc":"`__internal_visits` is fetched when querying bounce rate and visit duration, as it\nis needed to calculate these from imported data. This function removes that metric\nfrom all entries in the results list.","ref":"Plausible.Stats.Util.html#remove_internal_visits_metric/2","title":"Plausible.Stats.Util.remove_internal_visits_metric/2","type":"function"},{"doc":"Floki wrappers to help make assertions about HTML/DOM structures","ref":"Plausible.Test.Support.HTML.html","title":"Plausible.Test.Support.HTML","type":"module"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#class_of_element/2","title":"Plausible.Test.Support.HTML.class_of_element/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#element_exists?/2","title":"Plausible.Test.Support.HTML.element_exists?/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#find/2","title":"Plausible.Test.Support.HTML.find/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#form_exists?/2","title":"Plausible.Test.Support.HTML.form_exists?/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#name_of/1","title":"Plausible.Test.Support.HTML.name_of/1","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#submit_button/2","title":"Plausible.Test.Support.HTML.submit_button/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#text/1","title":"Plausible.Test.Support.HTML.text/1","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#text_of_attr/2","title":"Plausible.Test.Support.HTML.text_of_attr/2","type":"function"},{"doc":"","ref":"Plausible.Test.Support.HTML.html#text_of_element/2","title":"Plausible.Test.Support.HTML.text_of_element/2","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html","title":"Plausible.TestUtils","type":"module"},{"doc":"","ref":"Plausible.TestUtils.html#add_imported_data/1","title":"Plausible.TestUtils.add_imported_data/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#await_clickhouse_count/2","title":"Plausible.TestUtils.await_clickhouse_count/2","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_api_key/1","title":"Plausible.TestUtils.create_api_key/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_events/1","title":"Plausible.TestUtils.create_events/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_new_site/1","title":"Plausible.TestUtils.create_new_site/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_pageviews/1","title":"Plausible.TestUtils.create_pageviews/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_sessions/1","title":"Plausible.TestUtils.create_sessions/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_site/1","title":"Plausible.TestUtils.create_site/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#create_user/1","title":"Plausible.TestUtils.create_user/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#eventually/3","title":"Plausible.TestUtils.eventually/3","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#init_session/1","title":"Plausible.TestUtils.init_session/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#log_in/1","title":"Plausible.TestUtils.log_in/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#patch_env/2","title":"Plausible.TestUtils.patch_env/2","type":"macro"},{"doc":"","ref":"Plausible.TestUtils.html#populate_stats/1","title":"Plausible.TestUtils.populate_stats/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#populate_stats/2","title":"Plausible.TestUtils.populate_stats/2","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#random_ip/0","title":"Plausible.TestUtils.random_ip/0","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#relative_time/1","title":"Plausible.TestUtils.relative_time/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#setup_patch_env/2","title":"Plausible.TestUtils.setup_patch_env/2","type":"macro"},{"doc":"","ref":"Plausible.TestUtils.html#to_naive_truncate/1","title":"Plausible.TestUtils.to_naive_truncate/1","type":"function"},{"doc":"","ref":"Plausible.TestUtils.html#use_api_key/1","title":"Plausible.TestUtils.use_api_key/1","type":"function"},{"doc":"","ref":"Plausible.Themes.html","title":"Plausible.Themes","type":"module"},{"doc":"","ref":"Plausible.Themes.html#options/0","title":"Plausible.Themes.options/0","type":"function"},{"doc":"","ref":"Plausible.Timezones.html","title":"Plausible.Timezones","type":"module"},{"doc":"","ref":"Plausible.Timezones.html#options/1","title":"Plausible.Timezones.options/1","type":"function"},{"doc":"User context","ref":"Plausible.Users.html","title":"Plausible.Users","type":"module"},{"doc":"","ref":"Plausible.Users.html#has_email_code?/1","title":"Plausible.Users.has_email_code?/1","type":"function"},{"doc":"","ref":"Plausible.Users.html#with_subscription/1","title":"Plausible.Users.with_subscription/1","type":"function"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html","title":"Plausible.Workers.CheckUsage","type":"module"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#check_enterprise_subscriber/2","title":"Plausible.Workers.CheckUsage.check_enterprise_subscriber/2","type":"function"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#day_of_month/1","title":"Plausible.Workers.CheckUsage.day_of_month/1","type":"macro"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#last_day_of_month/1","title":"Plausible.Workers.CheckUsage.last_day_of_month/1","type":"macro"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#least/2","title":"Plausible.Workers.CheckUsage.least/2","type":"macro"},{"doc":"","ref":"Plausible.Workers.CheckUsage.html#yesterday/0","title":"Plausible.Workers.CheckUsage.yesterday/0","type":"macro"},{"doc":"","ref":"Plausible.Workers.CleanEmailVerificationCodes.html","title":"Plausible.Workers.CleanEmailVerificationCodes","type":"module"},{"doc":"","ref":"Plausible.Workers.CleanInvitations.html","title":"Plausible.Workers.CleanInvitations","type":"module"},{"doc":"Periodic worker that expires domain change transition period.\nOld domains are frozen for a given time, so users can still access them\nbefore redeploying their scripts and integrations.","ref":"Plausible.Workers.ExpireDomainChangeTransitions.html","title":"Plausible.Workers.ExpireDomainChangeTransitions","type":"module"},{"doc":"","ref":"Plausible.Workers.ImportGoogleAnalytics.html","title":"Plausible.Workers.ImportGoogleAnalytics","type":"module"},{"doc":"","ref":"Plausible.Workers.ImportGoogleAnalytics.html#import_failed/1","title":"Plausible.Workers.ImportGoogleAnalytics.import_failed/1","type":"function"},{"doc":"","ref":"Plausible.Workers.LockSites.html","title":"Plausible.Workers.LockSites","type":"module"},{"doc":"","ref":"Plausible.Workers.NotifyAnnualRenewal.html","title":"Plausible.Workers.NotifyAnnualRenewal","type":"module"},{"doc":"Sends a notification at most 7 days and at least 1 day before the renewal of an annual subscription","ref":"Plausible.Workers.NotifyAnnualRenewal.html#perform/1","title":"Plausible.Workers.NotifyAnnualRenewal.perform/1","type":"function"},{"doc":"","ref":"Plausible.Workers.RotateSalts.html","title":"Plausible.Workers.RotateSalts","type":"module"},{"doc":"","ref":"Plausible.Workers.ScheduleEmailReports.html","title":"Plausible.Workers.ScheduleEmailReports","type":"module"},{"doc":"","ref":"Plausible.Workers.ScheduleEmailReports.html#first_of_month_9am/1","title":"Plausible.Workers.ScheduleEmailReports.first_of_month_9am/1","type":"function"},{"doc":"","ref":"Plausible.Workers.ScheduleEmailReports.html#monday_9am/1","title":"Plausible.Workers.ScheduleEmailReports.monday_9am/1","type":"function"},{"doc":"Email reports should be sent on Monday at 9am according to the timezone\nof a site. This job runs every day at midnight to ensure that all sites\nhave a scheduled job for email reports.","ref":"Plausible.Workers.ScheduleEmailReports.html#perform/1","title":"Plausible.Workers.ScheduleEmailReports.perform/1","type":"function"},{"doc":"","ref":"Plausible.Workers.SendCheckStatsEmails.html","title":"Plausible.Workers.SendCheckStatsEmails","type":"module"},{"doc":"","ref":"Plausible.Workers.SendEmailReport.html","title":"Plausible.Workers.SendEmailReport","type":"module"},{"doc":"","ref":"Plausible.Workers.SendSiteSetupEmails.html","title":"Plausible.Workers.SendSiteSetupEmails","type":"module"},{"doc":"","ref":"Plausible.Workers.SendTrialNotifications.html","title":"Plausible.Workers.SendTrialNotifications","type":"module"},{"doc":"","ref":"Plausible.Workers.SpikeNotifier.html","title":"Plausible.Workers.SpikeNotifier","type":"module"},{"doc":"","ref":"PlausibleWeb.html","title":"PlausibleWeb","type":"module"},{"doc":"When used, dispatch to the appropriate controller/view/etc.","ref":"PlausibleWeb.html#__using__/1","title":"PlausibleWeb.__using__/1","type":"macro"},{"doc":"","ref":"PlausibleWeb.html#channel/0","title":"PlausibleWeb.channel/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#controller/0","title":"PlausibleWeb.controller/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#open_api_schema/0","title":"PlausibleWeb.open_api_schema/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#plugins_api_controller/0","title":"PlausibleWeb.plugins_api_controller/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#plugins_api_view/0","title":"PlausibleWeb.plugins_api_view/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#router/0","title":"PlausibleWeb.router/0","type":"function"},{"doc":"","ref":"PlausibleWeb.html#view/0","title":"PlausibleWeb.view/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html","title":"PlausibleWeb.Api.ExternalController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html#error/2","title":"PlausibleWeb.Api.ExternalController.error/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html#event/2","title":"PlausibleWeb.Api.ExternalController.event/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html#health/2","title":"PlausibleWeb.Api.ExternalController.health/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalController.html#info/2","title":"PlausibleWeb.Api.ExternalController.info/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html","title":"PlausibleWeb.Api.ExternalSitesController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#create_site/2","title":"PlausibleWeb.Api.ExternalSitesController.create_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#delete_goal/2","title":"PlausibleWeb.Api.ExternalSitesController.delete_goal/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#delete_site/2","title":"PlausibleWeb.Api.ExternalSitesController.delete_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#find_or_create_goal/2","title":"PlausibleWeb.Api.ExternalSitesController.find_or_create_goal/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#find_or_create_shared_link/2","title":"PlausibleWeb.Api.ExternalSitesController.find_or_create_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#get_site/2","title":"PlausibleWeb.Api.ExternalSitesController.get_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalSitesController.html#update_site/2","title":"PlausibleWeb.Api.ExternalSitesController.update_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html","title":"PlausibleWeb.Api.ExternalStatsController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html#aggregate/2","title":"PlausibleWeb.Api.ExternalStatsController.aggregate/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html#breakdown/2","title":"PlausibleWeb.Api.ExternalStatsController.breakdown/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html#realtime_visitors/2","title":"PlausibleWeb.Api.ExternalStatsController.realtime_visitors/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.ExternalStatsController.html#timeseries/2","title":"PlausibleWeb.Api.ExternalStatsController.timeseries/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html","title":"PlausibleWeb.Api.Helpers","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#bad_request/2","title":"PlausibleWeb.Api.Helpers.bad_request/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#not_found/2","title":"PlausibleWeb.Api.Helpers.not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#payment_required/2","title":"PlausibleWeb.Api.Helpers.payment_required/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#too_many_requests/2","title":"PlausibleWeb.Api.Helpers.too_many_requests/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.Helpers.html#unauthorized/2","title":"PlausibleWeb.Api.Helpers.unauthorized/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.InternalController.html","title":"PlausibleWeb.Api.InternalController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.InternalController.html#disable_feature/2","title":"PlausibleWeb.Api.InternalController.disable_feature/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.InternalController.html#domain_status/2","title":"PlausibleWeb.Api.InternalController.domain_status/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.InternalController.html#sites/2","title":"PlausibleWeb.Api.InternalController.sites/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.PaddleController.html","title":"PlausibleWeb.Api.PaddleController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.PaddleController.html#verified_signature?/1","title":"PlausibleWeb.Api.PaddleController.verified_signature?/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.PaddleController.html#verify_signature/2","title":"PlausibleWeb.Api.PaddleController.verify_signature/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.PaddleController.html#webhook/2","title":"PlausibleWeb.Api.PaddleController.webhook/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html","title":"PlausibleWeb.Api.StatsController","type":"module"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#all_custom_prop_values/2","title":"PlausibleWeb.Api.StatsController.all_custom_prop_values/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#browser_versions/2","title":"PlausibleWeb.Api.StatsController.browser_versions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#browsers/2","title":"PlausibleWeb.Api.StatsController.browsers/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#cities/2","title":"PlausibleWeb.Api.StatsController.cities/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#conversions/2","title":"PlausibleWeb.Api.StatsController.conversions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#countries/2","title":"PlausibleWeb.Api.StatsController.countries/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#current_visitors/2","title":"PlausibleWeb.Api.StatsController.current_visitors/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#custom_prop_values/2","title":"PlausibleWeb.Api.StatsController.custom_prop_values/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#entry_pages/2","title":"PlausibleWeb.Api.StatsController.entry_pages/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#exit_pages/2","title":"PlausibleWeb.Api.StatsController.exit_pages/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#filter_suggestions/2","title":"PlausibleWeb.Api.StatsController.filter_suggestions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#funnel/2","title":"PlausibleWeb.Api.StatsController.funnel/2","type":"function"},{"doc":"Returns a time-series based on given parameters.","ref":"PlausibleWeb.Api.StatsController.html#main_graph/2","title":"PlausibleWeb.Api.StatsController.main_graph/2","type":"function"},{"doc":"This API accepts the following parameters:\n\n * `period` - x-axis of the graph, e.g. `12mo`, `day`, `custom`.\n\n * `metric` - y-axis of the graph, e.g. `visits`, `visitors`, `pageviews`.\n See the Stats API [\"Metrics\"](https://plausible.io/docs/stats-api#metrics)\n section for more details. Defaults to `visitors`.\n\n * `interval` - granularity of the time-series data. You can think of it as\n a `GROUP BY` clause. Possible values are `minute`, `hour`, `date`, `week`,\n and `month`. The default depends on the `period` parameter. Check\n `Plausible.Query.from/2` for each default.\n\n * `filters` - optional filters to drill down data. See the Stats API\n [\"Filtering\"](https://plausible.io/docs/stats-api#filtering) section for\n more details.\n\n * `with_imported` - boolean indicating whether to include Google Analytics\n imported data or not. Defaults to `false`.\n\nFull example:\n```elixir\n%{\n \"from\" => \"2021-09-06\",\n \"interval\" => \"month\",\n \"metric\" => \"visitors\",\n \"period\" => \"custom\",\n \"to\" => \"2021-12-13\"\n}\n```","ref":"PlausibleWeb.Api.StatsController.html#main_graph/2-parameters","title":"Parameters - PlausibleWeb.Api.StatsController.main_graph/2","type":"function"},{"doc":"Returns a map with the following keys:\n\n * `plot` - list of values for the requested metric representing the y-axis\n of the graph.\n\n * `labels` - list of date times representing the x-axis of the graph.\n\n * `present_index` - index of the element representing the current date in\n `labels` and `plot` lists.\n\n * `interval` - the interval used for querying.\n\n * `with_imported` - boolean indicating whether the Google Analytics data\n was queried or not.\n\n * `imported_source` - the source of the imported data, when applicable.\n Currently only Google Analytics is supported.\n\n * `full_intervals` - map of dates indicating whether the interval has been\n cut off by the requested date range or not. For example, if looking at a\n month week-by-week, some weeks may be cut off by the month boundaries.\n It's useful to adjust the graph display slightly in case the interval is\n not 'full' so that the user understands why the numbers might be lower for\n those partial periods.\n\nFull example:\n```elixir\n%{\n \"full_intervals\" => %{\n \"2021-09-01\" => false,\n \"2021-10-01\" => true,\n \"2021-11-01\" => true,\n \"2021-12-01\" => false\n },\n \"imported_source\" => nil,\n \"interval\" => \"month\",\n \"labels\" => [\"2021-09-01\", \"2021-10-01\", \"2021-11-01\", \"2021-12-01\"],\n \"plot\" => [0, 0, 0, 0],\n \"present_index\" => nil,\n \"with_imported\" => false\n}\n```","ref":"PlausibleWeb.Api.StatsController.html#main_graph/2-response","title":"Response - PlausibleWeb.Api.StatsController.main_graph/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#operating_system_versions/2","title":"PlausibleWeb.Api.StatsController.operating_system_versions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#operating_systems/2","title":"PlausibleWeb.Api.StatsController.operating_systems/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#pages/2","title":"PlausibleWeb.Api.StatsController.pages/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#referrer_drilldown/2","title":"PlausibleWeb.Api.StatsController.referrer_drilldown/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#referrers/2","title":"PlausibleWeb.Api.StatsController.referrers/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#regions/2","title":"PlausibleWeb.Api.StatsController.regions/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#screen_sizes/2","title":"PlausibleWeb.Api.StatsController.screen_sizes/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#sources/2","title":"PlausibleWeb.Api.StatsController.sources/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#top_stats/2","title":"PlausibleWeb.Api.StatsController.top_stats/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_campaigns/2","title":"PlausibleWeb.Api.StatsController.utm_campaigns/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_contents/2","title":"PlausibleWeb.Api.StatsController.utm_contents/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_mediums/2","title":"PlausibleWeb.Api.StatsController.utm_mediums/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_sources/2","title":"PlausibleWeb.Api.StatsController.utm_sources/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Api.StatsController.html#utm_terms/2","title":"PlausibleWeb.Api.StatsController.utm_terms/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html","title":"PlausibleWeb.AuthController","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthController.html#activate/2","title":"PlausibleWeb.AuthController.activate/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#activate_form/2","title":"PlausibleWeb.AuthController.activate_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#cancel_update_email/2","title":"PlausibleWeb.AuthController.cancel_update_email/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#create_api_key/2","title":"PlausibleWeb.AuthController.create_api_key/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#delete_api_key/2","title":"PlausibleWeb.AuthController.delete_api_key/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#delete_me/2","title":"PlausibleWeb.AuthController.delete_me/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#google_auth_callback/2","title":"PlausibleWeb.AuthController.google_auth_callback/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#login/2","title":"PlausibleWeb.AuthController.login/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#login_form/2","title":"PlausibleWeb.AuthController.login_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#logout/2","title":"PlausibleWeb.AuthController.logout/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#new_api_key/2","title":"PlausibleWeb.AuthController.new_api_key/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#password_reset/2","title":"PlausibleWeb.AuthController.password_reset/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#password_reset_form/2","title":"PlausibleWeb.AuthController.password_reset_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#password_reset_request/2","title":"PlausibleWeb.AuthController.password_reset_request/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#password_reset_request_form/2","title":"PlausibleWeb.AuthController.password_reset_request_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#register/2","title":"PlausibleWeb.AuthController.register/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#register_from_invitation/2","title":"PlausibleWeb.AuthController.register_from_invitation/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#request_activation_code/2","title":"PlausibleWeb.AuthController.request_activation_code/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#save_settings/2","title":"PlausibleWeb.AuthController.save_settings/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#update_email/2","title":"PlausibleWeb.AuthController.update_email/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthController.html#user_settings/2","title":"PlausibleWeb.AuthController.user_settings/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthPlug.html","title":"PlausibleWeb.AuthPlug","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthPlug.html#call/2","title":"PlausibleWeb.AuthPlug.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthPlug.html#init/1","title":"PlausibleWeb.AuthPlug.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html","title":"PlausibleWeb.AuthView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.AuthView.html#__resource__/0","title":"PlausibleWeb.AuthView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#activate.html/1","title":"PlausibleWeb.AuthView.activate.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#base_domain/0","title":"PlausibleWeb.AuthView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#delimit_integer/1","title":"PlausibleWeb.AuthView.delimit_integer/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#format_invoices/1","title":"PlausibleWeb.AuthView.format_invoices/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#login_form.html/1","title":"PlausibleWeb.AuthView.login_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#new_api_key.html/1","title":"PlausibleWeb.AuthView.new_api_key.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#password_reset_form.html/1","title":"PlausibleWeb.AuthView.password_reset_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#password_reset_request_form.html/1","title":"PlausibleWeb.AuthView.password_reset_request_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#password_reset_request_success.html/1","title":"PlausibleWeb.AuthView.password_reset_request_success.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#plausible_url/0","title":"PlausibleWeb.AuthView.plausible_url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#present_subscription_status/1","title":"PlausibleWeb.AuthView.present_subscription_status/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#register_success.html/1","title":"PlausibleWeb.AuthView.register_success.html/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.AuthView.html#render/2","title":"PlausibleWeb.AuthView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#subscription_colors/1","title":"PlausibleWeb.AuthView.subscription_colors/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#subscription_interval/1","title":"PlausibleWeb.AuthView.subscription_interval/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#subscription_quota/2","title":"PlausibleWeb.AuthView.subscription_quota/2","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.AuthView.html#template_not_found/2","title":"PlausibleWeb.AuthView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#user_settings.html/1","title":"PlausibleWeb.AuthView.user_settings.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeSiteAccess.html","title":"PlausibleWeb.AuthorizeSiteAccess","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthorizeSiteAccess.html#call/2","title":"PlausibleWeb.AuthorizeSiteAccess.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeSiteAccess.html#init/1","title":"PlausibleWeb.AuthorizeSiteAccess.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeSitesApiPlug.html","title":"PlausibleWeb.AuthorizeSitesApiPlug","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthorizeSitesApiPlug.html#call/2","title":"PlausibleWeb.AuthorizeSitesApiPlug.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeSitesApiPlug.html#init/1","title":"PlausibleWeb.AuthorizeSitesApiPlug.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeStatsApiPlug.html","title":"PlausibleWeb.AuthorizeStatsApiPlug","type":"module"},{"doc":"","ref":"PlausibleWeb.AuthorizeStatsApiPlug.html#call/2","title":"PlausibleWeb.AuthorizeStatsApiPlug.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthorizeStatsApiPlug.html#init/1","title":"PlausibleWeb.AuthorizeStatsApiPlug.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html","title":"PlausibleWeb.BillingController","type":"module"},{"doc":"","ref":"PlausibleWeb.BillingController.html#change_enterprise_plan/2","title":"PlausibleWeb.BillingController.change_enterprise_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#change_plan/2","title":"PlausibleWeb.BillingController.change_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#change_plan_form/2","title":"PlausibleWeb.BillingController.change_plan_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#change_plan_preview/2","title":"PlausibleWeb.BillingController.change_plan_preview/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#choose_plan/2","title":"PlausibleWeb.BillingController.choose_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#ping_subscription/2","title":"PlausibleWeb.BillingController.ping_subscription/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#preview_susbcription/2","title":"PlausibleWeb.BillingController.preview_susbcription/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#upgrade/2","title":"PlausibleWeb.BillingController.upgrade/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#upgrade_enterprise_plan/2","title":"PlausibleWeb.BillingController.upgrade_enterprise_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#upgrade_success/2","title":"PlausibleWeb.BillingController.upgrade_success/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingController.html#upgrade_to_enterprise_plan/2","title":"PlausibleWeb.BillingController.upgrade_to_enterprise_plan/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html","title":"PlausibleWeb.BillingView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.BillingView.html#__resource__/0","title":"PlausibleWeb.BillingView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#base_domain/0","title":"PlausibleWeb.BillingView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#change_enterprise_plan_contact_us.html/1","title":"PlausibleWeb.BillingView.change_enterprise_plan_contact_us.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#change_plan.html/1","title":"PlausibleWeb.BillingView.change_plan.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#change_plan_preview.html/1","title":"PlausibleWeb.BillingView.change_plan_preview.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#choose_plan.html/1","title":"PlausibleWeb.BillingView.choose_plan.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#plausible_url/0","title":"PlausibleWeb.BillingView.plausible_url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#present_currency/1","title":"PlausibleWeb.BillingView.present_currency/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#present_date/1","title":"PlausibleWeb.BillingView.present_date/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#reccommended_plan/1","title":"PlausibleWeb.BillingView.reccommended_plan/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.BillingView.html#render/2","title":"PlausibleWeb.BillingView.render/2","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.BillingView.html#template_not_found/2","title":"PlausibleWeb.BillingView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#upgrade.html/1","title":"PlausibleWeb.BillingView.upgrade.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#upgrade_success.html/1","title":"PlausibleWeb.BillingView.upgrade_success.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.BillingView.html#upgrade_to_enterprise_plan.html/1","title":"PlausibleWeb.BillingView.upgrade_to_enterprise_plan.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.CRMAuthPlug.html","title":"PlausibleWeb.CRMAuthPlug","type":"module"},{"doc":"","ref":"PlausibleWeb.CRMAuthPlug.html#call/2","title":"PlausibleWeb.CRMAuthPlug.call/2","type":"function"},{"doc":"","ref":"PlausibleWeb.CRMAuthPlug.html#init/1","title":"PlausibleWeb.CRMAuthPlug.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Captcha.html","title":"PlausibleWeb.Captcha","type":"module"},{"doc":"","ref":"PlausibleWeb.Captcha.html#enabled?/0","title":"PlausibleWeb.Captcha.enabled?/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Captcha.html#sitekey/0","title":"PlausibleWeb.Captcha.sitekey/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Captcha.html#verify/1","title":"PlausibleWeb.Captcha.verify/1","type":"function"},{"doc":"Generic reusable components","ref":"PlausibleWeb.Components.Generic.html","title":"PlausibleWeb.Components.Generic","type":"module"},{"doc":"","ref":"PlausibleWeb.Components.Generic.html#notice/1","title":"PlausibleWeb.Components.Generic.notice/1","type":"function"},{"doc":"* `title` (`:string`) - Defaults to `\"Notice\"`.\n* `size` (`:atom`) - Defaults to `:sm`.\n* Global attributes are accepted.","ref":"PlausibleWeb.Components.Generic.html#notice/1-attributes","title":"Attributes - PlausibleWeb.Components.Generic.notice/1","type":"function"},{"doc":"* `inner_block`","ref":"PlausibleWeb.Components.Generic.html#notice/1-slots","title":"Slots - PlausibleWeb.Components.Generic.notice/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Components.Generic.html#styled_link/1","title":"PlausibleWeb.Components.Generic.styled_link/1","type":"function"},{"doc":"* `id` (`:any`) - Defaults to `nil`.\n* `href` (`:string`) (required)\n* `new_tab` (`:boolean`)\n* `class` (`:string`) - Defaults to `\"\"`.","ref":"PlausibleWeb.Components.Generic.html#styled_link/1-attributes","title":"Attributes - PlausibleWeb.Components.Generic.styled_link/1","type":"function"},{"doc":"* `inner_block`","ref":"PlausibleWeb.Components.Generic.html#styled_link/1-slots","title":"Slots - PlausibleWeb.Components.Generic.styled_link/1","type":"function"},{"doc":"Phoenix Component for rendering a user-facing feature toggle\ncapable of flipping booleans in `Plausible.Site` via the `toggle_feature` controller action.","ref":"PlausibleWeb.Components.Site.Feature.html","title":"PlausibleWeb.Components.Site.Feature","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.Components.Site.Feature.html#__resource__/0","title":"PlausibleWeb.Components.Site.Feature.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.Components.Site.Feature.html#render/2","title":"PlausibleWeb.Components.Site.Feature.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Components.Site.Feature.html#target/4","title":"PlausibleWeb.Components.Site.Feature.target/4","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.Components.Site.Feature.html#template_not_found/2","title":"PlausibleWeb.Components.Site.Feature.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Components.Site.Feature.html#toggle/1","title":"PlausibleWeb.Components.Site.Feature.toggle/1","type":"function"},{"doc":"* `site` (`Plausible.Site`) (required)\n* `feature_mod` (`:atom`) (required) - Must be one of `Plausible.Billing.Feature.Funnels`, `Plausible.Billing.Feature.Goals`, `Plausible.Billing.Feature.Props`, or `Plausible.Billing.Feature.RevenueGoals`.\n* `conn` (`Plug.Conn`) (required)","ref":"PlausibleWeb.Components.Site.Feature.html#toggle/1-attributes","title":"Attributes - PlausibleWeb.Components.Site.Feature.toggle/1","type":"function"},{"doc":"* `inner_block`","ref":"PlausibleWeb.Components.Site.Feature.html#toggle/1-slots","title":"Slots - PlausibleWeb.Components.Site.Feature.toggle/1","type":"function"},{"doc":"This module defines the test case to be used by\ntests that require setting up a connection.\n\nSuch tests rely on `Phoenix.ConnTest` and also\nimport other functionality to make it easier\nto build common data structures and query the data layer.\n\nFinally, if the test case interacts with the database,\nit cannot be async. For this reason, every test runs\ninside a transaction which is reset at the beginning\nof the test unless the test case is marked as async.","ref":"PlausibleWeb.ConnCase.html","title":"PlausibleWeb.ConnCase","type":"module"},{"doc":"","ref":"PlausibleWeb.ControllerHelpers.html","title":"PlausibleWeb.ControllerHelpers","type":"module"},{"doc":"","ref":"PlausibleWeb.ControllerHelpers.html#render_error/2","title":"PlausibleWeb.ControllerHelpers.render_error/2","type":"function"},{"doc":"","ref":"PlausibleWeb.ControllerHelpers.html#render_error/3","title":"PlausibleWeb.ControllerHelpers.render_error/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html","title":"PlausibleWeb.Email","type":"module"},{"doc":"","ref":"PlausibleWeb.Email.html#activation_email/2","title":"PlausibleWeb.Email.activation_email/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#base_email/0","title":"PlausibleWeb.Email.base_email/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#base_email/1","title":"PlausibleWeb.Email.base_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#cancellation_email/1","title":"PlausibleWeb.Email.cancellation_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#check_stats_email/1","title":"PlausibleWeb.Email.check_stats_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#create_site_email/1","title":"PlausibleWeb.Email.create_site_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#dashboard_locked/4","title":"PlausibleWeb.Email.dashboard_locked/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#enterprise_over_limit_internal_email/5","title":"PlausibleWeb.Email.enterprise_over_limit_internal_email/5","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#error_report/3","title":"PlausibleWeb.Email.error_report/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#existing_user_invitation/1","title":"PlausibleWeb.Email.existing_user_invitation/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#import_failure/2","title":"PlausibleWeb.Email.import_failure/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#import_success/2","title":"PlausibleWeb.Email.import_success/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#invitation_accepted/1","title":"PlausibleWeb.Email.invitation_accepted/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#invitation_rejected/1","title":"PlausibleWeb.Email.invitation_rejected/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#mailer_email_from/0","title":"PlausibleWeb.Email.mailer_email_from/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#new_user_invitation/1","title":"PlausibleWeb.Email.new_user_invitation/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#over_limit_email/4","title":"PlausibleWeb.Email.over_limit_email/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#ownership_transfer_accepted/1","title":"PlausibleWeb.Email.ownership_transfer_accepted/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#ownership_transfer_rejected/1","title":"PlausibleWeb.Email.ownership_transfer_rejected/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#ownership_transfer_request/2","title":"PlausibleWeb.Email.ownership_transfer_request/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#password_reset_email/2","title":"PlausibleWeb.Email.password_reset_email/2","type":"function"},{"doc":"Unlike the default 'base' emails, priority emails cannot be unsubscribed from. This is achieved\n by sending them through a dedicated 'priority' message stream in Postmark.","ref":"PlausibleWeb.Email.html#priority_email/0","title":"PlausibleWeb.Email.priority_email/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#priority_email/1","title":"PlausibleWeb.Email.priority_email/1","type":"function"},{"doc":"Render an Phoenix template and set the body on the email.\n\nPass an atom as the template name (:welcome_email) to render HTML *and* plain\ntext emails. Use a string if you only want to render one type, e.g.\n\"welcome_email.text\" or \"welcome_email.html\". Scroll to the top for more examples.","ref":"PlausibleWeb.Email.html#render/3","title":"PlausibleWeb.Email.render/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#site_member_removed/1","title":"PlausibleWeb.Email.site_member_removed/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#site_setup_help/2","title":"PlausibleWeb.Email.site_setup_help/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#site_setup_success/2","title":"PlausibleWeb.Email.site_setup_success/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#spike_notification/5","title":"PlausibleWeb.Email.spike_notification/5","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#trial_one_week_reminder/1","title":"PlausibleWeb.Email.trial_one_week_reminder/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#trial_over_email/1","title":"PlausibleWeb.Email.trial_over_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#trial_upgrade_email/3","title":"PlausibleWeb.Email.trial_upgrade_email/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#weekly_report/3","title":"PlausibleWeb.Email.weekly_report/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#welcome_email/1","title":"PlausibleWeb.Email.welcome_email/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#yearly_expiration_notification/1","title":"PlausibleWeb.Email.yearly_expiration_notification/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Email.html#yearly_renewal_notification/1","title":"PlausibleWeb.Email.yearly_renewal_notification/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html","title":"PlausibleWeb.EmailView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.EmailView.html#__resource__/0","title":"PlausibleWeb.EmailView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#activation_email.html/1","title":"PlausibleWeb.EmailView.activation_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#base_domain/0","title":"PlausibleWeb.EmailView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#cancellation_email.html/1","title":"PlausibleWeb.EmailView.cancellation_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#check_stats_email.html/1","title":"PlausibleWeb.EmailView.check_stats_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#create_site_email.html/1","title":"PlausibleWeb.EmailView.create_site_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#dashboard_locked.html/1","title":"PlausibleWeb.EmailView.dashboard_locked.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#date_format/1","title":"PlausibleWeb.EmailView.date_format/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#enterprise_over_limit_internal.html/1","title":"PlausibleWeb.EmailView.enterprise_over_limit_internal.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#error_report_email.html/1","title":"PlausibleWeb.EmailView.error_report_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#existing_user_invitation.html/1","title":"PlausibleWeb.EmailView.existing_user_invitation.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#google_analytics_import.html/1","title":"PlausibleWeb.EmailView.google_analytics_import.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#greet_recipient/1","title":"PlausibleWeb.EmailView.greet_recipient/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#invitation_accepted.html/1","title":"PlausibleWeb.EmailView.invitation_accepted.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#invitation_rejected.html/1","title":"PlausibleWeb.EmailView.invitation_rejected.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#new_user_invitation.html/1","title":"PlausibleWeb.EmailView.new_user_invitation.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#over_limit.html/1","title":"PlausibleWeb.EmailView.over_limit.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#ownership_transfer_accepted.html/1","title":"PlausibleWeb.EmailView.ownership_transfer_accepted.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#ownership_transfer_rejected.html/1","title":"PlausibleWeb.EmailView.ownership_transfer_rejected.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#ownership_transfer_request.html/1","title":"PlausibleWeb.EmailView.ownership_transfer_request.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#password_reset_email.html/1","title":"PlausibleWeb.EmailView.password_reset_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#plausible_url/0","title":"PlausibleWeb.EmailView.plausible_url/0","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.EmailView.html#render/2","title":"PlausibleWeb.EmailView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#sentry_link/2","title":"PlausibleWeb.EmailView.sentry_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#site_member_removed.html/1","title":"PlausibleWeb.EmailView.site_member_removed.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#site_setup_help_email.html/1","title":"PlausibleWeb.EmailView.site_setup_help_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#site_setup_success_email.html/1","title":"PlausibleWeb.EmailView.site_setup_success_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#spike_notification.html/1","title":"PlausibleWeb.EmailView.spike_notification.html/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.EmailView.html#template_not_found/2","title":"PlausibleWeb.EmailView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#trial_one_week_reminder.html/1","title":"PlausibleWeb.EmailView.trial_one_week_reminder.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#trial_over_email.html/1","title":"PlausibleWeb.EmailView.trial_over_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#trial_upgrade_email.html/1","title":"PlausibleWeb.EmailView.trial_upgrade_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#welcome_email.html/1","title":"PlausibleWeb.EmailView.welcome_email.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#yearly_expiration_notification.html/1","title":"PlausibleWeb.EmailView.yearly_expiration_notification.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.EmailView.html#yearly_renewal_notification.html/1","title":"PlausibleWeb.EmailView.yearly_renewal_notification.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html","title":"PlausibleWeb.Endpoint","type":"module"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#broadcast/3","title":"PlausibleWeb.Endpoint.broadcast/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#broadcast!/3","title":"PlausibleWeb.Endpoint.broadcast!/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#broadcast_from/4","title":"PlausibleWeb.Endpoint.broadcast_from/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#broadcast_from!/4","title":"PlausibleWeb.Endpoint.broadcast_from!/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#call/2","title":"PlausibleWeb.Endpoint.call/2","type":"function"},{"doc":"Returns the child specification to start the endpoint\nunder a supervision tree.","ref":"PlausibleWeb.Endpoint.html#child_spec/1","title":"PlausibleWeb.Endpoint.child_spec/1","type":"function"},{"doc":"Returns the endpoint configuration for `key`\n\nReturns `default` if the key does not exist.","ref":"PlausibleWeb.Endpoint.html#config/2","title":"PlausibleWeb.Endpoint.config/2","type":"function"},{"doc":"Reloads the configuration given the application environment changes.","ref":"PlausibleWeb.Endpoint.html#config_change/2","title":"PlausibleWeb.Endpoint.config_change/2","type":"function"},{"doc":"Returns the host for the given endpoint.","ref":"PlausibleWeb.Endpoint.html#host/0","title":"PlausibleWeb.Endpoint.host/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#init/1","title":"PlausibleWeb.Endpoint.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#local_broadcast/3","title":"PlausibleWeb.Endpoint.local_broadcast/3","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#local_broadcast_from/4","title":"PlausibleWeb.Endpoint.local_broadcast_from/4","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#patch_session_opts/0","title":"PlausibleWeb.Endpoint.patch_session_opts/0","type":"function"},{"doc":"Generates the path information when routing to this endpoint.","ref":"PlausibleWeb.Endpoint.html#path/1","title":"PlausibleWeb.Endpoint.path/1","type":"function"},{"doc":"Generates the script name.","ref":"PlausibleWeb.Endpoint.html#script_name/0","title":"PlausibleWeb.Endpoint.script_name/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#secure_cookie?/0","title":"PlausibleWeb.Endpoint.secure_cookie?/0","type":"function"},{"doc":"Starts the endpoint supervision tree.\n\nAll other options are merged into the endpoint configuration.","ref":"PlausibleWeb.Endpoint.html#start_link/1","title":"PlausibleWeb.Endpoint.start_link/1","type":"function"},{"doc":"Generates a base64-encoded cryptographic hash (sha512) to a static file\nin `priv/static`. Meant to be used for Subresource Integrity with CDNs.","ref":"PlausibleWeb.Endpoint.html#static_integrity/1","title":"PlausibleWeb.Endpoint.static_integrity/1","type":"function"},{"doc":"Returns a two item tuple with the first item being the `static_path`\nand the second item being the `static_integrity`.","ref":"PlausibleWeb.Endpoint.html#static_lookup/1","title":"PlausibleWeb.Endpoint.static_lookup/1","type":"function"},{"doc":"Generates a route to a static file in `priv/static`.","ref":"PlausibleWeb.Endpoint.html#static_path/1","title":"PlausibleWeb.Endpoint.static_path/1","type":"function"},{"doc":"Generates the static URL without any path information.\n\nIt uses the configuration under `:static_url` to generate\nsuch. It falls back to `:url` if `:static_url` is not set.","ref":"PlausibleWeb.Endpoint.html#static_url/0","title":"PlausibleWeb.Endpoint.static_url/0","type":"function"},{"doc":"Generates the endpoint base URL but as a `URI` struct.\n\nIt uses the configuration under `:url` to generate such.\nUseful for manipulating the URL data and passing it to\nURL helpers.","ref":"PlausibleWeb.Endpoint.html#struct_url/0","title":"PlausibleWeb.Endpoint.struct_url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#subscribe/2","title":"PlausibleWeb.Endpoint.subscribe/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#unsubscribe/1","title":"PlausibleWeb.Endpoint.unsubscribe/1","type":"function"},{"doc":"Generates the endpoint base URL without any path information.\n\nIt uses the configuration under `:url` to generate such.","ref":"PlausibleWeb.Endpoint.html#url/0","title":"PlausibleWeb.Endpoint.url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Endpoint.html#websocket_url/0","title":"PlausibleWeb.Endpoint.websocket_url/0","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorHelpers.html","title":"PlausibleWeb.ErrorHelpers","type":"module"},{"doc":"","ref":"PlausibleWeb.ErrorHelpers.html#error_tag/2","title":"PlausibleWeb.ErrorHelpers.error_tag/2","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorHelpers.html#translate_error/1","title":"PlausibleWeb.ErrorHelpers.translate_error/1","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorReportController.html","title":"PlausibleWeb.ErrorReportController","type":"module"},{"doc":"","ref":"PlausibleWeb.ErrorReportController.html#submit_error_report/2","title":"PlausibleWeb.ErrorReportController.submit_error_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorView.html","title":"PlausibleWeb.ErrorView","type":"module"},{"doc":"","ref":"PlausibleWeb.ErrorView.html#404_error.html/1","title":"PlausibleWeb.ErrorView.404_error.html/1","type":"function"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.ErrorView.html#__resource__/0","title":"PlausibleWeb.ErrorView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorView.html#generic_error.html/1","title":"PlausibleWeb.ErrorView.generic_error.html/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.ErrorView.html#render/2","title":"PlausibleWeb.ErrorView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorView.html#server_error.html/1","title":"PlausibleWeb.ErrorView.server_error.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.ErrorView.html#server_error_report_thanks.html/1","title":"PlausibleWeb.ErrorView.server_error_report_thanks.html/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.ErrorView.html#template_not_found/2","title":"PlausibleWeb.ErrorView.template_not_found/2","type":"function"},{"doc":"A Plug that fetches favicon images from DuckDuckGo and returns them\nto the Plausible frontend.\n\nThe proxying is there so we can reduce the number of third-party domains that\nthe browser clients need to connect to. Our goal is to have 0 third-party domain\nconnections on the website for privacy reasons.\n\nThis module also maps between categorized sources and their respective URLs for favicons.\nWhat does that mean exactly? During ingestion we use `PlausibleWeb.RefInspector.parse/1` to\ncategorize our referrer sources like so:\n\ngoogle.com -> Google\ngoogle.co.uk -> Google\ngoogle.com.au -> Google\n\nSo when we show Google as a source in the dashboard, the request to this plug will come as:\nhttps://plausible/io/favicon/sources/Google\n\nNow, when we want to show a favicon for Google, we need to convert Google -> google.com or\nsome other hostname owned by Google:\nhttps://icons.duckduckgo.com/ip3/google.com.ico\n\nThe mapping from source category -> source hostname is stored in \"priv/referer_favicon_domains.json\" and\nmanaged by `Mix.Tasks.GenerateReferrerFavicons.run/1`","ref":"PlausibleWeb.Favicon.html","title":"PlausibleWeb.Favicon","type":"module"},{"doc":"Proxies HTTP request to DuckDuckGo favicon service. Swallows hop-by-hop HTTP\nheaders that should not be forwarded as defined in [RFC 2616](https://www.rfc-editor.org/rfc/rfc2616#section-13.5.1)","ref":"PlausibleWeb.Favicon.html#call/2","title":"PlausibleWeb.Favicon.call/2","type":"function"},{"doc":"Cases where we show a placeholder icon instead:\n\n1. In case of network error to DuckDuckGo\n2. In case of non-2xx status code from DuckDuckGo\n3. In case of broken image response body from DuckDuckGo\n\nI'm not sure why DDG sometimes returns a broken PNG image in their response\nbut we filter that out. When the icon request fails, we show a placeholder\nfavicon instead. The placeholder is an emoji from\n[https://favicon.io/emoji-favicons/](https://favicon.io/emoji-favicons/)\n\nDuckDuckGo favicon service has some issues with [SVG favicons](https://css-tricks.com/svg-favicons-and-all-the-fun-things-we-can-do-with-them/).\nFor some reason, they return them with `content-type=image/x-icon` whereas SVG\nicons should be returned with `content-type=image/svg+xml`. This Plug detects\nwhen the response body starts with ` People. It's important to enforce permissions in this controller.\n\n Owner - Can manage users, can trigger a 'transfer ownership' request\n Admin - Can manage users\n Viewer - Can not access user management settings\n Anyone - Can accept invitations\n\n Everything else should be explicitly disallowed.","ref":"PlausibleWeb.Site.MembershipController.html","title":"PlausibleWeb.Site.MembershipController","type":"module"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#invite_member/2","title":"PlausibleWeb.Site.MembershipController.invite_member/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#invite_member_form/2","title":"PlausibleWeb.Site.MembershipController.invite_member_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#remove_member/2","title":"PlausibleWeb.Site.MembershipController.remove_member/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#transfer_ownership/2","title":"PlausibleWeb.Site.MembershipController.transfer_ownership/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipController.html#transfer_ownership_form/2","title":"PlausibleWeb.Site.MembershipController.transfer_ownership_form/2","type":"function"},{"doc":"Updates the role of a user. The user being updated could be the same or different from the user taking\n the action. When updating the role, it's important to enforce permissions:\n\n Owner - Can update anyone's role except for themselves. If they want to change their own role, they have to use the 'transfer ownership' feature.\n Admin - Can update anyone's role except for owners. Can downgrade their own access to 'viewer'. Can promote a viewer to admin.","ref":"PlausibleWeb.Site.MembershipController.html#update_role/2","title":"PlausibleWeb.Site.MembershipController.update_role/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipView.html","title":"PlausibleWeb.Site.MembershipView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.Site.MembershipView.html#__resource__/0","title":"PlausibleWeb.Site.MembershipView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipView.html#invite_member_form.html/1","title":"PlausibleWeb.Site.MembershipView.invite_member_form.html/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.Site.MembershipView.html#render/2","title":"PlausibleWeb.Site.MembershipView.render/2","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.Site.MembershipView.html#template_not_found/2","title":"PlausibleWeb.Site.MembershipView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.Site.MembershipView.html#transfer_ownership_form.html/1","title":"PlausibleWeb.Site.MembershipView.transfer_ownership_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html","title":"PlausibleWeb.SiteController","type":"module"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_monthly_report_recipient/2","title":"PlausibleWeb.SiteController.add_monthly_report_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_snippet/2","title":"PlausibleWeb.SiteController.add_snippet/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_snippet_after_domain_change/2","title":"PlausibleWeb.SiteController.add_snippet_after_domain_change/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_spike_notification_recipient/2","title":"PlausibleWeb.SiteController.add_spike_notification_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#add_weekly_report_recipient/2","title":"PlausibleWeb.SiteController.add_weekly_report_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#change_domain/2","title":"PlausibleWeb.SiteController.change_domain/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#change_domain_submit/2","title":"PlausibleWeb.SiteController.change_domain_submit/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#create_shared_link/2","title":"PlausibleWeb.SiteController.create_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#create_site/2","title":"PlausibleWeb.SiteController.create_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#delete_custom_domain/2","title":"PlausibleWeb.SiteController.delete_custom_domain/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#delete_google_auth/2","title":"PlausibleWeb.SiteController.delete_google_auth/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#delete_shared_link/2","title":"PlausibleWeb.SiteController.delete_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#delete_site/2","title":"PlausibleWeb.SiteController.delete_site/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#disable_monthly_report/2","title":"PlausibleWeb.SiteController.disable_monthly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#disable_spike_notification/2","title":"PlausibleWeb.SiteController.disable_spike_notification/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#disable_weekly_report/2","title":"PlausibleWeb.SiteController.disable_weekly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#edit_shared_link/2","title":"PlausibleWeb.SiteController.edit_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#enable_monthly_report/2","title":"PlausibleWeb.SiteController.enable_monthly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#enable_spike_notification/2","title":"PlausibleWeb.SiteController.enable_spike_notification/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#enable_weekly_report/2","title":"PlausibleWeb.SiteController.enable_weekly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#forget_imported/2","title":"PlausibleWeb.SiteController.forget_imported/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google/2","title":"PlausibleWeb.SiteController.import_from_google/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google_confirm/2","title":"PlausibleWeb.SiteController.import_from_google_confirm/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google_user_metric_notice/2","title":"PlausibleWeb.SiteController.import_from_google_user_metric_notice/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google_view_id/2","title":"PlausibleWeb.SiteController.import_from_google_view_id/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#import_from_google_view_id_form/2","title":"PlausibleWeb.SiteController.import_from_google_view_id_form/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#index/2","title":"PlausibleWeb.SiteController.index/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#make_private/2","title":"PlausibleWeb.SiteController.make_private/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#make_public/2","title":"PlausibleWeb.SiteController.make_public/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#new/2","title":"PlausibleWeb.SiteController.new/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#new_shared_link/2","title":"PlausibleWeb.SiteController.new_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#remove_monthly_report_recipient/2","title":"PlausibleWeb.SiteController.remove_monthly_report_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#remove_spike_notification_recipient/2","title":"PlausibleWeb.SiteController.remove_spike_notification_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#remove_weekly_report_recipient/2","title":"PlausibleWeb.SiteController.remove_weekly_report_recipient/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#reset_stats/2","title":"PlausibleWeb.SiteController.reset_stats/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings/2","title":"PlausibleWeb.SiteController.settings/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_custom_domain/2","title":"PlausibleWeb.SiteController.settings_custom_domain/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_danger_zone/2","title":"PlausibleWeb.SiteController.settings_danger_zone/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_email_reports/2","title":"PlausibleWeb.SiteController.settings_email_reports/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_funnels/2","title":"PlausibleWeb.SiteController.settings_funnels/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_general/2","title":"PlausibleWeb.SiteController.settings_general/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_goals/2","title":"PlausibleWeb.SiteController.settings_goals/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_people/2","title":"PlausibleWeb.SiteController.settings_people/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_props/2","title":"PlausibleWeb.SiteController.settings_props/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_search_console/2","title":"PlausibleWeb.SiteController.settings_search_console/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#settings_visibility/2","title":"PlausibleWeb.SiteController.settings_visibility/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_feature_visibility/2","title":"PlausibleWeb.SiteController.update_feature_visibility/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_google_auth/2","title":"PlausibleWeb.SiteController.update_google_auth/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_settings/2","title":"PlausibleWeb.SiteController.update_settings/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_shared_link/2","title":"PlausibleWeb.SiteController.update_shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteController.html#update_spike_notification/2","title":"PlausibleWeb.SiteController.update_spike_notification/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html","title":"PlausibleWeb.SiteView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.SiteView.html#__resource__/0","title":"PlausibleWeb.SiteView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#base_domain/0","title":"PlausibleWeb.SiteView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#change_domain.html/1","title":"PlausibleWeb.SiteView.change_domain.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#edit_shared_link.html/1","title":"PlausibleWeb.SiteView.edit_shared_link.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#goal_name/1","title":"PlausibleWeb.SiteView.goal_name/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#google_logo/1","title":"PlausibleWeb.SiteView.google_logo/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#gravatar/2","title":"PlausibleWeb.SiteView.gravatar/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#import_from_google_confirm.html/1","title":"PlausibleWeb.SiteView.import_from_google_confirm.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#import_from_google_user_metric_form.html/1","title":"PlausibleWeb.SiteView.import_from_google_user_metric_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#import_from_google_view_id_form.html/1","title":"PlausibleWeb.SiteView.import_from_google_view_id_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#index.html/1","title":"PlausibleWeb.SiteView.index.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#new.html/1","title":"PlausibleWeb.SiteView.new.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#new_shared_link.html/1","title":"PlausibleWeb.SiteView.new_shared_link.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#plausible_url/0","title":"PlausibleWeb.SiteView.plausible_url/0","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.SiteView.html#render/2","title":"PlausibleWeb.SiteView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#render_snippet/1","title":"PlausibleWeb.SiteView.render_snippet/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_custom_domain.html/1","title":"PlausibleWeb.SiteView.settings_custom_domain.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_danger_zone.html/1","title":"PlausibleWeb.SiteView.settings_danger_zone.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_email_reports.html/1","title":"PlausibleWeb.SiteView.settings_email_reports.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_funnels.html/1","title":"PlausibleWeb.SiteView.settings_funnels.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_general.html/1","title":"PlausibleWeb.SiteView.settings_general.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_goals.html/1","title":"PlausibleWeb.SiteView.settings_goals.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_people.html/1","title":"PlausibleWeb.SiteView.settings_people.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_props.html/1","title":"PlausibleWeb.SiteView.settings_props.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_search_console.html/1","title":"PlausibleWeb.SiteView.settings_search_console.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#settings_visibility.html/1","title":"PlausibleWeb.SiteView.settings_visibility.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#shared_link_dest/2","title":"PlausibleWeb.SiteView.shared_link_dest/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#snippet.html/1","title":"PlausibleWeb.SiteView.snippet.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#snippet_after_domain_change.html/1","title":"PlausibleWeb.SiteView.snippet_after_domain_change.html/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.SiteView.html#template_not_found/2","title":"PlausibleWeb.SiteView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.SiteView.html#with_indefinite_article/1","title":"PlausibleWeb.SiteView.with_indefinite_article/1","type":"function"},{"doc":"This controller is responsible for rendering stats dashboards.\n\nThe stats dashboards are currently the only part of the app that uses client-side\nrendering. Since the dashboards are heavily interactive, they are built with React\nwhich is an appropriate choice for highly interactive browser UIs.\n\n \nsequenceDiagram\n Browser->>StatsController: GET /mydomain.com\n StatsController-->>Browser: StatsView.render(\"stats.html\")\n Note left of Browser: ReactDom.render(Dashboard)\n\n Browser -) Api.StatsController: GET /api/stats/mydomain.com/top-stats\n Api.StatsController --) Browser: {\"top_stats\": [...]}\n Note left of Browser: TopStats.render()\n\n Browser -) Api.StatsController: GET /api/stats/mydomain.com/main-graph\n Api.StatsController --) Browser: [{\"plot\": [...], \"labels\": [...]}, ...]\n Note left of Browser: VisitorGraph.render()\n\n Browser -) Api.StatsController: GET /api/stats/mydomain.com/sources\n Api.StatsController --) Browser: [{\"name\": \"Google\", \"visitors\": 292150}, ...]\n Note left of Browser: Sources.render()\n\n Note over Browser,StatsController: And so on, for all reports in the viewport\n \n\nThis reasoning for this sequence is as follows:\n 1. First paint is fast because it doesn't do any data aggregation yet - good UX\n 2. The basic structure of the dashboard is rendered with spinners before reports are ready - good UX\n 2. Rendering on the frontend allows for maximum interactivity. Re-rendering and re-fetching can be as granular as needed.\n 3. Routing on the frontend allows the user to navigate the dashboard without reloading the page and losing context\n 4. Rendering on the frontend allows caching results in the browser to reduce pressure on backends and storage\n 3.1 No client-side caching has been implemented yet. This is still theoretical. See https://github.com/plausible/analytics/discussions/1278\n 3.2 This is a big potential opportunity, because analytics data is mostly immutable. Clients can cache all historical data.\n 5. Since frontend rendering & navigation is harder to build and maintain than regular server-rendered HTML, we don't use SPA-style rendering anywhere else\n .The only place currently where the benefits outweigh the costs is the dashboard.","ref":"PlausibleWeb.StatsController.html","title":"PlausibleWeb.StatsController","type":"module"},{"doc":"","ref":"PlausibleWeb.StatsController.html#authenticate_shared_link/2","title":"PlausibleWeb.StatsController.authenticate_shared_link/2","type":"function"},{"doc":"The export is limited to 300 entries for other reports and 100 entries for pages because bigger result sets\nstart causing failures. Since we request data like time on page or bounce_rate for pages in a separate query\nusing the IN filter, it causes the requests to balloon in payload size.","ref":"PlausibleWeb.StatsController.html#csv_export/2","title":"PlausibleWeb.StatsController.csv_export/2","type":"function"},{"doc":"Authorizes and renders a shared link:\n 1. Shared link with no password protection: needs to just make sure the shared link entry is still\n in our database. This check makes sure shared link access can be revoked by the site admins. If the\n shared link exists, render it directly.\n\n 2. Shared link with password protection: Same checks as without the password, but an extra step is taken to\n protect the page with a password. When the user passes the password challenge, a cookie is set with Plausible.Auth.Token.sign_shared_link().\n The cookie allows the user to access the dashboard for 24 hours without entering the password again.\n\n #","ref":"PlausibleWeb.StatsController.html#shared_link/2","title":"PlausibleWeb.StatsController.shared_link/2","type":"function"},{"doc":"The URL format for shared links was changed in [this pull request](https://github.com/plausible/analytics/pull/752) in order\n to make the URLs easier to bookmark. The old format is supported along with the new in order to not break old links.\n\n See: https://plausible.io/docs/shared-links","ref":"PlausibleWeb.StatsController.html#shared_link/2-backwards-compatibility","title":"Backwards compatibility - PlausibleWeb.StatsController.shared_link/2","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsController.html#stats/2","title":"PlausibleWeb.StatsController.stats/2","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html","title":"PlausibleWeb.StatsView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.StatsView.html#__resource__/0","title":"PlausibleWeb.StatsView.__resource__/0","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#base_domain/0","title":"PlausibleWeb.StatsView.base_domain/0","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#large_number_format/1","title":"PlausibleWeb.StatsView.large_number_format/1","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#plausible_url/0","title":"PlausibleWeb.StatsView.plausible_url/0","type":"function"},{"doc":"Returns a readable stats URL.\n\nNative Phoenix router functions percent-encode all diacritics, resulting in\nugly URLs, e.g. `https://plausible.io/café.com` transforms into\n`https://plausible.io/caf%C3%A9.com`.\n\nThis function encodes only the slash (`/`) character from the site's domain.","ref":"PlausibleWeb.StatsView.html#pretty_stats_url/1","title":"PlausibleWeb.StatsView.pretty_stats_url/1","type":"function"},{"doc":"iex> PlausibleWeb.StatsView.pretty_stats_url(%Plausible.Site{domain: \"user.gittea.io/repo\"})\n \"http://localhost:8000/user.gittea.io%2Frepo\"\n\n iex> PlausibleWeb.StatsView.pretty_stats_url(%Plausible.Site{domain: \"anakin.test\"})\n \"http://localhost:8000/anakin.test\"\n\n iex> PlausibleWeb.StatsView.pretty_stats_url(%Plausible.Site{domain: \"café.test\"})\n \"http://localhost:8000/café.test\"","ref":"PlausibleWeb.StatsView.html#pretty_stats_url/1-examples","title":"Examples - PlausibleWeb.StatsView.pretty_stats_url/1","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.StatsView.html#render/2","title":"PlausibleWeb.StatsView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#shared_link_password.html/1","title":"PlausibleWeb.StatsView.shared_link_password.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#site_locked.html/1","title":"PlausibleWeb.StatsView.site_locked.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#stats.html/1","title":"PlausibleWeb.StatsView.stats.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#stats_container_class/1","title":"PlausibleWeb.StatsView.stats_container_class/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.StatsView.html#template_not_found/2","title":"PlausibleWeb.StatsView.template_not_found/2","type":"function"},{"doc":"","ref":"PlausibleWeb.StatsView.html#waiting_first_pageview.html/1","title":"PlausibleWeb.StatsView.waiting_first_pageview.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Tracker.html","title":"PlausibleWeb.Tracker","type":"module"},{"doc":"","ref":"PlausibleWeb.Tracker.html#call/2","title":"PlausibleWeb.Tracker.call/2","type":"function"},{"doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"PlausibleWeb.Tracker.html#child_spec/1","title":"PlausibleWeb.Tracker.child_spec/1","type":"function"},{"doc":"","ref":"PlausibleWeb.Tracker.html#init/1","title":"PlausibleWeb.Tracker.init/1","type":"function"},{"doc":"","ref":"PlausibleWeb.UnsubscribeController.html","title":"PlausibleWeb.UnsubscribeController","type":"module"},{"doc":"","ref":"PlausibleWeb.UnsubscribeController.html#monthly_report/2","title":"PlausibleWeb.UnsubscribeController.monthly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.UnsubscribeController.html#weekly_report/2","title":"PlausibleWeb.UnsubscribeController.weekly_report/2","type":"function"},{"doc":"","ref":"PlausibleWeb.UnsubscribeView.html","title":"PlausibleWeb.UnsubscribeView","type":"module"},{"doc":"The resource name, as an atom, for this view","ref":"PlausibleWeb.UnsubscribeView.html#__resource__/0","title":"PlausibleWeb.UnsubscribeView.__resource__/0","type":"function"},{"doc":"Renders the given template locally.","ref":"PlausibleWeb.UnsubscribeView.html#render/2","title":"PlausibleWeb.UnsubscribeView.render/2","type":"function"},{"doc":"","ref":"PlausibleWeb.UnsubscribeView.html#success.html/1","title":"PlausibleWeb.UnsubscribeView.success.html/1","type":"function"},{"doc":"Callback invoked when no template is found.\nBy default it raises but can be customized\nto render a particular template.","ref":"PlausibleWeb.UnsubscribeView.html#template_not_found/2","title":"PlausibleWeb.UnsubscribeView.template_not_found/2","type":"function"},{"doc":"# Plausible Analytics\n\n \n \n \n \n \n \n Simple Metrics |\n Lightweight Script |\n Privacy Focused |\n Open Source |\n Docs |\n Contributing \n \n \n\n[Plausible Analytics](https://plausible.io/) is an easy to use, lightweight (< 1 KB), open source and privacy-friendly alternative to Google Analytics. It doesn’t use cookies and is fully compliant with GDPR, CCPA and PECR. You can self-host or have us run Plausible for you in the cloud. Here's [the live demo of our own website stats](https://plausible.io/plausible.io). Made and hosted in the EU 🇪🇺\n\nWe are dedicated to making web analytics more privacy-friendly. Our mission is to reduce corporate surveillance by providing an alternative web analytics tool which doesn’t come from the AdTech world. We are completely independent and solely funded by our subscribers.\n\n![Plausible Analytics](https://plausible.io/docs/img/plausible-analytics.png)","ref":"readme.html","title":"Introduction","type":"extras"},{"doc":"Here's what makes Plausible a great Google Analytics alternative and why we're trusted by 11,000+ paying subscribers to deliver their website and business insights:\n\n- **Clutter Free**: Plausible Analytics provides [simple web analytics](https://plausible.io/simple-web-analytics) and it cuts through the noise. No layers of menus, no need for custom reports. Get all the important insights on one single page. No training necessary.\n- **GDPR/CCPA/PECR compliant**: Measure traffic, not individuals. No personal data or IP addresses are ever stored in our database. We don't use cookies or any other persistent identifiers. [Read more about our data policy](https://plausible.io/data-policy)\n- **Lightweight**: Plausible Analytics works by loading a script on your website, like Google Analytics. Our script is [45x smaller](https://plausible.io/lightweight-web-analytics), making your website quicker to load. You can also send events directly to our [events API](https://plausible.io/docs/events-api).\n- **Email or Slack reports**: Keep an eye on your traffic with weekly and/or monthly email or Slack reports. You can also get traffic spike notifications.\n- **Invite team members and share stats**: You have the option to be transparent and open your web analytics to everyone. Your website stats are private by default but you can choose to make them public so anyone with your custom link can view them. You can [invite team members](https://plausible.io/docs/users-roles) and assign user roles too.\n- **Define key goals and track conversions**: Create custom events with custom dimensions to track conversions and attribution to understand and identify the trends that matter. Includes easy ways to track outbound link clicks, file downloads and 404 error pages.\n- **Search keywords**: Integrate your dashboard with Google Search Console to get the most accurate reporting on your search keywords.\n- **SPA support**: Plausible is built with modern web frameworks in mind and it works automatically with any pushState based router on the frontend. We also support frameworks that use the URL hash for routing. See [our documentation](https://plausible.io/docs/hash-based-routing).\n- **Smooth transition from Google Analytics**: There's a realtime dashboard, entry pages report and integration with Search Console. You can track your paid campaigns and conversions. You can invite team members. You can even [import your historical Google Analytics stats](https://plausible.io/docs/google-analytics-import). Learn how to [get the most out of your Plausible experience](https://plausible.io/docs/your-plausible-experience) and join thousands who have already migrated from Google Analytics.\n\nInterested to learn more? [Read more on our website](https://plausible.io), learn more about the team and the goals of the project on [our about page](https://plausible.io/about) or explore [the documentation](https://plausible.io/docs).","ref":"readme.html#why-plausible","title":"Why Plausible? - Introduction","type":"extras"},{"doc":"Plausible Analytics is an independently owned and actively developed project. To keep the project development going, to stay in business, to continue putting effort into building a better product and to cover our costs, we need to charge a fee.\n\nGoogle Analytics is free because Google has built their company and their wealth by collecting and analyzing huge amounts of personal information from web users and using these personal and behavioral insights to sell advertisements.\n\nPlausible has no part in that business model. No personal data is being collected and analyzed either. With Plausible, you 100% own and control all of your website data. This data is not being shared with or sold to any third-parties.\n\nWe choose the subscription business model rather than the business model of surveillance capitalism. See reasons why we believe you should [stop using Google Analytics on your website](https://plausible.io/blog/remove-google-analytics).","ref":"readme.html#why-is-plausible-analytics-cloud-not-free-like-google-analytics","title":"Why is Plausible Analytics Cloud not free like Google Analytics? - Introduction","type":"extras"},{"doc":"The easiest way to get started with Plausible is with [our official managed service in the cloud](https://plausible.io/#pricing). It takes 2 minutes to start counting your stats with a worldwide CDN, high availability, backups, security and maintenance all done for you by us.\n\nIn order to be compliant with the GDPR and the Schrems II ruling, all visitor data for our managed service in the cloud is exclusively processed on servers and cloud infrastructure owned and operated by European providers. Your website data never leaves the EU.\n\nOur managed hosting can save a substantial amount of developer time and resources. For most sites this ends up being the best value option and the revenue goes to funding the maintenance and further development of Plausible. So you’ll be supporting open source software and getting a great service!\n\n#","ref":"readme.html#getting-started-with-plausible","title":"Getting started with Plausible - Introduction","type":"extras"},{"doc":"Plausible is [open source web analytics](https://plausible.io/open-source-website-analytics) and we have a free as in beer [self-hosted solution](https://plausible.io/self-hosted-web-analytics). Here are the differences between Plausible Analytics managed hosting in the cloud and the self-hosting:\n\n| | Plausible Cloud | Self-Hosting |\n| ------------- | ------------- | ------------- |\n| Hosting | Easy and convenient. It takes 2 minutes to start counting your stats with a worldwide CDN, high availability, backups, security and maintenance all done for you by us. We manage everything so you don’t have to worry about anything and can focus on your stats. | You do it all yourself. You need to get a server and you need to manage your infrastructure. You are responsible for installation, maintenance, upgrades, server capacity, uptime, backup, security, stability, consistency, loading time and so on. |\n| Storage | All visitor data is exclusively processed on EU-owned cloud infrastructure. We keep your site data on a secure, encrypted and green energy powered server in Germany. This ensures that your site data is protected by the strict European Union data privacy laws and ensures compliance with GDPR. Your website data never leaves the EU. | You have full control and can host your instance on any server in any country that you wish. Host it on a server in your basement or host it with any cloud provider wherever you want, even those that are not GDPR compliant. |\n| Features | Continuously developed and improved with new features and updates multiple times per week. | [It's a long term release](https://plausible.io/blog/building-open-source) published twice per year. Selected premium features are not available as we aim to ensure a protective barrier around our cloud offering. |\n| Raw data | You see all your site stats and metrics on our modern-looking, simple to use and fast loading dashboard. You can only see the stats aggregated in the dashboard. You can download the stats using the [CSV export](https://plausible.io/docs/export-stats), [stats API](https://plausible.io/docs/stats-api) or tools such as the [Data Studio Connector](https://plausible.io/docs/integration-guides#google-data-studio). | Do you want access to the raw data? Self-hosting gives you that option. You can take the data directly from the ClickHouse database. |\n| Premium Support | Real support delivered by real human beings who build and maintain Plausible. | Premium support is not included. Self-hosting is community supported only. |\n| Costs | There's a cost associated with providing an analytics service so we charge a subscription fee. We choose the subscription business model rather than the business model of surveillance capitalism. Your money funds further development of Plausible. | You need to pay for your server, CDN, backups and whatever other cost there is associated with running the infrastructure. You never have to pay any fees to us. Your money goes to 3rd party companies with no connection to us.|\n\nInterested in self-hosting Plausible on your server? Take a look at our [self-hosting installation instructions](https://plausible.io/docs/self-hosting).\n\nPlausible Self-Hosted is a community supported project and there are no guarantees that you will get support from the creators of Plausible to troubleshoot your self-hosting issues. There is a [community supported forum](https://github.com/plausible/analytics/discussions/categories/self-hosted-support) where you can ask for help.\n\nOur only source of funding is our premium, managed service for running Plausible in the cloud. If you're looking for an alternative way to support the project, we've put together some sponsorship packages. If you choose to self-host Plausible you can [become a sponsor](https://github.com/sponsors/plausible) which is a great way to give back to the community and to contribute to the long-term sustainability of the project.","ref":"readme.html#can-plausible-analytics-be-self-hosted","title":"Can Plausible Analytics be self-hosted? - Introduction","type":"extras"},{"doc":"Plausible Analytics is a standard Elixir/Phoenix application backed by a PostgreSQL database for general data and a Clickhouse\ndatabase for stats. On the frontend we use [TailwindCSS](https://tailwindcss.com/) for styling and React to make the dashboard interactive.","ref":"readme.html#technology","title":"Technology - Introduction","type":"extras"},{"doc":"For anyone wishing to contribute to Plausible, we recommend taking a look at [our contributor guide](https://github.com/plausible/analytics/blob/master/CONTRIBUTING.md).","ref":"readme.html#contributors","title":"Contributors - Introduction","type":"extras"},{"doc":"We welcome feedback from our community. We have a public roadmap driven by the features suggested by the community members. Take a look at our [feedback board](https://plausible.io/feedback). Please let us know if you have any requests and vote on open issues so we can better prioritize.\n\nTo stay up to date with all the latest news and product updates, make sure to follow us on [X (formerly Twitter)](https://twitter.com/plausiblehq), [LinkedIn](https://www.linkedin.com/company/plausible-analytics/) or [Mastodon](https://fosstodon.org/@plausible).","ref":"readme.html#feedback-roadmap","title":"Feedback & Roadmap - Introduction","type":"extras"},{"doc":"Plausible is open source under the GNU Affero General Public License Version 3 (AGPLv3) or any later version. You can [find it here](https://github.com/plausible/analytics/blob/master/LICENSE.md).\n\nTo avoid issues with AGPL virality, we've released the JavaScript tracker which gets included on your website under the MIT license. You can [find it here](https://github.com/plausible/analytics/blob/master/tracker/LICENSE.md).\n\nCopyright (c) 2018-present Plausible Insights OÜ. Plausible Analytics name and logo are trademarks of Plausible Insights OÜ. Please see our [trademark guidelines](https://plausible.io/trademark) for info on acceptable usage.","ref":"readme.html#license-trademarks","title":"License & Trademarks - Introduction","type":"extras"},{"doc":"# Contributing\n\nWe welcome everyone to contribute to Plausible. This document is to help you on setting up your environment, finding a task, and opening pull requests.","ref":"contributing.html","title":"Contributing","type":"extras"},{"doc":"The easiest way to get up and running is to [install](https://docs.docker.com/get-docker/) and use Docker for running both Postgres and Clickhouse.\n\nMake sure Docker, Elixir, Erlang and Node.js are all installed on your development machine. The [`.tool-versions`](https://github.com/plausible/analytics/blob/master/.tool-versions) file is available to use with [asdf](https://github.com/asdf-vm/asdf) or similar tools.\n\n#","ref":"contributing.html#development-setup","title":"Development setup - Contributing","type":"extras"},{"doc":"1. Run both `make postgres` and `make clickhouse`.\n2. You can set up everything with `make install`, alternatively run each command separately:\n 1. Run `mix deps.get`. This will download the required Elixir dependencies.\n 2. Run `mix ecto.create`. This will create the required databases in both Postgres and Clickhouse.\n 3. Run `mix ecto.migrate` to build the database schema.\n 4. Run `mix run priv/repo/seeds.exs` to seed the database. Check the [Seeds](#Seeds) section for more.\n 5. Run `npm ci --prefix assets` to install the required client-side dependencies.\n 6. Run `npm ci --prefix tracker` to install the required tracker dependencies.\n 7. Run `npm run deploy --prefix tracker` to generate tracker files in `priv/tracker/js`\n 8. Run `mix download_country_database` to fetch geolocation database\n3. Run `make server` or `mix phx.server` to start the Phoenix server.\n4. The system is now available on `localhost:8000`.\n\n#","ref":"contributing.html#start-the-environment","title":"Start the environment - Contributing","type":"extras"},{"doc":"You can optionally seed your database to automatically create an account and a site with stats:\n\n1. Run `mix run priv/repo/seeds.exs` to seed the database.\n2. Start the server with `make server` and navigate to `http://localhost:8000/login`.\n3. Log in with the following e-mail and password combination: `user@plausible.test` and `plausible`.\n4. You should now have a `dummy.site` site with generated stats.\n\nAlternatively, you can manually create a new account:\n\n1. Navigate to `http://localhost:8000/register` and fill in the form.\n2. Fill in the rest of the forms and for the domain use `dummy.site`\n3. Skip the JS snippet and click start collecting data.\n4. Run `mix send_pageview` from the terminal to generate a fake pageview event for the dummy site.\n5. You should now be all set!\n\n#","ref":"contributing.html#seeds","title":"Seeds - Contributing","type":"extras"},{"doc":"1. Stop and remove the Postgres container with `make postgres-stop`.\n2. Stop and remove the Clickhouse container with `make clickhouse-stop`.\n\nVolumes are preserved. You'll find that the Postgres and Clickhouse state are retained when you bring them up again the next time: no need to re-register and so on.\n\nNote: Since we are deleting the containers, be careful when deleting volumes with `docker volume prune`. You might accidentally delete the database and would have to go through re-registration process.\n\n#","ref":"contributing.html#stopping-docker-containers","title":"Stopping Docker containers - Contributing","type":"extras"},{"doc":"`pre-commit` requires Python to be available locally and covers Elixir, JavaScript, and CSS. Set up with `pip install --user pre-commit` followed by `pre-commit install`. Conversely, if the prompts are far too bothersome, remove with `pre-commit uninstall`.","ref":"contributing.html#pre-commit-hooks","title":"Pre-commit hooks - Contributing","type":"extras"},{"doc":"Bugs can be found in our [issue tracker](https://github.com/plausible/analytics/issues). Issues are usually up for grabs.\n\nNew features need to be discussed with the core team and the community first. If you're tackling a feature, please make sure it has been already discussed in the [Discussions tab](https://github.com/plausible/analytics/discussions). We kindly ask contributors to use the discussion comment section to propose a solution before opening a pull request.\n\nPull requests without an associated issue or discussion may still be merged, but we will focus on changes that have already been talked through.","ref":"contributing.html#finding-a-task","title":"Finding a task - Contributing","type":"extras"},{"doc":"# Account locking\nThis document explains the account locking feature from a technical perspective. Account locking happens when users have outgrown their accounts, and despite e-mail and dashboard alerts, don't upgrade after a grace period.","ref":"account-locking.html","title":"Account locking","type":"extras"},{"doc":"The `Plausible.Workers.CheckUsage` daily background job alerts users they have reached their subscription limits. This runs for outgrown users one day after their last billing date.\n\nWhen users reach the number of sites limit, or use >110% of their pageview limit for 2 consecutive billing cycles, the background job sends them an e-mail alert. The e-mail suggests a suitable subscription plan based on usage. For enterprise users, only an internal e-mail is sent to `enterprise@plausible.io`.\n\nThe user is given 7 days to upgrade their account after the alert, and this is called grace period. The background starts this grace period by adding a `users.grace_period` JSON to the user record:\n\n```json\n// SELECT grace_period FROM users LIMIT 1\n\n{\n \"id\": \"1aa855bd-022d-4dfc-b572-6853442c3f19\",\n \"is_over\": true,\n \"end_date\": \"2022-03-09\",\n \"allowance_required\": 100,\n \"manual_lock\": false\n}\n```\n\n\nDuring this period, the following alert pops up on the dashboard for both standard and enterprise users:\n\n![](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN4GLWMwCrTuTcf31kYE9%2Fuploads%2FmsLk4CdSHKzU8TbfvaPq%2FPasted%20image%2020220909120933.png?alt=media&token=76f247a1-28cf-4d88-a0fa-06547268aee9)\n\nIf the user upgrades to a suitable plan, the grace period is removed (check `Plausible.Billing.subscription_updated/1`), otherwise [Account locking](#Account\\ locking) follows. For enterprise users, the grace period has a manual lock flag set to true, meaning enterprise accounts can only be locked/unlocked through the internal CRM.","ref":"account-locking.html#usage-alert-and-grace-period","title":"Usage alert and grace period - Account locking","type":"extras"},{"doc":"The grace period is checked daily by the `Plausible.Workers.LockSites` background job.\n\nFor users that expired their grace period, `sites.locked` is is set to `true`, restricting access to dashboards. This does not stop event ingestion, so users can have their stats up to date when they finally upgrade.\n\n![](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FN4GLWMwCrTuTcf31kYE9%2Fuploads%2FAplurtG7UsGXMskZOlUO%2FPasted%20image%2020220909122622.png?alt=media&token=5c8156d7-d4a7-4c99-8bac-2f1e9b7d4cae)","ref":"account-locking.html#account-locking","title":"Account locking - Account locking","type":"extras"}]} \ No newline at end of file diff --git a/dist/sidebar_items-8E72A386.js b/dist/sidebar_items-8E72A386.js deleted file mode 100644 index 1c7bc058c..000000000 --- a/dist/sidebar_items-8E72A386.js +++ /dev/null @@ -1 +0,0 @@ -sidebarNodes={"extras":[{"group":"","headers":[{"anchor":"modules","id":"Modules"},{"anchor":"mix-tasks","id":"Mix Tasks"}],"id":"api-reference","title":"API Reference"},{"group":"","headers":[{"anchor":"why-plausible","id":"Why Plausible?"},{"anchor":"why-is-plausible-analytics-cloud-not-free-like-google-analytics","id":"Why is Plausible Analytics Cloud not free like Google Analytics?"},{"anchor":"getting-started-with-plausible","id":"Getting started with Plausible"},{"anchor":"technology","id":"Technology"},{"anchor":"contributors","id":"Contributors"},{"anchor":"feedback-roadmap","id":"Feedback & Roadmap"},{"anchor":"license-trademarks","id":"License & Trademarks"}],"id":"readme","title":"Introduction"},{"group":"","headers":[{"anchor":"development-setup","id":"Development setup"},{"anchor":"finding-a-task","id":"Finding a task"}],"id":"contributing","title":"Contributing"},{"group":"Features","headers":[{"anchor":"usage-alert-and-grace-period","id":"Usage alert and grace period"},{"anchor":"account-locking","id":"Account locking"}],"id":"account-locking","title":"Account locking"}],"modules":[{"deprecated":false,"group":"","id":"ObanErrorReporter","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/4","deprecated":false,"id":"handle_event/4","title":"handle_event(list, measure, meta, _)"}]}],"sections":[],"title":"ObanErrorReporter"},{"deprecated":false,"group":"","id":"Plausible","sections":[],"title":"Plausible"},{"deprecated":false,"group":"","id":"Plausible.AsyncInsertRepo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.AsyncInsertRepo"},{"deprecated":false,"group":"","id":"Plausible.Auth","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create_user/3","deprecated":false,"id":"create_user/3","title":"create_user(name, email, pwd)"},{"anchor":"delete_user/1","deprecated":false,"id":"delete_user/1","title":"delete_user(user)"},{"anchor":"enterprise_configured?/1","deprecated":false,"id":"enterprise_configured?/1","title":"enterprise_configured?(user)"},{"anchor":"find_user_by/1","deprecated":false,"id":"find_user_by/1","title":"find_user_by(opts)"},{"anchor":"has_active_sites?/2","deprecated":false,"id":"has_active_sites?/2","title":"has_active_sites?(user, roles \\\\ [:owner, :admin, :viewer])"},{"anchor":"is_super_admin?/1","deprecated":false,"id":"is_super_admin?/1","title":"is_super_admin?(user_id)"},{"anchor":"issue_email_verification/1","deprecated":false,"id":"issue_email_verification/1","title":"issue_email_verification(user)"},{"anchor":"user_owns_sites?/1","deprecated":false,"id":"user_owns_sites?/1","title":"user_owns_sites?(user)"},{"anchor":"verify_email/2","deprecated":false,"id":"verify_email/2","title":"verify_email(user, code)"}]}],"sections":[],"title":"Plausible.Auth"},{"deprecated":false,"group":"","id":"Plausible.Auth.ApiKey","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(schema, attrs \\\\ %{})"},{"anchor":"do_hash/1","deprecated":false,"id":"do_hash/1","title":"do_hash(key)"},{"anchor":"process_key/1","deprecated":false,"id":"process_key/1","title":"process_key(changeset)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(schema, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Auth.ApiKey"},{"deprecated":false,"group":"","id":"Plausible.Auth.ApiKeyAdmin","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create_changeset/2","deprecated":false,"id":"create_changeset/2","title":"create_changeset(schema, attrs)"},{"anchor":"custom_index_query/3","deprecated":false,"id":"custom_index_query/3","title":"custom_index_query(conn, schema, query)"},{"anchor":"form_fields/1","deprecated":false,"id":"form_fields/1","title":"form_fields(_)"},{"anchor":"index/1","deprecated":false,"id":"index/1","title":"index(_)"},{"anchor":"search_fields/1","deprecated":false,"id":"search_fields/1","title":"search_fields(schema)"},{"anchor":"update_changeset/2","deprecated":false,"id":"update_changeset/2","title":"update_changeset(schema, attrs)"}]}],"sections":[],"title":"Plausible.Auth.ApiKeyAdmin"},{"deprecated":false,"group":"","id":"Plausible.Auth.GracePeriod","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"active?/1","deprecated":false,"id":"active?/1","title":"active?(user)"},{"anchor":"end_changeset/1","deprecated":false,"id":"end_changeset/1","title":"end_changeset(user)"},{"anchor":"expired?/1","deprecated":false,"id":"expired?/1","title":"expired?(user)"},{"anchor":"remove_changeset/1","deprecated":false,"id":"remove_changeset/1","title":"remove_changeset(user)"},{"anchor":"start_changeset/2","deprecated":false,"id":"start_changeset/2","title":"start_changeset(user, allowance_required)"},{"anchor":"start_manual_lock_changeset/2","deprecated":false,"id":"start_manual_lock_changeset/2","title":"start_manual_lock_changeset(user, allowance_required)"}]}],"sections":[],"title":"Plausible.Auth.GracePeriod"},{"deprecated":false,"group":"","id":"Plausible.Auth.Invitation","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Auth.Invitation"},{"deprecated":false,"group":"","id":"Plausible.Auth.Password","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"dummy_calculation/0","deprecated":false,"id":"dummy_calculation/0","title":"dummy_calculation()"},{"anchor":"hash/1","deprecated":false,"id":"hash/1","title":"hash(password)"},{"anchor":"match?/2","deprecated":false,"id":"match?/2","title":"match?(password, hash)"}]}],"sections":[],"title":"Plausible.Auth.Password"},{"deprecated":false,"group":"","id":"Plausible.Auth.Token","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"sign_password_reset/1","deprecated":false,"id":"sign_password_reset/1","title":"sign_password_reset(email)"},{"anchor":"sign_shared_link/1","deprecated":false,"id":"sign_shared_link/1","title":"sign_shared_link(slug)"},{"anchor":"verify_password_reset/1","deprecated":false,"id":"verify_password_reset/1","title":"verify_password_reset(token)"},{"anchor":"verify_shared_link/1","deprecated":false,"id":"verify_shared_link/1","title":"verify_shared_link(token)"}]}],"sections":[],"title":"Plausible.Auth.Token"},{"deprecated":false,"group":"","id":"Plausible.Auth.User","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"cancel_email_changeset/1","deprecated":false,"id":"cancel_email_changeset/1","title":"cancel_email_changeset(user)"},{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(user, attrs \\\\ %{})"},{"anchor":"email_changeset/2","deprecated":false,"id":"email_changeset/2","title":"email_changeset(user, attrs \\\\ %{})"},{"anchor":"end_trial/1","deprecated":false,"id":"end_trial/1","title":"end_trial(user)"},{"anchor":"hash_password/1","deprecated":false,"id":"hash_password/1","title":"hash_password(changeset)"},{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(attrs \\\\ %{})"},{"anchor":"password_strength/1","deprecated":false,"id":"password_strength/1","title":"password_strength(changeset)"},{"anchor":"remove_trial_expiry/1","deprecated":false,"id":"remove_trial_expiry/1","title":"remove_trial_expiry(user)"},{"anchor":"set_password/2","deprecated":false,"id":"set_password/2","title":"set_password(user, password)"},{"anchor":"settings_changeset/2","deprecated":false,"id":"settings_changeset/2","title":"settings_changeset(user, attrs \\\\ %{})"},{"anchor":"start_trial/1","deprecated":false,"id":"start_trial/1","title":"start_trial(user)"}]}],"sections":[],"title":"Plausible.Auth.User"},{"deprecated":false,"group":"","id":"Plausible.Auth.UserAdmin","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"custom_index_query/3","deprecated":false,"id":"custom_index_query/3","title":"custom_index_query(conn, schema, query)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(conn, map)"},{"anchor":"form_fields/1","deprecated":false,"id":"form_fields/1","title":"form_fields(_)"},{"anchor":"index/1","deprecated":false,"id":"index/1","title":"index(_)"},{"anchor":"resource_actions/1","deprecated":false,"id":"resource_actions/1","title":"resource_actions(_)"}]}],"sections":[],"title":"Plausible.Auth.UserAdmin"},{"deprecated":false,"group":"","id":"Plausible.Billing","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"active_subscription_for/1","deprecated":false,"id":"active_subscription_for/1","title":"active_subscription_for(user_id)"},{"anchor":"change_plan/2","deprecated":false,"id":"change_plan/2","title":"change_plan(user, new_plan_id)"},{"anchor":"change_plan_preview/2","deprecated":false,"id":"change_plan_preview/2","title":"change_plan_preview(subscription, new_plan_id)"},{"anchor":"check_needs_to_upgrade/1","deprecated":false,"id":"check_needs_to_upgrade/1","title":"check_needs_to_upgrade(user)"},{"anchor":"has_active_subscription?/1","deprecated":false,"id":"has_active_subscription?/1","title":"has_active_subscription?(user_id)"},{"anchor":"last_two_billing_cycles/2","deprecated":false,"id":"last_two_billing_cycles/2","title":"last_two_billing_cycles(user, today \\\\ Timex.today())"},{"anchor":"last_two_billing_months_usage/2","deprecated":false,"id":"last_two_billing_months_usage/2","title":"last_two_billing_months_usage(user, today \\\\ Timex.today())"},{"anchor":"on_trial?/1","deprecated":false,"id":"on_trial?/1","title":"on_trial?(user)"},{"anchor":"paddle_api/0","deprecated":false,"id":"paddle_api/0","title":"paddle_api()"},{"anchor":"subscription_cancelled/1","deprecated":false,"id":"subscription_cancelled/1","title":"subscription_cancelled(params)"},{"anchor":"subscription_created/1","deprecated":false,"id":"subscription_created/1","title":"subscription_created(params)"},{"anchor":"subscription_payment_succeeded/1","deprecated":false,"id":"subscription_payment_succeeded/1","title":"subscription_payment_succeeded(params)"},{"anchor":"subscription_updated/1","deprecated":false,"id":"subscription_updated/1","title":"subscription_updated(params)"},{"anchor":"trial_days_left/1","deprecated":false,"id":"trial_days_left/1","title":"trial_days_left(user)"},{"anchor":"usage_breakdown/1","deprecated":false,"id":"usage_breakdown/1","title":"usage_breakdown(user)"}]}],"sections":[],"title":"Plausible.Billing"},{"deprecated":false,"group":"","id":"Plausible.Billing.EnterprisePlan","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(model, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Billing.EnterprisePlan"},{"deprecated":false,"group":"","id":"Plausible.Billing.EnterprisePlanAdmin","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"custom_index_query/3","deprecated":false,"id":"custom_index_query/3","title":"custom_index_query(conn, schema, query)"},{"anchor":"form_fields/1","deprecated":false,"id":"form_fields/1","title":"form_fields(_)"},{"anchor":"index/1","deprecated":false,"id":"index/1","title":"index(_)"},{"anchor":"search_fields/1","deprecated":false,"id":"search_fields/1","title":"search_fields(schema)"}]}],"sections":[],"title":"Plausible.Billing.EnterprisePlanAdmin"},{"deprecated":false,"group":"","id":"Plausible.Billing.PaddleApi","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"checkout_domain/0","deprecated":false,"id":"checkout_domain/0","title":"checkout_domain()"},{"anchor":"fetch_prices/1","deprecated":false,"id":"fetch_prices/1","title":"fetch_prices(product_ids)"},{"anchor":"get_invoices/1","deprecated":false,"id":"get_invoices/1","title":"get_invoices(subscription)"},{"anchor":"get_subscription/1","deprecated":false,"id":"get_subscription/1","title":"get_subscription(paddle_subscription_id)"},{"anchor":"update_subscription/2","deprecated":false,"id":"update_subscription/2","title":"update_subscription(paddle_subscription_id, params)"},{"anchor":"update_subscription_preview/2","deprecated":false,"id":"update_subscription_preview/2","title":"update_subscription_preview(paddle_subscription_id, new_plan_id)"},{"anchor":"vendors_domain/0","deprecated":false,"id":"vendors_domain/0","title":"vendors_domain()"}]}],"sections":[],"title":"Plausible.Billing.PaddleApi"},{"deprecated":false,"group":"","id":"Plausible.Billing.Plans","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"available_plans_with_prices/1","deprecated":false,"id":"available_plans_with_prices/1","title":"available_plans_with_prices(user)"},{"anchor":"business_plans/0","deprecated":false,"id":"business_plans/0","title":"business_plans()"},{"anchor":"business_tier?/1","deprecated":false,"id":"business_tier?/1","title":"business_tier?(subscription)"},{"anchor":"get_price_for/1","deprecated":false,"id":"get_price_for/1","title":"get_price_for(enterprise_plan)"},{"anchor":"get_regular_plan/2","deprecated":false,"id":"get_regular_plan/2","title":"get_regular_plan(subscription, opts \\\\ [])"},{"anchor":"get_subscription_plan/1","deprecated":false,"id":"get_subscription_plan/1","title":"get_subscription_plan(subscription)"},{"anchor":"growth_plans_for/1","deprecated":false,"id":"growth_plans_for/1","title":"growth_plans_for(user)"},{"anchor":"latest_enterprise_plan_with_price/1","deprecated":false,"id":"latest_enterprise_plan_with_price/1","title":"latest_enterprise_plan_with_price(user)"},{"anchor":"subscription_interval/1","deprecated":false,"id":"subscription_interval/1","title":"subscription_interval(subscription)"},{"anchor":"suggest/2","deprecated":false,"id":"suggest/2","title":"suggest(user, usage_during_cycle)"},{"anchor":"with_prices/1","deprecated":false,"id":"with_prices/1","title":"with_prices(plans)"},{"anchor":"yearly_product_ids/0","deprecated":false,"id":"yearly_product_ids/0","title":"yearly_product_ids()"}]}],"sections":[],"title":"Plausible.Billing.Plans"},{"deprecated":false,"group":"","id":"Plausible.Billing.Quota","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"monthly_pageview_limit/1","deprecated":false,"id":"monthly_pageview_limit/1","title":"monthly_pageview_limit(subscription)"},{"anchor":"monthly_pageview_usage/1","deprecated":false,"id":"monthly_pageview_usage/1","title":"monthly_pageview_usage(user)"},{"anchor":"site_limit/1","deprecated":false,"id":"site_limit/1","title":"site_limit(user)"},{"anchor":"site_usage/1","deprecated":false,"id":"site_usage/1","title":"site_usage(user)"},{"anchor":"team_member_limit/1","deprecated":false,"id":"team_member_limit/1","title":"team_member_limit(user)"},{"anchor":"team_member_usage/1","deprecated":false,"id":"team_member_usage/1","title":"team_member_usage(user)"},{"anchor":"within_limit?/2","deprecated":false,"id":"within_limit?/2","title":"within_limit?(usage, limit)"}]}],"sections":[],"title":"Plausible.Billing.Quota"},{"deprecated":false,"group":"","id":"Plausible.Billing.SiteLocker","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:lock_reason/0","deprecated":false,"id":"lock_reason/0","title":"lock_reason()"},{"anchor":"t:update_opt/0","deprecated":false,"id":"update_opt/0","title":"update_opt()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"send_grace_period_end_email/1","deprecated":false,"id":"send_grace_period_end_email/1","title":"send_grace_period_end_email(user)"},{"anchor":"set_lock_status_for/2","deprecated":false,"id":"set_lock_status_for/2","title":"set_lock_status_for(user, status)"},{"anchor":"update_sites_for/2","deprecated":false,"id":"update_sites_for/2","title":"update_sites_for(user, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Billing.SiteLocker"},{"deprecated":false,"group":"","id":"Plausible.Billing.Subscription.Status","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:status/0","deprecated":false,"id":"status/0","title":"status()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"active/0","deprecated":false,"id":"active/0","title":"active()"},{"anchor":"deleted/0","deprecated":false,"id":"deleted/0","title":"deleted()"},{"anchor":"past_due/0","deprecated":false,"id":"past_due/0","title":"past_due()"},{"anchor":"paused/0","deprecated":false,"id":"paused/0","title":"paused()"},{"anchor":"valid_statuses/0","deprecated":false,"id":"valid_statuses/0","title":"valid_statuses()"}]}],"sections":[],"title":"Plausible.Billing.Subscription.Status"},{"deprecated":false,"group":"","id":"Plausible.ChangesetHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"traverse_errors/1","deprecated":false,"id":"traverse_errors/1","title":"traverse_errors(changeset)"}]}],"sections":[],"title":"Plausible.ChangesetHelpers"},{"deprecated":false,"group":"","id":"Plausible.Cldr","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"available_locale_name?/1","deprecated":false,"id":"available_locale_name?/1","title":"available_locale_name?(locale_name)"},{"anchor":"default_locale/0","deprecated":false,"id":"default_locale/0","title":"default_locale()"},{"anchor":"default_territory/0","deprecated":false,"id":"default_territory/0","title":"default_territory()"},{"anchor":"ellipsis/2","deprecated":false,"id":"ellipsis/2","title":"ellipsis(string, options \\\\ [])"},{"anchor":"get_locale/0","deprecated":false,"id":"get_locale/0","title":"get_locale()"},{"anchor":"known_calendars/0","deprecated":false,"id":"known_calendars/0","title":"known_calendars()"},{"anchor":"known_currencies/0","deprecated":false,"id":"known_currencies/0","title":"known_currencies()"},{"anchor":"known_gettext_locale_name/1","deprecated":false,"id":"known_gettext_locale_name/1","title":"known_gettext_locale_name(locale_name)"},{"anchor":"known_gettext_locale_name?/1","deprecated":false,"id":"known_gettext_locale_name?/1","title":"known_gettext_locale_name?(locale_name)"},{"anchor":"known_gettext_locale_names/0","deprecated":false,"id":"known_gettext_locale_names/0","title":"known_gettext_locale_names()"},{"anchor":"known_locale_name/1","deprecated":false,"id":"known_locale_name/1","title":"known_locale_name(locale_name)"},{"anchor":"known_locale_name?/1","deprecated":false,"id":"known_locale_name?/1","title":"known_locale_name?(locale_name)"},{"anchor":"known_locale_names/0","deprecated":false,"id":"known_locale_names/0","title":"known_locale_names()"},{"anchor":"known_number_system_types/0","deprecated":false,"id":"known_number_system_types/0","title":"known_number_system_types()"},{"anchor":"known_number_systems/0","deprecated":false,"id":"known_number_systems/0","title":"known_number_systems()"},{"anchor":"known_rbnf_locale_name/1","deprecated":false,"id":"known_rbnf_locale_name/1","title":"known_rbnf_locale_name(locale_name)"},{"anchor":"known_rbnf_locale_name?/1","deprecated":false,"id":"known_rbnf_locale_name?/1","title":"known_rbnf_locale_name?(locale_name)"},{"anchor":"known_rbnf_locale_names/0","deprecated":false,"id":"known_rbnf_locale_names/0","title":"known_rbnf_locale_names()"},{"anchor":"known_territories/0","deprecated":false,"id":"known_territories/0","title":"known_territories()"},{"anchor":"normalize_lenient_parse/3","deprecated":false,"id":"normalize_lenient_parse/3","title":"normalize_lenient_parse(string, scope, locale \\\\ get_locale())"},{"anchor":"put_locale/1","deprecated":false,"id":"put_locale/1","title":"put_locale(locale_name)"},{"anchor":"quote/2","deprecated":false,"id":"quote/2","title":"quote(string, options \\\\ [])"},{"anchor":"unknown_locale_names/0","deprecated":false,"id":"unknown_locale_names/0","title":"unknown_locale_names()"},{"anchor":"validate_calendar/1","deprecated":false,"id":"validate_calendar/1","title":"validate_calendar(calendar)"},{"anchor":"validate_currency/1","deprecated":false,"id":"validate_currency/1","title":"validate_currency(currency)"},{"anchor":"validate_locale/1","deprecated":false,"id":"validate_locale/1","title":"validate_locale(locale)"},{"anchor":"validate_number_system/1","deprecated":false,"id":"validate_number_system/1","title":"validate_number_system(number_system)"},{"anchor":"validate_number_system_type/1","deprecated":false,"id":"validate_number_system_type/1","title":"validate_number_system_type(number_system_type)"},{"anchor":"validate_territory/1","deprecated":false,"id":"validate_territory/1","title":"validate_territory(territory)"},{"anchor":"with_locale/2","deprecated":false,"id":"with_locale/2","title":"with_locale(locale, fun)"}]}],"sections":[],"title":"Plausible.Cldr"},{"deprecated":false,"group":"","id":"Plausible.Cldr.AcceptLanguage","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"best_match/1","deprecated":false,"id":"best_match/1","title":"best_match(accept_language)"},{"anchor":"parse/1","deprecated":false,"id":"parse/1","title":"parse(tokens_or_string)"},{"anchor":"parse!/1","deprecated":false,"id":"parse!/1","title":"parse!(accept_language)"}]}],"sections":[],"title":"Plausible.Cldr.AcceptLanguage"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Currency","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"currencies_for_locale/3","deprecated":false,"id":"currencies_for_locale/3","title":"currencies_for_locale(locale, only \\\\ :all, except \\\\ nil)"},{"anchor":"currencies_for_locale!/3","deprecated":false,"id":"currencies_for_locale!/3","title":"currencies_for_locale!(locale, only \\\\ :all, except \\\\ nil)"},{"anchor":"currency_for_code/2","deprecated":false,"id":"currency_for_code/2","title":"currency_for_code(currency_or_currency_code, options \\\\ [locale: Plausible.Cldr.default_locale()])"},{"anchor":"currency_for_code!/2","deprecated":false,"id":"currency_for_code!/2","title":"currency_for_code!(currency_or_currency_code, options \\\\ [locale: Plausible.Cldr.default_locale()])"},{"anchor":"currency_from_locale/1","deprecated":false,"id":"currency_from_locale/1","title":"currency_from_locale(locale)"},{"anchor":"currency_history_for_locale/1","deprecated":false,"id":"currency_history_for_locale/1","title":"currency_history_for_locale(language_tag)"},{"anchor":"currency_strings/3","deprecated":false,"id":"currency_strings/3","title":"currency_strings(locale, only \\\\ :all, except \\\\ nil)"},{"anchor":"currency_strings!/3","deprecated":false,"id":"currency_strings!/3","title":"currency_strings!(locale_name, only \\\\ :all, except \\\\ nil)"},{"anchor":"current_currency_from_locale/1","deprecated":false,"id":"current_currency_from_locale/1","title":"current_currency_from_locale(locale)"},{"anchor":"current_territory_currencies/0","deprecated":false,"id":"current_territory_currencies/0","title":"current_territory_currencies()"},{"anchor":"known_currencies/0","deprecated":false,"id":"known_currencies/0","title":"known_currencies()"},{"anchor":"known_currency?/1","deprecated":false,"id":"known_currency?/1","title":"known_currency?(code)"},{"anchor":"known_currency_code/1","deprecated":false,"id":"known_currency_code/1","title":"known_currency_code(currency_code)"},{"anchor":"known_currency_code?/1","deprecated":false,"id":"known_currency_code?/1","title":"known_currency_code?(currency_code)"},{"anchor":"known_currency_codes/0","deprecated":false,"id":"known_currency_codes/0","title":"known_currency_codes()"},{"anchor":"new/2","deprecated":false,"id":"new/2","title":"new(currency, options \\\\ [])"},{"anchor":"pluralize/3","deprecated":false,"id":"pluralize/3","title":"pluralize(number, currency, options \\\\ [])"},{"anchor":"strings_for_currency/2","deprecated":false,"id":"strings_for_currency/2","title":"strings_for_currency(currency, locale)"}]}],"sections":[],"title":"Plausible.Cldr.Currency"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Locale","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fallback_locale_names/1","deprecated":false,"id":"fallback_locale_names/1","title":"fallback_locale_names(locale)"},{"anchor":"fallback_locales/1","deprecated":false,"id":"fallback_locales/1","title":"fallback_locales(locale)"},{"anchor":"locale_for_territory/1","deprecated":false,"id":"locale_for_territory/1","title":"locale_for_territory(territory)"},{"anchor":"locale_from_host/2","deprecated":false,"id":"locale_from_host/2","title":"locale_from_host(host, options \\\\ [])"},{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(locale_name)"},{"anchor":"new!/1","deprecated":false,"id":"new!/1","title":"new!(locale_name)"},{"anchor":"script_direction_from_locale/1","deprecated":false,"id":"script_direction_from_locale/1","title":"script_direction_from_locale(locale)"},{"anchor":"territory_from_host/1","deprecated":false,"id":"territory_from_host/1","title":"territory_from_host(host)"},{"anchor":"territory_from_locale/1","deprecated":false,"id":"territory_from_locale/1","title":"territory_from_locale(locale)"},{"anchor":"timezone_from_locale/1","deprecated":false,"id":"timezone_from_locale/1","title":"timezone_from_locale(locale)"}]}],"sections":[],"title":"Plausible.Cldr.Locale"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"parse/2","deprecated":false,"id":"parse/2","title":"parse(string, options \\\\ [])"},{"anchor":"resolve_currencies/2","deprecated":false,"id":"resolve_currencies/2","title":"resolve_currencies(list, options \\\\ [])"},{"anchor":"resolve_currency/2","deprecated":false,"id":"resolve_currency/2","title":"resolve_currency(string, options \\\\ [])"},{"anchor":"resolve_per/2","deprecated":false,"id":"resolve_per/2","title":"resolve_per(string, options \\\\ [])"},{"anchor":"resolve_pers/2","deprecated":false,"id":"resolve_pers/2","title":"resolve_pers(list, options \\\\ [])"},{"anchor":"scan/2","deprecated":false,"id":"scan/2","title":"scan(string, options \\\\ [])"},{"anchor":"to_approx_string/2","deprecated":false,"id":"to_approx_string/2","title":"to_approx_string(number, options \\\\ [])"},{"anchor":"to_at_least_string/2","deprecated":false,"id":"to_at_least_string/2","title":"to_at_least_string(number, options \\\\ [])"},{"anchor":"to_at_most_string/2","deprecated":false,"id":"to_at_most_string/2","title":"to_at_most_string(number, options \\\\ [])"},{"anchor":"to_range_string/2","deprecated":false,"id":"to_range_string/2","title":"to_range_string(range, options \\\\ [])"},{"anchor":"to_string/2","deprecated":false,"id":"to_string/2","title":"to_string(number, options \\\\ default_options())"},{"anchor":"to_string!/2","deprecated":false,"id":"to_string!/2","title":"to_string!(number, options \\\\ default_options())"},{"anchor":"validate_number_system/2","deprecated":false,"id":"validate_number_system/2","title":"validate_number_system(locale, number_system)"}]}],"sections":[],"title":"Plausible.Cldr.Number"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Cardinal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"available_locale_names/0","deprecated":false,"id":"available_locale_names/0","title":"available_locale_names()"},{"anchor":"known_locale_names/0","deprecated":false,"id":"known_locale_names/0","title":"known_locale_names()"},{"anchor":"plural_rule/3","deprecated":false,"id":"plural_rule/3","title":"plural_rule(number, locale, rounding \\\\ Math.default_rounding())"},{"anchor":"plural_rules/0","deprecated":false,"id":"plural_rules/0","title":"plural_rules()"},{"anchor":"plural_rules_for/1","deprecated":false,"id":"plural_rules_for/1","title":"plural_rules_for(locale_name)"},{"anchor":"pluralize/3","deprecated":false,"id":"pluralize/3","title":"pluralize(number, locale_name, substitutions)"}]}],"sections":[],"title":"Plausible.Cldr.Number.Cardinal"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Format","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_formats_for/1","deprecated":false,"id":"all_formats_for/1","title":"all_formats_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"all_formats_for!/1","deprecated":false,"id":"all_formats_for!/1","title":"all_formats_for!(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"currency_spacing/2","deprecated":false,"id":"currency_spacing/2","title":"currency_spacing(locale, number_system)"},{"anchor":"decimal_format_list/0","deprecated":false,"id":"decimal_format_list/0","title":"decimal_format_list()"},{"anchor":"decimal_format_list_for/1","deprecated":false,"id":"decimal_format_list_for/1","title":"decimal_format_list_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"default_grouping_for/1","deprecated":false,"id":"default_grouping_for/1","title":"default_grouping_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"default_grouping_for!/1","deprecated":false,"id":"default_grouping_for!/1","title":"default_grouping_for!(locale)"},{"anchor":"formats_for/2","deprecated":false,"id":"formats_for/2","title":"formats_for(locale \\\\ Plausible.Cldr.default_locale(), number_system \\\\ Cldr.Number.System.default_number_system_type())"},{"anchor":"formats_for!/2","deprecated":false,"id":"formats_for!/2","title":"formats_for!(locale \\\\ Plausible.Cldr.default_locale(), number_system \\\\ Cldr.Number.System.default_number_system_type())"},{"anchor":"minimum_grouping_digits_for/1","deprecated":false,"id":"minimum_grouping_digits_for/1","title":"minimum_grouping_digits_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"minimum_grouping_digits_for!/1","deprecated":false,"id":"minimum_grouping_digits_for!/1","title":"minimum_grouping_digits_for!(locale)"}]}],"sections":[{"anchor":"module-number-pattern-examples","id":"Number Pattern Examples"}],"title":"Plausible.Cldr.Number.Format"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Formatter.Decimal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"metadata!/1","deprecated":false,"id":"metadata!/1","title":"metadata!(format)"},{"anchor":"to_string/3","deprecated":false,"id":"to_string/3","title":"to_string(number, format, options \\\\ [])"}]}],"sections":[],"title":"Plausible.Cldr.Number.Formatter.Decimal"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Ordinal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"available_locale_names/0","deprecated":false,"id":"available_locale_names/0","title":"available_locale_names()"},{"anchor":"known_locale_names/0","deprecated":false,"id":"known_locale_names/0","title":"known_locale_names()"},{"anchor":"plural_rule/3","deprecated":false,"id":"plural_rule/3","title":"plural_rule(number, locale, rounding \\\\ Math.default_rounding())"},{"anchor":"plural_rules/0","deprecated":false,"id":"plural_rules/0","title":"plural_rules()"},{"anchor":"plural_rules_for/1","deprecated":false,"id":"plural_rules_for/1","title":"plural_rules_for(locale_name)"},{"anchor":"pluralize/3","deprecated":false,"id":"pluralize/3","title":"pluralize(number, locale_name, substitutions)"}]}],"sections":[],"title":"Plausible.Cldr.Number.Ordinal"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.PluralRule.Range","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"plural_rule/3","deprecated":false,"id":"plural_rule/3","title":"plural_rule(first, last, locale)"}]}],"sections":[],"title":"Plausible.Cldr.Number.PluralRule.Range"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Symbol","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_decimal_symbols/0","deprecated":false,"id":"all_decimal_symbols/0","title":"all_decimal_symbols()"},{"anchor":"all_decimal_symbols_class/0","deprecated":false,"id":"all_decimal_symbols_class/0","title":"all_decimal_symbols_class()"},{"anchor":"all_grouping_symbols/0","deprecated":false,"id":"all_grouping_symbols/0","title":"all_grouping_symbols()"},{"anchor":"all_grouping_symbols_class/0","deprecated":false,"id":"all_grouping_symbols_class/0","title":"all_grouping_symbols_class()"},{"anchor":"number_symbols_for/1","deprecated":false,"id":"number_symbols_for/1","title":"number_symbols_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"number_symbols_for/2","deprecated":false,"id":"number_symbols_for/2","title":"number_symbols_for(locale, number_system)"}]}],"sections":[],"title":"Plausible.Cldr.Number.Symbol"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.System","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"number_system_for/2","deprecated":false,"id":"number_system_for/2","title":"number_system_for(locale, system_name)"},{"anchor":"number_system_from_locale/1","deprecated":false,"id":"number_system_from_locale/1","title":"number_system_from_locale(locale)"},{"anchor":"number_system_names_for/1","deprecated":false,"id":"number_system_names_for/1","title":"number_system_names_for(locale)"},{"anchor":"number_system_names_for!/1","deprecated":false,"id":"number_system_names_for!/1","title":"number_system_names_for!(locale)"},{"anchor":"number_system_types_for/1","deprecated":false,"id":"number_system_types_for/1","title":"number_system_types_for(locale)"},{"anchor":"number_systems_for/1","deprecated":false,"id":"number_systems_for/1","title":"number_systems_for(locale)"},{"anchor":"number_systems_for!/1","deprecated":false,"id":"number_systems_for!/1","title":"number_systems_for!(locale)"},{"anchor":"number_systems_like/2","deprecated":false,"id":"number_systems_like/2","title":"number_systems_like(locale, number_system)"},{"anchor":"system_name_from/2","deprecated":false,"id":"system_name_from/2","title":"system_name_from(system_name, locale)"},{"anchor":"to_system/2","deprecated":false,"id":"to_system/2","title":"to_system(number, system)"},{"anchor":"to_system!/2","deprecated":false,"id":"to_system!/2","title":"to_system!(number, system_name)"}]}],"sections":[],"title":"Plausible.Cldr.Number.System"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Transliterate","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"transliterate/3","deprecated":false,"id":"transliterate/3","title":"transliterate(sequence, locale \\\\ Plausible.Cldr.get_locale(), number_system \\\\ System.default_number_system_type())"},{"anchor":"transliterate!/3","deprecated":false,"id":"transliterate!/3","title":"transliterate!(sequence, locale, number_system)"},{"anchor":"transliterate_digits/3","deprecated":false,"id":"transliterate_digits/3","title":"transliterate_digits(digits, from_system, to_system)"}]}],"sections":[],"title":"Plausible.Cldr.Number.Transliterate"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Rbnf.NumberSystem","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_rule_sets/0","deprecated":false,"id":"all_rule_sets/0","title":"all_rule_sets()"},{"anchor":"armenian_lower/1","deprecated":false,"id":"armenian_lower/1","title":"armenian_lower(number)"},{"anchor":"armenian_lower/2","deprecated":false,"id":"armenian_lower/2","title":"armenian_lower(number, locale)"},{"anchor":"armenian_upper/1","deprecated":false,"id":"armenian_upper/1","title":"armenian_upper(number)"},{"anchor":"armenian_upper/2","deprecated":false,"id":"armenian_upper/2","title":"armenian_upper(number, locale)"},{"anchor":"cyrillic_lower/1","deprecated":false,"id":"cyrillic_lower/1","title":"cyrillic_lower(number)"},{"anchor":"cyrillic_lower/2","deprecated":false,"id":"cyrillic_lower/2","title":"cyrillic_lower(number, locale)"},{"anchor":"cyrillic_lower_1_10/2","deprecated":false,"id":"cyrillic_lower_1_10/2","title":"cyrillic_lower_1_10(number, language_tag)"},{"anchor":"cyrillic_lower_final/2","deprecated":false,"id":"cyrillic_lower_final/2","title":"cyrillic_lower_final(number, language_tag)"},{"anchor":"cyrillic_lower_post/2","deprecated":false,"id":"cyrillic_lower_post/2","title":"cyrillic_lower_post(number, language_tag)"},{"anchor":"cyrillic_lower_thousands/2","deprecated":false,"id":"cyrillic_lower_thousands/2","title":"cyrillic_lower_thousands(number, language_tag)"},{"anchor":"ethiopic/1","deprecated":false,"id":"ethiopic/1","title":"ethiopic(number)"},{"anchor":"ethiopic/2","deprecated":false,"id":"ethiopic/2","title":"ethiopic(number, locale)"},{"anchor":"ethiopic_p1/2","deprecated":false,"id":"ethiopic_p1/2","title":"ethiopic_p1(number, language_tag)"},{"anchor":"ethiopic_p2/2","deprecated":false,"id":"ethiopic_p2/2","title":"ethiopic_p2(number, language_tag)"},{"anchor":"ethiopic_p3/2","deprecated":false,"id":"ethiopic_p3/2","title":"ethiopic_p3(number, language_tag)"},{"anchor":"ethiopic_p/2","deprecated":false,"id":"ethiopic_p/2","title":"ethiopic_p(number, language_tag)"},{"anchor":"georgian/1","deprecated":false,"id":"georgian/1","title":"georgian(number)"},{"anchor":"georgian/2","deprecated":false,"id":"georgian/2","title":"georgian(number, locale)"},{"anchor":"greek_lower/1","deprecated":false,"id":"greek_lower/1","title":"greek_lower(number)"},{"anchor":"greek_lower/2","deprecated":false,"id":"greek_lower/2","title":"greek_lower(number, locale)"},{"anchor":"greek_numeral_majuscules/2","deprecated":false,"id":"greek_numeral_majuscules/2","title":"greek_numeral_majuscules(number, language_tag)"},{"anchor":"greek_numeral_minuscules/2","deprecated":false,"id":"greek_numeral_minuscules/2","title":"greek_numeral_minuscules(number, language_tag)"},{"anchor":"greek_upper/1","deprecated":false,"id":"greek_upper/1","title":"greek_upper(number)"},{"anchor":"greek_upper/2","deprecated":false,"id":"greek_upper/2","title":"greek_upper(number, locale)"},{"anchor":"hebrew/1","deprecated":false,"id":"hebrew/1","title":"hebrew(number)"},{"anchor":"hebrew/2","deprecated":false,"id":"hebrew/2","title":"hebrew(number, locale)"},{"anchor":"hebrew_0_99/2","deprecated":false,"id":"hebrew_0_99/2","title":"hebrew_0_99(number, language_tag)"},{"anchor":"hebrew_item/1","deprecated":false,"id":"hebrew_item/1","title":"hebrew_item(number)"},{"anchor":"hebrew_item/2","deprecated":false,"id":"hebrew_item/2","title":"hebrew_item(number, locale)"},{"anchor":"hebrew_item_hundreds/2","deprecated":false,"id":"hebrew_item_hundreds/2","title":"hebrew_item_hundreds(number, language_tag)"},{"anchor":"hebrew_thousands/2","deprecated":false,"id":"hebrew_thousands/2","title":"hebrew_thousands(number, language_tag)"},{"anchor":"roman_lower/1","deprecated":false,"id":"roman_lower/1","title":"roman_lower(number)"},{"anchor":"roman_lower/2","deprecated":false,"id":"roman_lower/2","title":"roman_lower(number, locale)"},{"anchor":"roman_upper/1","deprecated":false,"id":"roman_upper/1","title":"roman_upper(number)"},{"anchor":"roman_upper/2","deprecated":false,"id":"roman_upper/2","title":"roman_upper(number, locale)"},{"anchor":"rule_sets/0","deprecated":false,"id":"rule_sets/0","title":"rule_sets()"},{"anchor":"rule_sets/1","deprecated":false,"id":"rule_sets/1","title":"rule_sets(rbnf_locale_name)"},{"anchor":"tamil/1","deprecated":false,"id":"tamil/1","title":"tamil(number)"},{"anchor":"tamil/2","deprecated":false,"id":"tamil/2","title":"tamil(number, locale)"},{"anchor":"tamil_thousands/2","deprecated":false,"id":"tamil_thousands/2","title":"tamil_thousands(number, language_tag)"},{"anchor":"zz_default/1","deprecated":false,"id":"zz_default/1","title":"zz_default(number)"},{"anchor":"zz_default/2","deprecated":false,"id":"zz_default/2","title":"zz_default(number, locale)"}]}],"sections":[],"title":"Plausible.Cldr.Rbnf.NumberSystem"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Rbnf.Ordinal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_rule_sets/0","deprecated":false,"id":"all_rule_sets/0","title":"all_rule_sets()"},{"anchor":"digits_ordinal/2","deprecated":false,"id":"digits_ordinal/2","title":"digits_ordinal(number, locale)"},{"anchor":"rule_sets/0","deprecated":false,"id":"rule_sets/0","title":"rule_sets()"},{"anchor":"rule_sets/1","deprecated":false,"id":"rule_sets/1","title":"rule_sets(rbnf_locale_name)"}]}],"sections":[],"title":"Plausible.Cldr.Rbnf.Ordinal"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Rbnf.Spellout","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_rule_sets/0","deprecated":false,"id":"all_rule_sets/0","title":"all_rule_sets()"},{"anchor":"and/2","deprecated":false,"id":"and/2","title":"number and language_tag"},{"anchor":"and_o/2","deprecated":false,"id":"and_o/2","title":"and_o(number, language_tag)"},{"anchor":"commas/2","deprecated":false,"id":"commas/2","title":"commas(number, language_tag)"},{"anchor":"commas_o/2","deprecated":false,"id":"commas_o/2","title":"commas_o(number, language_tag)"},{"anchor":"r2d_year/2","deprecated":false,"id":"r2d_year/2","title":"r2d_year(number, language_tag)"},{"anchor":"rule_sets/0","deprecated":false,"id":"rule_sets/0","title":"rule_sets()"},{"anchor":"rule_sets/1","deprecated":false,"id":"rule_sets/1","title":"rule_sets(rbnf_locale_name)"},{"anchor":"spellout_cardinal/2","deprecated":false,"id":"spellout_cardinal/2","title":"spellout_cardinal(number, locale)"},{"anchor":"spellout_cardinal_verbose/2","deprecated":false,"id":"spellout_cardinal_verbose/2","title":"spellout_cardinal_verbose(number, locale)"},{"anchor":"spellout_numbering/2","deprecated":false,"id":"spellout_numbering/2","title":"spellout_numbering(number, locale)"},{"anchor":"spellout_numbering_verbose/2","deprecated":false,"id":"spellout_numbering_verbose/2","title":"spellout_numbering_verbose(number, locale)"},{"anchor":"spellout_numbering_year/2","deprecated":false,"id":"spellout_numbering_year/2","title":"spellout_numbering_year(number, locale)"},{"anchor":"spellout_ordinal/2","deprecated":false,"id":"spellout_ordinal/2","title":"spellout_ordinal(number, locale)"},{"anchor":"spellout_ordinal_verbose/2","deprecated":false,"id":"spellout_ordinal_verbose/2","title":"spellout_ordinal_verbose(number, locale)"},{"anchor":"th/2","deprecated":false,"id":"th/2","title":"th(number, language_tag)"},{"anchor":"tieth/2","deprecated":false,"id":"tieth/2","title":"tieth(number, language_tag)"}]}],"sections":[],"title":"Plausible.Cldr.Rbnf.Spellout"},{"deprecated":false,"group":"","id":"Plausible.ClickhouseEventV2","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(attrs)"}]}],"sections":[],"title":"Plausible.ClickhouseEventV2"},{"deprecated":false,"group":"","id":"Plausible.ClickhouseRepo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"parallel_tasks/1","deprecated":false,"id":"parallel_tasks/1","title":"parallel_tasks(queries)"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"}]}],"sections":[],"title":"Plausible.ClickhouseRepo"},{"deprecated":false,"group":"","id":"Plausible.ClickhouseSessionV2","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"random_uint64/0","deprecated":false,"id":"random_uint64/0","title":"random_uint64()"}]}],"sections":[],"title":"Plausible.ClickhouseSessionV2"},{"deprecated":false,"group":"","id":"Plausible.ClickhouseSessionV2.BoolUInt8","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"embed_as/1","deprecated":false,"id":"embed_as/1","title":"embed_as(_)"},{"anchor":"equal?/2","deprecated":false,"id":"equal?/2","title":"equal?(term1, term2)"}]}],"sections":[],"title":"Plausible.ClickhouseSessionV2.BoolUInt8"},{"deprecated":false,"group":"","id":"Plausible.ConfigHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"get_int_from_path_or_env/3","deprecated":false,"id":"get_int_from_path_or_env/3","title":"get_int_from_path_or_env(config_dir, var_name, default \\\\ nil)"},{"anchor":"get_var_from_path_or_env/3","deprecated":false,"id":"get_var_from_path_or_env/3","title":"get_var_from_path_or_env(config_dir, var_name, default \\\\ nil)"}]}],"sections":[],"title":"Plausible.ConfigHelpers"},{"deprecated":false,"group":"","id":"Plausible.DataCase","sections":[],"title":"Plausible.DataCase"},{"deprecated":false,"group":"","id":"Plausible.DataMigration","sections":[],"title":"Plausible.DataMigration"},{"deprecated":false,"group":"","id":"Plausible.DataMigration.NumericIDs","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"confirm/3","deprecated":false,"id":"confirm/3","title":"confirm(message, func, default_choice \\\\ :yes)"},{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(opts \\\\ [])"},{"anchor":"run_sql/2","deprecated":false,"id":"run_sql/2","title":"run_sql(name, assigns \\\\ [])"},{"anchor":"run_sql_confirm/2","deprecated":false,"id":"run_sql_confirm/2","title":"run_sql_confirm(name, options \\\\ [])"}]}],"sections":[],"title":"Plausible.DataMigration.NumericIDs"},{"deprecated":false,"group":"","id":"Plausible.DataMigration.Repo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start/2","deprecated":false,"id":"start/2","title":"start(url, max_threads)"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.DataMigration.Repo"},{"deprecated":false,"group":"","id":"Plausible.DataMigration.RewriteFunnelDupes","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"apply_change/2","deprecated":false,"id":"apply_change/2","title":"apply_change(funnel_id, change)"},{"anchor":"confirm/3","deprecated":false,"id":"confirm/3","title":"confirm(message, func, default_choice \\\\ :yes)"},{"anchor":"execute/1","deprecated":false,"id":"execute/1","title":"execute(data)"},{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(_ \\\\ [])"},{"anchor":"run_sql/2","deprecated":false,"id":"run_sql/2","title":"run_sql(name, assigns \\\\ [])"},{"anchor":"run_sql_confirm/2","deprecated":false,"id":"run_sql_confirm/2","title":"run_sql_confirm(name, options \\\\ [])"},{"anchor":"to_db_ops/1","deprecated":false,"id":"to_db_ops/1","title":"to_db_ops(meta)"},{"anchor":"to_map/1","deprecated":false,"id":"to_map/1","title":"to_map(row)"},{"anchor":"translate_to_db_ops/1","deprecated":false,"id":"translate_to_db_ops/1","title":"translate_to_db_ops(data)"}]}],"sections":[],"title":"Plausible.DataMigration.RewriteFunnelDupes"},{"deprecated":false,"group":"","id":"Plausible.DebugReplayInfo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"deserialize/1","deprecated":false,"id":"deserialize/1","title":"deserialize(replay_info)"},{"anchor":"include_sentry_replay_info/0","deprecated":false,"id":"include_sentry_replay_info/0","title":"include_sentry_replay_info()"}]}],"sections":[],"title":"Plausible.DebugReplayInfo"},{"deprecated":false,"group":"","id":"Plausible.Ecto.EventName","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"cast/1","deprecated":false,"id":"cast/1","title":"cast(val)"},{"anchor":"dump/1","deprecated":false,"id":"dump/1","title":"dump(val)"},{"anchor":"embed_as/1","deprecated":false,"id":"embed_as/1","title":"embed_as(_)"},{"anchor":"equal?/2","deprecated":false,"id":"equal?/2","title":"equal?(term1, term2)"},{"anchor":"load/1","deprecated":false,"id":"load/1","title":"load(val)"},{"anchor":"type/0","deprecated":false,"id":"type/0","title":"type()"}]}],"sections":[],"title":"Plausible.Ecto.EventName"},{"deprecated":false,"group":"","id":"Plausible.Event.WriteBuffer","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(init_arg)"},{"anchor":"flush/0","deprecated":false,"id":"flush/0","title":"flush()"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(buffer)"},{"anchor":"insert/1","deprecated":false,"id":"insert/1","title":"insert(event)"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts)"}]}],"sections":[],"title":"Plausible.Event.WriteBuffer"},{"deprecated":false,"group":"","id":"Plausible.Factory","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"api_key_factory/0","deprecated":false,"id":"api_key_factory/0","title":"api_key_factory()"},{"anchor":"build/2","deprecated":false,"id":"build/2","title":"build(factory_name, attrs \\\\ %{})"},{"anchor":"build_list/3","deprecated":false,"id":"build_list/3","title":"build_list(number_of_records, factory_name, attrs \\\\ %{})"},{"anchor":"build_pair/2","deprecated":false,"id":"build_pair/2","title":"build_pair(factory_name, attrs \\\\ %{})"},{"anchor":"ch_session_factory/0","deprecated":false,"id":"ch_session_factory/0","title":"ch_session_factory()"},{"anchor":"create/1","deprecated":false,"id":"create/1","title":"create(_)"},{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(_, _)"},{"anchor":"create_list/3","deprecated":false,"id":"create_list/3","title":"create_list(_, _, _)"},{"anchor":"create_pair/2","deprecated":false,"id":"create_pair/2","title":"create_pair(_, _)"},{"anchor":"custom_domain_factory/0","deprecated":false,"id":"custom_domain_factory/0","title":"custom_domain_factory()"},{"anchor":"enterprise_plan_factory/0","deprecated":false,"id":"enterprise_plan_factory/0","title":"enterprise_plan_factory()"},{"anchor":"event_factory/0","deprecated":false,"id":"event_factory/0","title":"event_factory()"},{"anchor":"factory/1","deprecated":false,"id":"factory/1","title":"factory(factory_name)"},{"anchor":"goal_factory/0","deprecated":false,"id":"goal_factory/0","title":"goal_factory()"},{"anchor":"google_auth_factory/0","deprecated":false,"id":"google_auth_factory/0","title":"google_auth_factory()"},{"anchor":"imported_browsers_factory/0","deprecated":false,"id":"imported_browsers_factory/0","title":"imported_browsers_factory()"},{"anchor":"imported_devices_factory/0","deprecated":false,"id":"imported_devices_factory/0","title":"imported_devices_factory()"},{"anchor":"imported_entry_pages_factory/0","deprecated":false,"id":"imported_entry_pages_factory/0","title":"imported_entry_pages_factory()"},{"anchor":"imported_exit_pages_factory/0","deprecated":false,"id":"imported_exit_pages_factory/0","title":"imported_exit_pages_factory()"},{"anchor":"imported_locations_factory/0","deprecated":false,"id":"imported_locations_factory/0","title":"imported_locations_factory()"},{"anchor":"imported_operating_systems_factory/0","deprecated":false,"id":"imported_operating_systems_factory/0","title":"imported_operating_systems_factory()"},{"anchor":"imported_pages_factory/0","deprecated":false,"id":"imported_pages_factory/0","title":"imported_pages_factory()"},{"anchor":"imported_sources_factory/0","deprecated":false,"id":"imported_sources_factory/0","title":"imported_sources_factory()"},{"anchor":"imported_visitors_factory/0","deprecated":false,"id":"imported_visitors_factory/0","title":"imported_visitors_factory()"},{"anchor":"insert/1","deprecated":false,"id":"insert/1","title":"insert(already_built_record)"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(already_built_record, function_opts)"},{"anchor":"insert/3","deprecated":false,"id":"insert/3","title":"insert(factory_name, attrs, opts)"},{"anchor":"insert_list/3","deprecated":false,"id":"insert_list/3","title":"insert_list(number_of_records, factory_name, attrs \\\\ %{})"},{"anchor":"insert_list/4","deprecated":false,"id":"insert_list/4","title":"insert_list(number_of_records, factory_name, attrs, opts)"},{"anchor":"insert_pair/2","deprecated":false,"id":"insert_pair/2","title":"insert_pair(factory_name, attrs \\\\ %{})"},{"anchor":"insert_pair/3","deprecated":false,"id":"insert_pair/3","title":"insert_pair(factory_name, attrs, opts)"},{"anchor":"invitation_factory/0","deprecated":false,"id":"invitation_factory/0","title":"invitation_factory()"},{"anchor":"monthly_report_factory/0","deprecated":false,"id":"monthly_report_factory/0","title":"monthly_report_factory()"},{"anchor":"pageview_factory/0","deprecated":false,"id":"pageview_factory/0","title":"pageview_factory()"},{"anchor":"params_for/2","deprecated":false,"id":"params_for/2","title":"params_for(factory_name, attrs \\\\ %{})"},{"anchor":"params_with_assocs/2","deprecated":false,"id":"params_with_assocs/2","title":"params_with_assocs(factory_name, attrs \\\\ %{})"},{"anchor":"shared_link_factory/0","deprecated":false,"id":"shared_link_factory/0","title":"shared_link_factory()"},{"anchor":"site_factory/0","deprecated":false,"id":"site_factory/0","title":"site_factory()"},{"anchor":"site_membership_factory/0","deprecated":false,"id":"site_membership_factory/0","title":"site_membership_factory()"},{"anchor":"spike_notification_factory/0","deprecated":false,"id":"spike_notification_factory/0","title":"spike_notification_factory()"},{"anchor":"string_params_for/2","deprecated":false,"id":"string_params_for/2","title":"string_params_for(factory_name, attrs \\\\ %{})"},{"anchor":"string_params_with_assocs/2","deprecated":false,"id":"string_params_with_assocs/2","title":"string_params_with_assocs(factory_name, attrs \\\\ %{})"},{"anchor":"subscription_factory/0","deprecated":false,"id":"subscription_factory/0","title":"subscription_factory()"},{"anchor":"user_factory/1","deprecated":false,"id":"user_factory/1","title":"user_factory(attrs)"},{"anchor":"weekly_report_factory/0","deprecated":false,"id":"weekly_report_factory/0","title":"weekly_report_factory()"}]}],"sections":[],"title":"Plausible.Factory"},{"deprecated":false,"group":"","id":"Plausible.Funnel","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(funnel \\\\ %__MODULE__{}, attrs \\\\ %{})"},{"anchor":"max_steps/0","deprecated":false,"id":"max_steps/0","title":"max_steps()"},{"anchor":"min_steps/0","deprecated":false,"id":"min_steps/0","title":"min_steps()"},{"anchor":"put_step_orders/1","deprecated":false,"id":"put_step_orders/1","title":"put_step_orders(changeset)"}]}],"sections":[],"title":"Plausible.Funnel"},{"deprecated":false,"group":"","id":"Plausible.Funnel.Step","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(step, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Funnel.Step"},{"deprecated":false,"group":"","id":"Plausible.Funnels","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create/3","deprecated":false,"id":"create/3","title":"create(site, name, steps)"},{"anchor":"create_changeset/3","deprecated":false,"id":"create_changeset/3","title":"create_changeset(site, name, steps)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(site_id, funnel_id)"},{"anchor":"ephemeral_definition/3","deprecated":false,"id":"ephemeral_definition/3","title":"ephemeral_definition(site, name, steps)"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(site_id, by)"},{"anchor":"list/1","deprecated":false,"id":"list/1","title":"list(site)"}]}],"sections":[],"title":"Plausible.Funnels"},{"deprecated":false,"group":"","id":"Plausible.Geo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"await_loader/0","deprecated":false,"id":"await_loader/0","title":"await_loader()"},{"anchor":"database_type/0","deprecated":false,"id":"database_type/0","title":"database_type()"},{"anchor":"load_db/1","deprecated":false,"id":"load_db/1","title":"load_db(opts)"},{"anchor":"lookup/1","deprecated":false,"id":"lookup/1","title":"lookup(ip_address)"}]}],"sections":[],"title":"Plausible.Geo"},{"deprecated":false,"group":"","id":"Plausible.Goal","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(goal, attrs \\\\ %{})"},{"anchor":"currency_options/0","deprecated":false,"id":"currency_options/0","title":"currency_options()"},{"anchor":"revenue?/1","deprecated":false,"id":"revenue?/1","title":"revenue?(goal)"},{"anchor":"valid_currencies/0","deprecated":false,"id":"valid_currencies/0","title":"valid_currencies()"}]}],"sections":[],"title":"Plausible.Goal"},{"deprecated":false,"group":"","id":"Plausible.Goals","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"count/1","deprecated":false,"id":"count/1","title":"count(site)"},{"anchor":"create/3","deprecated":false,"id":"create/3","title":"create(site, params, opts \\\\ [])"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(id, site_id)"},{"anchor":"find_or_create/2","deprecated":false,"id":"find_or_create/2","title":"find_or_create(site, map)"},{"anchor":"for_site/2","deprecated":false,"id":"for_site/2","title":"for_site(site, opts \\\\ [])"},{"anchor":"for_site_query/2","deprecated":false,"id":"for_site_query/2","title":"for_site_query(site, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Goals"},{"deprecated":false,"group":"","id":"Plausible.Google.Api","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:google_analytics_view/0","deprecated":false,"id":"google_analytics_view/0","title":"google_analytics_view()"},{"anchor":"t:import_auth/0","deprecated":false,"id":"import_auth/0","title":"import_auth()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_and_persist/3","deprecated":false,"id":"fetch_and_persist/3","title":"fetch_and_persist(site, report_request, opts \\\\ [])"},{"anchor":"fetch_stats/3","deprecated":false,"id":"fetch_stats/3","title":"fetch_stats(site, map, limit)"},{"anchor":"fetch_verified_properties/1","deprecated":false,"id":"fetch_verified_properties/1","title":"fetch_verified_properties(auth)"},{"anchor":"get_view/2","deprecated":false,"id":"get_view/2","title":"get_view(access_token, lookup_id)"},{"anchor":"import_analytics/4","deprecated":false,"id":"import_analytics/4","title":"import_analytics(site, date_range, view_id, auth)"},{"anchor":"import_authorize_url/2","deprecated":false,"id":"import_authorize_url/2","title":"import_authorize_url(site_id, redirect_to)"},{"anchor":"list_views/1","deprecated":false,"id":"list_views/1","title":"list_views(access_token)"},{"anchor":"search_console_authorize_url/2","deprecated":false,"id":"search_console_authorize_url/2","title":"search_console_authorize_url(site_id, redirect_to)"}]}],"sections":[],"title":"Plausible.Google.Api"},{"deprecated":false,"group":"","id":"Plausible.Google.Api.Mock","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_stats/3","deprecated":false,"id":"fetch_stats/3","title":"fetch_stats(auth, query, limit)"}]}],"sections":[],"title":"Plausible.Google.Api.Mock"},{"deprecated":false,"group":"","id":"Plausible.Google.Buffer","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(init_arg)"},{"anchor":"flush/2","deprecated":false,"id":"flush/2","title":"flush(pid, timeout \\\\ :infinity)"},{"anchor":"handle_continue/2","deprecated":false,"id":"handle_continue/2","title":"handle_continue(arg, state)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"},{"anchor":"insert_many/3","deprecated":false,"id":"insert_many/3","title":"insert_many(pid, table_name, records)"},{"anchor":"size/2","deprecated":false,"id":"size/2","title":"size(pid, table_name)"},{"anchor":"start_link/0","deprecated":false,"id":"start_link/0","title":"start_link()"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(pid)"}]}],"sections":[],"title":"Plausible.Google.Buffer"},{"deprecated":false,"group":"","id":"Plausible.Google.HTTP","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_access_token/1","deprecated":false,"id":"fetch_access_token/1","title":"fetch_access_token(code)"},{"anchor":"get_analytics_start_date/2","deprecated":false,"id":"get_analytics_start_date/2","title":"get_analytics_start_date(view_id, access_token)"},{"anchor":"get_report/1","deprecated":false,"id":"get_report/1","title":"get_report(report_request)"},{"anchor":"list_sites/1","deprecated":false,"id":"list_sites/1","title":"list_sites(access_token)"},{"anchor":"list_stats/5","deprecated":false,"id":"list_stats/5","title":"list_stats(access_token, property, date_range, limit, page \\\\ nil)"},{"anchor":"list_views_for_user/1","deprecated":false,"id":"list_views_for_user/1","title":"list_views_for_user(access_token)"},{"anchor":"refresh_auth_token/1","deprecated":false,"id":"refresh_auth_token/1","title":"refresh_auth_token(refresh_token)"}]}],"sections":[],"title":"Plausible.Google.HTTP"},{"deprecated":false,"group":"","id":"Plausible.Google.ReportRequest","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"full_report/0","deprecated":false,"id":"full_report/0","title":"full_report()"}]}],"sections":[],"title":"Plausible.Google.ReportRequest"},{"deprecated":false,"group":"","id":"Plausible.HTTPClient","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(url, headers \\\\ [], params \\\\ nil)"},{"anchor":"impl/0","deprecated":false,"id":"impl/0","title":"impl()"},{"anchor":"post/4","deprecated":false,"id":"post/4","title":"post(url, headers \\\\ [], params \\\\ nil, finch_req_opts \\\\ [])"}]}],"sections":[],"title":"Plausible.HTTPClient"},{"deprecated":false,"group":"","id":"Plausible.HTTPClient.Interface","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:finch_request_opts/0","deprecated":false,"id":"finch_request_opts/0","title":"finch_request_opts()"},{"anchor":"t:headers/0","deprecated":false,"id":"headers/0","title":"headers()"},{"anchor":"t:params/0","deprecated":false,"id":"params/0","title":"params()"},{"anchor":"t:response/0","deprecated":false,"id":"response/0","title":"response()"},{"anchor":"t:url/0","deprecated":false,"id":"url/0","title":"url()"}]},{"key":"callbacks","name":"Callbacks","nodes":[{"anchor":"c:get/1","deprecated":false,"id":"get/1","title":"get(url)"},{"anchor":"c:get/2","deprecated":false,"id":"get/2","title":"get(url, headers)"},{"anchor":"c:get/3","deprecated":false,"id":"get/3","title":"get(url, headers, params)"},{"anchor":"c:post/3","deprecated":false,"id":"post/3","title":"post(url, headers, params)"},{"anchor":"c:post/4","deprecated":false,"id":"post/4","title":"post(url, headers, params, finch_request_opts)"}]}],"sections":[],"title":"Plausible.HTTPClient.Interface"},{"deprecated":false,"group":"","id":"Plausible.HTTPClient.Non200Error","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(response)"}]}],"sections":[],"title":"Plausible.HTTPClient.Non200Error"},{"deprecated":false,"group":"","id":"Plausible.ImportDeletionRepo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.ImportDeletionRepo"},{"deprecated":false,"group":"","id":"Plausible.Imported","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"forget/1","deprecated":false,"id":"forget/1","title":"forget(site)"},{"anchor":"from_google_analytics/3","deprecated":false,"id":"from_google_analytics/3","title":"from_google_analytics(data, site_id, table)"},{"anchor":"tables/0","deprecated":false,"id":"tables/0","title":"tables()"}]}],"sections":[],"title":"Plausible.Imported"},{"deprecated":false,"group":"","id":"Plausible.IngestRepo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.IngestRepo"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Counters","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"enabled?/0","deprecated":false,"id":"enabled?/0","title":"enabled?()"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(pid)"}]}],"sections":[],"title":"Plausible.Ingestion.Counters"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Counters.Buffer","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:bucket_fn_opt/0","deprecated":false,"id":"bucket_fn_opt/0","title":"bucket_fn_opt()"},{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"},{"anchor":"t:unix_timestamp/0","deprecated":false,"id":"unix_timestamp/0","title":"unix_timestamp()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(buffer, metric, domain, timestamp)"},{"anchor":"bucket_10s/1","deprecated":false,"id":"bucket_10s/1","title":"bucket_10s(datetime)"},{"anchor":"flush/2","deprecated":false,"id":"flush/2","title":"flush(buffer, now \\\\ DateTime.utc_now())"},{"anchor":"new/2","deprecated":false,"id":"new/2","title":"new(buffer_name, opts \\\\ [])"},{"anchor":"previous_10s/1","deprecated":false,"id":"previous_10s/1","title":"previous_10s(datetime)"}]}],"sections":[],"title":"Plausible.Ingestion.Counters.Buffer"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Counters.Record","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]}],"sections":[],"title":"Plausible.Ingestion.Counters.Record"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Counters.TelemetryHandler","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/4","deprecated":false,"id":"handle_event/4","title":"handle_event(list, measurements, map, buffer)"},{"anchor":"install/1","deprecated":false,"id":"install/1","title":"install(buffer)"}]}],"sections":[],"title":"Plausible.Ingestion.Counters.TelemetryHandler"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Event","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:drop_reason/0","deprecated":false,"id":"drop_reason/0","title":"drop_reason()"},{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"build_and_buffer/1","deprecated":false,"id":"build_and_buffer/1","title":"build_and_buffer(request)"},{"anchor":"emit_telemetry_buffered/1","deprecated":false,"id":"emit_telemetry_buffered/1","title":"emit_telemetry_buffered(event)"},{"anchor":"emit_telemetry_dropped/2","deprecated":false,"id":"emit_telemetry_dropped/2","title":"emit_telemetry_dropped(event, reason)"},{"anchor":"telemetry_event_buffered/0","deprecated":false,"id":"telemetry_event_buffered/0","title":"telemetry_event_buffered()"},{"anchor":"telemetry_event_dropped/0","deprecated":false,"id":"telemetry_event_dropped/0","title":"telemetry_event_dropped()"}]}],"sections":[],"title":"Plausible.Ingestion.Event"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Request","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"build/2","deprecated":false,"id":"build/2","title":"build(conn, now \\\\ NaiveDateTime.utc_now())"},{"anchor":"sanitize_hostname/1","deprecated":false,"id":"sanitize_hostname/1","title":"sanitize_hostname(hostname)"}]}],"sections":[],"title":"Plausible.Ingestion.Request"},{"deprecated":false,"group":"","id":"Plausible.Mailer","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:result/0","deprecated":false,"id":"result/0","title":"result()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"deliver/1","deprecated":false,"id":"deliver/1","title":"deliver(email)"},{"anchor":"deliver_later/2","deprecated":false,"id":"deliver_later/2","title":"deliver_later(email, opts \\\\ [])"},{"anchor":"deliver_later!/2","deprecated":false,"id":"deliver_later!/2","title":"deliver_later!(email, opts \\\\ [])"},{"anchor":"deliver_now/2","deprecated":false,"id":"deliver_now/2","title":"deliver_now(email, opts \\\\ [])"},{"anchor":"deliver_now!/2","deprecated":false,"id":"deliver_now!/2","title":"deliver_now!(email, opts \\\\ [])"},{"anchor":"send/1","deprecated":false,"id":"send/1","title":"send(email)"}]}],"sections":[],"title":"Plausible.Mailer"},{"deprecated":false,"group":"","id":"Plausible.OpenTelemetry.Sampler","sections":[],"title":"Plausible.OpenTelemetry.Sampler"},{"deprecated":false,"group":"","id":"Plausible.PaddleApi.Mock","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_prices/1","deprecated":false,"id":"fetch_prices/1","title":"fetch_prices(product_ids)"},{"anchor":"get_invoices/1","deprecated":false,"id":"get_invoices/1","title":"get_invoices(subscription)"},{"anchor":"get_subscription/1","deprecated":false,"id":"get_subscription/1","title":"get_subscription(_)"},{"anchor":"update_subscription/2","deprecated":false,"id":"update_subscription/2","title":"update_subscription(_, map)"}]}],"sections":[],"title":"Plausible.PaddleApi.Mock"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.Goals","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:create_request/0","deprecated":false,"id":"create_request/0","title":"create_request()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(site, goal_or_goals)"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(site, id)"},{"anchor":"get_goals/2","deprecated":false,"id":"get_goals/2","title":"get_goals(site, params)"}]}],"sections":[],"title":"Plausible.Plugins.API.Goals"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.Pagination","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"paginate/4","deprecated":false,"id":"paginate/4","title":"paginate(queryable, params, opts, repo_opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Plugins.API.Pagination"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.SharedLinks","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(site, id)"},{"anchor":"get_or_create/3","deprecated":false,"id":"get_or_create/3","title":"get_or_create(site, name, password \\\\ nil)"},{"anchor":"get_shared_links/2","deprecated":false,"id":"get_shared_links/2","title":"get_shared_links(site, params)"}]}],"sections":[],"title":"Plausible.Plugins.API.SharedLinks"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.Token","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"generate/1","deprecated":false,"id":"generate/1","title":"generate(random_bytes \\\\ random_bytes())"},{"anchor":"hash/1","deprecated":false,"id":"hash/1","title":"hash(raw)"},{"anchor":"insert_changeset/3","deprecated":false,"id":"insert_changeset/3","title":"insert_changeset(site, map, attrs \\\\ %{})"},{"anchor":"prefix/0","deprecated":false,"id":"prefix/0","title":"prefix()"}]}],"sections":[],"title":"Plausible.Plugins.API.Token"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.Tokens","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create/3","deprecated":false,"id":"create/3","title":"create(site, description, generated_token \\\\ Token.generate())"},{"anchor":"find/2","deprecated":false,"id":"find/2","title":"find(domain, raw)"}]}],"sections":[],"title":"Plausible.Plugins.API.Tokens"},{"deprecated":false,"group":"","id":"Plausible.PromEx","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(init_arg)"}]}],"sections":[],"title":"Plausible.PromEx"},{"deprecated":false,"group":"","id":"Plausible.PromEx.Plugins.PlausibleMetrics","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"execute_cache_metrics/0","deprecated":false,"id":"execute_cache_metrics/0","title":"execute_cache_metrics()"},{"anchor":"execute_write_buffer_metrics/0","deprecated":false,"id":"execute_write_buffer_metrics/0","title":"execute_write_buffer_metrics()"}]}],"sections":[],"title":"Plausible.PromEx.Plugins.PlausibleMetrics"},{"deprecated":false,"group":"","id":"Plausible.Props","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:prop/0","deprecated":false,"id":"prop/0","title":"prop()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"allow/2","deprecated":false,"id":"allow/2","title":"allow(site, prop_or_props)"},{"anchor":"allow_changeset/2","deprecated":false,"id":"allow_changeset/2","title":"allow_changeset(site, prop_or_props)"},{"anchor":"allow_existing_props/1","deprecated":false,"id":"allow_existing_props/1","title":"allow_existing_props(site)"},{"anchor":"configured?/1","deprecated":false,"id":"configured?/1","title":"configured?(site)"},{"anchor":"disallow/2","deprecated":false,"id":"disallow/2","title":"disallow(site, prop)"},{"anchor":"internal_keys/0","deprecated":false,"id":"internal_keys/0","title":"internal_keys()"},{"anchor":"max_prop_key_length/0","deprecated":false,"id":"max_prop_key_length/0","title":"max_prop_key_length()"},{"anchor":"max_prop_value_length/0","deprecated":false,"id":"max_prop_value_length/0","title":"max_prop_value_length()"},{"anchor":"max_props/0","deprecated":false,"id":"max_props/0","title":"max_props()"},{"anchor":"suggest_keys_to_allow/2","deprecated":false,"id":"suggest_keys_to_allow/2","title":"suggest_keys_to_allow(site, limit \\\\ 300)"}]}],"sections":[],"title":"Plausible.Props"},{"deprecated":false,"group":"","id":"Plausible.Purge","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"delete_imported_stats!/1","deprecated":false,"id":"delete_imported_stats!/1","title":"delete_imported_stats!(site)"},{"anchor":"delete_native_stats!/1","deprecated":false,"id":"delete_native_stats!/1","title":"delete_native_stats!(site)"},{"anchor":"reset!/1","deprecated":false,"id":"reset!/1","title":"reset!(site)"}]}],"sections":[],"title":"Plausible.Purge"},{"deprecated":false,"group":"","id":"Plausible.Release","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"configure_ref_inspector/0","deprecated":false,"id":"configure_ref_inspector/0","title":"configure_ref_inspector()"},{"anchor":"configure_ua_inspector/0","deprecated":false,"id":"configure_ua_inspector/0","title":"configure_ua_inspector()"},{"anchor":"createdb/0","deprecated":false,"id":"createdb/0","title":"createdb()"},{"anchor":"migrate/0","deprecated":false,"id":"migrate/0","title":"migrate()"},{"anchor":"pending_migrations/0","deprecated":false,"id":"pending_migrations/0","title":"pending_migrations()"},{"anchor":"rollback/0","deprecated":false,"id":"rollback/0","title":"rollback()"},{"anchor":"seed/0","deprecated":false,"id":"seed/0","title":"seed()"},{"anchor":"selfhost?/0","deprecated":false,"id":"selfhost?/0","title":"selfhost?()"},{"anchor":"should_be_first_launch?/0","deprecated":false,"id":"should_be_first_launch?/0","title":"should_be_first_launch?()"}]}],"sections":[],"title":"Plausible.Release"},{"deprecated":false,"group":"","id":"Plausible.Repo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"explain/3","deprecated":false,"id":"explain/3","title":"explain(operation, queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"in_transaction?/0","deprecated":false,"id":"in_transaction?/0","title":"in_transaction?()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"paginate/3","deprecated":false,"id":"paginate/3","title":"paginate(query, params \\\\ %{}, options \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query_many/3","deprecated":false,"id":"query_many/3","title":"query_many(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query_many!/3","deprecated":false,"id":"query_many!/3","title":"query_many!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"rollback/1","deprecated":false,"id":"rollback/1","title":"rollback(value)"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"transaction/2","deprecated":false,"id":"transaction/2","title":"transaction(fun_or_multi, opts \\\\ [])"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Repo"},{"deprecated":false,"group":"","id":"Plausible.Sentry.Client","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/0","deprecated":false,"id":"child_spec/0","title":"child_spec()"},{"anchor":"post/3","deprecated":false,"id":"post/3","title":"post(url, headers, body)"}]}],"sections":[],"title":"Plausible.Sentry.Client"},{"deprecated":false,"group":"","id":"Plausible.SentryFilter","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"before_send/1","deprecated":false,"id":"before_send/1","title":"before_send(event)"},{"anchor":"exclude_exception?/2","deprecated":false,"id":"exclude_exception?/2","title":"exclude_exception?(exception, source)"}]}],"sections":[],"title":"Plausible.SentryFilter"},{"deprecated":false,"group":"","id":"Plausible.Session.CacheStore","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"on_event/3","deprecated":false,"id":"on_event/3","title":"on_event(event, prev_user_id, buffer \\\\ WriteBuffer)"}]}],"sections":[],"title":"Plausible.Session.CacheStore"},{"deprecated":false,"group":"","id":"Plausible.Session.Salts","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(arg)"},{"anchor":"fetch/0","deprecated":false,"id":"fetch/0","title":"fetch()"},{"anchor":"rotate/0","deprecated":false,"id":"rotate/0","title":"rotate()"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts)"}]}],"sections":[],"title":"Plausible.Session.Salts"},{"deprecated":false,"group":"","id":"Plausible.Session.WriteBuffer","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(init_arg)"},{"anchor":"flush/0","deprecated":false,"id":"flush/0","title":"flush()"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(buffer)"},{"anchor":"insert/1","deprecated":false,"id":"insert/1","title":"insert(sessions)"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts)"}]}],"sections":[],"title":"Plausible.Session.WriteBuffer"},{"deprecated":false,"group":"","id":"Plausible.Site","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(site, attrs \\\\ %{})"},{"anchor":"crm_changeset/2","deprecated":false,"id":"crm_changeset/2","title":"crm_changeset(site, attrs)"},{"anchor":"feature_toggle_change/3","deprecated":false,"id":"feature_toggle_change/3","title":"feature_toggle_change(site, property, opts \\\\ [])"},{"anchor":"import_failure/1","deprecated":false,"id":"import_failure/1","title":"import_failure(site)"},{"anchor":"import_success/1","deprecated":false,"id":"import_success/1","title":"import_success(site)"},{"anchor":"local_start_date/1","deprecated":false,"id":"local_start_date/1","title":"local_start_date(site)"},{"anchor":"make_private/1","deprecated":false,"id":"make_private/1","title":"make_private(site)"},{"anchor":"make_public/1","deprecated":false,"id":"make_public/1","title":"make_public(site)"},{"anchor":"remove_imported_data/1","deprecated":false,"id":"remove_imported_data/1","title":"remove_imported_data(site)"},{"anchor":"set_imported_source/2","deprecated":false,"id":"set_imported_source/2","title":"set_imported_source(site, imported_source)"},{"anchor":"set_native_stats_start_at/2","deprecated":false,"id":"set_native_stats_start_at/2","title":"set_native_stats_start_at(site, val)"},{"anchor":"set_stats_start_date/2","deprecated":false,"id":"set_stats_start_date/2","title":"set_stats_start_date(site, val)"},{"anchor":"start_import/5","deprecated":false,"id":"start_import/5","title":"start_import(site, start_date, end_date, imported_source, status \\\\ \"importing\")"},{"anchor":"tz_offset/2","deprecated":false,"id":"tz_offset/2","title":"tz_offset(site, utc_now \\\\ DateTime.utc_now())"},{"anchor":"update_changeset/3","deprecated":false,"id":"update_changeset/3","title":"update_changeset(site, attrs \\\\ %{}, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Site"},{"deprecated":false,"group":"","id":"Plausible.Site.Cache","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"enabled?/0","deprecated":false,"id":"enabled?/0","title":"enabled?()"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(domain, opts \\\\ [])"},{"anchor":"get_site_id/2","deprecated":false,"id":"get_site_id/2","title":"get_site_id(domain, opts \\\\ [])"},{"anchor":"hit_rate/1","deprecated":false,"id":"hit_rate/1","title":"hit_rate(cache_name \\\\ :sites_by_domain)"},{"anchor":"merge/2","deprecated":false,"id":"merge/2","title":"merge(new_items, opts \\\\ [])"},{"anchor":"name/0","deprecated":false,"id":"name/0","title":"name()"},{"anchor":"ready?/1","deprecated":false,"id":"ready?/1","title":"ready?(cache_name \\\\ :sites_by_domain)"},{"anchor":"refresh_all/1","deprecated":false,"id":"refresh_all/1","title":"refresh_all(opts \\\\ [])"},{"anchor":"refresh_updated_recently/1","deprecated":false,"id":"refresh_updated_recently/1","title":"refresh_updated_recently(opts \\\\ [])"},{"anchor":"size/1","deprecated":false,"id":"size/1","title":"size(cache_name \\\\ :sites_by_domain)"},{"anchor":"telemetry_event_refresh/2","deprecated":false,"id":"telemetry_event_refresh/2","title":"telemetry_event_refresh(cache_name \\\\ :sites_by_domain, mode)"},{"anchor":"touch_site!/2","deprecated":false,"id":"touch_site!/2","title":"touch_site!(site, now)"}]}],"sections":[],"title":"Plausible.Site.Cache"},{"deprecated":false,"group":"","id":"Plausible.Site.Cache.Warmer","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"interval/0","deprecated":false,"id":"interval/0","title":"interval()"}]}],"sections":[],"title":"Plausible.Site.Cache.Warmer"},{"deprecated":false,"group":"","id":"Plausible.Site.Cache.Warmer.All","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"}]}],"sections":[],"title":"Plausible.Site.Cache.Warmer.All"},{"deprecated":false,"group":"","id":"Plausible.Site.Cache.Warmer.RecentlyUpdated","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"}]}],"sections":[],"title":"Plausible.Site.Cache.Warmer.RecentlyUpdated"},{"deprecated":false,"group":"","id":"Plausible.Site.CustomDomain","sections":[],"title":"Plausible.Site.CustomDomain"},{"deprecated":false,"group":"","id":"Plausible.Site.Domain","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"change/3","deprecated":false,"id":"change/3","title":"change(site, new_domain, opts \\\\ [])"},{"anchor":"expire_change_transitions/1","deprecated":false,"id":"expire_change_transitions/1","title":"expire_change_transitions(expire_threshold_hours \\\\ 72)"}]}],"sections":[],"title":"Plausible.Site.Domain"},{"deprecated":false,"group":"","id":"Plausible.Site.GateKeeper","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:policy/0","deprecated":false,"id":"policy/0","title":"policy()"},{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"check/2","deprecated":false,"id":"check/2","title":"check(domain, opts \\\\ [])"},{"anchor":"key/1","deprecated":false,"id":"key/1","title":"key(domain)"}]}],"sections":[],"title":"Plausible.Site.GateKeeper"},{"deprecated":false,"group":"","id":"Plausible.Site.GoogleAuth","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(auth, attrs \\\\ %{})"},{"anchor":"set_property/2","deprecated":false,"id":"set_property/2","title":"set_property(auth, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Site.GoogleAuth"},{"deprecated":false,"group":"","id":"Plausible.Site.ImportedData","sections":[],"title":"Plausible.Site.ImportedData"},{"deprecated":false,"group":"","id":"Plausible.Site.Membership","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"new/2","deprecated":false,"id":"new/2","title":"new(site, user)"},{"anchor":"set_role/2","deprecated":false,"id":"set_role/2","title":"set_role(changeset, role)"}]}],"sections":[],"title":"Plausible.Site.Membership"},{"deprecated":false,"group":"","id":"Plausible.Site.Memberships","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"accept_invitation/2","deprecated":false,"id":"accept_invitation/2","title":"accept_invitation(invitation_id, user)"},{"anchor":"any?/1","deprecated":false,"id":"any?/1","title":"any?(user_id)"},{"anchor":"has_any_invitations?/1","deprecated":false,"id":"has_any_invitations?/1","title":"has_any_invitations?(email)"},{"anchor":"reject_invitation/2","deprecated":false,"id":"reject_invitation/2","title":"reject_invitation(invitation_id, user)"},{"anchor":"remove_invitation/2","deprecated":false,"id":"remove_invitation/2","title":"remove_invitation(invitation_id, site)"}]}],"sections":[],"title":"Plausible.Site.Memberships"},{"deprecated":false,"group":"","id":"Plausible.Site.Memberships.AcceptInvitation","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"accept_invitation/3","deprecated":false,"id":"accept_invitation/3","title":"accept_invitation(invitation_id, user, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Site.Memberships.AcceptInvitation"},{"deprecated":false,"group":"","id":"Plausible.Site.Memberships.RejectInvitation","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"reject_invitation/2","deprecated":false,"id":"reject_invitation/2","title":"reject_invitation(invitation_id, user)"}]}],"sections":[],"title":"Plausible.Site.Memberships.RejectInvitation"},{"deprecated":false,"group":"","id":"Plausible.Site.Memberships.RemoveInvitation","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"remove_invitation/2","deprecated":false,"id":"remove_invitation/2","title":"remove_invitation(invitation_id, site)"}]}],"sections":[],"title":"Plausible.Site.Memberships.RemoveInvitation"},{"deprecated":false,"group":"","id":"Plausible.Site.MonthlyReport","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_recipient/2","deprecated":false,"id":"add_recipient/2","title":"add_recipient(report, recipient)"},{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(settings, attrs \\\\ %{})"},{"anchor":"remove_recipient/2","deprecated":false,"id":"remove_recipient/2","title":"remove_recipient(report, recipient)"}]}],"sections":[],"title":"Plausible.Site.MonthlyReport"},{"deprecated":false,"group":"","id":"Plausible.Site.Removal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(domain)"}]}],"sections":[],"title":"Plausible.Site.Removal"},{"deprecated":false,"group":"","id":"Plausible.Site.SharedLink","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(link, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Site.SharedLink"},{"deprecated":false,"group":"","id":"Plausible.Site.SpikeNotification","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_recipient/2","deprecated":false,"id":"add_recipient/2","title":"add_recipient(schema, recipient)"},{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(schema, attrs)"},{"anchor":"remove_recipient/2","deprecated":false,"id":"remove_recipient/2","title":"remove_recipient(schema, recipient)"},{"anchor":"was_sent/1","deprecated":false,"id":"was_sent/1","title":"was_sent(schema)"}]}],"sections":[],"title":"Plausible.Site.SpikeNotification"},{"deprecated":false,"group":"","id":"Plausible.Site.WeeklyReport","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_recipient/2","deprecated":false,"id":"add_recipient/2","title":"add_recipient(report, recipient)"},{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(settings, attrs \\\\ %{})"},{"anchor":"remove_recipient/2","deprecated":false,"id":"remove_recipient/2","title":"remove_recipient(report, recipient)"}]}],"sections":[],"title":"Plausible.Site.WeeklyReport"},{"deprecated":false,"group":"","id":"Plausible.SiteAdmin","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create_changeset/2","deprecated":false,"id":"create_changeset/2","title":"create_changeset(schema, attrs)"},{"anchor":"custom_index_query/3","deprecated":false,"id":"custom_index_query/3","title":"custom_index_query(conn, schema, query)"},{"anchor":"form_fields/1","deprecated":false,"id":"form_fields/1","title":"form_fields(_)"},{"anchor":"get_struct_fields/1","deprecated":false,"id":"get_struct_fields/1","title":"get_struct_fields(module)"},{"anchor":"index/1","deprecated":false,"id":"index/1","title":"index(_)"},{"anchor":"list_actions/1","deprecated":false,"id":"list_actions/1","title":"list_actions(conn)"},{"anchor":"ordering/1","deprecated":false,"id":"ordering/1","title":"ordering(schema)"},{"anchor":"search_fields/1","deprecated":false,"id":"search_fields/1","title":"search_fields(schema)"},{"anchor":"update_changeset/2","deprecated":false,"id":"update_changeset/2","title":"update_changeset(schema, attrs)"}]}],"sections":[],"title":"Plausible.SiteAdmin"},{"deprecated":false,"group":"","id":"Plausible.Sites","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:invite_error/0","deprecated":false,"id":"invite_error/0","title":"invite_error()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"bulk_transfer_ownership/4","deprecated":false,"id":"bulk_transfer_ownership/4","title":"bulk_transfer_ownership(sites, inviter, invitee_email, opts \\\\ [])"},{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(user, params)"},{"anchor":"create_shared_link/3","deprecated":false,"id":"create_shared_link/3","title":"create_shared_link(site, name, password \\\\ nil)"},{"anchor":"get_by_domain/1","deprecated":false,"id":"get_by_domain/1","title":"get_by_domain(domain)"},{"anchor":"get_by_domain!/1","deprecated":false,"id":"get_by_domain!/1","title":"get_by_domain!(domain)"},{"anchor":"get_for_user/3","deprecated":false,"id":"get_for_user/3","title":"get_for_user(user_id, domain, roles \\\\ [:owner, :admin, :viewer])"},{"anchor":"get_for_user!/3","deprecated":false,"id":"get_for_user!/3","title":"get_for_user!(user_id, domain, roles \\\\ [:owner, :admin, :viewer])"},{"anchor":"has_admin_access?/2","deprecated":false,"id":"has_admin_access?/2","title":"has_admin_access?(user_id, site)"},{"anchor":"has_goals?/1","deprecated":false,"id":"has_goals?/1","title":"has_goals?(site)"},{"anchor":"has_stats?/1","deprecated":false,"id":"has_stats?/1","title":"has_stats?(site)"},{"anchor":"invite/4","deprecated":false,"id":"invite/4","title":"invite(site, inviter, invitee_email, role)"},{"anchor":"is_member?/2","deprecated":false,"id":"is_member?/2","title":"is_member?(user_id, site)"},{"anchor":"locked?/1","deprecated":false,"id":"locked?/1","title":"locked?(site)"},{"anchor":"owned_site_ids/1","deprecated":false,"id":"owned_site_ids/1","title":"owned_site_ids(user)"},{"anchor":"owned_sites_count/1","deprecated":false,"id":"owned_sites_count/1","title":"owned_sites_count(user)"},{"anchor":"owned_sites_domains/1","deprecated":false,"id":"owned_sites_domains/1","title":"owned_sites_domains(user)"},{"anchor":"owner_for/1","deprecated":false,"id":"owner_for/1","title":"owner_for(site)"},{"anchor":"role/2","deprecated":false,"id":"role/2","title":"role(user_id, site)"},{"anchor":"shared_link_url/2","deprecated":false,"id":"shared_link_url/2","title":"shared_link_url(site, link)"},{"anchor":"stats_start_date/1","deprecated":false,"id":"stats_start_date/1","title":"stats_start_date(site)"}]}],"sections":[],"title":"Plausible.Sites"},{"deprecated":false,"group":"","id":"Plausible.Stats","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(site, query, metrics)"},{"anchor":"breakdown/5","deprecated":false,"id":"breakdown/5","title":"breakdown(site, query, prop, metrics, pagination)"},{"anchor":"current_visitors/1","deprecated":false,"id":"current_visitors/1","title":"current_visitors(site)"},{"anchor":"filter_suggestions/4","deprecated":false,"id":"filter_suggestions/4","title":"filter_suggestions(site, query, filter_name, filter_search)"},{"anchor":"funnel/3","deprecated":false,"id":"funnel/3","title":"funnel(site, query, funnel)"},{"anchor":"timeseries/3","deprecated":false,"id":"timeseries/3","title":"timeseries(site, query, metrics)"}]}],"sections":[],"title":"Plausible.Stats"},{"deprecated":false,"group":"","id":"Plausible.Stats.Aggregate","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(site, query, metrics)"}]}],"sections":[],"title":"Plausible.Stats.Aggregate"},{"deprecated":false,"group":"","id":"Plausible.Stats.Base","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"apply_entry_prop_filter/3","deprecated":false,"id":"apply_entry_prop_filter/3","title":"apply_entry_prop_filter(sessions_q, prop_name, arg3)"},{"anchor":"base_event_query/2","deprecated":false,"id":"base_event_query/2","title":"base_event_query(site, query)"},{"anchor":"filter_by_entry_props/2","deprecated":false,"id":"filter_by_entry_props/2","title":"filter_by_entry_props(sessions_q, query)"},{"anchor":"filter_converted_sessions/3","deprecated":false,"id":"filter_converted_sessions/3","title":"filter_converted_sessions(db_query, site, query)"},{"anchor":"page_regex/1","deprecated":false,"id":"page_regex/1","title":"page_regex(expr)"},{"anchor":"query_events/2","deprecated":false,"id":"query_events/2","title":"query_events(site, query)"},{"anchor":"query_sessions/2","deprecated":false,"id":"query_sessions/2","title":"query_sessions(site, query)"},{"anchor":"select_event_metrics/2","deprecated":false,"id":"select_event_metrics/2","title":"select_event_metrics(q, list)"},{"anchor":"select_session_metrics/3","deprecated":false,"id":"select_session_metrics/3","title":"select_session_metrics(q, list, query)"},{"anchor":"utc_boundaries/2","deprecated":false,"id":"utc_boundaries/2","title":"utc_boundaries(query, site)"}]}],"sections":[],"title":"Plausible.Stats.Base"},{"deprecated":false,"group":"","id":"Plausible.Stats.Breakdown","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"breakdown/5","deprecated":false,"id":"breakdown/5","title":"breakdown(site, query, property, metrics, pagination)"}]}],"sections":[],"title":"Plausible.Stats.Breakdown"},{"deprecated":false,"group":"","id":"Plausible.Stats.Clickhouse","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"current_visitors/2","deprecated":false,"id":"current_visitors/2","title":"current_visitors(site, query)"},{"anchor":"has_pageviews?/1","deprecated":false,"id":"has_pageviews?/1","title":"has_pageviews?(site)"},{"anchor":"imported_pageview_count/1","deprecated":false,"id":"imported_pageview_count/1","title":"imported_pageview_count(site)"},{"anchor":"last_24h_visitors/1","deprecated":false,"id":"last_24h_visitors/1","title":"last_24h_visitors(sites)"},{"anchor":"pageview_start_date_local/1","deprecated":false,"id":"pageview_start_date_local/1","title":"pageview_start_date_local(site)"},{"anchor":"top_sources/6","deprecated":false,"id":"top_sources/6","title":"top_sources(site, query, limit, page, show_noref \\\\ false, include_details)"},{"anchor":"usage_breakdown/1","deprecated":false,"id":"usage_breakdown/1","title":"usage_breakdown(domains_or_site_ids)"},{"anchor":"usage_breakdown/2","deprecated":false,"id":"usage_breakdown/2","title":"usage_breakdown(domains, date_range)"}]}],"sections":[],"title":"Plausible.Stats.Clickhouse"},{"deprecated":false,"group":"","id":"Plausible.Stats.Compare","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"calculate_change/3","deprecated":false,"id":"calculate_change/3","title":"calculate_change(metric, old_stats, new_stats)"}]}],"sections":[],"title":"Plausible.Stats.Compare"},{"deprecated":false,"group":"","id":"Plausible.Stats.Comparisons","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:mode/0","deprecated":false,"id":"mode/0","title":"mode()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"compare/4","deprecated":false,"id":"compare/4","title":"compare(site, source_query, mode, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Stats.Comparisons"},{"deprecated":false,"group":"","id":"Plausible.Stats.CurrentVisitors","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"current_visitors/1","deprecated":false,"id":"current_visitors/1","title":"current_visitors(site)"}]}],"sections":[],"title":"Plausible.Stats.CurrentVisitors"},{"deprecated":false,"group":"","id":"Plausible.Stats.CustomProps","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_prop_names/2","deprecated":false,"id":"fetch_prop_names/2","title":"fetch_prop_names(site, query)"},{"anchor":"maybe_allowed_props_only/2","deprecated":false,"id":"maybe_allowed_props_only/2","title":"maybe_allowed_props_only(q, allowed_props)"},{"anchor":"props_for_all_event_names/2","deprecated":false,"id":"props_for_all_event_names/2","title":"props_for_all_event_names(site, query)"}]}],"sections":[],"title":"Plausible.Stats.CustomProps"},{"deprecated":false,"group":"","id":"Plausible.Stats.FilterParser","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"parse_filters/1","deprecated":false,"id":"parse_filters/1","title":"parse_filters(filters)"}]}],"sections":[],"title":"Plausible.Stats.FilterParser"},{"deprecated":false,"group":"","id":"Plausible.Stats.FilterSuggestions","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"filter_suggestions/4","deprecated":false,"id":"filter_suggestions/4","title":"filter_suggestions(site, query, filter_name, filter_search)"}]}],"sections":[],"title":"Plausible.Stats.FilterSuggestions"},{"deprecated":false,"group":"","id":"Plausible.Stats.Filters","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_prefix/1","deprecated":false,"id":"add_prefix/1","title":"add_prefix(query)"},{"anchor":"visit_props/0","deprecated":false,"id":"visit_props/0","title":"visit_props()"}]}],"sections":[],"title":"Plausible.Stats.Filters"},{"deprecated":false,"group":"","id":"Plausible.Stats.Fragments","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"bounce_rate/0","deprecated":false,"id":"bounce_rate/0","title":"bounce_rate()"},{"anchor":"coalesce_string/2","deprecated":false,"id":"coalesce_string/2","title":"coalesce_string(fieldA, fieldB)"},{"anchor":"sample_percent/0","deprecated":false,"id":"sample_percent/0","title":"sample_percent()"},{"anchor":"to_timezone/2","deprecated":false,"id":"to_timezone/2","title":"to_timezone(date, timezone)"},{"anchor":"total/0","deprecated":false,"id":"total/0","title":"total()"},{"anchor":"uniq/1","deprecated":false,"id":"uniq/1","title":"uniq(user_id)"},{"anchor":"visit_duration/0","deprecated":false,"id":"visit_duration/0","title":"visit_duration()"},{"anchor":"weekstart_not_before/2","deprecated":false,"id":"weekstart_not_before/2","title":"weekstart_not_before(date, not_before)"},{"anchor":"weekstart_not_before/3","deprecated":false,"id":"weekstart_not_before/3","title":"weekstart_not_before(date, not_before, timezone)"}]}],"sections":[],"title":"Plausible.Stats.Fragments"},{"deprecated":false,"group":"","id":"Plausible.Stats.Funnel","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"funnel/3","deprecated":false,"id":"funnel/3","title":"funnel(site, query, funnel_id)"}]}],"sections":[],"title":"Plausible.Stats.Funnel"},{"deprecated":false,"group":"","id":"Plausible.Stats.Imported","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"merge_imported/5","deprecated":false,"id":"merge_imported/5","title":"merge_imported(q, site, query, property, metrics)"},{"anchor":"merge_imported_timeseries/4","deprecated":false,"id":"merge_imported_timeseries/4","title":"merge_imported_timeseries(native_q, site, query, metrics)"}]}],"sections":[],"title":"Plausible.Stats.Imported"},{"deprecated":false,"group":"","id":"Plausible.Stats.Interval","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:opt/0","deprecated":false,"id":"opt/0","title":"opt()"},{"anchor":"t:opts/0","deprecated":false,"id":"opts/0","title":"opts()"},{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"default_for_date_range/1","deprecated":false,"id":"default_for_date_range/1","title":"default_for_date_range(range)"},{"anchor":"default_for_period/1","deprecated":false,"id":"default_for_period/1","title":"default_for_period(period)"},{"anchor":"list/0","deprecated":false,"id":"list/0","title":"list()"},{"anchor":"valid?/1","deprecated":false,"id":"valid?/1","title":"valid?(interval)"},{"anchor":"valid_by_period/1","deprecated":false,"id":"valid_by_period/1","title":"valid_by_period(opts \\\\ [])"},{"anchor":"valid_for_period?/3","deprecated":false,"id":"valid_for_period?/3","title":"valid_for_period?(period, interval, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Stats.Interval"},{"deprecated":false,"group":"","id":"Plausible.Stats.Props","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"event_props/0","deprecated":false,"id":"event_props/0","title":"event_props()"},{"anchor":"valid_prop?/1","deprecated":false,"id":"valid_prop?/1","title":"valid_prop?(prop)"}]}],"sections":[],"title":"Plausible.Stats.Props"},{"deprecated":false,"group":"","id":"Plausible.Stats.Query","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"from/2","deprecated":false,"id":"from/2","title":"from(site, params)"},{"anchor":"get_filter_by_prefix/2","deprecated":false,"id":"get_filter_by_prefix/2","title":"get_filter_by_prefix(query, prefix)"},{"anchor":"has_event_filters?/1","deprecated":false,"id":"has_event_filters?/1","title":"has_event_filters?(query)"},{"anchor":"include_imported?/3","deprecated":false,"id":"include_imported?/3","title":"include_imported?(query, site, requested?)"},{"anchor":"put_filter/3","deprecated":false,"id":"put_filter/3","title":"put_filter(query, key, val)"},{"anchor":"remove_event_filters/2","deprecated":false,"id":"remove_event_filters/2","title":"remove_event_filters(query, opts)"},{"anchor":"trace/1","deprecated":false,"id":"trace/1","title":"trace(query)"}]}],"sections":[],"title":"Plausible.Stats.Query"},{"deprecated":false,"group":"","id":"Plausible.Stats.Timeseries","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:results/0","deprecated":false,"id":"results/0","title":"results()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"timeseries/3","deprecated":false,"id":"timeseries/3","title":"timeseries(site, query, metrics)"}]}],"sections":[],"title":"Plausible.Stats.Timeseries"},{"deprecated":false,"group":"","id":"Plausible.Stats.Util","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"cast_revenue_metrics_to_money/2","deprecated":false,"id":"cast_revenue_metrics_to_money/2","title":"cast_revenue_metrics_to_money(results, revenue_goals)"},{"anchor":"get_revenue_tracking_currency/3","deprecated":false,"id":"get_revenue_tracking_currency/3","title":"get_revenue_tracking_currency(site, query, metrics)"},{"anchor":"remove_internal_visits_metric/1","deprecated":false,"id":"remove_internal_visits_metric/1","title":"remove_internal_visits_metric(result)"},{"anchor":"remove_internal_visits_metric/2","deprecated":false,"id":"remove_internal_visits_metric/2","title":"remove_internal_visits_metric(results, metrics)"}]}],"sections":[],"title":"Plausible.Stats.Util"},{"deprecated":false,"group":"","id":"Plausible.Test.Support.HTML","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"class_of_element/2","deprecated":false,"id":"class_of_element/2","title":"class_of_element(html, element)"},{"anchor":"element_exists?/2","deprecated":false,"id":"element_exists?/2","title":"element_exists?(html, selector)"},{"anchor":"find/2","deprecated":false,"id":"find/2","title":"find(html, value)"},{"anchor":"form_exists?/2","deprecated":false,"id":"form_exists?/2","title":"form_exists?(html, action_path)"},{"anchor":"name_of/1","deprecated":false,"id":"name_of/1","title":"name_of(element)"},{"anchor":"submit_button/2","deprecated":false,"id":"submit_button/2","title":"submit_button(html, form)"},{"anchor":"text/1","deprecated":false,"id":"text/1","title":"text(element)"},{"anchor":"text_of_attr/2","deprecated":false,"id":"text_of_attr/2","title":"text_of_attr(element, attr)"},{"anchor":"text_of_element/2","deprecated":false,"id":"text_of_element/2","title":"text_of_element(html, element)"}]}],"sections":[],"title":"Plausible.Test.Support.HTML"},{"deprecated":false,"group":"","id":"Plausible.TestUtils","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_imported_data/1","deprecated":false,"id":"add_imported_data/1","title":"add_imported_data(map)"},{"anchor":"await_clickhouse_count/2","deprecated":false,"id":"await_clickhouse_count/2","title":"await_clickhouse_count(query, expected)"},{"anchor":"create_api_key/1","deprecated":false,"id":"create_api_key/1","title":"create_api_key(map)"},{"anchor":"create_events/1","deprecated":false,"id":"create_events/1","title":"create_events(events)"},{"anchor":"create_new_site/1","deprecated":false,"id":"create_new_site/1","title":"create_new_site(map)"},{"anchor":"create_pageviews/1","deprecated":false,"id":"create_pageviews/1","title":"create_pageviews(pageviews)"},{"anchor":"create_sessions/1","deprecated":false,"id":"create_sessions/1","title":"create_sessions(sessions)"},{"anchor":"create_site/1","deprecated":false,"id":"create_site/1","title":"create_site(map)"},{"anchor":"create_user/1","deprecated":false,"id":"create_user/1","title":"create_user(_)"},{"anchor":"eventually/3","deprecated":false,"id":"eventually/3","title":"eventually(expectation, wait_time_ms \\\\ 50, retries \\\\ 10)"},{"anchor":"init_session/1","deprecated":false,"id":"init_session/1","title":"init_session(conn)"},{"anchor":"log_in/1","deprecated":false,"id":"log_in/1","title":"log_in(map)"},{"anchor":"patch_env/2","deprecated":false,"id":"patch_env/2","title":"patch_env(env_key, value)"},{"anchor":"populate_stats/1","deprecated":false,"id":"populate_stats/1","title":"populate_stats(events)"},{"anchor":"populate_stats/2","deprecated":false,"id":"populate_stats/2","title":"populate_stats(site, events)"},{"anchor":"random_ip/0","deprecated":false,"id":"random_ip/0","title":"random_ip()"},{"anchor":"relative_time/1","deprecated":false,"id":"relative_time/1","title":"relative_time(shifts)"},{"anchor":"setup_patch_env/2","deprecated":false,"id":"setup_patch_env/2","title":"setup_patch_env(env_key, value)"},{"anchor":"to_naive_truncate/1","deprecated":false,"id":"to_naive_truncate/1","title":"to_naive_truncate(dt)"},{"anchor":"use_api_key/1","deprecated":false,"id":"use_api_key/1","title":"use_api_key(map)"}]}],"sections":[],"title":"Plausible.TestUtils"},{"deprecated":false,"group":"","id":"Plausible.Themes","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"options/0","deprecated":false,"id":"options/0","title":"options()"}]}],"sections":[],"title":"Plausible.Themes"},{"deprecated":false,"group":"","id":"Plausible.Timezones","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"options/1","deprecated":false,"id":"options/1","title":"options(now \\\\ DateTime.utc_now())"}]}],"sections":[],"title":"Plausible.Timezones"},{"deprecated":false,"group":"","id":"Plausible.Users","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"has_email_code?/1","deprecated":false,"id":"has_email_code?/1","title":"has_email_code?(user_id)"},{"anchor":"with_subscription/1","deprecated":false,"id":"with_subscription/1","title":"with_subscription(user)"}]}],"sections":[],"title":"Plausible.Users"},{"deprecated":false,"group":"","id":"Plausible.Workers.CheckUsage","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"check_enterprise_subscriber/2","deprecated":false,"id":"check_enterprise_subscriber/2","title":"check_enterprise_subscriber(subscriber, billing_mod)"},{"anchor":"day_of_month/1","deprecated":false,"id":"day_of_month/1","title":"day_of_month(date)"},{"anchor":"last_day_of_month/1","deprecated":false,"id":"last_day_of_month/1","title":"last_day_of_month(day)"},{"anchor":"least/2","deprecated":false,"id":"least/2","title":"least(left, right)"},{"anchor":"yesterday/0","deprecated":false,"id":"yesterday/0","title":"yesterday()"}]}],"sections":[],"title":"Plausible.Workers.CheckUsage"},{"deprecated":false,"group":"","id":"Plausible.Workers.CleanEmailVerificationCodes","sections":[],"title":"Plausible.Workers.CleanEmailVerificationCodes"},{"deprecated":false,"group":"","id":"Plausible.Workers.CleanInvitations","sections":[],"title":"Plausible.Workers.CleanInvitations"},{"deprecated":false,"group":"","id":"Plausible.Workers.ExpireDomainChangeTransitions","sections":[],"title":"Plausible.Workers.ExpireDomainChangeTransitions"},{"deprecated":false,"group":"","id":"Plausible.Workers.ImportGoogleAnalytics","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"import_failed/1","deprecated":false,"id":"import_failed/1","title":"import_failed(site)"}]}],"sections":[],"title":"Plausible.Workers.ImportGoogleAnalytics"},{"deprecated":false,"group":"","id":"Plausible.Workers.LockSites","sections":[],"title":"Plausible.Workers.LockSites"},{"deprecated":false,"group":"","id":"Plausible.Workers.NotifyAnnualRenewal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"perform/1","deprecated":false,"id":"perform/1","title":"perform(job)"}]}],"sections":[],"title":"Plausible.Workers.NotifyAnnualRenewal"},{"deprecated":false,"group":"","id":"Plausible.Workers.RotateSalts","sections":[],"title":"Plausible.Workers.RotateSalts"},{"deprecated":false,"group":"","id":"Plausible.Workers.ScheduleEmailReports","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"first_of_month_9am/1","deprecated":false,"id":"first_of_month_9am/1","title":"first_of_month_9am(timezone)"},{"anchor":"monday_9am/1","deprecated":false,"id":"monday_9am/1","title":"monday_9am(timezone)"},{"anchor":"perform/1","deprecated":false,"id":"perform/1","title":"perform(job)"}]}],"sections":[],"title":"Plausible.Workers.ScheduleEmailReports"},{"deprecated":false,"group":"","id":"Plausible.Workers.SendCheckStatsEmails","sections":[],"title":"Plausible.Workers.SendCheckStatsEmails"},{"deprecated":false,"group":"","id":"Plausible.Workers.SendEmailReport","sections":[],"title":"Plausible.Workers.SendEmailReport"},{"deprecated":false,"group":"","id":"Plausible.Workers.SendSiteSetupEmails","sections":[],"title":"Plausible.Workers.SendSiteSetupEmails"},{"deprecated":false,"group":"","id":"Plausible.Workers.SendTrialNotifications","sections":[],"title":"Plausible.Workers.SendTrialNotifications"},{"deprecated":false,"group":"","id":"Plausible.Workers.SpikeNotifier","sections":[],"title":"Plausible.Workers.SpikeNotifier"},{"deprecated":false,"group":"","id":"PlausibleWeb","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__using__/1","deprecated":false,"id":"__using__/1","title":"__using__(which)"},{"anchor":"channel/0","deprecated":false,"id":"channel/0","title":"channel()"},{"anchor":"controller/0","deprecated":false,"id":"controller/0","title":"controller()"},{"anchor":"open_api_schema/0","deprecated":false,"id":"open_api_schema/0","title":"open_api_schema()"},{"anchor":"plugins_api_controller/0","deprecated":false,"id":"plugins_api_controller/0","title":"plugins_api_controller()"},{"anchor":"plugins_api_view/0","deprecated":false,"id":"plugins_api_view/0","title":"plugins_api_view()"},{"anchor":"router/0","deprecated":false,"id":"router/0","title":"router()"},{"anchor":"view/0","deprecated":false,"id":"view/0","title":"view()"}]}],"sections":[],"title":"PlausibleWeb"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.ExternalController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"error/2","deprecated":false,"id":"error/2","title":"error(conn, params)"},{"anchor":"event/2","deprecated":false,"id":"event/2","title":"event(conn, params)"},{"anchor":"health/2","deprecated":false,"id":"health/2","title":"health(conn, params)"},{"anchor":"info/2","deprecated":false,"id":"info/2","title":"info(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.ExternalController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.ExternalSitesController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create_site/2","deprecated":false,"id":"create_site/2","title":"create_site(conn, params)"},{"anchor":"delete_goal/2","deprecated":false,"id":"delete_goal/2","title":"delete_goal(conn, params)"},{"anchor":"delete_site/2","deprecated":false,"id":"delete_site/2","title":"delete_site(conn, map)"},{"anchor":"find_or_create_goal/2","deprecated":false,"id":"find_or_create_goal/2","title":"find_or_create_goal(conn, params)"},{"anchor":"find_or_create_shared_link/2","deprecated":false,"id":"find_or_create_shared_link/2","title":"find_or_create_shared_link(conn, params)"},{"anchor":"get_site/2","deprecated":false,"id":"get_site/2","title":"get_site(conn, map)"},{"anchor":"update_site/2","deprecated":false,"id":"update_site/2","title":"update_site(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.ExternalSitesController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.ExternalStatsController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/2","deprecated":false,"id":"aggregate/2","title":"aggregate(conn, params)"},{"anchor":"breakdown/2","deprecated":false,"id":"breakdown/2","title":"breakdown(conn, params)"},{"anchor":"realtime_visitors/2","deprecated":false,"id":"realtime_visitors/2","title":"realtime_visitors(conn, params)"},{"anchor":"timeseries/2","deprecated":false,"id":"timeseries/2","title":"timeseries(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.ExternalStatsController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.Helpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"bad_request/2","deprecated":false,"id":"bad_request/2","title":"bad_request(conn, msg)"},{"anchor":"not_found/2","deprecated":false,"id":"not_found/2","title":"not_found(conn, msg)"},{"anchor":"payment_required/2","deprecated":false,"id":"payment_required/2","title":"payment_required(conn, msg)"},{"anchor":"too_many_requests/2","deprecated":false,"id":"too_many_requests/2","title":"too_many_requests(conn, msg)"},{"anchor":"unauthorized/2","deprecated":false,"id":"unauthorized/2","title":"unauthorized(conn, msg)"}]}],"sections":[],"title":"PlausibleWeb.Api.Helpers"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.InternalController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"disable_feature/2","deprecated":false,"id":"disable_feature/2","title":"disable_feature(conn, map)"},{"anchor":"domain_status/2","deprecated":false,"id":"domain_status/2","title":"domain_status(conn, map)"},{"anchor":"sites/2","deprecated":false,"id":"sites/2","title":"sites(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.InternalController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.PaddleController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"verified_signature?/1","deprecated":false,"id":"verified_signature?/1","title":"verified_signature?(params)"},{"anchor":"verify_signature/2","deprecated":false,"id":"verify_signature/2","title":"verify_signature(conn, opts)"},{"anchor":"webhook/2","deprecated":false,"id":"webhook/2","title":"webhook(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.PaddleController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.StatsController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_custom_prop_values/2","deprecated":false,"id":"all_custom_prop_values/2","title":"all_custom_prop_values(conn, params)"},{"anchor":"browser_versions/2","deprecated":false,"id":"browser_versions/2","title":"browser_versions(conn, params)"},{"anchor":"browsers/2","deprecated":false,"id":"browsers/2","title":"browsers(conn, params)"},{"anchor":"cities/2","deprecated":false,"id":"cities/2","title":"cities(conn, params)"},{"anchor":"conversions/2","deprecated":false,"id":"conversions/2","title":"conversions(conn, params)"},{"anchor":"countries/2","deprecated":false,"id":"countries/2","title":"countries(conn, params)"},{"anchor":"current_visitors/2","deprecated":false,"id":"current_visitors/2","title":"current_visitors(conn, _)"},{"anchor":"custom_prop_values/2","deprecated":false,"id":"custom_prop_values/2","title":"custom_prop_values(conn, params)"},{"anchor":"entry_pages/2","deprecated":false,"id":"entry_pages/2","title":"entry_pages(conn, params)"},{"anchor":"exit_pages/2","deprecated":false,"id":"exit_pages/2","title":"exit_pages(conn, params)"},{"anchor":"filter_suggestions/2","deprecated":false,"id":"filter_suggestions/2","title":"filter_suggestions(conn, params)"},{"anchor":"funnel/2","deprecated":false,"id":"funnel/2","title":"funnel(conn, params)"},{"anchor":"main_graph/2","deprecated":false,"id":"main_graph/2","title":"main_graph(conn, params)"},{"anchor":"operating_system_versions/2","deprecated":false,"id":"operating_system_versions/2","title":"operating_system_versions(conn, params)"},{"anchor":"operating_systems/2","deprecated":false,"id":"operating_systems/2","title":"operating_systems(conn, params)"},{"anchor":"pages/2","deprecated":false,"id":"pages/2","title":"pages(conn, params)"},{"anchor":"referrer_drilldown/2","deprecated":false,"id":"referrer_drilldown/2","title":"referrer_drilldown(conn, params)"},{"anchor":"referrers/2","deprecated":false,"id":"referrers/2","title":"referrers(conn, params)"},{"anchor":"regions/2","deprecated":false,"id":"regions/2","title":"regions(conn, params)"},{"anchor":"screen_sizes/2","deprecated":false,"id":"screen_sizes/2","title":"screen_sizes(conn, params)"},{"anchor":"sources/2","deprecated":false,"id":"sources/2","title":"sources(conn, params)"},{"anchor":"top_stats/2","deprecated":false,"id":"top_stats/2","title":"top_stats(conn, params)"},{"anchor":"utm_campaigns/2","deprecated":false,"id":"utm_campaigns/2","title":"utm_campaigns(conn, params)"},{"anchor":"utm_contents/2","deprecated":false,"id":"utm_contents/2","title":"utm_contents(conn, params)"},{"anchor":"utm_mediums/2","deprecated":false,"id":"utm_mediums/2","title":"utm_mediums(conn, params)"},{"anchor":"utm_sources/2","deprecated":false,"id":"utm_sources/2","title":"utm_sources(conn, params)"},{"anchor":"utm_terms/2","deprecated":false,"id":"utm_terms/2","title":"utm_terms(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.StatsController"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"activate/2","deprecated":false,"id":"activate/2","title":"activate(conn, map)"},{"anchor":"activate_form/2","deprecated":false,"id":"activate_form/2","title":"activate_form(conn, params)"},{"anchor":"cancel_update_email/2","deprecated":false,"id":"cancel_update_email/2","title":"cancel_update_email(conn, params)"},{"anchor":"create_api_key/2","deprecated":false,"id":"create_api_key/2","title":"create_api_key(conn, map)"},{"anchor":"delete_api_key/2","deprecated":false,"id":"delete_api_key/2","title":"delete_api_key(conn, map)"},{"anchor":"delete_me/2","deprecated":false,"id":"delete_me/2","title":"delete_me(conn, params)"},{"anchor":"google_auth_callback/2","deprecated":false,"id":"google_auth_callback/2","title":"google_auth_callback(conn, params)"},{"anchor":"login/2","deprecated":false,"id":"login/2","title":"login(conn, map)"},{"anchor":"login_form/2","deprecated":false,"id":"login_form/2","title":"login_form(conn, params)"},{"anchor":"logout/2","deprecated":false,"id":"logout/2","title":"logout(conn, params)"},{"anchor":"new_api_key/2","deprecated":false,"id":"new_api_key/2","title":"new_api_key(conn, params)"},{"anchor":"password_reset/2","deprecated":false,"id":"password_reset/2","title":"password_reset(conn, params)"},{"anchor":"password_reset_form/2","deprecated":false,"id":"password_reset_form/2","title":"password_reset_form(conn, params)"},{"anchor":"password_reset_request/2","deprecated":false,"id":"password_reset_request/2","title":"password_reset_request(conn, params)"},{"anchor":"password_reset_request_form/2","deprecated":false,"id":"password_reset_request_form/2","title":"password_reset_request_form(conn, _)"},{"anchor":"register/2","deprecated":false,"id":"register/2","title":"register(conn, map)"},{"anchor":"register_from_invitation/2","deprecated":false,"id":"register_from_invitation/2","title":"register_from_invitation(conn, map)"},{"anchor":"request_activation_code/2","deprecated":false,"id":"request_activation_code/2","title":"request_activation_code(conn, params)"},{"anchor":"save_settings/2","deprecated":false,"id":"save_settings/2","title":"save_settings(conn, map)"},{"anchor":"update_email/2","deprecated":false,"id":"update_email/2","title":"update_email(conn, map)"},{"anchor":"user_settings/2","deprecated":false,"id":"user_settings/2","title":"user_settings(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.AuthController"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.AuthPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"activate.html/1","deprecated":false,"id":"activate.html/1","title":"activate.html(assigns)"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"delimit_integer/1","deprecated":false,"id":"delimit_integer/1","title":"delimit_integer(number)"},{"anchor":"format_invoices/1","deprecated":false,"id":"format_invoices/1","title":"format_invoices(invoice_list)"},{"anchor":"login_form.html/1","deprecated":false,"id":"login_form.html/1","title":"login_form.html(assigns)"},{"anchor":"new_api_key.html/1","deprecated":false,"id":"new_api_key.html/1","title":"new_api_key.html(assigns)"},{"anchor":"password_reset_form.html/1","deprecated":false,"id":"password_reset_form.html/1","title":"password_reset_form.html(assigns)"},{"anchor":"password_reset_request_form.html/1","deprecated":false,"id":"password_reset_request_form.html/1","title":"password_reset_request_form.html(assigns)"},{"anchor":"password_reset_request_success.html/1","deprecated":false,"id":"password_reset_request_success.html/1","title":"password_reset_request_success.html(assigns)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"present_subscription_status/1","deprecated":false,"id":"present_subscription_status/1","title":"present_subscription_status(status)"},{"anchor":"register_success.html/1","deprecated":false,"id":"register_success.html/1","title":"register_success.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"subscription_colors/1","deprecated":false,"id":"subscription_colors/1","title":"subscription_colors(_)"},{"anchor":"subscription_interval/1","deprecated":false,"id":"subscription_interval/1","title":"subscription_interval(subscription)"},{"anchor":"subscription_quota/2","deprecated":false,"id":"subscription_quota/2","title":"subscription_quota(subscription, options \\\\ [])"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"user_settings.html/1","deprecated":false,"id":"user_settings.html/1","title":"user_settings.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.AuthView"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthorizeSiteAccess","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, allowed_roles)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(allowed_roles)"}]}],"sections":[],"title":"PlausibleWeb.AuthorizeSiteAccess"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthorizeSitesApiPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.AuthorizeSitesApiPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthorizeStatsApiPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.AuthorizeStatsApiPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.BillingController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"change_enterprise_plan/2","deprecated":false,"id":"change_enterprise_plan/2","title":"change_enterprise_plan(conn, params)"},{"anchor":"change_plan/2","deprecated":false,"id":"change_plan/2","title":"change_plan(conn, map)"},{"anchor":"change_plan_form/2","deprecated":false,"id":"change_plan_form/2","title":"change_plan_form(conn, params)"},{"anchor":"change_plan_preview/2","deprecated":false,"id":"change_plan_preview/2","title":"change_plan_preview(conn, map)"},{"anchor":"choose_plan/2","deprecated":false,"id":"choose_plan/2","title":"choose_plan(conn, params)"},{"anchor":"ping_subscription/2","deprecated":false,"id":"ping_subscription/2","title":"ping_subscription(conn, params)"},{"anchor":"preview_susbcription/2","deprecated":false,"id":"preview_susbcription/2","title":"preview_susbcription(_, _)"},{"anchor":"upgrade/2","deprecated":false,"id":"upgrade/2","title":"upgrade(conn, params)"},{"anchor":"upgrade_enterprise_plan/2","deprecated":false,"id":"upgrade_enterprise_plan/2","title":"upgrade_enterprise_plan(conn, params)"},{"anchor":"upgrade_success/2","deprecated":false,"id":"upgrade_success/2","title":"upgrade_success(conn, params)"},{"anchor":"upgrade_to_enterprise_plan/2","deprecated":false,"id":"upgrade_to_enterprise_plan/2","title":"upgrade_to_enterprise_plan(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.BillingController"},{"deprecated":false,"group":"","id":"PlausibleWeb.BillingView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"change_enterprise_plan_contact_us.html/1","deprecated":false,"id":"change_enterprise_plan_contact_us.html/1","title":"change_enterprise_plan_contact_us.html(assigns)"},{"anchor":"change_plan.html/1","deprecated":false,"id":"change_plan.html/1","title":"change_plan.html(assigns)"},{"anchor":"change_plan_preview.html/1","deprecated":false,"id":"change_plan_preview.html/1","title":"change_plan_preview.html(assigns)"},{"anchor":"choose_plan.html/1","deprecated":false,"id":"choose_plan.html/1","title":"choose_plan.html(assigns)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"present_currency/1","deprecated":false,"id":"present_currency/1","title":"present_currency(arg)"},{"anchor":"present_date/1","deprecated":false,"id":"present_date/1","title":"present_date(date)"},{"anchor":"reccommended_plan/1","deprecated":false,"id":"reccommended_plan/1","title":"reccommended_plan(usage)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"upgrade.html/1","deprecated":false,"id":"upgrade.html/1","title":"upgrade.html(assigns)"},{"anchor":"upgrade_success.html/1","deprecated":false,"id":"upgrade_success.html/1","title":"upgrade_success.html(assigns)"},{"anchor":"upgrade_to_enterprise_plan.html/1","deprecated":false,"id":"upgrade_to_enterprise_plan.html/1","title":"upgrade_to_enterprise_plan.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.BillingView"},{"deprecated":false,"group":"","id":"PlausibleWeb.CRMAuthPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.CRMAuthPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.Captcha","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"enabled?/0","deprecated":false,"id":"enabled?/0","title":"enabled?()"},{"anchor":"sitekey/0","deprecated":false,"id":"sitekey/0","title":"sitekey()"},{"anchor":"verify/1","deprecated":false,"id":"verify/1","title":"verify(token)"}]}],"sections":[],"title":"PlausibleWeb.Captcha"},{"deprecated":false,"group":"","id":"PlausibleWeb.Components.Generic","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"notice/1","deprecated":false,"id":"notice/1","title":"notice(assigns)"},{"anchor":"styled_link/1","deprecated":false,"id":"styled_link/1","title":"styled_link(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Components.Generic"},{"deprecated":false,"group":"","id":"PlausibleWeb.Components.Site.Feature","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"button_active/1","deprecated":false,"id":"button_active/1","title":"button_active(assigns)"},{"anchor":"button_inactive/1","deprecated":false,"id":"button_inactive/1","title":"button_inactive(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"target/4","deprecated":false,"id":"target/4","title":"target(site, setting, conn, set_to)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"toggle/1","deprecated":false,"id":"toggle/1","title":"toggle(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Components.Site.Feature"},{"deprecated":false,"group":"","id":"PlausibleWeb.ConnCase","sections":[],"title":"PlausibleWeb.ConnCase"},{"deprecated":false,"group":"","id":"PlausibleWeb.ControllerHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"render_error/2","deprecated":false,"id":"render_error/2","title":"render_error(conn, status)"},{"anchor":"render_error/3","deprecated":false,"id":"render_error/3","title":"render_error(conn, status, message)"}]}],"sections":[],"title":"PlausibleWeb.ControllerHelpers"},{"deprecated":false,"group":"","id":"PlausibleWeb.Email","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"activation_email/2","deprecated":false,"id":"activation_email/2","title":"activation_email(user, code)"},{"anchor":"base_email/0","deprecated":false,"id":"base_email/0","title":"base_email()"},{"anchor":"base_email/1","deprecated":false,"id":"base_email/1","title":"base_email(map)"},{"anchor":"cancellation_email/1","deprecated":false,"id":"cancellation_email/1","title":"cancellation_email(user)"},{"anchor":"check_stats_email/1","deprecated":false,"id":"check_stats_email/1","title":"check_stats_email(user)"},{"anchor":"create_site_email/1","deprecated":false,"id":"create_site_email/1","title":"create_site_email(user)"},{"anchor":"dashboard_locked/4","deprecated":false,"id":"dashboard_locked/4","title":"dashboard_locked(user, usage, last_cycle, suggested_plan)"},{"anchor":"enterprise_over_limit_internal_email/5","deprecated":false,"id":"enterprise_over_limit_internal_email/5","title":"enterprise_over_limit_internal_email(user, usage, last_cycle, site_usage, site_allowance)"},{"anchor":"error_report/3","deprecated":false,"id":"error_report/3","title":"error_report(reported_by, trace_id, feedback)"},{"anchor":"existing_user_invitation/1","deprecated":false,"id":"existing_user_invitation/1","title":"existing_user_invitation(invitation)"},{"anchor":"import_failure/2","deprecated":false,"id":"import_failure/2","title":"import_failure(user, site)"},{"anchor":"import_success/2","deprecated":false,"id":"import_success/2","title":"import_success(user, site)"},{"anchor":"invitation_accepted/1","deprecated":false,"id":"invitation_accepted/1","title":"invitation_accepted(invitation)"},{"anchor":"invitation_rejected/1","deprecated":false,"id":"invitation_rejected/1","title":"invitation_rejected(invitation)"},{"anchor":"mailer_email_from/0","deprecated":false,"id":"mailer_email_from/0","title":"mailer_email_from()"},{"anchor":"new_user_invitation/1","deprecated":false,"id":"new_user_invitation/1","title":"new_user_invitation(invitation)"},{"anchor":"over_limit_email/4","deprecated":false,"id":"over_limit_email/4","title":"over_limit_email(user, usage, last_cycle, suggested_plan)"},{"anchor":"ownership_transfer_accepted/1","deprecated":false,"id":"ownership_transfer_accepted/1","title":"ownership_transfer_accepted(invitation)"},{"anchor":"ownership_transfer_rejected/1","deprecated":false,"id":"ownership_transfer_rejected/1","title":"ownership_transfer_rejected(invitation)"},{"anchor":"ownership_transfer_request/2","deprecated":false,"id":"ownership_transfer_request/2","title":"ownership_transfer_request(invitation, new_owner_account)"},{"anchor":"password_reset_email/2","deprecated":false,"id":"password_reset_email/2","title":"password_reset_email(email, reset_link)"},{"anchor":"priority_email/0","deprecated":false,"id":"priority_email/0","title":"priority_email()"},{"anchor":"priority_email/1","deprecated":false,"id":"priority_email/1","title":"priority_email(map)"},{"anchor":"render/3","deprecated":false,"id":"render/3","title":"render(email, template, assigns \\\\ [])"},{"anchor":"site_member_removed/1","deprecated":false,"id":"site_member_removed/1","title":"site_member_removed(membership)"},{"anchor":"site_setup_help/2","deprecated":false,"id":"site_setup_help/2","title":"site_setup_help(user, site)"},{"anchor":"site_setup_success/2","deprecated":false,"id":"site_setup_success/2","title":"site_setup_success(user, site)"},{"anchor":"spike_notification/5","deprecated":false,"id":"spike_notification/5","title":"spike_notification(email, site, current_visitors, sources, dashboard_link)"},{"anchor":"trial_one_week_reminder/1","deprecated":false,"id":"trial_one_week_reminder/1","title":"trial_one_week_reminder(user)"},{"anchor":"trial_over_email/1","deprecated":false,"id":"trial_over_email/1","title":"trial_over_email(user)"},{"anchor":"trial_upgrade_email/3","deprecated":false,"id":"trial_upgrade_email/3","title":"trial_upgrade_email(user, day, arg)"},{"anchor":"weekly_report/3","deprecated":false,"id":"weekly_report/3","title":"weekly_report(email, site, assigns)"},{"anchor":"welcome_email/1","deprecated":false,"id":"welcome_email/1","title":"welcome_email(user)"},{"anchor":"yearly_expiration_notification/1","deprecated":false,"id":"yearly_expiration_notification/1","title":"yearly_expiration_notification(user)"},{"anchor":"yearly_renewal_notification/1","deprecated":false,"id":"yearly_renewal_notification/1","title":"yearly_renewal_notification(user)"}]}],"sections":[],"title":"PlausibleWeb.Email"},{"deprecated":false,"group":"","id":"PlausibleWeb.EmailView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"activation_email.html/1","deprecated":false,"id":"activation_email.html/1","title":"activation_email.html(assigns)"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"cancellation_email.html/1","deprecated":false,"id":"cancellation_email.html/1","title":"cancellation_email.html(assigns)"},{"anchor":"check_stats_email.html/1","deprecated":false,"id":"check_stats_email.html/1","title":"check_stats_email.html(assigns)"},{"anchor":"create_site_email.html/1","deprecated":false,"id":"create_site_email.html/1","title":"create_site_email.html(assigns)"},{"anchor":"dashboard_locked.html/1","deprecated":false,"id":"dashboard_locked.html/1","title":"dashboard_locked.html(assigns)"},{"anchor":"date_format/1","deprecated":false,"id":"date_format/1","title":"date_format(date)"},{"anchor":"enterprise_over_limit_internal.html/1","deprecated":false,"id":"enterprise_over_limit_internal.html/1","title":"enterprise_over_limit_internal.html(assigns)"},{"anchor":"error_report_email.html/1","deprecated":false,"id":"error_report_email.html/1","title":"error_report_email.html(assigns)"},{"anchor":"existing_user_invitation.html/1","deprecated":false,"id":"existing_user_invitation.html/1","title":"existing_user_invitation.html(assigns)"},{"anchor":"google_analytics_import.html/1","deprecated":false,"id":"google_analytics_import.html/1","title":"google_analytics_import.html(assigns)"},{"anchor":"greet_recipient/1","deprecated":false,"id":"greet_recipient/1","title":"greet_recipient(_)"},{"anchor":"invitation_accepted.html/1","deprecated":false,"id":"invitation_accepted.html/1","title":"invitation_accepted.html(assigns)"},{"anchor":"invitation_rejected.html/1","deprecated":false,"id":"invitation_rejected.html/1","title":"invitation_rejected.html(assigns)"},{"anchor":"new_user_invitation.html/1","deprecated":false,"id":"new_user_invitation.html/1","title":"new_user_invitation.html(assigns)"},{"anchor":"over_limit.html/1","deprecated":false,"id":"over_limit.html/1","title":"over_limit.html(assigns)"},{"anchor":"ownership_transfer_accepted.html/1","deprecated":false,"id":"ownership_transfer_accepted.html/1","title":"ownership_transfer_accepted.html(assigns)"},{"anchor":"ownership_transfer_rejected.html/1","deprecated":false,"id":"ownership_transfer_rejected.html/1","title":"ownership_transfer_rejected.html(assigns)"},{"anchor":"ownership_transfer_request.html/1","deprecated":false,"id":"ownership_transfer_request.html/1","title":"ownership_transfer_request.html(assigns)"},{"anchor":"password_reset_email.html/1","deprecated":false,"id":"password_reset_email.html/1","title":"password_reset_email.html(assigns)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"sentry_link/2","deprecated":false,"id":"sentry_link/2","title":"sentry_link(trace_id, dsn \\\\ Sentry.Config.dsn())"},{"anchor":"site_member_removed.html/1","deprecated":false,"id":"site_member_removed.html/1","title":"site_member_removed.html(assigns)"},{"anchor":"site_setup_help_email.html/1","deprecated":false,"id":"site_setup_help_email.html/1","title":"site_setup_help_email.html(assigns)"},{"anchor":"site_setup_success_email.html/1","deprecated":false,"id":"site_setup_success_email.html/1","title":"site_setup_success_email.html(assigns)"},{"anchor":"spike_notification.html/1","deprecated":false,"id":"spike_notification.html/1","title":"spike_notification.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"trial_one_week_reminder.html/1","deprecated":false,"id":"trial_one_week_reminder.html/1","title":"trial_one_week_reminder.html(assigns)"},{"anchor":"trial_over_email.html/1","deprecated":false,"id":"trial_over_email.html/1","title":"trial_over_email.html(assigns)"},{"anchor":"trial_upgrade_email.html/1","deprecated":false,"id":"trial_upgrade_email.html/1","title":"trial_upgrade_email.html(assigns)"},{"anchor":"welcome_email.html/1","deprecated":false,"id":"welcome_email.html/1","title":"welcome_email.html(assigns)"},{"anchor":"yearly_expiration_notification.html/1","deprecated":false,"id":"yearly_expiration_notification.html/1","title":"yearly_expiration_notification.html(assigns)"},{"anchor":"yearly_renewal_notification.html/1","deprecated":false,"id":"yearly_renewal_notification.html/1","title":"yearly_renewal_notification.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.EmailView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Endpoint","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"broadcast/3","deprecated":false,"id":"broadcast/3","title":"broadcast(topic, event, msg)"},{"anchor":"broadcast!/3","deprecated":false,"id":"broadcast!/3","title":"broadcast!(topic, event, msg)"},{"anchor":"broadcast_from/4","deprecated":false,"id":"broadcast_from/4","title":"broadcast_from(from, topic, event, msg)"},{"anchor":"broadcast_from!/4","deprecated":false,"id":"broadcast_from!/4","title":"broadcast_from!(from, topic, event, msg)"},{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/2","deprecated":false,"id":"config/2","title":"config(key, default \\\\ nil)"},{"anchor":"config_change/2","deprecated":false,"id":"config_change/2","title":"config_change(changed, removed)"},{"anchor":"host/0","deprecated":false,"id":"host/0","title":"host()"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"},{"anchor":"local_broadcast/3","deprecated":false,"id":"local_broadcast/3","title":"local_broadcast(topic, event, msg)"},{"anchor":"local_broadcast_from/4","deprecated":false,"id":"local_broadcast_from/4","title":"local_broadcast_from(from, topic, event, msg)"},{"anchor":"patch_session_opts/0","deprecated":false,"id":"patch_session_opts/0","title":"patch_session_opts()"},{"anchor":"path/1","deprecated":false,"id":"path/1","title":"path(path)"},{"anchor":"script_name/0","deprecated":false,"id":"script_name/0","title":"script_name()"},{"anchor":"secure_cookie?/0","deprecated":false,"id":"secure_cookie?/0","title":"secure_cookie?()"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"static_integrity/1","deprecated":false,"id":"static_integrity/1","title":"static_integrity(path)"},{"anchor":"static_lookup/1","deprecated":false,"id":"static_lookup/1","title":"static_lookup(path)"},{"anchor":"static_path/1","deprecated":false,"id":"static_path/1","title":"static_path(path)"},{"anchor":"static_url/0","deprecated":false,"id":"static_url/0","title":"static_url()"},{"anchor":"struct_url/0","deprecated":false,"id":"struct_url/0","title":"struct_url()"},{"anchor":"subscribe/2","deprecated":false,"id":"subscribe/2","title":"subscribe(topic, opts \\\\ [])"},{"anchor":"unsubscribe/1","deprecated":false,"id":"unsubscribe/1","title":"unsubscribe(topic)"},{"anchor":"url/0","deprecated":false,"id":"url/0","title":"url()"},{"anchor":"websocket_url/0","deprecated":false,"id":"websocket_url/0","title":"websocket_url()"}]}],"sections":[],"title":"PlausibleWeb.Endpoint"},{"deprecated":false,"group":"","id":"PlausibleWeb.ErrorHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"error_tag/2","deprecated":false,"id":"error_tag/2","title":"error_tag(assigns, field)"},{"anchor":"translate_error/1","deprecated":false,"id":"translate_error/1","title":"translate_error(arg)"}]}],"sections":[],"title":"PlausibleWeb.ErrorHelpers"},{"deprecated":false,"group":"","id":"PlausibleWeb.ErrorReportController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"submit_error_report/2","deprecated":false,"id":"submit_error_report/2","title":"submit_error_report(conn, arg2)"}]}],"sections":[],"title":"PlausibleWeb.ErrorReportController"},{"deprecated":false,"group":"","id":"PlausibleWeb.ErrorView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"404_error.html/1","deprecated":false,"id":"404_error.html/1","title":"404_error.html(assigns)"},{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"generic_error.html/1","deprecated":false,"id":"generic_error.html/1","title":"generic_error.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"server_error.html/1","deprecated":false,"id":"server_error.html/1","title":"server_error.html(assigns)"},{"anchor":"server_error_report_thanks.html/1","deprecated":false,"id":"server_error_report_thanks.html/1","title":"server_error_report_thanks.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.ErrorView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Favicon","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, list)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(_)"}]}],"sections":[],"title":"PlausibleWeb.Favicon"},{"deprecated":false,"group":"","id":"PlausibleWeb.FirstLaunchPlug","sections":[],"title":"PlausibleWeb.FirstLaunchPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.FormHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"styled_error/1","deprecated":false,"id":"styled_error/1","title":"styled_error(error)"},{"anchor":"styled_label/4","deprecated":false,"id":"styled_label/4","title":"styled_label(form, field, text, opts \\\\ [])"},{"anchor":"styled_select/4","deprecated":false,"id":"styled_select/4","title":"styled_select(form, field, options, opts \\\\ [])"},{"anchor":"styled_text_input/3","deprecated":false,"id":"styled_text_input/3","title":"styled_text_input(form, field, opts \\\\ [])"}]}],"sections":[],"title":"PlausibleWeb.FormHelpers"},{"deprecated":false,"group":"","id":"PlausibleWeb.InvitationController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"accept_invitation/2","deprecated":false,"id":"accept_invitation/2","title":"accept_invitation(conn, map)"},{"anchor":"reject_invitation/2","deprecated":false,"id":"reject_invitation/2","title":"reject_invitation(conn, map)"},{"anchor":"remove_invitation/2","deprecated":false,"id":"remove_invitation/2","title":"remove_invitation(conn, map)"}]}],"sections":[],"title":"PlausibleWeb.InvitationController"},{"deprecated":false,"group":"","id":"PlausibleWeb.LastSeenPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.LastSeenPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.LayoutView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"app.html/1","deprecated":false,"id":"app.html/1","title":"app.html(assigns)"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"base_email.html/1","deprecated":false,"id":"base_email.html/1","title":"base_email.html(assigns)"},{"anchor":"base_error.html/1","deprecated":false,"id":"base_error.html/1","title":"base_error.html(assigns)"},{"anchor":"dogfood_api_destination/0","deprecated":false,"id":"dogfood_api_destination/0","title":"dogfood_api_destination()"},{"anchor":"dogfood_domain/1","deprecated":false,"id":"dogfood_domain/1","title":"dogfood_domain(conn)"},{"anchor":"dogfood_script_url/0","deprecated":false,"id":"dogfood_script_url/0","title":"dogfood_script_url()"},{"anchor":"embedded.html/1","deprecated":false,"id":"embedded.html/1","title":"embedded.html(assigns)"},{"anchor":"focus.html/1","deprecated":false,"id":"focus.html/1","title":"focus.html(assigns)"},{"anchor":"grace_period_end/1","deprecated":false,"id":"grace_period_end/1","title":"grace_period_end(user)"},{"anchor":"home_dest/1","deprecated":false,"id":"home_dest/1","title":"home_dest(conn)"},{"anchor":"is_current_tab/2","deprecated":false,"id":"is_current_tab/2","title":"is_current_tab(conn, tab)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"priority_email.html/1","deprecated":false,"id":"priority_email.html/1","title":"priority_email.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"render_layout/3","deprecated":false,"id":"render_layout/3","title":"render_layout(layout, assigns, list)"},{"anchor":"settings_tabs/1","deprecated":false,"id":"settings_tabs/1","title":"settings_tabs(conn)"},{"anchor":"site_settings.html/1","deprecated":false,"id":"site_settings.html/1","title":"site_settings.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"trial_notificaton/1","deprecated":false,"id":"trial_notificaton/1","title":"trial_notificaton(user)"},{"anchor":"websocket_url/0","deprecated":false,"id":"websocket_url/0","title":"websocket_url()"}]}],"sections":[],"title":"PlausibleWeb.LayoutView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.ChoosePlan","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, map, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"},{"anchor":"render_price_info/1","deprecated":false,"id":"render_price_info/1","title":"render_price_info(assigns)"},{"anchor":"two_months_free/1","deprecated":false,"id":"two_months_free/1","title":"two_months_free(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.ChoosePlan"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.Components.ComboBox","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"dropdown/1","deprecated":false,"id":"dropdown/1","title":"dropdown(assigns)"},{"anchor":"dropdown_anchor/1","deprecated":false,"id":"dropdown_anchor/1","title":"dropdown_anchor(assigns)"},{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, params, socket)"},{"anchor":"option/1","deprecated":false,"id":"option/1","title":"option(assigns)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"},{"anchor":"select_option/4","deprecated":false,"id":"select_option/4","title":"select_option(js \\\\ %JS{}, id, submit_value, display_value)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(assigns, socket)"}]}],"sections":[],"title":"PlausibleWeb.Live.Components.ComboBox"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.Components.ComboBox.StaticSearch","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"suggest/3","deprecated":false,"id":"suggest/3","title":"suggest(input, choices, opts \\\\ [])"}]}],"sections":[],"title":"PlausibleWeb.Live.Components.ComboBox.StaticSearch"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.Components.Form","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"error/1","deprecated":false,"id":"error/1","title":"error(assigns)"},{"anchor":"input/1","deprecated":false,"id":"input/1","title":"input(assigns)"},{"anchor":"label/1","deprecated":false,"id":"label/1","title":"label(assigns)"},{"anchor":"password_input_with_strength/1","deprecated":false,"id":"password_input_with_strength/1","title":"password_input_with_strength(assigns)"},{"anchor":"password_length_hint/1","deprecated":false,"id":"password_length_hint/1","title":"password_length_hint(assigns)"},{"anchor":"strength_meter/1","deprecated":false,"id":"strength_meter/1","title":"strength_meter(assigns)"},{"anchor":"translate_error/1","deprecated":false,"id":"translate_error/1","title":"translate_error(arg)"}]}],"sections":[],"title":"PlausibleWeb.Live.Components.Form"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.Flash","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"clear_flash_button/1","deprecated":false,"id":"clear_flash_button/1","title":"clear_flash_button(assigns)"},{"anchor":"flash/1","deprecated":false,"id":"flash/1","title":"flash(assigns)"},{"anchor":"icon_error/1","deprecated":false,"id":"icon_error/1","title":"icon_error(assigns)"},{"anchor":"icon_success/1","deprecated":false,"id":"icon_success/1","title":"icon_success(assigns)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.Flash"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.FunnelSettings","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg1, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.FunnelSettings"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.FunnelSettings.Form","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_step_button/1","deprecated":false,"id":"add_step_button/1","title":"add_step_button(assigns)"},{"anchor":"evaluation/1","deprecated":false,"id":"evaluation/1","title":"evaluation(assigns)"},{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg1, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"remove_step_button/1","deprecated":false,"id":"remove_step_button/1","title":"remove_step_button(assigns)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"},{"anchor":"submit_button/1","deprecated":false,"id":"submit_button/1","title":"submit_button(assigns)"},{"anchor":"submit_button_inactive/1","deprecated":false,"id":"submit_button_inactive/1","title":"submit_button_inactive(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.FunnelSettings.Form"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.FunnelSettings.List","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.FunnelSettings.List"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.GoalSettings","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg1, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.GoalSettings"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.GoalSettings.Form","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"custom_event_fields/1","deprecated":false,"id":"custom_event_fields/1","title":"custom_event_fields(assigns)"},{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"pageview_fields/1","deprecated":false,"id":"pageview_fields/1","title":"pageview_fields(assigns)"},{"anchor":"pageviews_tab/1","deprecated":false,"id":"pageviews_tab/1","title":"pageviews_tab(assigns)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"},{"anchor":"suggest_page_paths/3","deprecated":false,"id":"suggest_page_paths/3","title":"suggest_page_paths(input, options, site)"},{"anchor":"tabs/1","deprecated":false,"id":"tabs/1","title":"tabs(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.GoalSettings.Form"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.GoalSettings.List","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.GoalSettings.List"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.PropsSettings","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg1, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.PropsSettings"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.PropsSettings.Form","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.PropsSettings.Form"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.PropsSettings.List","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.PropsSettings.List"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.RegisterForm","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, params, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, session, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.RegisterForm"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.ResetPasswordForm","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, map, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.ResetPasswordForm"},{"deprecated":false,"group":"","id":"PlausibleWeb.LiveSocket","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"connect/3","deprecated":false,"id":"connect/3","title":"connect(params, socket, info)"},{"anchor":"id/1","deprecated":false,"id":"id/1","title":"id(socket)"}]}],"sections":[],"title":"PlausibleWeb.LiveSocket"},{"deprecated":false,"group":"","id":"PlausibleWeb.MJML.WeeklyReport","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"debug_mjml_template/0","deprecated":false,"id":"debug_mjml_template/0","title":"debug_mjml_template()"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.MJML.WeeklyReport"},{"deprecated":false,"group":"","id":"PlausibleWeb.PageController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"index/2","deprecated":false,"id":"index/2","title":"index(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.PageController"},{"deprecated":false,"group":"","id":"PlausibleWeb.PageView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"index.html/1","deprecated":false,"id":"index.html/1","title":"index.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.PageView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"base_uri/0","deprecated":false,"id":"base_uri/0","title":"base_uri()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Controllers.Goals","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(conn, params)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(conn, params)"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(conn, params)"},{"anchor":"index/2","deprecated":false,"id":"index/2","title":"index(conn, params)"},{"anchor":"open_api_operation/1","deprecated":false,"id":"open_api_operation/1","title":"open_api_operation(action)"},{"anchor":"shared_security/0","deprecated":false,"id":"shared_security/0","title":"shared_security()"},{"anchor":"shared_tags/0","deprecated":false,"id":"shared_tags/0","title":"shared_tags()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Controllers.Goals"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Controllers.SharedLinks","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(conn, params)"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(conn, params)"},{"anchor":"index/2","deprecated":false,"id":"index/2","title":"index(conn, params)"},{"anchor":"open_api_operation/1","deprecated":false,"id":"open_api_operation/1","title":"open_api_operation(action)"},{"anchor":"shared_security/0","deprecated":false,"id":"shared_security/0","title":"shared_security()"},{"anchor":"shared_tags/0","deprecated":false,"id":"shared_tags/0","title":"shared_tags()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Controllers.SharedLinks"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Errors","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"error/3","deprecated":false,"id":"error/3","title":"error(conn, status, message)"},{"anchor":"unauthorized/1","deprecated":false,"id":"unauthorized/1","title":"unauthorized(conn)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Errors"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Router","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"api/2","deprecated":false,"id":"api/2","title":"api(conn, _)"},{"anchor":"auth/2","deprecated":false,"id":"auth/2","title":"auth(conn, _)"},{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Router"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Error","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Error"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.Pageview","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.Pageview"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.Revenue","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.Revenue"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.Type","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.Type"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Link","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Link"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.NotFound","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.NotFound"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.PaginationMetadata","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.PaginationMetadata"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.SharedLink","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.SharedLink"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Unauthorized","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Unauthorized"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Spec","sections":[],"title":"PlausibleWeb.Plugins.API.Spec"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Views.Error","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Views.Error"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Views.Goal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Views.Goal"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Views.Pagination","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"render_metadata_links/4","deprecated":false,"id":"render_metadata_links/4","title":"render_metadata_links(meta, helper_fn, helper_fn_args, existing_params \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Views.Pagination"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Views.SharedLink","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Views.SharedLink"},{"deprecated":false,"group":"","id":"PlausibleWeb.PluginsAPICase","sections":[],"title":"PlausibleWeb.PluginsAPICase"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugs.AuthorizePluginsAPI","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts \\\\ [])"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.Plugs.AuthorizePluginsAPI"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugs.MaybeDisableRegistration","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.Plugs.MaybeDisableRegistration"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugs.NoRobots","sections":[],"title":"PlausibleWeb.Plugs.NoRobots"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugs.RuntimeSessionAdapter","sections":[],"title":"PlausibleWeb.Plugs.RuntimeSessionAdapter"},{"deprecated":false,"group":"","id":"PlausibleWeb.RefInspector","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"parse/1","deprecated":false,"id":"parse/1","title":"parse(ref)"},{"anchor":"right_uri?/1","deprecated":false,"id":"right_uri?/1","title":"right_uri?(arg1)"}]}],"sections":[],"title":"PlausibleWeb.RefInspector"},{"deprecated":false,"group":"","id":"PlausibleWeb.RemoteIp","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"get/1","deprecated":false,"id":"get/1","title":"get(conn)"}]}],"sections":[],"title":"PlausibleWeb.RemoteIp"},{"deprecated":false,"group":"","id":"PlausibleWeb.RequireAccountPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.RequireAccountPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.RequireLoggedOutPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.RequireLoggedOutPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.Router","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"api/2","deprecated":false,"id":"api/2","title":"api(conn, _)"},{"anchor":"browser/2","deprecated":false,"id":"browser/2","title":"browser(conn, _)"},{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"csrf/2","deprecated":false,"id":"csrf/2","title":"csrf(conn, _)"},{"anchor":"flags/2","deprecated":false,"id":"flags/2","title":"flags(conn, _)"},{"anchor":"focus_layout/2","deprecated":false,"id":"focus_layout/2","title":"focus_layout(conn, _)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"},{"anchor":"internal_stats_api/2","deprecated":false,"id":"internal_stats_api/2","title":"internal_stats_api(conn, _)"},{"anchor":"kaffy_browser/2","deprecated":false,"id":"kaffy_browser/2","title":"kaffy_browser(conn, _)"},{"anchor":"public_api/2","deprecated":false,"id":"public_api/2","title":"public_api(conn, _)"},{"anchor":"shared_link/2","deprecated":false,"id":"shared_link/2","title":"shared_link(conn, _)"}]}],"sections":[],"title":"PlausibleWeb.Router"},{"deprecated":false,"group":"","id":"PlausibleWeb.SessionTimeoutPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts \\\\ [])"}]}],"sections":[],"title":"PlausibleWeb.SessionTimeoutPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.Site.MembershipController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"invite_member/2","deprecated":false,"id":"invite_member/2","title":"invite_member(conn, map)"},{"anchor":"invite_member_form/2","deprecated":false,"id":"invite_member_form/2","title":"invite_member_form(conn, params)"},{"anchor":"remove_member/2","deprecated":false,"id":"remove_member/2","title":"remove_member(conn, map)"},{"anchor":"transfer_ownership/2","deprecated":false,"id":"transfer_ownership/2","title":"transfer_ownership(conn, map)"},{"anchor":"transfer_ownership_form/2","deprecated":false,"id":"transfer_ownership_form/2","title":"transfer_ownership_form(conn, params)"},{"anchor":"update_role/2","deprecated":false,"id":"update_role/2","title":"update_role(conn, map)"}]}],"sections":[],"title":"PlausibleWeb.Site.MembershipController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Site.MembershipView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"invite_member_form.html/1","deprecated":false,"id":"invite_member_form.html/1","title":"invite_member_form.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"transfer_ownership_form.html/1","deprecated":false,"id":"transfer_ownership_form.html/1","title":"transfer_ownership_form.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Site.MembershipView"},{"deprecated":false,"group":"","id":"PlausibleWeb.SiteController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_monthly_report_recipient/2","deprecated":false,"id":"add_monthly_report_recipient/2","title":"add_monthly_report_recipient(conn, map)"},{"anchor":"add_snippet/2","deprecated":false,"id":"add_snippet/2","title":"add_snippet(conn, params)"},{"anchor":"add_snippet_after_domain_change/2","deprecated":false,"id":"add_snippet_after_domain_change/2","title":"add_snippet_after_domain_change(conn, params)"},{"anchor":"add_spike_notification_recipient/2","deprecated":false,"id":"add_spike_notification_recipient/2","title":"add_spike_notification_recipient(conn, map)"},{"anchor":"add_weekly_report_recipient/2","deprecated":false,"id":"add_weekly_report_recipient/2","title":"add_weekly_report_recipient(conn, map)"},{"anchor":"change_domain/2","deprecated":false,"id":"change_domain/2","title":"change_domain(conn, params)"},{"anchor":"change_domain_submit/2","deprecated":false,"id":"change_domain_submit/2","title":"change_domain_submit(conn, map)"},{"anchor":"create_shared_link/2","deprecated":false,"id":"create_shared_link/2","title":"create_shared_link(conn, map)"},{"anchor":"create_site/2","deprecated":false,"id":"create_site/2","title":"create_site(conn, map)"},{"anchor":"delete_custom_domain/2","deprecated":false,"id":"delete_custom_domain/2","title":"delete_custom_domain(conn, map)"},{"anchor":"delete_google_auth/2","deprecated":false,"id":"delete_google_auth/2","title":"delete_google_auth(conn, params)"},{"anchor":"delete_shared_link/2","deprecated":false,"id":"delete_shared_link/2","title":"delete_shared_link(conn, map)"},{"anchor":"delete_site/2","deprecated":false,"id":"delete_site/2","title":"delete_site(conn, params)"},{"anchor":"disable_monthly_report/2","deprecated":false,"id":"disable_monthly_report/2","title":"disable_monthly_report(conn, params)"},{"anchor":"disable_spike_notification/2","deprecated":false,"id":"disable_spike_notification/2","title":"disable_spike_notification(conn, params)"},{"anchor":"disable_weekly_report/2","deprecated":false,"id":"disable_weekly_report/2","title":"disable_weekly_report(conn, params)"},{"anchor":"edit_shared_link/2","deprecated":false,"id":"edit_shared_link/2","title":"edit_shared_link(conn, map)"},{"anchor":"enable_monthly_report/2","deprecated":false,"id":"enable_monthly_report/2","title":"enable_monthly_report(conn, params)"},{"anchor":"enable_spike_notification/2","deprecated":false,"id":"enable_spike_notification/2","title":"enable_spike_notification(conn, params)"},{"anchor":"enable_weekly_report/2","deprecated":false,"id":"enable_weekly_report/2","title":"enable_weekly_report(conn, params)"},{"anchor":"forget_imported/2","deprecated":false,"id":"forget_imported/2","title":"forget_imported(conn, params)"},{"anchor":"import_from_google/2","deprecated":false,"id":"import_from_google/2","title":"import_from_google(conn, map)"},{"anchor":"import_from_google_confirm/2","deprecated":false,"id":"import_from_google_confirm/2","title":"import_from_google_confirm(conn, map)"},{"anchor":"import_from_google_user_metric_notice/2","deprecated":false,"id":"import_from_google_user_metric_notice/2","title":"import_from_google_user_metric_notice(conn, map)"},{"anchor":"import_from_google_view_id/2","deprecated":false,"id":"import_from_google_view_id/2","title":"import_from_google_view_id(conn, map)"},{"anchor":"import_from_google_view_id_form/2","deprecated":false,"id":"import_from_google_view_id_form/2","title":"import_from_google_view_id_form(conn, map)"},{"anchor":"index/2","deprecated":false,"id":"index/2","title":"index(conn, params)"},{"anchor":"make_private/2","deprecated":false,"id":"make_private/2","title":"make_private(conn, params)"},{"anchor":"make_public/2","deprecated":false,"id":"make_public/2","title":"make_public(conn, params)"},{"anchor":"new/2","deprecated":false,"id":"new/2","title":"new(conn, params)"},{"anchor":"new_shared_link/2","deprecated":false,"id":"new_shared_link/2","title":"new_shared_link(conn, params)"},{"anchor":"remove_monthly_report_recipient/2","deprecated":false,"id":"remove_monthly_report_recipient/2","title":"remove_monthly_report_recipient(conn, map)"},{"anchor":"remove_spike_notification_recipient/2","deprecated":false,"id":"remove_spike_notification_recipient/2","title":"remove_spike_notification_recipient(conn, map)"},{"anchor":"remove_weekly_report_recipient/2","deprecated":false,"id":"remove_weekly_report_recipient/2","title":"remove_weekly_report_recipient(conn, map)"},{"anchor":"reset_stats/2","deprecated":false,"id":"reset_stats/2","title":"reset_stats(conn, params)"},{"anchor":"settings/2","deprecated":false,"id":"settings/2","title":"settings(conn, map)"},{"anchor":"settings_custom_domain/2","deprecated":false,"id":"settings_custom_domain/2","title":"settings_custom_domain(conn, params)"},{"anchor":"settings_danger_zone/2","deprecated":false,"id":"settings_danger_zone/2","title":"settings_danger_zone(conn, params)"},{"anchor":"settings_email_reports/2","deprecated":false,"id":"settings_email_reports/2","title":"settings_email_reports(conn, params)"},{"anchor":"settings_funnels/2","deprecated":false,"id":"settings_funnels/2","title":"settings_funnels(conn, params)"},{"anchor":"settings_general/2","deprecated":false,"id":"settings_general/2","title":"settings_general(conn, params)"},{"anchor":"settings_goals/2","deprecated":false,"id":"settings_goals/2","title":"settings_goals(conn, params)"},{"anchor":"settings_people/2","deprecated":false,"id":"settings_people/2","title":"settings_people(conn, params)"},{"anchor":"settings_props/2","deprecated":false,"id":"settings_props/2","title":"settings_props(conn, params)"},{"anchor":"settings_search_console/2","deprecated":false,"id":"settings_search_console/2","title":"settings_search_console(conn, params)"},{"anchor":"settings_visibility/2","deprecated":false,"id":"settings_visibility/2","title":"settings_visibility(conn, params)"},{"anchor":"update_feature_visibility/2","deprecated":false,"id":"update_feature_visibility/2","title":"update_feature_visibility(conn, map)"},{"anchor":"update_google_auth/2","deprecated":false,"id":"update_google_auth/2","title":"update_google_auth(conn, map)"},{"anchor":"update_settings/2","deprecated":false,"id":"update_settings/2","title":"update_settings(conn, map)"},{"anchor":"update_shared_link/2","deprecated":false,"id":"update_shared_link/2","title":"update_shared_link(conn, map)"},{"anchor":"update_spike_notification/2","deprecated":false,"id":"update_spike_notification/2","title":"update_spike_notification(conn, map)"}]}],"sections":[],"title":"PlausibleWeb.SiteController"},{"deprecated":false,"group":"","id":"PlausibleWeb.SiteView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"change_domain.html/1","deprecated":false,"id":"change_domain.html/1","title":"change_domain.html(assigns)"},{"anchor":"edit_shared_link.html/1","deprecated":false,"id":"edit_shared_link.html/1","title":"edit_shared_link.html(assigns)"},{"anchor":"goal_name/1","deprecated":false,"id":"goal_name/1","title":"goal_name(arg)"},{"anchor":"google_logo/1","deprecated":false,"id":"google_logo/1","title":"google_logo(assigns \\\\ %{})"},{"anchor":"gravatar/2","deprecated":false,"id":"gravatar/2","title":"gravatar(email, opts)"},{"anchor":"import_from_google_confirm.html/1","deprecated":false,"id":"import_from_google_confirm.html/1","title":"import_from_google_confirm.html(assigns)"},{"anchor":"import_from_google_user_metric_form.html/1","deprecated":false,"id":"import_from_google_user_metric_form.html/1","title":"import_from_google_user_metric_form.html(assigns)"},{"anchor":"import_from_google_view_id_form.html/1","deprecated":false,"id":"import_from_google_view_id_form.html/1","title":"import_from_google_view_id_form.html(assigns)"},{"anchor":"index.html/1","deprecated":false,"id":"index.html/1","title":"index.html(assigns)"},{"anchor":"new.html/1","deprecated":false,"id":"new.html/1","title":"new.html(assigns)"},{"anchor":"new_shared_link.html/1","deprecated":false,"id":"new_shared_link.html/1","title":"new_shared_link.html(assigns)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"render_snippet/1","deprecated":false,"id":"render_snippet/1","title":"render_snippet(site)"},{"anchor":"settings_custom_domain.html/1","deprecated":false,"id":"settings_custom_domain.html/1","title":"settings_custom_domain.html(assigns)"},{"anchor":"settings_danger_zone.html/1","deprecated":false,"id":"settings_danger_zone.html/1","title":"settings_danger_zone.html(assigns)"},{"anchor":"settings_email_reports.html/1","deprecated":false,"id":"settings_email_reports.html/1","title":"settings_email_reports.html(assigns)"},{"anchor":"settings_funnels.html/1","deprecated":false,"id":"settings_funnels.html/1","title":"settings_funnels.html(assigns)"},{"anchor":"settings_general.html/1","deprecated":false,"id":"settings_general.html/1","title":"settings_general.html(assigns)"},{"anchor":"settings_goals.html/1","deprecated":false,"id":"settings_goals.html/1","title":"settings_goals.html(assigns)"},{"anchor":"settings_people.html/1","deprecated":false,"id":"settings_people.html/1","title":"settings_people.html(assigns)"},{"anchor":"settings_props.html/1","deprecated":false,"id":"settings_props.html/1","title":"settings_props.html(assigns)"},{"anchor":"settings_search_console.html/1","deprecated":false,"id":"settings_search_console.html/1","title":"settings_search_console.html(assigns)"},{"anchor":"settings_visibility.html/1","deprecated":false,"id":"settings_visibility.html/1","title":"settings_visibility.html(assigns)"},{"anchor":"shared_link_dest/2","deprecated":false,"id":"shared_link_dest/2","title":"shared_link_dest(site, link)"},{"anchor":"snippet.html/1","deprecated":false,"id":"snippet.html/1","title":"snippet.html(assigns)"},{"anchor":"snippet_after_domain_change.html/1","deprecated":false,"id":"snippet_after_domain_change.html/1","title":"snippet_after_domain_change.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"with_indefinite_article/1","deprecated":false,"id":"with_indefinite_article/1","title":"with_indefinite_article(word)"}]}],"sections":[],"title":"PlausibleWeb.SiteView"},{"deprecated":false,"group":"","id":"PlausibleWeb.StatsController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"authenticate_shared_link/2","deprecated":false,"id":"authenticate_shared_link/2","title":"authenticate_shared_link(conn, map)"},{"anchor":"csv_export/2","deprecated":false,"id":"csv_export/2","title":"csv_export(conn, params)"},{"anchor":"shared_link/2","deprecated":false,"id":"shared_link/2","title":"shared_link(conn, arg2)"},{"anchor":"stats/2","deprecated":false,"id":"stats/2","title":"stats(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.StatsController"},{"deprecated":false,"group":"","id":"PlausibleWeb.StatsView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"large_number_format/1","deprecated":false,"id":"large_number_format/1","title":"large_number_format(n)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"pretty_stats_url/1","deprecated":false,"id":"pretty_stats_url/1","title":"pretty_stats_url(arg)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"shared_link_password.html/1","deprecated":false,"id":"shared_link_password.html/1","title":"shared_link_password.html(assigns)"},{"anchor":"site_locked.html/1","deprecated":false,"id":"site_locked.html/1","title":"site_locked.html(assigns)"},{"anchor":"stats.html/1","deprecated":false,"id":"stats.html/1","title":"stats.html(assigns)"},{"anchor":"stats_container_class/1","deprecated":false,"id":"stats_container_class/1","title":"stats_container_class(conn)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"waiting_first_pageview.html/1","deprecated":false,"id":"waiting_first_pageview.html/1","title":"waiting_first_pageview.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.StatsView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Tracker","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, list)"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(arg)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.Tracker"},{"deprecated":false,"group":"","id":"PlausibleWeb.UnsubscribeController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"monthly_report/2","deprecated":false,"id":"monthly_report/2","title":"monthly_report(conn, map)"},{"anchor":"weekly_report/2","deprecated":false,"id":"weekly_report/2","title":"weekly_report(conn, map)"}]}],"sections":[],"title":"PlausibleWeb.UnsubscribeController"},{"deprecated":false,"group":"","id":"PlausibleWeb.UnsubscribeView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"success.html/1","deprecated":false,"id":"success.html/1","title":"success.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.UnsubscribeView"}],"tasks":[{"deprecated":false,"group":"","id":"Mix.Tasks.CancelSubscription","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(list)"}]}],"sections":[],"title":"mix cancel_subscription"},{"deprecated":false,"group":"","id":"Mix.Tasks.CleanClickhouse","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(_)"}]}],"sections":[],"title":"mix clean_clickhouse"},{"deprecated":false,"group":"","id":"Mix.Tasks.CreateFreeSubscription","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"execute/1","deprecated":false,"id":"execute/1","title":"execute(user_id)"},{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(arg1)"}]}],"sections":[],"title":"mix create_free_subscription"},{"deprecated":false,"group":"","id":"Mix.Tasks.DownloadCountryDatabase","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(_)"}]}],"sections":[],"title":"mix download_country_database"},{"deprecated":false,"group":"","id":"Mix.Tasks.GenerateReferrerFavicons","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(_)"}]}],"sections":[],"title":"mix generate_referrer_favicons"},{"deprecated":false,"group":"","id":"Mix.Tasks.PullSandboxSubscription","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(list)"}]}],"sections":[],"title":"mix pull_sandbox_subscription"},{"deprecated":false,"group":"","id":"Mix.Tasks.SendPageview","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(opts)"}]}],"sections":[],"title":"mix send_pageview"}]} \ No newline at end of file diff --git a/dist/sidebar_items-920E5485.js b/dist/sidebar_items-920E5485.js new file mode 100644 index 000000000..dd7f4b293 --- /dev/null +++ b/dist/sidebar_items-920E5485.js @@ -0,0 +1 @@ +sidebarNodes={"extras":[{"group":"","headers":[{"anchor":"modules","id":"Modules"},{"anchor":"mix-tasks","id":"Mix Tasks"}],"id":"api-reference","title":"API Reference"},{"group":"","headers":[{"anchor":"why-plausible","id":"Why Plausible?"},{"anchor":"why-is-plausible-analytics-cloud-not-free-like-google-analytics","id":"Why is Plausible Analytics Cloud not free like Google Analytics?"},{"anchor":"getting-started-with-plausible","id":"Getting started with Plausible"},{"anchor":"technology","id":"Technology"},{"anchor":"contributors","id":"Contributors"},{"anchor":"feedback-roadmap","id":"Feedback & Roadmap"},{"anchor":"license-trademarks","id":"License & Trademarks"}],"id":"readme","title":"Introduction"},{"group":"","headers":[{"anchor":"development-setup","id":"Development setup"},{"anchor":"finding-a-task","id":"Finding a task"}],"id":"contributing","title":"Contributing"},{"group":"Features","headers":[{"anchor":"usage-alert-and-grace-period","id":"Usage alert and grace period"},{"anchor":"account-locking","id":"Account locking"}],"id":"account-locking","title":"Account locking"}],"modules":[{"deprecated":false,"group":"","id":"ObanErrorReporter","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/4","deprecated":false,"id":"handle_event/4","title":"handle_event(list, measure, meta, _)"}]}],"sections":[],"title":"ObanErrorReporter"},{"deprecated":false,"group":"","id":"Plausible","sections":[],"title":"Plausible"},{"deprecated":false,"group":"","id":"Plausible.AsyncInsertRepo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.AsyncInsertRepo"},{"deprecated":false,"group":"","id":"Plausible.Auth","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create_user/3","deprecated":false,"id":"create_user/3","title":"create_user(name, email, pwd)"},{"anchor":"delete_user/1","deprecated":false,"id":"delete_user/1","title":"delete_user(user)"},{"anchor":"enterprise_configured?/1","deprecated":false,"id":"enterprise_configured?/1","title":"enterprise_configured?(user)"},{"anchor":"find_user_by/1","deprecated":false,"id":"find_user_by/1","title":"find_user_by(opts)"},{"anchor":"has_active_sites?/2","deprecated":false,"id":"has_active_sites?/2","title":"has_active_sites?(user, roles \\\\ [:owner, :admin, :viewer])"},{"anchor":"is_super_admin?/1","deprecated":false,"id":"is_super_admin?/1","title":"is_super_admin?(user_id)"},{"anchor":"issue_email_verification/1","deprecated":false,"id":"issue_email_verification/1","title":"issue_email_verification(user)"},{"anchor":"user_owns_sites?/1","deprecated":false,"id":"user_owns_sites?/1","title":"user_owns_sites?(user)"},{"anchor":"verify_email/2","deprecated":false,"id":"verify_email/2","title":"verify_email(user, code)"}]}],"sections":[],"title":"Plausible.Auth"},{"deprecated":false,"group":"","id":"Plausible.Auth.ApiKey","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(schema, attrs \\\\ %{})"},{"anchor":"do_hash/1","deprecated":false,"id":"do_hash/1","title":"do_hash(key)"},{"anchor":"process_key/1","deprecated":false,"id":"process_key/1","title":"process_key(changeset)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(schema, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Auth.ApiKey"},{"deprecated":false,"group":"","id":"Plausible.Auth.ApiKeyAdmin","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create_changeset/2","deprecated":false,"id":"create_changeset/2","title":"create_changeset(schema, attrs)"},{"anchor":"custom_index_query/3","deprecated":false,"id":"custom_index_query/3","title":"custom_index_query(conn, schema, query)"},{"anchor":"form_fields/1","deprecated":false,"id":"form_fields/1","title":"form_fields(_)"},{"anchor":"index/1","deprecated":false,"id":"index/1","title":"index(_)"},{"anchor":"search_fields/1","deprecated":false,"id":"search_fields/1","title":"search_fields(schema)"},{"anchor":"update_changeset/2","deprecated":false,"id":"update_changeset/2","title":"update_changeset(schema, attrs)"}]}],"sections":[],"title":"Plausible.Auth.ApiKeyAdmin"},{"deprecated":false,"group":"","id":"Plausible.Auth.GracePeriod","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"active?/1","deprecated":false,"id":"active?/1","title":"active?(user)"},{"anchor":"end_changeset/1","deprecated":false,"id":"end_changeset/1","title":"end_changeset(user)"},{"anchor":"expired?/1","deprecated":false,"id":"expired?/1","title":"expired?(user)"},{"anchor":"remove_changeset/1","deprecated":false,"id":"remove_changeset/1","title":"remove_changeset(user)"},{"anchor":"start_changeset/2","deprecated":false,"id":"start_changeset/2","title":"start_changeset(user, allowance_required)"},{"anchor":"start_manual_lock_changeset/2","deprecated":false,"id":"start_manual_lock_changeset/2","title":"start_manual_lock_changeset(user, allowance_required)"}]}],"sections":[],"title":"Plausible.Auth.GracePeriod"},{"deprecated":false,"group":"","id":"Plausible.Auth.Invitation","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Auth.Invitation"},{"deprecated":false,"group":"","id":"Plausible.Auth.Password","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"dummy_calculation/0","deprecated":false,"id":"dummy_calculation/0","title":"dummy_calculation()"},{"anchor":"hash/1","deprecated":false,"id":"hash/1","title":"hash(password)"},{"anchor":"match?/2","deprecated":false,"id":"match?/2","title":"match?(password, hash)"}]}],"sections":[],"title":"Plausible.Auth.Password"},{"deprecated":false,"group":"","id":"Plausible.Auth.Token","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"sign_password_reset/1","deprecated":false,"id":"sign_password_reset/1","title":"sign_password_reset(email)"},{"anchor":"sign_shared_link/1","deprecated":false,"id":"sign_shared_link/1","title":"sign_shared_link(slug)"},{"anchor":"verify_password_reset/1","deprecated":false,"id":"verify_password_reset/1","title":"verify_password_reset(token)"},{"anchor":"verify_shared_link/1","deprecated":false,"id":"verify_shared_link/1","title":"verify_shared_link(token)"}]}],"sections":[],"title":"Plausible.Auth.Token"},{"deprecated":false,"group":"","id":"Plausible.Auth.User","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"cancel_email_changeset/1","deprecated":false,"id":"cancel_email_changeset/1","title":"cancel_email_changeset(user)"},{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(user, attrs \\\\ %{})"},{"anchor":"email_changeset/2","deprecated":false,"id":"email_changeset/2","title":"email_changeset(user, attrs \\\\ %{})"},{"anchor":"end_trial/1","deprecated":false,"id":"end_trial/1","title":"end_trial(user)"},{"anchor":"hash_password/1","deprecated":false,"id":"hash_password/1","title":"hash_password(changeset)"},{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(attrs \\\\ %{})"},{"anchor":"password_strength/1","deprecated":false,"id":"password_strength/1","title":"password_strength(changeset)"},{"anchor":"remove_trial_expiry/1","deprecated":false,"id":"remove_trial_expiry/1","title":"remove_trial_expiry(user)"},{"anchor":"set_password/2","deprecated":false,"id":"set_password/2","title":"set_password(user, password)"},{"anchor":"settings_changeset/2","deprecated":false,"id":"settings_changeset/2","title":"settings_changeset(user, attrs \\\\ %{})"},{"anchor":"start_trial/1","deprecated":false,"id":"start_trial/1","title":"start_trial(user)"}]}],"sections":[],"title":"Plausible.Auth.User"},{"deprecated":false,"group":"","id":"Plausible.Auth.UserAdmin","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"custom_index_query/3","deprecated":false,"id":"custom_index_query/3","title":"custom_index_query(conn, schema, query)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(conn, map)"},{"anchor":"form_fields/1","deprecated":false,"id":"form_fields/1","title":"form_fields(_)"},{"anchor":"index/1","deprecated":false,"id":"index/1","title":"index(_)"},{"anchor":"resource_actions/1","deprecated":false,"id":"resource_actions/1","title":"resource_actions(_)"}]}],"sections":[],"title":"Plausible.Auth.UserAdmin"},{"deprecated":false,"group":"","id":"Plausible.Billing","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"active_subscription_for/1","deprecated":false,"id":"active_subscription_for/1","title":"active_subscription_for(user_id)"},{"anchor":"change_plan/2","deprecated":false,"id":"change_plan/2","title":"change_plan(user, new_plan_id)"},{"anchor":"change_plan_preview/2","deprecated":false,"id":"change_plan_preview/2","title":"change_plan_preview(subscription, new_plan_id)"},{"anchor":"check_needs_to_upgrade/1","deprecated":false,"id":"check_needs_to_upgrade/1","title":"check_needs_to_upgrade(user)"},{"anchor":"has_active_subscription?/1","deprecated":false,"id":"has_active_subscription?/1","title":"has_active_subscription?(user_id)"},{"anchor":"last_two_billing_cycles/2","deprecated":false,"id":"last_two_billing_cycles/2","title":"last_two_billing_cycles(user, today \\\\ Timex.today())"},{"anchor":"last_two_billing_months_usage/2","deprecated":false,"id":"last_two_billing_months_usage/2","title":"last_two_billing_months_usage(user, today \\\\ Timex.today())"},{"anchor":"on_trial?/1","deprecated":false,"id":"on_trial?/1","title":"on_trial?(user)"},{"anchor":"paddle_api/0","deprecated":false,"id":"paddle_api/0","title":"paddle_api()"},{"anchor":"subscription_cancelled/1","deprecated":false,"id":"subscription_cancelled/1","title":"subscription_cancelled(params)"},{"anchor":"subscription_created/1","deprecated":false,"id":"subscription_created/1","title":"subscription_created(params)"},{"anchor":"subscription_payment_succeeded/1","deprecated":false,"id":"subscription_payment_succeeded/1","title":"subscription_payment_succeeded(params)"},{"anchor":"subscription_updated/1","deprecated":false,"id":"subscription_updated/1","title":"subscription_updated(params)"},{"anchor":"trial_days_left/1","deprecated":false,"id":"trial_days_left/1","title":"trial_days_left(user)"},{"anchor":"usage_breakdown/1","deprecated":false,"id":"usage_breakdown/1","title":"usage_breakdown(user)"}]}],"sections":[],"title":"Plausible.Billing"},{"deprecated":false,"group":"","id":"Plausible.Billing.EnterprisePlan","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(model, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Billing.EnterprisePlan"},{"deprecated":false,"group":"","id":"Plausible.Billing.EnterprisePlanAdmin","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"custom_index_query/3","deprecated":false,"id":"custom_index_query/3","title":"custom_index_query(conn, schema, query)"},{"anchor":"form_fields/1","deprecated":false,"id":"form_fields/1","title":"form_fields(_)"},{"anchor":"index/1","deprecated":false,"id":"index/1","title":"index(_)"},{"anchor":"search_fields/1","deprecated":false,"id":"search_fields/1","title":"search_fields(schema)"}]}],"sections":[],"title":"Plausible.Billing.EnterprisePlanAdmin"},{"deprecated":false,"group":"","id":"Plausible.Billing.Feature","nodeGroups":[{"key":"callbacks","name":"Callbacks","nodes":[{"anchor":"c:check_availability/1","deprecated":false,"id":"check_availability/1","title":"check_availability(arg1)"},{"anchor":"c:display_name/0","deprecated":false,"id":"display_name/0","title":"display_name()"},{"anchor":"c:enabled?/1","deprecated":false,"id":"enabled?/1","title":"enabled?(t)"},{"anchor":"c:toggle/2","deprecated":false,"id":"toggle/2","title":"toggle(t, t)"},{"anchor":"c:toggle_field/0","deprecated":false,"id":"toggle_field/0","title":"toggle_field()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"list/0","deprecated":false,"id":"list/0","title":"list()"}]}],"sections":[],"title":"Plausible.Billing.Feature"},{"deprecated":false,"group":"","id":"Plausible.Billing.PaddleApi","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"checkout_domain/0","deprecated":false,"id":"checkout_domain/0","title":"checkout_domain()"},{"anchor":"fetch_prices/1","deprecated":false,"id":"fetch_prices/1","title":"fetch_prices(product_ids)"},{"anchor":"get_invoices/1","deprecated":false,"id":"get_invoices/1","title":"get_invoices(subscription)"},{"anchor":"get_subscription/1","deprecated":false,"id":"get_subscription/1","title":"get_subscription(paddle_subscription_id)"},{"anchor":"update_subscription/2","deprecated":false,"id":"update_subscription/2","title":"update_subscription(paddle_subscription_id, params)"},{"anchor":"update_subscription_preview/2","deprecated":false,"id":"update_subscription_preview/2","title":"update_subscription_preview(paddle_subscription_id, new_plan_id)"},{"anchor":"vendors_domain/0","deprecated":false,"id":"vendors_domain/0","title":"vendors_domain()"}]}],"sections":[],"title":"Plausible.Billing.PaddleApi"},{"deprecated":false,"group":"","id":"Plausible.Billing.Plans","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"available_plans_with_prices/1","deprecated":false,"id":"available_plans_with_prices/1","title":"available_plans_with_prices(user)"},{"anchor":"business_plans/0","deprecated":false,"id":"business_plans/0","title":"business_plans()"},{"anchor":"business_tier?/1","deprecated":false,"id":"business_tier?/1","title":"business_tier?(subscription)"},{"anchor":"get_price_for/1","deprecated":false,"id":"get_price_for/1","title":"get_price_for(enterprise_plan)"},{"anchor":"get_regular_plan/2","deprecated":false,"id":"get_regular_plan/2","title":"get_regular_plan(subscription, opts \\\\ [])"},{"anchor":"get_subscription_plan/1","deprecated":false,"id":"get_subscription_plan/1","title":"get_subscription_plan(subscription)"},{"anchor":"growth_plans_for/1","deprecated":false,"id":"growth_plans_for/1","title":"growth_plans_for(user)"},{"anchor":"latest_enterprise_plan_with_price/1","deprecated":false,"id":"latest_enterprise_plan_with_price/1","title":"latest_enterprise_plan_with_price(user)"},{"anchor":"subscription_interval/1","deprecated":false,"id":"subscription_interval/1","title":"subscription_interval(subscription)"},{"anchor":"suggest/2","deprecated":false,"id":"suggest/2","title":"suggest(user, usage_during_cycle)"},{"anchor":"with_prices/1","deprecated":false,"id":"with_prices/1","title":"with_prices(plans)"},{"anchor":"yearly_product_ids/0","deprecated":false,"id":"yearly_product_ids/0","title":"yearly_product_ids()"}]}],"sections":[],"title":"Plausible.Billing.Plans"},{"deprecated":false,"group":"","id":"Plausible.Billing.Quota","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"extra_features_limit/1","deprecated":false,"id":"extra_features_limit/1","title":"extra_features_limit(user)"},{"anchor":"extra_features_usage/1","deprecated":false,"id":"extra_features_usage/1","title":"extra_features_usage(user)"},{"anchor":"monthly_pageview_limit/1","deprecated":false,"id":"monthly_pageview_limit/1","title":"monthly_pageview_limit(subscription)"},{"anchor":"monthly_pageview_usage/1","deprecated":false,"id":"monthly_pageview_usage/1","title":"monthly_pageview_usage(user)"},{"anchor":"site_limit/1","deprecated":false,"id":"site_limit/1","title":"site_limit(user)"},{"anchor":"site_usage/1","deprecated":false,"id":"site_usage/1","title":"site_usage(user)"},{"anchor":"team_member_limit/1","deprecated":false,"id":"team_member_limit/1","title":"team_member_limit(user)"},{"anchor":"team_member_usage/1","deprecated":false,"id":"team_member_usage/1","title":"team_member_usage(user)"},{"anchor":"within_limit?/2","deprecated":false,"id":"within_limit?/2","title":"within_limit?(usage, limit)"}]}],"sections":[],"title":"Plausible.Billing.Quota"},{"deprecated":false,"group":"","id":"Plausible.Billing.SiteLocker","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:lock_reason/0","deprecated":false,"id":"lock_reason/0","title":"lock_reason()"},{"anchor":"t:update_opt/0","deprecated":false,"id":"update_opt/0","title":"update_opt()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"send_grace_period_end_email/1","deprecated":false,"id":"send_grace_period_end_email/1","title":"send_grace_period_end_email(user)"},{"anchor":"set_lock_status_for/2","deprecated":false,"id":"set_lock_status_for/2","title":"set_lock_status_for(user, status)"},{"anchor":"update_sites_for/2","deprecated":false,"id":"update_sites_for/2","title":"update_sites_for(user, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Billing.SiteLocker"},{"deprecated":false,"group":"","id":"Plausible.Billing.Subscription.Status","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:status/0","deprecated":false,"id":"status/0","title":"status()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"active/0","deprecated":false,"id":"active/0","title":"active()"},{"anchor":"deleted/0","deprecated":false,"id":"deleted/0","title":"deleted()"},{"anchor":"past_due/0","deprecated":false,"id":"past_due/0","title":"past_due()"},{"anchor":"paused/0","deprecated":false,"id":"paused/0","title":"paused()"},{"anchor":"valid_statuses/0","deprecated":false,"id":"valid_statuses/0","title":"valid_statuses()"}]}],"sections":[],"title":"Plausible.Billing.Subscription.Status"},{"deprecated":false,"group":"","id":"Plausible.ChangesetHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"traverse_errors/1","deprecated":false,"id":"traverse_errors/1","title":"traverse_errors(changeset)"}]}],"sections":[],"title":"Plausible.ChangesetHelpers"},{"deprecated":false,"group":"","id":"Plausible.Cldr","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"available_locale_name?/1","deprecated":false,"id":"available_locale_name?/1","title":"available_locale_name?(locale_name)"},{"anchor":"default_locale/0","deprecated":false,"id":"default_locale/0","title":"default_locale()"},{"anchor":"default_territory/0","deprecated":false,"id":"default_territory/0","title":"default_territory()"},{"anchor":"ellipsis/2","deprecated":false,"id":"ellipsis/2","title":"ellipsis(string, options \\\\ [])"},{"anchor":"get_locale/0","deprecated":false,"id":"get_locale/0","title":"get_locale()"},{"anchor":"known_calendars/0","deprecated":false,"id":"known_calendars/0","title":"known_calendars()"},{"anchor":"known_currencies/0","deprecated":false,"id":"known_currencies/0","title":"known_currencies()"},{"anchor":"known_gettext_locale_name/1","deprecated":false,"id":"known_gettext_locale_name/1","title":"known_gettext_locale_name(locale_name)"},{"anchor":"known_gettext_locale_name?/1","deprecated":false,"id":"known_gettext_locale_name?/1","title":"known_gettext_locale_name?(locale_name)"},{"anchor":"known_gettext_locale_names/0","deprecated":false,"id":"known_gettext_locale_names/0","title":"known_gettext_locale_names()"},{"anchor":"known_locale_name/1","deprecated":false,"id":"known_locale_name/1","title":"known_locale_name(locale_name)"},{"anchor":"known_locale_name?/1","deprecated":false,"id":"known_locale_name?/1","title":"known_locale_name?(locale_name)"},{"anchor":"known_locale_names/0","deprecated":false,"id":"known_locale_names/0","title":"known_locale_names()"},{"anchor":"known_number_system_types/0","deprecated":false,"id":"known_number_system_types/0","title":"known_number_system_types()"},{"anchor":"known_number_systems/0","deprecated":false,"id":"known_number_systems/0","title":"known_number_systems()"},{"anchor":"known_rbnf_locale_name/1","deprecated":false,"id":"known_rbnf_locale_name/1","title":"known_rbnf_locale_name(locale_name)"},{"anchor":"known_rbnf_locale_name?/1","deprecated":false,"id":"known_rbnf_locale_name?/1","title":"known_rbnf_locale_name?(locale_name)"},{"anchor":"known_rbnf_locale_names/0","deprecated":false,"id":"known_rbnf_locale_names/0","title":"known_rbnf_locale_names()"},{"anchor":"known_territories/0","deprecated":false,"id":"known_territories/0","title":"known_territories()"},{"anchor":"normalize_lenient_parse/3","deprecated":false,"id":"normalize_lenient_parse/3","title":"normalize_lenient_parse(string, scope, locale \\\\ get_locale())"},{"anchor":"put_locale/1","deprecated":false,"id":"put_locale/1","title":"put_locale(locale_name)"},{"anchor":"quote/2","deprecated":false,"id":"quote/2","title":"quote(string, options \\\\ [])"},{"anchor":"unknown_locale_names/0","deprecated":false,"id":"unknown_locale_names/0","title":"unknown_locale_names()"},{"anchor":"validate_calendar/1","deprecated":false,"id":"validate_calendar/1","title":"validate_calendar(calendar)"},{"anchor":"validate_currency/1","deprecated":false,"id":"validate_currency/1","title":"validate_currency(currency)"},{"anchor":"validate_locale/1","deprecated":false,"id":"validate_locale/1","title":"validate_locale(locale)"},{"anchor":"validate_number_system/1","deprecated":false,"id":"validate_number_system/1","title":"validate_number_system(number_system)"},{"anchor":"validate_number_system_type/1","deprecated":false,"id":"validate_number_system_type/1","title":"validate_number_system_type(number_system_type)"},{"anchor":"validate_territory/1","deprecated":false,"id":"validate_territory/1","title":"validate_territory(territory)"},{"anchor":"with_locale/2","deprecated":false,"id":"with_locale/2","title":"with_locale(locale, fun)"}]}],"sections":[],"title":"Plausible.Cldr"},{"deprecated":false,"group":"","id":"Plausible.Cldr.AcceptLanguage","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"best_match/1","deprecated":false,"id":"best_match/1","title":"best_match(accept_language)"},{"anchor":"parse/1","deprecated":false,"id":"parse/1","title":"parse(tokens_or_string)"},{"anchor":"parse!/1","deprecated":false,"id":"parse!/1","title":"parse!(accept_language)"}]}],"sections":[],"title":"Plausible.Cldr.AcceptLanguage"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Currency","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"currencies_for_locale/3","deprecated":false,"id":"currencies_for_locale/3","title":"currencies_for_locale(locale, only \\\\ :all, except \\\\ nil)"},{"anchor":"currencies_for_locale!/3","deprecated":false,"id":"currencies_for_locale!/3","title":"currencies_for_locale!(locale, only \\\\ :all, except \\\\ nil)"},{"anchor":"currency_for_code/2","deprecated":false,"id":"currency_for_code/2","title":"currency_for_code(currency_or_currency_code, options \\\\ [locale: Plausible.Cldr.default_locale()])"},{"anchor":"currency_for_code!/2","deprecated":false,"id":"currency_for_code!/2","title":"currency_for_code!(currency_or_currency_code, options \\\\ [locale: Plausible.Cldr.default_locale()])"},{"anchor":"currency_from_locale/1","deprecated":false,"id":"currency_from_locale/1","title":"currency_from_locale(locale)"},{"anchor":"currency_history_for_locale/1","deprecated":false,"id":"currency_history_for_locale/1","title":"currency_history_for_locale(language_tag)"},{"anchor":"currency_strings/3","deprecated":false,"id":"currency_strings/3","title":"currency_strings(locale, only \\\\ :all, except \\\\ nil)"},{"anchor":"currency_strings!/3","deprecated":false,"id":"currency_strings!/3","title":"currency_strings!(locale_name, only \\\\ :all, except \\\\ nil)"},{"anchor":"current_currency_from_locale/1","deprecated":false,"id":"current_currency_from_locale/1","title":"current_currency_from_locale(locale)"},{"anchor":"current_territory_currencies/0","deprecated":false,"id":"current_territory_currencies/0","title":"current_territory_currencies()"},{"anchor":"known_currencies/0","deprecated":false,"id":"known_currencies/0","title":"known_currencies()"},{"anchor":"known_currency?/1","deprecated":false,"id":"known_currency?/1","title":"known_currency?(code)"},{"anchor":"known_currency_code/1","deprecated":false,"id":"known_currency_code/1","title":"known_currency_code(currency_code)"},{"anchor":"known_currency_code?/1","deprecated":false,"id":"known_currency_code?/1","title":"known_currency_code?(currency_code)"},{"anchor":"known_currency_codes/0","deprecated":false,"id":"known_currency_codes/0","title":"known_currency_codes()"},{"anchor":"new/2","deprecated":false,"id":"new/2","title":"new(currency, options \\\\ [])"},{"anchor":"pluralize/3","deprecated":false,"id":"pluralize/3","title":"pluralize(number, currency, options \\\\ [])"},{"anchor":"strings_for_currency/2","deprecated":false,"id":"strings_for_currency/2","title":"strings_for_currency(currency, locale)"}]}],"sections":[],"title":"Plausible.Cldr.Currency"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Locale","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fallback_locale_names/1","deprecated":false,"id":"fallback_locale_names/1","title":"fallback_locale_names(locale)"},{"anchor":"fallback_locales/1","deprecated":false,"id":"fallback_locales/1","title":"fallback_locales(locale)"},{"anchor":"locale_for_territory/1","deprecated":false,"id":"locale_for_territory/1","title":"locale_for_territory(territory)"},{"anchor":"locale_from_host/2","deprecated":false,"id":"locale_from_host/2","title":"locale_from_host(host, options \\\\ [])"},{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(locale_name)"},{"anchor":"new!/1","deprecated":false,"id":"new!/1","title":"new!(locale_name)"},{"anchor":"script_direction_from_locale/1","deprecated":false,"id":"script_direction_from_locale/1","title":"script_direction_from_locale(locale)"},{"anchor":"territory_from_host/1","deprecated":false,"id":"territory_from_host/1","title":"territory_from_host(host)"},{"anchor":"territory_from_locale/1","deprecated":false,"id":"territory_from_locale/1","title":"territory_from_locale(locale)"},{"anchor":"timezone_from_locale/1","deprecated":false,"id":"timezone_from_locale/1","title":"timezone_from_locale(locale)"}]}],"sections":[],"title":"Plausible.Cldr.Locale"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"parse/2","deprecated":false,"id":"parse/2","title":"parse(string, options \\\\ [])"},{"anchor":"resolve_currencies/2","deprecated":false,"id":"resolve_currencies/2","title":"resolve_currencies(list, options \\\\ [])"},{"anchor":"resolve_currency/2","deprecated":false,"id":"resolve_currency/2","title":"resolve_currency(string, options \\\\ [])"},{"anchor":"resolve_per/2","deprecated":false,"id":"resolve_per/2","title":"resolve_per(string, options \\\\ [])"},{"anchor":"resolve_pers/2","deprecated":false,"id":"resolve_pers/2","title":"resolve_pers(list, options \\\\ [])"},{"anchor":"scan/2","deprecated":false,"id":"scan/2","title":"scan(string, options \\\\ [])"},{"anchor":"to_approx_string/2","deprecated":false,"id":"to_approx_string/2","title":"to_approx_string(number, options \\\\ [])"},{"anchor":"to_at_least_string/2","deprecated":false,"id":"to_at_least_string/2","title":"to_at_least_string(number, options \\\\ [])"},{"anchor":"to_at_most_string/2","deprecated":false,"id":"to_at_most_string/2","title":"to_at_most_string(number, options \\\\ [])"},{"anchor":"to_range_string/2","deprecated":false,"id":"to_range_string/2","title":"to_range_string(range, options \\\\ [])"},{"anchor":"to_string/2","deprecated":false,"id":"to_string/2","title":"to_string(number, options \\\\ default_options())"},{"anchor":"to_string!/2","deprecated":false,"id":"to_string!/2","title":"to_string!(number, options \\\\ default_options())"},{"anchor":"validate_number_system/2","deprecated":false,"id":"validate_number_system/2","title":"validate_number_system(locale, number_system)"}]}],"sections":[],"title":"Plausible.Cldr.Number"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Cardinal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"available_locale_names/0","deprecated":false,"id":"available_locale_names/0","title":"available_locale_names()"},{"anchor":"known_locale_names/0","deprecated":false,"id":"known_locale_names/0","title":"known_locale_names()"},{"anchor":"plural_rule/3","deprecated":false,"id":"plural_rule/3","title":"plural_rule(number, locale, rounding \\\\ Math.default_rounding())"},{"anchor":"plural_rules/0","deprecated":false,"id":"plural_rules/0","title":"plural_rules()"},{"anchor":"plural_rules_for/1","deprecated":false,"id":"plural_rules_for/1","title":"plural_rules_for(locale_name)"},{"anchor":"pluralize/3","deprecated":false,"id":"pluralize/3","title":"pluralize(number, locale_name, substitutions)"}]}],"sections":[],"title":"Plausible.Cldr.Number.Cardinal"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Format","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_formats_for/1","deprecated":false,"id":"all_formats_for/1","title":"all_formats_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"all_formats_for!/1","deprecated":false,"id":"all_formats_for!/1","title":"all_formats_for!(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"currency_spacing/2","deprecated":false,"id":"currency_spacing/2","title":"currency_spacing(locale, number_system)"},{"anchor":"decimal_format_list/0","deprecated":false,"id":"decimal_format_list/0","title":"decimal_format_list()"},{"anchor":"decimal_format_list_for/1","deprecated":false,"id":"decimal_format_list_for/1","title":"decimal_format_list_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"default_grouping_for/1","deprecated":false,"id":"default_grouping_for/1","title":"default_grouping_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"default_grouping_for!/1","deprecated":false,"id":"default_grouping_for!/1","title":"default_grouping_for!(locale)"},{"anchor":"formats_for/2","deprecated":false,"id":"formats_for/2","title":"formats_for(locale \\\\ Plausible.Cldr.default_locale(), number_system \\\\ Cldr.Number.System.default_number_system_type())"},{"anchor":"formats_for!/2","deprecated":false,"id":"formats_for!/2","title":"formats_for!(locale \\\\ Plausible.Cldr.default_locale(), number_system \\\\ Cldr.Number.System.default_number_system_type())"},{"anchor":"minimum_grouping_digits_for/1","deprecated":false,"id":"minimum_grouping_digits_for/1","title":"minimum_grouping_digits_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"minimum_grouping_digits_for!/1","deprecated":false,"id":"minimum_grouping_digits_for!/1","title":"minimum_grouping_digits_for!(locale)"}]}],"sections":[{"anchor":"module-number-pattern-examples","id":"Number Pattern Examples"}],"title":"Plausible.Cldr.Number.Format"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Formatter.Decimal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"metadata!/1","deprecated":false,"id":"metadata!/1","title":"metadata!(format)"},{"anchor":"to_string/3","deprecated":false,"id":"to_string/3","title":"to_string(number, format, options \\\\ [])"}]}],"sections":[],"title":"Plausible.Cldr.Number.Formatter.Decimal"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Ordinal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"available_locale_names/0","deprecated":false,"id":"available_locale_names/0","title":"available_locale_names()"},{"anchor":"known_locale_names/0","deprecated":false,"id":"known_locale_names/0","title":"known_locale_names()"},{"anchor":"plural_rule/3","deprecated":false,"id":"plural_rule/3","title":"plural_rule(number, locale, rounding \\\\ Math.default_rounding())"},{"anchor":"plural_rules/0","deprecated":false,"id":"plural_rules/0","title":"plural_rules()"},{"anchor":"plural_rules_for/1","deprecated":false,"id":"plural_rules_for/1","title":"plural_rules_for(locale_name)"},{"anchor":"pluralize/3","deprecated":false,"id":"pluralize/3","title":"pluralize(number, locale_name, substitutions)"}]}],"sections":[],"title":"Plausible.Cldr.Number.Ordinal"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.PluralRule.Range","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"plural_rule/3","deprecated":false,"id":"plural_rule/3","title":"plural_rule(first, last, locale)"}]}],"sections":[],"title":"Plausible.Cldr.Number.PluralRule.Range"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Symbol","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_decimal_symbols/0","deprecated":false,"id":"all_decimal_symbols/0","title":"all_decimal_symbols()"},{"anchor":"all_decimal_symbols_class/0","deprecated":false,"id":"all_decimal_symbols_class/0","title":"all_decimal_symbols_class()"},{"anchor":"all_grouping_symbols/0","deprecated":false,"id":"all_grouping_symbols/0","title":"all_grouping_symbols()"},{"anchor":"all_grouping_symbols_class/0","deprecated":false,"id":"all_grouping_symbols_class/0","title":"all_grouping_symbols_class()"},{"anchor":"number_symbols_for/1","deprecated":false,"id":"number_symbols_for/1","title":"number_symbols_for(locale \\\\ Plausible.Cldr.get_locale())"},{"anchor":"number_symbols_for/2","deprecated":false,"id":"number_symbols_for/2","title":"number_symbols_for(locale, number_system)"}]}],"sections":[],"title":"Plausible.Cldr.Number.Symbol"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.System","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"number_system_for/2","deprecated":false,"id":"number_system_for/2","title":"number_system_for(locale, system_name)"},{"anchor":"number_system_from_locale/1","deprecated":false,"id":"number_system_from_locale/1","title":"number_system_from_locale(locale)"},{"anchor":"number_system_names_for/1","deprecated":false,"id":"number_system_names_for/1","title":"number_system_names_for(locale)"},{"anchor":"number_system_names_for!/1","deprecated":false,"id":"number_system_names_for!/1","title":"number_system_names_for!(locale)"},{"anchor":"number_system_types_for/1","deprecated":false,"id":"number_system_types_for/1","title":"number_system_types_for(locale)"},{"anchor":"number_systems_for/1","deprecated":false,"id":"number_systems_for/1","title":"number_systems_for(locale)"},{"anchor":"number_systems_for!/1","deprecated":false,"id":"number_systems_for!/1","title":"number_systems_for!(locale)"},{"anchor":"number_systems_like/2","deprecated":false,"id":"number_systems_like/2","title":"number_systems_like(locale, number_system)"},{"anchor":"system_name_from/2","deprecated":false,"id":"system_name_from/2","title":"system_name_from(system_name, locale)"},{"anchor":"to_system/2","deprecated":false,"id":"to_system/2","title":"to_system(number, system)"},{"anchor":"to_system!/2","deprecated":false,"id":"to_system!/2","title":"to_system!(number, system_name)"}]}],"sections":[],"title":"Plausible.Cldr.Number.System"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Number.Transliterate","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"transliterate/3","deprecated":false,"id":"transliterate/3","title":"transliterate(sequence, locale \\\\ Plausible.Cldr.get_locale(), number_system \\\\ System.default_number_system_type())"},{"anchor":"transliterate!/3","deprecated":false,"id":"transliterate!/3","title":"transliterate!(sequence, locale, number_system)"},{"anchor":"transliterate_digits/3","deprecated":false,"id":"transliterate_digits/3","title":"transliterate_digits(digits, from_system, to_system)"}]}],"sections":[],"title":"Plausible.Cldr.Number.Transliterate"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Rbnf.NumberSystem","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_rule_sets/0","deprecated":false,"id":"all_rule_sets/0","title":"all_rule_sets()"},{"anchor":"armenian_lower/1","deprecated":false,"id":"armenian_lower/1","title":"armenian_lower(number)"},{"anchor":"armenian_lower/2","deprecated":false,"id":"armenian_lower/2","title":"armenian_lower(number, locale)"},{"anchor":"armenian_upper/1","deprecated":false,"id":"armenian_upper/1","title":"armenian_upper(number)"},{"anchor":"armenian_upper/2","deprecated":false,"id":"armenian_upper/2","title":"armenian_upper(number, locale)"},{"anchor":"cyrillic_lower/1","deprecated":false,"id":"cyrillic_lower/1","title":"cyrillic_lower(number)"},{"anchor":"cyrillic_lower/2","deprecated":false,"id":"cyrillic_lower/2","title":"cyrillic_lower(number, locale)"},{"anchor":"cyrillic_lower_1_10/2","deprecated":false,"id":"cyrillic_lower_1_10/2","title":"cyrillic_lower_1_10(number, language_tag)"},{"anchor":"cyrillic_lower_final/2","deprecated":false,"id":"cyrillic_lower_final/2","title":"cyrillic_lower_final(number, language_tag)"},{"anchor":"cyrillic_lower_post/2","deprecated":false,"id":"cyrillic_lower_post/2","title":"cyrillic_lower_post(number, language_tag)"},{"anchor":"cyrillic_lower_thousands/2","deprecated":false,"id":"cyrillic_lower_thousands/2","title":"cyrillic_lower_thousands(number, language_tag)"},{"anchor":"ethiopic/1","deprecated":false,"id":"ethiopic/1","title":"ethiopic(number)"},{"anchor":"ethiopic/2","deprecated":false,"id":"ethiopic/2","title":"ethiopic(number, locale)"},{"anchor":"ethiopic_p1/2","deprecated":false,"id":"ethiopic_p1/2","title":"ethiopic_p1(number, language_tag)"},{"anchor":"ethiopic_p2/2","deprecated":false,"id":"ethiopic_p2/2","title":"ethiopic_p2(number, language_tag)"},{"anchor":"ethiopic_p3/2","deprecated":false,"id":"ethiopic_p3/2","title":"ethiopic_p3(number, language_tag)"},{"anchor":"ethiopic_p/2","deprecated":false,"id":"ethiopic_p/2","title":"ethiopic_p(number, language_tag)"},{"anchor":"georgian/1","deprecated":false,"id":"georgian/1","title":"georgian(number)"},{"anchor":"georgian/2","deprecated":false,"id":"georgian/2","title":"georgian(number, locale)"},{"anchor":"greek_lower/1","deprecated":false,"id":"greek_lower/1","title":"greek_lower(number)"},{"anchor":"greek_lower/2","deprecated":false,"id":"greek_lower/2","title":"greek_lower(number, locale)"},{"anchor":"greek_numeral_majuscules/2","deprecated":false,"id":"greek_numeral_majuscules/2","title":"greek_numeral_majuscules(number, language_tag)"},{"anchor":"greek_numeral_minuscules/2","deprecated":false,"id":"greek_numeral_minuscules/2","title":"greek_numeral_minuscules(number, language_tag)"},{"anchor":"greek_upper/1","deprecated":false,"id":"greek_upper/1","title":"greek_upper(number)"},{"anchor":"greek_upper/2","deprecated":false,"id":"greek_upper/2","title":"greek_upper(number, locale)"},{"anchor":"hebrew/1","deprecated":false,"id":"hebrew/1","title":"hebrew(number)"},{"anchor":"hebrew/2","deprecated":false,"id":"hebrew/2","title":"hebrew(number, locale)"},{"anchor":"hebrew_0_99/2","deprecated":false,"id":"hebrew_0_99/2","title":"hebrew_0_99(number, language_tag)"},{"anchor":"hebrew_item/1","deprecated":false,"id":"hebrew_item/1","title":"hebrew_item(number)"},{"anchor":"hebrew_item/2","deprecated":false,"id":"hebrew_item/2","title":"hebrew_item(number, locale)"},{"anchor":"hebrew_item_hundreds/2","deprecated":false,"id":"hebrew_item_hundreds/2","title":"hebrew_item_hundreds(number, language_tag)"},{"anchor":"hebrew_thousands/2","deprecated":false,"id":"hebrew_thousands/2","title":"hebrew_thousands(number, language_tag)"},{"anchor":"roman_lower/1","deprecated":false,"id":"roman_lower/1","title":"roman_lower(number)"},{"anchor":"roman_lower/2","deprecated":false,"id":"roman_lower/2","title":"roman_lower(number, locale)"},{"anchor":"roman_upper/1","deprecated":false,"id":"roman_upper/1","title":"roman_upper(number)"},{"anchor":"roman_upper/2","deprecated":false,"id":"roman_upper/2","title":"roman_upper(number, locale)"},{"anchor":"rule_sets/0","deprecated":false,"id":"rule_sets/0","title":"rule_sets()"},{"anchor":"rule_sets/1","deprecated":false,"id":"rule_sets/1","title":"rule_sets(rbnf_locale_name)"},{"anchor":"tamil/1","deprecated":false,"id":"tamil/1","title":"tamil(number)"},{"anchor":"tamil/2","deprecated":false,"id":"tamil/2","title":"tamil(number, locale)"},{"anchor":"tamil_thousands/2","deprecated":false,"id":"tamil_thousands/2","title":"tamil_thousands(number, language_tag)"},{"anchor":"zz_default/1","deprecated":false,"id":"zz_default/1","title":"zz_default(number)"},{"anchor":"zz_default/2","deprecated":false,"id":"zz_default/2","title":"zz_default(number, locale)"}]}],"sections":[],"title":"Plausible.Cldr.Rbnf.NumberSystem"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Rbnf.Ordinal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_rule_sets/0","deprecated":false,"id":"all_rule_sets/0","title":"all_rule_sets()"},{"anchor":"digits_ordinal/2","deprecated":false,"id":"digits_ordinal/2","title":"digits_ordinal(number, locale)"},{"anchor":"rule_sets/0","deprecated":false,"id":"rule_sets/0","title":"rule_sets()"},{"anchor":"rule_sets/1","deprecated":false,"id":"rule_sets/1","title":"rule_sets(rbnf_locale_name)"}]}],"sections":[],"title":"Plausible.Cldr.Rbnf.Ordinal"},{"deprecated":false,"group":"","id":"Plausible.Cldr.Rbnf.Spellout","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_rule_sets/0","deprecated":false,"id":"all_rule_sets/0","title":"all_rule_sets()"},{"anchor":"and/2","deprecated":false,"id":"and/2","title":"number and language_tag"},{"anchor":"and_o/2","deprecated":false,"id":"and_o/2","title":"and_o(number, language_tag)"},{"anchor":"commas/2","deprecated":false,"id":"commas/2","title":"commas(number, language_tag)"},{"anchor":"commas_o/2","deprecated":false,"id":"commas_o/2","title":"commas_o(number, language_tag)"},{"anchor":"r2d_year/2","deprecated":false,"id":"r2d_year/2","title":"r2d_year(number, language_tag)"},{"anchor":"rule_sets/0","deprecated":false,"id":"rule_sets/0","title":"rule_sets()"},{"anchor":"rule_sets/1","deprecated":false,"id":"rule_sets/1","title":"rule_sets(rbnf_locale_name)"},{"anchor":"spellout_cardinal/2","deprecated":false,"id":"spellout_cardinal/2","title":"spellout_cardinal(number, locale)"},{"anchor":"spellout_cardinal_verbose/2","deprecated":false,"id":"spellout_cardinal_verbose/2","title":"spellout_cardinal_verbose(number, locale)"},{"anchor":"spellout_numbering/2","deprecated":false,"id":"spellout_numbering/2","title":"spellout_numbering(number, locale)"},{"anchor":"spellout_numbering_verbose/2","deprecated":false,"id":"spellout_numbering_verbose/2","title":"spellout_numbering_verbose(number, locale)"},{"anchor":"spellout_numbering_year/2","deprecated":false,"id":"spellout_numbering_year/2","title":"spellout_numbering_year(number, locale)"},{"anchor":"spellout_ordinal/2","deprecated":false,"id":"spellout_ordinal/2","title":"spellout_ordinal(number, locale)"},{"anchor":"spellout_ordinal_verbose/2","deprecated":false,"id":"spellout_ordinal_verbose/2","title":"spellout_ordinal_verbose(number, locale)"},{"anchor":"th/2","deprecated":false,"id":"th/2","title":"th(number, language_tag)"},{"anchor":"tieth/2","deprecated":false,"id":"tieth/2","title":"tieth(number, language_tag)"}]}],"sections":[],"title":"Plausible.Cldr.Rbnf.Spellout"},{"deprecated":false,"group":"","id":"Plausible.ClickhouseEventV2","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(attrs)"}]}],"sections":[],"title":"Plausible.ClickhouseEventV2"},{"deprecated":false,"group":"","id":"Plausible.ClickhouseRepo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"parallel_tasks/1","deprecated":false,"id":"parallel_tasks/1","title":"parallel_tasks(queries)"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"}]}],"sections":[],"title":"Plausible.ClickhouseRepo"},{"deprecated":false,"group":"","id":"Plausible.ClickhouseSessionV2","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"random_uint64/0","deprecated":false,"id":"random_uint64/0","title":"random_uint64()"}]}],"sections":[],"title":"Plausible.ClickhouseSessionV2"},{"deprecated":false,"group":"","id":"Plausible.ClickhouseSessionV2.BoolUInt8","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"embed_as/1","deprecated":false,"id":"embed_as/1","title":"embed_as(_)"},{"anchor":"equal?/2","deprecated":false,"id":"equal?/2","title":"equal?(term1, term2)"}]}],"sections":[],"title":"Plausible.ClickhouseSessionV2.BoolUInt8"},{"deprecated":false,"group":"","id":"Plausible.ConfigHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"get_int_from_path_or_env/3","deprecated":false,"id":"get_int_from_path_or_env/3","title":"get_int_from_path_or_env(config_dir, var_name, default \\\\ nil)"},{"anchor":"get_var_from_path_or_env/3","deprecated":false,"id":"get_var_from_path_or_env/3","title":"get_var_from_path_or_env(config_dir, var_name, default \\\\ nil)"}]}],"sections":[],"title":"Plausible.ConfigHelpers"},{"deprecated":false,"group":"","id":"Plausible.DataCase","sections":[],"title":"Plausible.DataCase"},{"deprecated":false,"group":"","id":"Plausible.DataMigration","sections":[],"title":"Plausible.DataMigration"},{"deprecated":false,"group":"","id":"Plausible.DataMigration.NumericIDs","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"confirm/3","deprecated":false,"id":"confirm/3","title":"confirm(message, func, default_choice \\\\ :yes)"},{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(opts \\\\ [])"},{"anchor":"run_sql/2","deprecated":false,"id":"run_sql/2","title":"run_sql(name, assigns \\\\ [])"},{"anchor":"run_sql_confirm/2","deprecated":false,"id":"run_sql_confirm/2","title":"run_sql_confirm(name, options \\\\ [])"}]}],"sections":[],"title":"Plausible.DataMigration.NumericIDs"},{"deprecated":false,"group":"","id":"Plausible.DataMigration.Repo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start/2","deprecated":false,"id":"start/2","title":"start(url, max_threads)"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.DataMigration.Repo"},{"deprecated":false,"group":"","id":"Plausible.DataMigration.RewriteFunnelDupes","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"apply_change/2","deprecated":false,"id":"apply_change/2","title":"apply_change(funnel_id, change)"},{"anchor":"confirm/3","deprecated":false,"id":"confirm/3","title":"confirm(message, func, default_choice \\\\ :yes)"},{"anchor":"execute/1","deprecated":false,"id":"execute/1","title":"execute(data)"},{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(_ \\\\ [])"},{"anchor":"run_sql/2","deprecated":false,"id":"run_sql/2","title":"run_sql(name, assigns \\\\ [])"},{"anchor":"run_sql_confirm/2","deprecated":false,"id":"run_sql_confirm/2","title":"run_sql_confirm(name, options \\\\ [])"},{"anchor":"to_db_ops/1","deprecated":false,"id":"to_db_ops/1","title":"to_db_ops(meta)"},{"anchor":"to_map/1","deprecated":false,"id":"to_map/1","title":"to_map(row)"},{"anchor":"translate_to_db_ops/1","deprecated":false,"id":"translate_to_db_ops/1","title":"translate_to_db_ops(data)"}]}],"sections":[],"title":"Plausible.DataMigration.RewriteFunnelDupes"},{"deprecated":false,"group":"","id":"Plausible.DebugReplayInfo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"deserialize/1","deprecated":false,"id":"deserialize/1","title":"deserialize(replay_info)"},{"anchor":"include_sentry_replay_info/0","deprecated":false,"id":"include_sentry_replay_info/0","title":"include_sentry_replay_info()"}]}],"sections":[],"title":"Plausible.DebugReplayInfo"},{"deprecated":false,"group":"","id":"Plausible.Ecto.EventName","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"cast/1","deprecated":false,"id":"cast/1","title":"cast(val)"},{"anchor":"dump/1","deprecated":false,"id":"dump/1","title":"dump(val)"},{"anchor":"embed_as/1","deprecated":false,"id":"embed_as/1","title":"embed_as(_)"},{"anchor":"equal?/2","deprecated":false,"id":"equal?/2","title":"equal?(term1, term2)"},{"anchor":"load/1","deprecated":false,"id":"load/1","title":"load(val)"},{"anchor":"type/0","deprecated":false,"id":"type/0","title":"type()"}]}],"sections":[],"title":"Plausible.Ecto.EventName"},{"deprecated":false,"group":"","id":"Plausible.Event.WriteBuffer","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(init_arg)"},{"anchor":"flush/0","deprecated":false,"id":"flush/0","title":"flush()"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(buffer)"},{"anchor":"insert/1","deprecated":false,"id":"insert/1","title":"insert(event)"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts)"}]}],"sections":[],"title":"Plausible.Event.WriteBuffer"},{"deprecated":false,"group":"","id":"Plausible.Factory","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"api_key_factory/0","deprecated":false,"id":"api_key_factory/0","title":"api_key_factory()"},{"anchor":"build/2","deprecated":false,"id":"build/2","title":"build(factory_name, attrs \\\\ %{})"},{"anchor":"build_list/3","deprecated":false,"id":"build_list/3","title":"build_list(number_of_records, factory_name, attrs \\\\ %{})"},{"anchor":"build_pair/2","deprecated":false,"id":"build_pair/2","title":"build_pair(factory_name, attrs \\\\ %{})"},{"anchor":"ch_session_factory/0","deprecated":false,"id":"ch_session_factory/0","title":"ch_session_factory()"},{"anchor":"create/1","deprecated":false,"id":"create/1","title":"create(_)"},{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(_, _)"},{"anchor":"create_list/3","deprecated":false,"id":"create_list/3","title":"create_list(_, _, _)"},{"anchor":"create_pair/2","deprecated":false,"id":"create_pair/2","title":"create_pair(_, _)"},{"anchor":"custom_domain_factory/0","deprecated":false,"id":"custom_domain_factory/0","title":"custom_domain_factory()"},{"anchor":"enterprise_plan_factory/0","deprecated":false,"id":"enterprise_plan_factory/0","title":"enterprise_plan_factory()"},{"anchor":"event_factory/0","deprecated":false,"id":"event_factory/0","title":"event_factory()"},{"anchor":"factory/1","deprecated":false,"id":"factory/1","title":"factory(factory_name)"},{"anchor":"goal_factory/0","deprecated":false,"id":"goal_factory/0","title":"goal_factory()"},{"anchor":"google_auth_factory/0","deprecated":false,"id":"google_auth_factory/0","title":"google_auth_factory()"},{"anchor":"imported_browsers_factory/0","deprecated":false,"id":"imported_browsers_factory/0","title":"imported_browsers_factory()"},{"anchor":"imported_devices_factory/0","deprecated":false,"id":"imported_devices_factory/0","title":"imported_devices_factory()"},{"anchor":"imported_entry_pages_factory/0","deprecated":false,"id":"imported_entry_pages_factory/0","title":"imported_entry_pages_factory()"},{"anchor":"imported_exit_pages_factory/0","deprecated":false,"id":"imported_exit_pages_factory/0","title":"imported_exit_pages_factory()"},{"anchor":"imported_locations_factory/0","deprecated":false,"id":"imported_locations_factory/0","title":"imported_locations_factory()"},{"anchor":"imported_operating_systems_factory/0","deprecated":false,"id":"imported_operating_systems_factory/0","title":"imported_operating_systems_factory()"},{"anchor":"imported_pages_factory/0","deprecated":false,"id":"imported_pages_factory/0","title":"imported_pages_factory()"},{"anchor":"imported_sources_factory/0","deprecated":false,"id":"imported_sources_factory/0","title":"imported_sources_factory()"},{"anchor":"imported_visitors_factory/0","deprecated":false,"id":"imported_visitors_factory/0","title":"imported_visitors_factory()"},{"anchor":"insert/1","deprecated":false,"id":"insert/1","title":"insert(already_built_record)"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(already_built_record, function_opts)"},{"anchor":"insert/3","deprecated":false,"id":"insert/3","title":"insert(factory_name, attrs, opts)"},{"anchor":"insert_list/3","deprecated":false,"id":"insert_list/3","title":"insert_list(number_of_records, factory_name, attrs \\\\ %{})"},{"anchor":"insert_list/4","deprecated":false,"id":"insert_list/4","title":"insert_list(number_of_records, factory_name, attrs, opts)"},{"anchor":"insert_pair/2","deprecated":false,"id":"insert_pair/2","title":"insert_pair(factory_name, attrs \\\\ %{})"},{"anchor":"insert_pair/3","deprecated":false,"id":"insert_pair/3","title":"insert_pair(factory_name, attrs, opts)"},{"anchor":"invitation_factory/0","deprecated":false,"id":"invitation_factory/0","title":"invitation_factory()"},{"anchor":"monthly_report_factory/0","deprecated":false,"id":"monthly_report_factory/0","title":"monthly_report_factory()"},{"anchor":"pageview_factory/0","deprecated":false,"id":"pageview_factory/0","title":"pageview_factory()"},{"anchor":"params_for/2","deprecated":false,"id":"params_for/2","title":"params_for(factory_name, attrs \\\\ %{})"},{"anchor":"params_with_assocs/2","deprecated":false,"id":"params_with_assocs/2","title":"params_with_assocs(factory_name, attrs \\\\ %{})"},{"anchor":"shared_link_factory/0","deprecated":false,"id":"shared_link_factory/0","title":"shared_link_factory()"},{"anchor":"site_factory/1","deprecated":false,"id":"site_factory/1","title":"site_factory(attrs)"},{"anchor":"site_membership_factory/0","deprecated":false,"id":"site_membership_factory/0","title":"site_membership_factory()"},{"anchor":"spike_notification_factory/0","deprecated":false,"id":"spike_notification_factory/0","title":"spike_notification_factory()"},{"anchor":"string_params_for/2","deprecated":false,"id":"string_params_for/2","title":"string_params_for(factory_name, attrs \\\\ %{})"},{"anchor":"string_params_with_assocs/2","deprecated":false,"id":"string_params_with_assocs/2","title":"string_params_with_assocs(factory_name, attrs \\\\ %{})"},{"anchor":"subscription_factory/0","deprecated":false,"id":"subscription_factory/0","title":"subscription_factory()"},{"anchor":"user_factory/1","deprecated":false,"id":"user_factory/1","title":"user_factory(attrs)"},{"anchor":"weekly_report_factory/0","deprecated":false,"id":"weekly_report_factory/0","title":"weekly_report_factory()"}]}],"sections":[],"title":"Plausible.Factory"},{"deprecated":false,"group":"","id":"Plausible.Funnel","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(funnel \\\\ %__MODULE__{}, attrs \\\\ %{})"},{"anchor":"max_steps/0","deprecated":false,"id":"max_steps/0","title":"max_steps()"},{"anchor":"min_steps/0","deprecated":false,"id":"min_steps/0","title":"min_steps()"},{"anchor":"put_step_orders/1","deprecated":false,"id":"put_step_orders/1","title":"put_step_orders(changeset)"}]}],"sections":[],"title":"Plausible.Funnel"},{"deprecated":false,"group":"","id":"Plausible.Funnel.Step","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(step, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Funnel.Step"},{"deprecated":false,"group":"","id":"Plausible.Funnels","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create/3","deprecated":false,"id":"create/3","title":"create(site, name, steps)"},{"anchor":"create_changeset/3","deprecated":false,"id":"create_changeset/3","title":"create_changeset(site, name, steps)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(site_id, funnel_id)"},{"anchor":"ephemeral_definition/3","deprecated":false,"id":"ephemeral_definition/3","title":"ephemeral_definition(site, name, steps)"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(site_id, by)"},{"anchor":"list/1","deprecated":false,"id":"list/1","title":"list(site)"}]}],"sections":[],"title":"Plausible.Funnels"},{"deprecated":false,"group":"","id":"Plausible.Geo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"await_loader/0","deprecated":false,"id":"await_loader/0","title":"await_loader()"},{"anchor":"database_type/0","deprecated":false,"id":"database_type/0","title":"database_type()"},{"anchor":"load_db/1","deprecated":false,"id":"load_db/1","title":"load_db(opts)"},{"anchor":"lookup/1","deprecated":false,"id":"lookup/1","title":"lookup(ip_address)"}]}],"sections":[],"title":"Plausible.Geo"},{"deprecated":false,"group":"","id":"Plausible.Goal","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(goal, attrs \\\\ %{})"},{"anchor":"currency_options/0","deprecated":false,"id":"currency_options/0","title":"currency_options()"},{"anchor":"revenue?/1","deprecated":false,"id":"revenue?/1","title":"revenue?(goal)"},{"anchor":"valid_currencies/0","deprecated":false,"id":"valid_currencies/0","title":"valid_currencies()"}]}],"sections":[],"title":"Plausible.Goal"},{"deprecated":false,"group":"","id":"Plausible.Goals","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"count/1","deprecated":false,"id":"count/1","title":"count(site)"},{"anchor":"create/3","deprecated":false,"id":"create/3","title":"create(site, params, opts \\\\ [])"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(id, site_id)"},{"anchor":"find_or_create/2","deprecated":false,"id":"find_or_create/2","title":"find_or_create(site, map)"},{"anchor":"for_site/2","deprecated":false,"id":"for_site/2","title":"for_site(site, opts \\\\ [])"},{"anchor":"for_site_query/2","deprecated":false,"id":"for_site_query/2","title":"for_site_query(site, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Goals"},{"deprecated":false,"group":"","id":"Plausible.Google.Api","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:google_analytics_view/0","deprecated":false,"id":"google_analytics_view/0","title":"google_analytics_view()"},{"anchor":"t:import_auth/0","deprecated":false,"id":"import_auth/0","title":"import_auth()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_and_persist/3","deprecated":false,"id":"fetch_and_persist/3","title":"fetch_and_persist(site, report_request, opts \\\\ [])"},{"anchor":"fetch_stats/3","deprecated":false,"id":"fetch_stats/3","title":"fetch_stats(site, map, limit)"},{"anchor":"fetch_verified_properties/1","deprecated":false,"id":"fetch_verified_properties/1","title":"fetch_verified_properties(auth)"},{"anchor":"get_view/2","deprecated":false,"id":"get_view/2","title":"get_view(access_token, lookup_id)"},{"anchor":"import_analytics/4","deprecated":false,"id":"import_analytics/4","title":"import_analytics(site, date_range, view_id, auth)"},{"anchor":"import_authorize_url/2","deprecated":false,"id":"import_authorize_url/2","title":"import_authorize_url(site_id, redirect_to)"},{"anchor":"list_views/1","deprecated":false,"id":"list_views/1","title":"list_views(access_token)"},{"anchor":"search_console_authorize_url/2","deprecated":false,"id":"search_console_authorize_url/2","title":"search_console_authorize_url(site_id, redirect_to)"}]}],"sections":[],"title":"Plausible.Google.Api"},{"deprecated":false,"group":"","id":"Plausible.Google.Api.Mock","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_stats/3","deprecated":false,"id":"fetch_stats/3","title":"fetch_stats(auth, query, limit)"}]}],"sections":[],"title":"Plausible.Google.Api.Mock"},{"deprecated":false,"group":"","id":"Plausible.Google.Buffer","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(init_arg)"},{"anchor":"flush/2","deprecated":false,"id":"flush/2","title":"flush(pid, timeout \\\\ :infinity)"},{"anchor":"handle_continue/2","deprecated":false,"id":"handle_continue/2","title":"handle_continue(arg, state)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"},{"anchor":"insert_many/3","deprecated":false,"id":"insert_many/3","title":"insert_many(pid, table_name, records)"},{"anchor":"size/2","deprecated":false,"id":"size/2","title":"size(pid, table_name)"},{"anchor":"start_link/0","deprecated":false,"id":"start_link/0","title":"start_link()"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(pid)"}]}],"sections":[],"title":"Plausible.Google.Buffer"},{"deprecated":false,"group":"","id":"Plausible.Google.HTTP","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_access_token/1","deprecated":false,"id":"fetch_access_token/1","title":"fetch_access_token(code)"},{"anchor":"get_analytics_start_date/2","deprecated":false,"id":"get_analytics_start_date/2","title":"get_analytics_start_date(view_id, access_token)"},{"anchor":"get_report/1","deprecated":false,"id":"get_report/1","title":"get_report(report_request)"},{"anchor":"list_sites/1","deprecated":false,"id":"list_sites/1","title":"list_sites(access_token)"},{"anchor":"list_stats/5","deprecated":false,"id":"list_stats/5","title":"list_stats(access_token, property, date_range, limit, page \\\\ nil)"},{"anchor":"list_views_for_user/1","deprecated":false,"id":"list_views_for_user/1","title":"list_views_for_user(access_token)"},{"anchor":"refresh_auth_token/1","deprecated":false,"id":"refresh_auth_token/1","title":"refresh_auth_token(refresh_token)"}]}],"sections":[],"title":"Plausible.Google.HTTP"},{"deprecated":false,"group":"","id":"Plausible.Google.ReportRequest","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"full_report/0","deprecated":false,"id":"full_report/0","title":"full_report()"}]}],"sections":[],"title":"Plausible.Google.ReportRequest"},{"deprecated":false,"group":"","id":"Plausible.HTTPClient","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(url, headers \\\\ [], params \\\\ nil)"},{"anchor":"impl/0","deprecated":false,"id":"impl/0","title":"impl()"},{"anchor":"post/4","deprecated":false,"id":"post/4","title":"post(url, headers \\\\ [], params \\\\ nil, finch_req_opts \\\\ [])"}]}],"sections":[],"title":"Plausible.HTTPClient"},{"deprecated":false,"group":"","id":"Plausible.HTTPClient.Interface","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:finch_request_opts/0","deprecated":false,"id":"finch_request_opts/0","title":"finch_request_opts()"},{"anchor":"t:headers/0","deprecated":false,"id":"headers/0","title":"headers()"},{"anchor":"t:params/0","deprecated":false,"id":"params/0","title":"params()"},{"anchor":"t:response/0","deprecated":false,"id":"response/0","title":"response()"},{"anchor":"t:url/0","deprecated":false,"id":"url/0","title":"url()"}]},{"key":"callbacks","name":"Callbacks","nodes":[{"anchor":"c:get/1","deprecated":false,"id":"get/1","title":"get(url)"},{"anchor":"c:get/2","deprecated":false,"id":"get/2","title":"get(url, headers)"},{"anchor":"c:get/3","deprecated":false,"id":"get/3","title":"get(url, headers, params)"},{"anchor":"c:post/3","deprecated":false,"id":"post/3","title":"post(url, headers, params)"},{"anchor":"c:post/4","deprecated":false,"id":"post/4","title":"post(url, headers, params, finch_request_opts)"}]}],"sections":[],"title":"Plausible.HTTPClient.Interface"},{"deprecated":false,"group":"","id":"Plausible.HTTPClient.Non200Error","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"new/1","deprecated":false,"id":"new/1","title":"new(response)"}]}],"sections":[],"title":"Plausible.HTTPClient.Non200Error"},{"deprecated":false,"group":"","id":"Plausible.ImportDeletionRepo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.ImportDeletionRepo"},{"deprecated":false,"group":"","id":"Plausible.Imported","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"forget/1","deprecated":false,"id":"forget/1","title":"forget(site)"},{"anchor":"from_google_analytics/3","deprecated":false,"id":"from_google_analytics/3","title":"from_google_analytics(data, site_id, table)"},{"anchor":"tables/0","deprecated":false,"id":"tables/0","title":"tables()"}]}],"sections":[],"title":"Plausible.Imported"},{"deprecated":false,"group":"","id":"Plausible.IngestRepo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"insert_stream/3","deprecated":false,"id":"insert_stream/3","title":"insert_stream(source_or_schema, rows, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.IngestRepo"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Counters","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"enabled?/0","deprecated":false,"id":"enabled?/0","title":"enabled?()"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(pid)"}]}],"sections":[],"title":"Plausible.Ingestion.Counters"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Counters.Buffer","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:bucket_fn_opt/0","deprecated":false,"id":"bucket_fn_opt/0","title":"bucket_fn_opt()"},{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"},{"anchor":"t:unix_timestamp/0","deprecated":false,"id":"unix_timestamp/0","title":"unix_timestamp()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(buffer, metric, domain, timestamp)"},{"anchor":"bucket_10s/1","deprecated":false,"id":"bucket_10s/1","title":"bucket_10s(datetime)"},{"anchor":"flush/2","deprecated":false,"id":"flush/2","title":"flush(buffer, now \\\\ DateTime.utc_now())"},{"anchor":"new/2","deprecated":false,"id":"new/2","title":"new(buffer_name, opts \\\\ [])"},{"anchor":"previous_10s/1","deprecated":false,"id":"previous_10s/1","title":"previous_10s(datetime)"}]}],"sections":[],"title":"Plausible.Ingestion.Counters.Buffer"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Counters.Record","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]}],"sections":[],"title":"Plausible.Ingestion.Counters.Record"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Counters.TelemetryHandler","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/4","deprecated":false,"id":"handle_event/4","title":"handle_event(list, measurements, map, buffer)"},{"anchor":"install/1","deprecated":false,"id":"install/1","title":"install(buffer)"}]}],"sections":[],"title":"Plausible.Ingestion.Counters.TelemetryHandler"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Event","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:drop_reason/0","deprecated":false,"id":"drop_reason/0","title":"drop_reason()"},{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"build_and_buffer/1","deprecated":false,"id":"build_and_buffer/1","title":"build_and_buffer(request)"},{"anchor":"emit_telemetry_buffered/1","deprecated":false,"id":"emit_telemetry_buffered/1","title":"emit_telemetry_buffered(event)"},{"anchor":"emit_telemetry_dropped/2","deprecated":false,"id":"emit_telemetry_dropped/2","title":"emit_telemetry_dropped(event, reason)"},{"anchor":"telemetry_event_buffered/0","deprecated":false,"id":"telemetry_event_buffered/0","title":"telemetry_event_buffered()"},{"anchor":"telemetry_event_dropped/0","deprecated":false,"id":"telemetry_event_dropped/0","title":"telemetry_event_dropped()"}]}],"sections":[],"title":"Plausible.Ingestion.Event"},{"deprecated":false,"group":"","id":"Plausible.Ingestion.Request","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"build/2","deprecated":false,"id":"build/2","title":"build(conn, now \\\\ NaiveDateTime.utc_now())"},{"anchor":"sanitize_hostname/1","deprecated":false,"id":"sanitize_hostname/1","title":"sanitize_hostname(hostname)"}]}],"sections":[],"title":"Plausible.Ingestion.Request"},{"deprecated":false,"group":"","id":"Plausible.Mailer","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:result/0","deprecated":false,"id":"result/0","title":"result()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"deliver/1","deprecated":false,"id":"deliver/1","title":"deliver(email)"},{"anchor":"deliver_later/2","deprecated":false,"id":"deliver_later/2","title":"deliver_later(email, opts \\\\ [])"},{"anchor":"deliver_later!/2","deprecated":false,"id":"deliver_later!/2","title":"deliver_later!(email, opts \\\\ [])"},{"anchor":"deliver_now/2","deprecated":false,"id":"deliver_now/2","title":"deliver_now(email, opts \\\\ [])"},{"anchor":"deliver_now!/2","deprecated":false,"id":"deliver_now!/2","title":"deliver_now!(email, opts \\\\ [])"},{"anchor":"send/1","deprecated":false,"id":"send/1","title":"send(email)"}]}],"sections":[],"title":"Plausible.Mailer"},{"deprecated":false,"group":"","id":"Plausible.OpenTelemetry.Sampler","sections":[],"title":"Plausible.OpenTelemetry.Sampler"},{"deprecated":false,"group":"","id":"Plausible.PaddleApi.Mock","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_prices/1","deprecated":false,"id":"fetch_prices/1","title":"fetch_prices(product_ids)"},{"anchor":"get_invoices/1","deprecated":false,"id":"get_invoices/1","title":"get_invoices(subscription)"},{"anchor":"get_subscription/1","deprecated":false,"id":"get_subscription/1","title":"get_subscription(_)"},{"anchor":"update_subscription/2","deprecated":false,"id":"update_subscription/2","title":"update_subscription(_, map)"}]}],"sections":[],"title":"Plausible.PaddleApi.Mock"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.Goals","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:create_request/0","deprecated":false,"id":"create_request/0","title":"create_request()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(site, goal_or_goals)"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(site, id)"},{"anchor":"get_goals/2","deprecated":false,"id":"get_goals/2","title":"get_goals(site, params)"}]}],"sections":[],"title":"Plausible.Plugins.API.Goals"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.Pagination","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"paginate/4","deprecated":false,"id":"paginate/4","title":"paginate(queryable, params, opts, repo_opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Plugins.API.Pagination"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.SharedLinks","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(site, id)"},{"anchor":"get_or_create/3","deprecated":false,"id":"get_or_create/3","title":"get_or_create(site, name, password \\\\ nil)"},{"anchor":"get_shared_links/2","deprecated":false,"id":"get_shared_links/2","title":"get_shared_links(site, params)"}]}],"sections":[],"title":"Plausible.Plugins.API.SharedLinks"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.Token","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"generate/1","deprecated":false,"id":"generate/1","title":"generate(random_bytes \\\\ random_bytes())"},{"anchor":"hash/1","deprecated":false,"id":"hash/1","title":"hash(raw)"},{"anchor":"insert_changeset/3","deprecated":false,"id":"insert_changeset/3","title":"insert_changeset(site, map, attrs \\\\ %{})"},{"anchor":"prefix/0","deprecated":false,"id":"prefix/0","title":"prefix()"}]}],"sections":[],"title":"Plausible.Plugins.API.Token"},{"deprecated":false,"group":"","id":"Plausible.Plugins.API.Tokens","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create/3","deprecated":false,"id":"create/3","title":"create(site, description, generated_token \\\\ Token.generate())"},{"anchor":"find/2","deprecated":false,"id":"find/2","title":"find(domain, raw)"}]}],"sections":[],"title":"Plausible.Plugins.API.Tokens"},{"deprecated":false,"group":"","id":"Plausible.PromEx","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(init_arg)"}]}],"sections":[],"title":"Plausible.PromEx"},{"deprecated":false,"group":"","id":"Plausible.PromEx.Plugins.PlausibleMetrics","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"execute_cache_metrics/0","deprecated":false,"id":"execute_cache_metrics/0","title":"execute_cache_metrics()"},{"anchor":"execute_write_buffer_metrics/0","deprecated":false,"id":"execute_write_buffer_metrics/0","title":"execute_write_buffer_metrics()"}]}],"sections":[],"title":"Plausible.PromEx.Plugins.PlausibleMetrics"},{"deprecated":false,"group":"","id":"Plausible.Props","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:prop/0","deprecated":false,"id":"prop/0","title":"prop()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"allow/2","deprecated":false,"id":"allow/2","title":"allow(site, prop_or_props)"},{"anchor":"allow_changeset/2","deprecated":false,"id":"allow_changeset/2","title":"allow_changeset(site, prop_or_props)"},{"anchor":"allow_existing_props/1","deprecated":false,"id":"allow_existing_props/1","title":"allow_existing_props(site)"},{"anchor":"configured?/1","deprecated":false,"id":"configured?/1","title":"configured?(site)"},{"anchor":"disallow/2","deprecated":false,"id":"disallow/2","title":"disallow(site, prop)"},{"anchor":"internal_keys/0","deprecated":false,"id":"internal_keys/0","title":"internal_keys()"},{"anchor":"max_prop_key_length/0","deprecated":false,"id":"max_prop_key_length/0","title":"max_prop_key_length()"},{"anchor":"max_prop_value_length/0","deprecated":false,"id":"max_prop_value_length/0","title":"max_prop_value_length()"},{"anchor":"max_props/0","deprecated":false,"id":"max_props/0","title":"max_props()"},{"anchor":"suggest_keys_to_allow/2","deprecated":false,"id":"suggest_keys_to_allow/2","title":"suggest_keys_to_allow(site, limit \\\\ 300)"}]}],"sections":[],"title":"Plausible.Props"},{"deprecated":false,"group":"","id":"Plausible.Purge","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"delete_imported_stats!/1","deprecated":false,"id":"delete_imported_stats!/1","title":"delete_imported_stats!(site)"},{"anchor":"delete_native_stats!/1","deprecated":false,"id":"delete_native_stats!/1","title":"delete_native_stats!(site)"},{"anchor":"reset!/1","deprecated":false,"id":"reset!/1","title":"reset!(site)"}]}],"sections":[],"title":"Plausible.Purge"},{"deprecated":false,"group":"","id":"Plausible.Release","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"configure_ref_inspector/0","deprecated":false,"id":"configure_ref_inspector/0","title":"configure_ref_inspector()"},{"anchor":"configure_ua_inspector/0","deprecated":false,"id":"configure_ua_inspector/0","title":"configure_ua_inspector()"},{"anchor":"createdb/0","deprecated":false,"id":"createdb/0","title":"createdb()"},{"anchor":"migrate/0","deprecated":false,"id":"migrate/0","title":"migrate()"},{"anchor":"pending_migrations/0","deprecated":false,"id":"pending_migrations/0","title":"pending_migrations()"},{"anchor":"rollback/0","deprecated":false,"id":"rollback/0","title":"rollback()"},{"anchor":"seed/0","deprecated":false,"id":"seed/0","title":"seed()"},{"anchor":"selfhost?/0","deprecated":false,"id":"selfhost?/0","title":"selfhost?()"},{"anchor":"should_be_first_launch?/0","deprecated":false,"id":"should_be_first_launch?/0","title":"should_be_first_launch?()"}]}],"sections":[],"title":"Plausible.Release"},{"deprecated":false,"group":"","id":"Plausible.Repo","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(queryable, aggregate, opts \\\\ [])"},{"anchor":"aggregate/4","deprecated":false,"id":"aggregate/4","title":"aggregate(queryable, aggregate, field, opts)"},{"anchor":"all/2","deprecated":false,"id":"all/2","title":"all(queryable, opts \\\\ [])"},{"anchor":"checked_out?/0","deprecated":false,"id":"checked_out?/0","title":"checked_out?()"},{"anchor":"checkout/2","deprecated":false,"id":"checkout/2","title":"checkout(fun, opts \\\\ [])"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/0","deprecated":false,"id":"config/0","title":"config()"},{"anchor":"default_options/1","deprecated":false,"id":"default_options/1","title":"default_options(operation)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(struct, opts \\\\ [])"},{"anchor":"delete!/2","deprecated":false,"id":"delete!/2","title":"delete!(struct, opts \\\\ [])"},{"anchor":"delete_all/2","deprecated":false,"id":"delete_all/2","title":"delete_all(queryable, opts \\\\ [])"},{"anchor":"disconnect_all/2","deprecated":false,"id":"disconnect_all/2","title":"disconnect_all(interval, opts \\\\ [])"},{"anchor":"exists?/2","deprecated":false,"id":"exists?/2","title":"exists?(queryable, opts \\\\ [])"},{"anchor":"explain/3","deprecated":false,"id":"explain/3","title":"explain(operation, queryable, opts \\\\ [])"},{"anchor":"get/3","deprecated":false,"id":"get/3","title":"get(queryable, id, opts \\\\ [])"},{"anchor":"get!/3","deprecated":false,"id":"get!/3","title":"get!(queryable, id, opts \\\\ [])"},{"anchor":"get_by/3","deprecated":false,"id":"get_by/3","title":"get_by(queryable, clauses, opts \\\\ [])"},{"anchor":"get_by!/3","deprecated":false,"id":"get_by!/3","title":"get_by!(queryable, clauses, opts \\\\ [])"},{"anchor":"get_dynamic_repo/0","deprecated":false,"id":"get_dynamic_repo/0","title":"get_dynamic_repo()"},{"anchor":"in_transaction?/0","deprecated":false,"id":"in_transaction?/0","title":"in_transaction?()"},{"anchor":"insert/2","deprecated":false,"id":"insert/2","title":"insert(struct, opts \\\\ [])"},{"anchor":"insert!/2","deprecated":false,"id":"insert!/2","title":"insert!(struct, opts \\\\ [])"},{"anchor":"insert_all/3","deprecated":false,"id":"insert_all/3","title":"insert_all(schema_or_source, entries, opts \\\\ [])"},{"anchor":"insert_or_update/2","deprecated":false,"id":"insert_or_update/2","title":"insert_or_update(changeset, opts \\\\ [])"},{"anchor":"insert_or_update!/2","deprecated":false,"id":"insert_or_update!/2","title":"insert_or_update!(changeset, opts \\\\ [])"},{"anchor":"load/2","deprecated":false,"id":"load/2","title":"load(schema_or_types, data)"},{"anchor":"one/2","deprecated":false,"id":"one/2","title":"one(queryable, opts \\\\ [])"},{"anchor":"one!/2","deprecated":false,"id":"one!/2","title":"one!(queryable, opts \\\\ [])"},{"anchor":"paginate/3","deprecated":false,"id":"paginate/3","title":"paginate(query, params \\\\ %{}, options \\\\ [])"},{"anchor":"preload/3","deprecated":false,"id":"preload/3","title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])"},{"anchor":"prepare_query/3","deprecated":false,"id":"prepare_query/3","title":"prepare_query(operation, query, opts)"},{"anchor":"put_dynamic_repo/1","deprecated":false,"id":"put_dynamic_repo/1","title":"put_dynamic_repo(dynamic)"},{"anchor":"query/3","deprecated":false,"id":"query/3","title":"query(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query!/3","deprecated":false,"id":"query!/3","title":"query!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query_many/3","deprecated":false,"id":"query_many/3","title":"query_many(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"query_many!/3","deprecated":false,"id":"query_many!/3","title":"query_many!(sql, params \\\\ [], opts \\\\ [])"},{"anchor":"reload/2","deprecated":false,"id":"reload/2","title":"reload(queryable, opts \\\\ [])"},{"anchor":"reload!/2","deprecated":false,"id":"reload!/2","title":"reload!(queryable, opts \\\\ [])"},{"anchor":"rollback/1","deprecated":false,"id":"rollback/1","title":"rollback(value)"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"stop/1","deprecated":false,"id":"stop/1","title":"stop(timeout \\\\ 5000)"},{"anchor":"stream/2","deprecated":false,"id":"stream/2","title":"stream(queryable, opts \\\\ [])"},{"anchor":"to_sql/2","deprecated":false,"id":"to_sql/2","title":"to_sql(operation, queryable)"},{"anchor":"transaction/2","deprecated":false,"id":"transaction/2","title":"transaction(fun_or_multi, opts \\\\ [])"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(struct, opts \\\\ [])"},{"anchor":"update!/2","deprecated":false,"id":"update!/2","title":"update!(struct, opts \\\\ [])"},{"anchor":"update_all/3","deprecated":false,"id":"update_all/3","title":"update_all(queryable, updates, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Repo"},{"deprecated":false,"group":"","id":"Plausible.Sentry.Client","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/0","deprecated":false,"id":"child_spec/0","title":"child_spec()"},{"anchor":"post/3","deprecated":false,"id":"post/3","title":"post(url, headers, body)"}]}],"sections":[],"title":"Plausible.Sentry.Client"},{"deprecated":false,"group":"","id":"Plausible.SentryFilter","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"before_send/1","deprecated":false,"id":"before_send/1","title":"before_send(event)"},{"anchor":"exclude_exception?/2","deprecated":false,"id":"exclude_exception?/2","title":"exclude_exception?(exception, source)"}]}],"sections":[],"title":"Plausible.SentryFilter"},{"deprecated":false,"group":"","id":"Plausible.Session.CacheStore","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"on_event/3","deprecated":false,"id":"on_event/3","title":"on_event(event, prev_user_id, buffer \\\\ WriteBuffer)"}]}],"sections":[],"title":"Plausible.Session.CacheStore"},{"deprecated":false,"group":"","id":"Plausible.Session.Salts","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(arg)"},{"anchor":"fetch/0","deprecated":false,"id":"fetch/0","title":"fetch()"},{"anchor":"rotate/0","deprecated":false,"id":"rotate/0","title":"rotate()"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts)"}]}],"sections":[],"title":"Plausible.Session.Salts"},{"deprecated":false,"group":"","id":"Plausible.Session.WriteBuffer","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(init_arg)"},{"anchor":"flush/0","deprecated":false,"id":"flush/0","title":"flush()"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(buffer)"},{"anchor":"insert/1","deprecated":false,"id":"insert/1","title":"insert(sessions)"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts)"}]}],"sections":[],"title":"Plausible.Session.WriteBuffer"},{"deprecated":false,"group":"","id":"Plausible.Site","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(site, attrs \\\\ %{})"},{"anchor":"crm_changeset/2","deprecated":false,"id":"crm_changeset/2","title":"crm_changeset(site, attrs)"},{"anchor":"import_failure/1","deprecated":false,"id":"import_failure/1","title":"import_failure(site)"},{"anchor":"import_success/1","deprecated":false,"id":"import_success/1","title":"import_success(site)"},{"anchor":"local_start_date/1","deprecated":false,"id":"local_start_date/1","title":"local_start_date(site)"},{"anchor":"make_private/1","deprecated":false,"id":"make_private/1","title":"make_private(site)"},{"anchor":"make_public/1","deprecated":false,"id":"make_public/1","title":"make_public(site)"},{"anchor":"remove_imported_data/1","deprecated":false,"id":"remove_imported_data/1","title":"remove_imported_data(site)"},{"anchor":"set_imported_source/2","deprecated":false,"id":"set_imported_source/2","title":"set_imported_source(site, imported_source)"},{"anchor":"set_native_stats_start_at/2","deprecated":false,"id":"set_native_stats_start_at/2","title":"set_native_stats_start_at(site, val)"},{"anchor":"set_stats_start_date/2","deprecated":false,"id":"set_stats_start_date/2","title":"set_stats_start_date(site, val)"},{"anchor":"start_import/5","deprecated":false,"id":"start_import/5","title":"start_import(site, start_date, end_date, imported_source, status \\\\ \"importing\")"},{"anchor":"tz_offset/2","deprecated":false,"id":"tz_offset/2","title":"tz_offset(site, utc_now \\\\ DateTime.utc_now())"},{"anchor":"update_changeset/3","deprecated":false,"id":"update_changeset/3","title":"update_changeset(site, attrs \\\\ %{}, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Site"},{"deprecated":false,"group":"","id":"Plausible.Site.Cache","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"enabled?/0","deprecated":false,"id":"enabled?/0","title":"enabled?()"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(domain, opts \\\\ [])"},{"anchor":"get_site_id/2","deprecated":false,"id":"get_site_id/2","title":"get_site_id(domain, opts \\\\ [])"},{"anchor":"hit_rate/1","deprecated":false,"id":"hit_rate/1","title":"hit_rate(cache_name \\\\ :sites_by_domain)"},{"anchor":"merge/2","deprecated":false,"id":"merge/2","title":"merge(new_items, opts \\\\ [])"},{"anchor":"name/0","deprecated":false,"id":"name/0","title":"name()"},{"anchor":"ready?/1","deprecated":false,"id":"ready?/1","title":"ready?(cache_name \\\\ :sites_by_domain)"},{"anchor":"refresh_all/1","deprecated":false,"id":"refresh_all/1","title":"refresh_all(opts \\\\ [])"},{"anchor":"refresh_updated_recently/1","deprecated":false,"id":"refresh_updated_recently/1","title":"refresh_updated_recently(opts \\\\ [])"},{"anchor":"size/1","deprecated":false,"id":"size/1","title":"size(cache_name \\\\ :sites_by_domain)"},{"anchor":"telemetry_event_refresh/2","deprecated":false,"id":"telemetry_event_refresh/2","title":"telemetry_event_refresh(cache_name \\\\ :sites_by_domain, mode)"},{"anchor":"touch_site!/2","deprecated":false,"id":"touch_site!/2","title":"touch_site!(site, now)"}]}],"sections":[],"title":"Plausible.Site.Cache"},{"deprecated":false,"group":"","id":"Plausible.Site.Cache.Warmer","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"interval/0","deprecated":false,"id":"interval/0","title":"interval()"}]}],"sections":[],"title":"Plausible.Site.Cache.Warmer"},{"deprecated":false,"group":"","id":"Plausible.Site.Cache.Warmer.All","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"}]}],"sections":[],"title":"Plausible.Site.Cache.Warmer.All"},{"deprecated":false,"group":"","id":"Plausible.Site.Cache.Warmer.RecentlyUpdated","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"}]}],"sections":[],"title":"Plausible.Site.Cache.Warmer.RecentlyUpdated"},{"deprecated":false,"group":"","id":"Plausible.Site.CustomDomain","sections":[],"title":"Plausible.Site.CustomDomain"},{"deprecated":false,"group":"","id":"Plausible.Site.Domain","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"change/3","deprecated":false,"id":"change/3","title":"change(site, new_domain, opts \\\\ [])"},{"anchor":"expire_change_transitions/1","deprecated":false,"id":"expire_change_transitions/1","title":"expire_change_transitions(expire_threshold_hours \\\\ 72)"}]}],"sections":[],"title":"Plausible.Site.Domain"},{"deprecated":false,"group":"","id":"Plausible.Site.GateKeeper","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:policy/0","deprecated":false,"id":"policy/0","title":"policy()"},{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"check/2","deprecated":false,"id":"check/2","title":"check(domain, opts \\\\ [])"},{"anchor":"key/1","deprecated":false,"id":"key/1","title":"key(domain)"}]}],"sections":[],"title":"Plausible.Site.GateKeeper"},{"deprecated":false,"group":"","id":"Plausible.Site.GoogleAuth","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(auth, attrs \\\\ %{})"},{"anchor":"set_property/2","deprecated":false,"id":"set_property/2","title":"set_property(auth, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Site.GoogleAuth"},{"deprecated":false,"group":"","id":"Plausible.Site.ImportedData","sections":[],"title":"Plausible.Site.ImportedData"},{"deprecated":false,"group":"","id":"Plausible.Site.Membership","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"new/2","deprecated":false,"id":"new/2","title":"new(site, user)"},{"anchor":"set_role/2","deprecated":false,"id":"set_role/2","title":"set_role(changeset, role)"}]}],"sections":[],"title":"Plausible.Site.Membership"},{"deprecated":false,"group":"","id":"Plausible.Site.Memberships","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"accept_invitation/2","deprecated":false,"id":"accept_invitation/2","title":"accept_invitation(invitation_id, user)"},{"anchor":"any?/1","deprecated":false,"id":"any?/1","title":"any?(user_id)"},{"anchor":"has_any_invitations?/1","deprecated":false,"id":"has_any_invitations?/1","title":"has_any_invitations?(email)"},{"anchor":"reject_invitation/2","deprecated":false,"id":"reject_invitation/2","title":"reject_invitation(invitation_id, user)"},{"anchor":"remove_invitation/2","deprecated":false,"id":"remove_invitation/2","title":"remove_invitation(invitation_id, site)"}]}],"sections":[],"title":"Plausible.Site.Memberships"},{"deprecated":false,"group":"","id":"Plausible.Site.Memberships.AcceptInvitation","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"accept_invitation/3","deprecated":false,"id":"accept_invitation/3","title":"accept_invitation(invitation_id, user, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Site.Memberships.AcceptInvitation"},{"deprecated":false,"group":"","id":"Plausible.Site.Memberships.RejectInvitation","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"reject_invitation/2","deprecated":false,"id":"reject_invitation/2","title":"reject_invitation(invitation_id, user)"}]}],"sections":[],"title":"Plausible.Site.Memberships.RejectInvitation"},{"deprecated":false,"group":"","id":"Plausible.Site.Memberships.RemoveInvitation","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"remove_invitation/2","deprecated":false,"id":"remove_invitation/2","title":"remove_invitation(invitation_id, site)"}]}],"sections":[],"title":"Plausible.Site.Memberships.RemoveInvitation"},{"deprecated":false,"group":"","id":"Plausible.Site.MonthlyReport","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_recipient/2","deprecated":false,"id":"add_recipient/2","title":"add_recipient(report, recipient)"},{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(settings, attrs \\\\ %{})"},{"anchor":"remove_recipient/2","deprecated":false,"id":"remove_recipient/2","title":"remove_recipient(report, recipient)"}]}],"sections":[],"title":"Plausible.Site.MonthlyReport"},{"deprecated":false,"group":"","id":"Plausible.Site.Removal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(domain)"}]}],"sections":[],"title":"Plausible.Site.Removal"},{"deprecated":false,"group":"","id":"Plausible.Site.SharedLink","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(link, attrs \\\\ %{})"}]}],"sections":[],"title":"Plausible.Site.SharedLink"},{"deprecated":false,"group":"","id":"Plausible.Site.SpikeNotification","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_recipient/2","deprecated":false,"id":"add_recipient/2","title":"add_recipient(schema, recipient)"},{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(schema, attrs)"},{"anchor":"remove_recipient/2","deprecated":false,"id":"remove_recipient/2","title":"remove_recipient(schema, recipient)"},{"anchor":"was_sent/1","deprecated":false,"id":"was_sent/1","title":"was_sent(schema)"}]}],"sections":[],"title":"Plausible.Site.SpikeNotification"},{"deprecated":false,"group":"","id":"Plausible.Site.WeeklyReport","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_recipient/2","deprecated":false,"id":"add_recipient/2","title":"add_recipient(report, recipient)"},{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(settings, attrs \\\\ %{})"},{"anchor":"remove_recipient/2","deprecated":false,"id":"remove_recipient/2","title":"remove_recipient(report, recipient)"}]}],"sections":[],"title":"Plausible.Site.WeeklyReport"},{"deprecated":false,"group":"","id":"Plausible.SiteAdmin","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create_changeset/2","deprecated":false,"id":"create_changeset/2","title":"create_changeset(schema, attrs)"},{"anchor":"custom_index_query/3","deprecated":false,"id":"custom_index_query/3","title":"custom_index_query(conn, schema, query)"},{"anchor":"form_fields/1","deprecated":false,"id":"form_fields/1","title":"form_fields(_)"},{"anchor":"get_struct_fields/1","deprecated":false,"id":"get_struct_fields/1","title":"get_struct_fields(module)"},{"anchor":"index/1","deprecated":false,"id":"index/1","title":"index(_)"},{"anchor":"list_actions/1","deprecated":false,"id":"list_actions/1","title":"list_actions(conn)"},{"anchor":"ordering/1","deprecated":false,"id":"ordering/1","title":"ordering(schema)"},{"anchor":"search_fields/1","deprecated":false,"id":"search_fields/1","title":"search_fields(schema)"},{"anchor":"update_changeset/2","deprecated":false,"id":"update_changeset/2","title":"update_changeset(schema, attrs)"}]}],"sections":[],"title":"Plausible.SiteAdmin"},{"deprecated":false,"group":"","id":"Plausible.Sites","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:invite_error/0","deprecated":false,"id":"invite_error/0","title":"invite_error()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"bulk_transfer_ownership/4","deprecated":false,"id":"bulk_transfer_ownership/4","title":"bulk_transfer_ownership(sites, inviter, invitee_email, opts \\\\ [])"},{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(user, params)"},{"anchor":"create_shared_link/3","deprecated":false,"id":"create_shared_link/3","title":"create_shared_link(site, name, password \\\\ nil)"},{"anchor":"get_by_domain/1","deprecated":false,"id":"get_by_domain/1","title":"get_by_domain(domain)"},{"anchor":"get_by_domain!/1","deprecated":false,"id":"get_by_domain!/1","title":"get_by_domain!(domain)"},{"anchor":"get_for_user/3","deprecated":false,"id":"get_for_user/3","title":"get_for_user(user_id, domain, roles \\\\ [:owner, :admin, :viewer])"},{"anchor":"get_for_user!/3","deprecated":false,"id":"get_for_user!/3","title":"get_for_user!(user_id, domain, roles \\\\ [:owner, :admin, :viewer])"},{"anchor":"has_admin_access?/2","deprecated":false,"id":"has_admin_access?/2","title":"has_admin_access?(user_id, site)"},{"anchor":"has_goals?/1","deprecated":false,"id":"has_goals?/1","title":"has_goals?(site)"},{"anchor":"has_stats?/1","deprecated":false,"id":"has_stats?/1","title":"has_stats?(site)"},{"anchor":"invite/4","deprecated":false,"id":"invite/4","title":"invite(site, inviter, invitee_email, role)"},{"anchor":"is_member?/2","deprecated":false,"id":"is_member?/2","title":"is_member?(user_id, site)"},{"anchor":"locked?/1","deprecated":false,"id":"locked?/1","title":"locked?(site)"},{"anchor":"owned_site_ids/1","deprecated":false,"id":"owned_site_ids/1","title":"owned_site_ids(user)"},{"anchor":"owned_sites_count/1","deprecated":false,"id":"owned_sites_count/1","title":"owned_sites_count(user)"},{"anchor":"owned_sites_domains/1","deprecated":false,"id":"owned_sites_domains/1","title":"owned_sites_domains(user)"},{"anchor":"role/2","deprecated":false,"id":"role/2","title":"role(user_id, site)"},{"anchor":"shared_link_url/2","deprecated":false,"id":"shared_link_url/2","title":"shared_link_url(site, link)"},{"anchor":"stats_start_date/1","deprecated":false,"id":"stats_start_date/1","title":"stats_start_date(site)"}]}],"sections":[],"title":"Plausible.Sites"},{"deprecated":false,"group":"","id":"Plausible.Stats","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(site, query, metrics)"},{"anchor":"breakdown/5","deprecated":false,"id":"breakdown/5","title":"breakdown(site, query, prop, metrics, pagination)"},{"anchor":"current_visitors/1","deprecated":false,"id":"current_visitors/1","title":"current_visitors(site)"},{"anchor":"filter_suggestions/4","deprecated":false,"id":"filter_suggestions/4","title":"filter_suggestions(site, query, filter_name, filter_search)"},{"anchor":"funnel/3","deprecated":false,"id":"funnel/3","title":"funnel(site, query, funnel)"},{"anchor":"timeseries/3","deprecated":false,"id":"timeseries/3","title":"timeseries(site, query, metrics)"}]}],"sections":[],"title":"Plausible.Stats"},{"deprecated":false,"group":"","id":"Plausible.Stats.Aggregate","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/3","deprecated":false,"id":"aggregate/3","title":"aggregate(site, query, metrics)"}]}],"sections":[],"title":"Plausible.Stats.Aggregate"},{"deprecated":false,"group":"","id":"Plausible.Stats.Base","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"apply_entry_prop_filter/3","deprecated":false,"id":"apply_entry_prop_filter/3","title":"apply_entry_prop_filter(sessions_q, prop_name, arg3)"},{"anchor":"base_event_query/2","deprecated":false,"id":"base_event_query/2","title":"base_event_query(site, query)"},{"anchor":"filter_by_entry_props/2","deprecated":false,"id":"filter_by_entry_props/2","title":"filter_by_entry_props(sessions_q, query)"},{"anchor":"filter_converted_sessions/3","deprecated":false,"id":"filter_converted_sessions/3","title":"filter_converted_sessions(db_query, site, query)"},{"anchor":"page_regex/1","deprecated":false,"id":"page_regex/1","title":"page_regex(expr)"},{"anchor":"query_events/2","deprecated":false,"id":"query_events/2","title":"query_events(site, query)"},{"anchor":"query_sessions/2","deprecated":false,"id":"query_sessions/2","title":"query_sessions(site, query)"},{"anchor":"select_event_metrics/2","deprecated":false,"id":"select_event_metrics/2","title":"select_event_metrics(q, list)"},{"anchor":"select_session_metrics/3","deprecated":false,"id":"select_session_metrics/3","title":"select_session_metrics(q, list, query)"},{"anchor":"utc_boundaries/2","deprecated":false,"id":"utc_boundaries/2","title":"utc_boundaries(query, site)"}]}],"sections":[],"title":"Plausible.Stats.Base"},{"deprecated":false,"group":"","id":"Plausible.Stats.Breakdown","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"breakdown/5","deprecated":false,"id":"breakdown/5","title":"breakdown(site, query, property, metrics, pagination)"}]}],"sections":[],"title":"Plausible.Stats.Breakdown"},{"deprecated":false,"group":"","id":"Plausible.Stats.Clickhouse","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"current_visitors/2","deprecated":false,"id":"current_visitors/2","title":"current_visitors(site, query)"},{"anchor":"has_pageviews?/1","deprecated":false,"id":"has_pageviews?/1","title":"has_pageviews?(site)"},{"anchor":"imported_pageview_count/1","deprecated":false,"id":"imported_pageview_count/1","title":"imported_pageview_count(site)"},{"anchor":"last_24h_visitors/1","deprecated":false,"id":"last_24h_visitors/1","title":"last_24h_visitors(sites)"},{"anchor":"pageview_start_date_local/1","deprecated":false,"id":"pageview_start_date_local/1","title":"pageview_start_date_local(site)"},{"anchor":"top_sources/6","deprecated":false,"id":"top_sources/6","title":"top_sources(site, query, limit, page, show_noref \\\\ false, include_details)"},{"anchor":"usage_breakdown/1","deprecated":false,"id":"usage_breakdown/1","title":"usage_breakdown(domains_or_site_ids)"},{"anchor":"usage_breakdown/2","deprecated":false,"id":"usage_breakdown/2","title":"usage_breakdown(domains, date_range)"}]}],"sections":[],"title":"Plausible.Stats.Clickhouse"},{"deprecated":false,"group":"","id":"Plausible.Stats.Compare","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"calculate_change/3","deprecated":false,"id":"calculate_change/3","title":"calculate_change(metric, old_stats, new_stats)"}]}],"sections":[],"title":"Plausible.Stats.Compare"},{"deprecated":false,"group":"","id":"Plausible.Stats.Comparisons","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:mode/0","deprecated":false,"id":"mode/0","title":"mode()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"compare/4","deprecated":false,"id":"compare/4","title":"compare(site, source_query, mode, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Stats.Comparisons"},{"deprecated":false,"group":"","id":"Plausible.Stats.CurrentVisitors","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"current_visitors/1","deprecated":false,"id":"current_visitors/1","title":"current_visitors(site)"}]}],"sections":[],"title":"Plausible.Stats.CurrentVisitors"},{"deprecated":false,"group":"","id":"Plausible.Stats.CustomProps","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"fetch_prop_names/2","deprecated":false,"id":"fetch_prop_names/2","title":"fetch_prop_names(site, query)"},{"anchor":"maybe_allowed_props_only/2","deprecated":false,"id":"maybe_allowed_props_only/2","title":"maybe_allowed_props_only(q, allowed_props)"},{"anchor":"props_for_all_event_names/2","deprecated":false,"id":"props_for_all_event_names/2","title":"props_for_all_event_names(site, query)"}]}],"sections":[],"title":"Plausible.Stats.CustomProps"},{"deprecated":false,"group":"","id":"Plausible.Stats.FilterParser","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"parse_filters/1","deprecated":false,"id":"parse_filters/1","title":"parse_filters(filters)"}]}],"sections":[],"title":"Plausible.Stats.FilterParser"},{"deprecated":false,"group":"","id":"Plausible.Stats.FilterSuggestions","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"filter_suggestions/4","deprecated":false,"id":"filter_suggestions/4","title":"filter_suggestions(site, query, filter_name, filter_search)"}]}],"sections":[],"title":"Plausible.Stats.FilterSuggestions"},{"deprecated":false,"group":"","id":"Plausible.Stats.Filters","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_prefix/1","deprecated":false,"id":"add_prefix/1","title":"add_prefix(query)"},{"anchor":"visit_props/0","deprecated":false,"id":"visit_props/0","title":"visit_props()"}]}],"sections":[],"title":"Plausible.Stats.Filters"},{"deprecated":false,"group":"","id":"Plausible.Stats.Fragments","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"bounce_rate/0","deprecated":false,"id":"bounce_rate/0","title":"bounce_rate()"},{"anchor":"coalesce_string/2","deprecated":false,"id":"coalesce_string/2","title":"coalesce_string(fieldA, fieldB)"},{"anchor":"sample_percent/0","deprecated":false,"id":"sample_percent/0","title":"sample_percent()"},{"anchor":"to_timezone/2","deprecated":false,"id":"to_timezone/2","title":"to_timezone(date, timezone)"},{"anchor":"total/0","deprecated":false,"id":"total/0","title":"total()"},{"anchor":"uniq/1","deprecated":false,"id":"uniq/1","title":"uniq(user_id)"},{"anchor":"visit_duration/0","deprecated":false,"id":"visit_duration/0","title":"visit_duration()"},{"anchor":"weekstart_not_before/2","deprecated":false,"id":"weekstart_not_before/2","title":"weekstart_not_before(date, not_before)"},{"anchor":"weekstart_not_before/3","deprecated":false,"id":"weekstart_not_before/3","title":"weekstart_not_before(date, not_before, timezone)"}]}],"sections":[],"title":"Plausible.Stats.Fragments"},{"deprecated":false,"group":"","id":"Plausible.Stats.Funnel","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"funnel/3","deprecated":false,"id":"funnel/3","title":"funnel(site, query, funnel_id)"}]}],"sections":[],"title":"Plausible.Stats.Funnel"},{"deprecated":false,"group":"","id":"Plausible.Stats.Imported","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"merge_imported/5","deprecated":false,"id":"merge_imported/5","title":"merge_imported(q, site, query, property, metrics)"},{"anchor":"merge_imported_timeseries/4","deprecated":false,"id":"merge_imported_timeseries/4","title":"merge_imported_timeseries(native_q, site, query, metrics)"}]}],"sections":[],"title":"Plausible.Stats.Imported"},{"deprecated":false,"group":"","id":"Plausible.Stats.Interval","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:opt/0","deprecated":false,"id":"opt/0","title":"opt()"},{"anchor":"t:opts/0","deprecated":false,"id":"opts/0","title":"opts()"},{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"default_for_date_range/1","deprecated":false,"id":"default_for_date_range/1","title":"default_for_date_range(range)"},{"anchor":"default_for_period/1","deprecated":false,"id":"default_for_period/1","title":"default_for_period(period)"},{"anchor":"list/0","deprecated":false,"id":"list/0","title":"list()"},{"anchor":"valid?/1","deprecated":false,"id":"valid?/1","title":"valid?(interval)"},{"anchor":"valid_by_period/1","deprecated":false,"id":"valid_by_period/1","title":"valid_by_period(opts \\\\ [])"},{"anchor":"valid_for_period?/3","deprecated":false,"id":"valid_for_period?/3","title":"valid_for_period?(period, interval, opts \\\\ [])"}]}],"sections":[],"title":"Plausible.Stats.Interval"},{"deprecated":false,"group":"","id":"Plausible.Stats.Props","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"event_props/0","deprecated":false,"id":"event_props/0","title":"event_props()"},{"anchor":"valid_prop?/1","deprecated":false,"id":"valid_prop?/1","title":"valid_prop?(prop)"}]}],"sections":[],"title":"Plausible.Stats.Props"},{"deprecated":false,"group":"","id":"Plausible.Stats.Query","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"from/2","deprecated":false,"id":"from/2","title":"from(site, params)"},{"anchor":"get_filter_by_prefix/2","deprecated":false,"id":"get_filter_by_prefix/2","title":"get_filter_by_prefix(query, prefix)"},{"anchor":"has_event_filters?/1","deprecated":false,"id":"has_event_filters?/1","title":"has_event_filters?(query)"},{"anchor":"include_imported?/3","deprecated":false,"id":"include_imported?/3","title":"include_imported?(query, site, requested?)"},{"anchor":"put_filter/3","deprecated":false,"id":"put_filter/3","title":"put_filter(query, key, val)"},{"anchor":"remove_event_filters/2","deprecated":false,"id":"remove_event_filters/2","title":"remove_event_filters(query, opts)"},{"anchor":"trace/1","deprecated":false,"id":"trace/1","title":"trace(query)"}]}],"sections":[],"title":"Plausible.Stats.Query"},{"deprecated":false,"group":"","id":"Plausible.Stats.Timeseries","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:results/0","deprecated":false,"id":"results/0","title":"results()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"timeseries/3","deprecated":false,"id":"timeseries/3","title":"timeseries(site, query, metrics)"}]}],"sections":[],"title":"Plausible.Stats.Timeseries"},{"deprecated":false,"group":"","id":"Plausible.Stats.Util","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"cast_revenue_metrics_to_money/2","deprecated":false,"id":"cast_revenue_metrics_to_money/2","title":"cast_revenue_metrics_to_money(results, revenue_goals)"},{"anchor":"get_revenue_tracking_currency/3","deprecated":false,"id":"get_revenue_tracking_currency/3","title":"get_revenue_tracking_currency(site, query, metrics)"},{"anchor":"remove_internal_visits_metric/1","deprecated":false,"id":"remove_internal_visits_metric/1","title":"remove_internal_visits_metric(result)"},{"anchor":"remove_internal_visits_metric/2","deprecated":false,"id":"remove_internal_visits_metric/2","title":"remove_internal_visits_metric(results, metrics)"}]}],"sections":[],"title":"Plausible.Stats.Util"},{"deprecated":false,"group":"","id":"Plausible.Test.Support.HTML","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"class_of_element/2","deprecated":false,"id":"class_of_element/2","title":"class_of_element(html, element)"},{"anchor":"element_exists?/2","deprecated":false,"id":"element_exists?/2","title":"element_exists?(html, selector)"},{"anchor":"find/2","deprecated":false,"id":"find/2","title":"find(html, value)"},{"anchor":"form_exists?/2","deprecated":false,"id":"form_exists?/2","title":"form_exists?(html, action_path)"},{"anchor":"name_of/1","deprecated":false,"id":"name_of/1","title":"name_of(element)"},{"anchor":"submit_button/2","deprecated":false,"id":"submit_button/2","title":"submit_button(html, form)"},{"anchor":"text/1","deprecated":false,"id":"text/1","title":"text(element)"},{"anchor":"text_of_attr/2","deprecated":false,"id":"text_of_attr/2","title":"text_of_attr(element, attr)"},{"anchor":"text_of_element/2","deprecated":false,"id":"text_of_element/2","title":"text_of_element(html, element)"}]}],"sections":[],"title":"Plausible.Test.Support.HTML"},{"deprecated":false,"group":"","id":"Plausible.TestUtils","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_imported_data/1","deprecated":false,"id":"add_imported_data/1","title":"add_imported_data(map)"},{"anchor":"await_clickhouse_count/2","deprecated":false,"id":"await_clickhouse_count/2","title":"await_clickhouse_count(query, expected)"},{"anchor":"create_api_key/1","deprecated":false,"id":"create_api_key/1","title":"create_api_key(map)"},{"anchor":"create_events/1","deprecated":false,"id":"create_events/1","title":"create_events(events)"},{"anchor":"create_new_site/1","deprecated":false,"id":"create_new_site/1","title":"create_new_site(map)"},{"anchor":"create_pageviews/1","deprecated":false,"id":"create_pageviews/1","title":"create_pageviews(pageviews)"},{"anchor":"create_sessions/1","deprecated":false,"id":"create_sessions/1","title":"create_sessions(sessions)"},{"anchor":"create_site/1","deprecated":false,"id":"create_site/1","title":"create_site(map)"},{"anchor":"create_user/1","deprecated":false,"id":"create_user/1","title":"create_user(_)"},{"anchor":"eventually/3","deprecated":false,"id":"eventually/3","title":"eventually(expectation, wait_time_ms \\\\ 50, retries \\\\ 10)"},{"anchor":"init_session/1","deprecated":false,"id":"init_session/1","title":"init_session(conn)"},{"anchor":"log_in/1","deprecated":false,"id":"log_in/1","title":"log_in(map)"},{"anchor":"patch_env/2","deprecated":false,"id":"patch_env/2","title":"patch_env(env_key, value)"},{"anchor":"populate_stats/1","deprecated":false,"id":"populate_stats/1","title":"populate_stats(events)"},{"anchor":"populate_stats/2","deprecated":false,"id":"populate_stats/2","title":"populate_stats(site, events)"},{"anchor":"random_ip/0","deprecated":false,"id":"random_ip/0","title":"random_ip()"},{"anchor":"relative_time/1","deprecated":false,"id":"relative_time/1","title":"relative_time(shifts)"},{"anchor":"setup_patch_env/2","deprecated":false,"id":"setup_patch_env/2","title":"setup_patch_env(env_key, value)"},{"anchor":"to_naive_truncate/1","deprecated":false,"id":"to_naive_truncate/1","title":"to_naive_truncate(dt)"},{"anchor":"use_api_key/1","deprecated":false,"id":"use_api_key/1","title":"use_api_key(map)"}]}],"sections":[],"title":"Plausible.TestUtils"},{"deprecated":false,"group":"","id":"Plausible.Themes","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"options/0","deprecated":false,"id":"options/0","title":"options()"}]}],"sections":[],"title":"Plausible.Themes"},{"deprecated":false,"group":"","id":"Plausible.Timezones","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"options/1","deprecated":false,"id":"options/1","title":"options(now \\\\ DateTime.utc_now())"}]}],"sections":[],"title":"Plausible.Timezones"},{"deprecated":false,"group":"","id":"Plausible.Users","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"has_email_code?/1","deprecated":false,"id":"has_email_code?/1","title":"has_email_code?(user_id)"},{"anchor":"with_subscription/1","deprecated":false,"id":"with_subscription/1","title":"with_subscription(user)"}]}],"sections":[],"title":"Plausible.Users"},{"deprecated":false,"group":"","id":"Plausible.Workers.CheckUsage","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"check_enterprise_subscriber/2","deprecated":false,"id":"check_enterprise_subscriber/2","title":"check_enterprise_subscriber(subscriber, billing_mod)"},{"anchor":"day_of_month/1","deprecated":false,"id":"day_of_month/1","title":"day_of_month(date)"},{"anchor":"last_day_of_month/1","deprecated":false,"id":"last_day_of_month/1","title":"last_day_of_month(day)"},{"anchor":"least/2","deprecated":false,"id":"least/2","title":"least(left, right)"},{"anchor":"yesterday/0","deprecated":false,"id":"yesterday/0","title":"yesterday()"}]}],"sections":[],"title":"Plausible.Workers.CheckUsage"},{"deprecated":false,"group":"","id":"Plausible.Workers.CleanEmailVerificationCodes","sections":[],"title":"Plausible.Workers.CleanEmailVerificationCodes"},{"deprecated":false,"group":"","id":"Plausible.Workers.CleanInvitations","sections":[],"title":"Plausible.Workers.CleanInvitations"},{"deprecated":false,"group":"","id":"Plausible.Workers.ExpireDomainChangeTransitions","sections":[],"title":"Plausible.Workers.ExpireDomainChangeTransitions"},{"deprecated":false,"group":"","id":"Plausible.Workers.ImportGoogleAnalytics","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"import_failed/1","deprecated":false,"id":"import_failed/1","title":"import_failed(site)"}]}],"sections":[],"title":"Plausible.Workers.ImportGoogleAnalytics"},{"deprecated":false,"group":"","id":"Plausible.Workers.LockSites","sections":[],"title":"Plausible.Workers.LockSites"},{"deprecated":false,"group":"","id":"Plausible.Workers.NotifyAnnualRenewal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"perform/1","deprecated":false,"id":"perform/1","title":"perform(job)"}]}],"sections":[],"title":"Plausible.Workers.NotifyAnnualRenewal"},{"deprecated":false,"group":"","id":"Plausible.Workers.RotateSalts","sections":[],"title":"Plausible.Workers.RotateSalts"},{"deprecated":false,"group":"","id":"Plausible.Workers.ScheduleEmailReports","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"first_of_month_9am/1","deprecated":false,"id":"first_of_month_9am/1","title":"first_of_month_9am(timezone)"},{"anchor":"monday_9am/1","deprecated":false,"id":"monday_9am/1","title":"monday_9am(timezone)"},{"anchor":"perform/1","deprecated":false,"id":"perform/1","title":"perform(job)"}]}],"sections":[],"title":"Plausible.Workers.ScheduleEmailReports"},{"deprecated":false,"group":"","id":"Plausible.Workers.SendCheckStatsEmails","sections":[],"title":"Plausible.Workers.SendCheckStatsEmails"},{"deprecated":false,"group":"","id":"Plausible.Workers.SendEmailReport","sections":[],"title":"Plausible.Workers.SendEmailReport"},{"deprecated":false,"group":"","id":"Plausible.Workers.SendSiteSetupEmails","sections":[],"title":"Plausible.Workers.SendSiteSetupEmails"},{"deprecated":false,"group":"","id":"Plausible.Workers.SendTrialNotifications","sections":[],"title":"Plausible.Workers.SendTrialNotifications"},{"deprecated":false,"group":"","id":"Plausible.Workers.SpikeNotifier","sections":[],"title":"Plausible.Workers.SpikeNotifier"},{"deprecated":false,"group":"","id":"PlausibleWeb","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__using__/1","deprecated":false,"id":"__using__/1","title":"__using__(which)"},{"anchor":"channel/0","deprecated":false,"id":"channel/0","title":"channel()"},{"anchor":"controller/0","deprecated":false,"id":"controller/0","title":"controller()"},{"anchor":"open_api_schema/0","deprecated":false,"id":"open_api_schema/0","title":"open_api_schema()"},{"anchor":"plugins_api_controller/0","deprecated":false,"id":"plugins_api_controller/0","title":"plugins_api_controller()"},{"anchor":"plugins_api_view/0","deprecated":false,"id":"plugins_api_view/0","title":"plugins_api_view()"},{"anchor":"router/0","deprecated":false,"id":"router/0","title":"router()"},{"anchor":"view/0","deprecated":false,"id":"view/0","title":"view()"}]}],"sections":[],"title":"PlausibleWeb"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.ExternalController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"error/2","deprecated":false,"id":"error/2","title":"error(conn, params)"},{"anchor":"event/2","deprecated":false,"id":"event/2","title":"event(conn, params)"},{"anchor":"health/2","deprecated":false,"id":"health/2","title":"health(conn, params)"},{"anchor":"info/2","deprecated":false,"id":"info/2","title":"info(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.ExternalController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.ExternalSitesController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create_site/2","deprecated":false,"id":"create_site/2","title":"create_site(conn, params)"},{"anchor":"delete_goal/2","deprecated":false,"id":"delete_goal/2","title":"delete_goal(conn, params)"},{"anchor":"delete_site/2","deprecated":false,"id":"delete_site/2","title":"delete_site(conn, map)"},{"anchor":"find_or_create_goal/2","deprecated":false,"id":"find_or_create_goal/2","title":"find_or_create_goal(conn, params)"},{"anchor":"find_or_create_shared_link/2","deprecated":false,"id":"find_or_create_shared_link/2","title":"find_or_create_shared_link(conn, params)"},{"anchor":"get_site/2","deprecated":false,"id":"get_site/2","title":"get_site(conn, map)"},{"anchor":"update_site/2","deprecated":false,"id":"update_site/2","title":"update_site(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.ExternalSitesController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.ExternalStatsController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"aggregate/2","deprecated":false,"id":"aggregate/2","title":"aggregate(conn, params)"},{"anchor":"breakdown/2","deprecated":false,"id":"breakdown/2","title":"breakdown(conn, params)"},{"anchor":"realtime_visitors/2","deprecated":false,"id":"realtime_visitors/2","title":"realtime_visitors(conn, params)"},{"anchor":"timeseries/2","deprecated":false,"id":"timeseries/2","title":"timeseries(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.ExternalStatsController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.Helpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"bad_request/2","deprecated":false,"id":"bad_request/2","title":"bad_request(conn, msg)"},{"anchor":"not_found/2","deprecated":false,"id":"not_found/2","title":"not_found(conn, msg)"},{"anchor":"payment_required/2","deprecated":false,"id":"payment_required/2","title":"payment_required(conn, msg)"},{"anchor":"too_many_requests/2","deprecated":false,"id":"too_many_requests/2","title":"too_many_requests(conn, msg)"},{"anchor":"unauthorized/2","deprecated":false,"id":"unauthorized/2","title":"unauthorized(conn, msg)"}]}],"sections":[],"title":"PlausibleWeb.Api.Helpers"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.InternalController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"disable_feature/2","deprecated":false,"id":"disable_feature/2","title":"disable_feature(conn, map)"},{"anchor":"domain_status/2","deprecated":false,"id":"domain_status/2","title":"domain_status(conn, map)"},{"anchor":"sites/2","deprecated":false,"id":"sites/2","title":"sites(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.InternalController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.PaddleController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"verified_signature?/1","deprecated":false,"id":"verified_signature?/1","title":"verified_signature?(params)"},{"anchor":"verify_signature/2","deprecated":false,"id":"verify_signature/2","title":"verify_signature(conn, opts)"},{"anchor":"webhook/2","deprecated":false,"id":"webhook/2","title":"webhook(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.PaddleController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Api.StatsController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"all_custom_prop_values/2","deprecated":false,"id":"all_custom_prop_values/2","title":"all_custom_prop_values(conn, params)"},{"anchor":"browser_versions/2","deprecated":false,"id":"browser_versions/2","title":"browser_versions(conn, params)"},{"anchor":"browsers/2","deprecated":false,"id":"browsers/2","title":"browsers(conn, params)"},{"anchor":"cities/2","deprecated":false,"id":"cities/2","title":"cities(conn, params)"},{"anchor":"conversions/2","deprecated":false,"id":"conversions/2","title":"conversions(conn, params)"},{"anchor":"countries/2","deprecated":false,"id":"countries/2","title":"countries(conn, params)"},{"anchor":"current_visitors/2","deprecated":false,"id":"current_visitors/2","title":"current_visitors(conn, _)"},{"anchor":"custom_prop_values/2","deprecated":false,"id":"custom_prop_values/2","title":"custom_prop_values(conn, params)"},{"anchor":"entry_pages/2","deprecated":false,"id":"entry_pages/2","title":"entry_pages(conn, params)"},{"anchor":"exit_pages/2","deprecated":false,"id":"exit_pages/2","title":"exit_pages(conn, params)"},{"anchor":"filter_suggestions/2","deprecated":false,"id":"filter_suggestions/2","title":"filter_suggestions(conn, params)"},{"anchor":"funnel/2","deprecated":false,"id":"funnel/2","title":"funnel(conn, params)"},{"anchor":"main_graph/2","deprecated":false,"id":"main_graph/2","title":"main_graph(conn, params)"},{"anchor":"operating_system_versions/2","deprecated":false,"id":"operating_system_versions/2","title":"operating_system_versions(conn, params)"},{"anchor":"operating_systems/2","deprecated":false,"id":"operating_systems/2","title":"operating_systems(conn, params)"},{"anchor":"pages/2","deprecated":false,"id":"pages/2","title":"pages(conn, params)"},{"anchor":"referrer_drilldown/2","deprecated":false,"id":"referrer_drilldown/2","title":"referrer_drilldown(conn, params)"},{"anchor":"referrers/2","deprecated":false,"id":"referrers/2","title":"referrers(conn, params)"},{"anchor":"regions/2","deprecated":false,"id":"regions/2","title":"regions(conn, params)"},{"anchor":"screen_sizes/2","deprecated":false,"id":"screen_sizes/2","title":"screen_sizes(conn, params)"},{"anchor":"sources/2","deprecated":false,"id":"sources/2","title":"sources(conn, params)"},{"anchor":"top_stats/2","deprecated":false,"id":"top_stats/2","title":"top_stats(conn, params)"},{"anchor":"utm_campaigns/2","deprecated":false,"id":"utm_campaigns/2","title":"utm_campaigns(conn, params)"},{"anchor":"utm_contents/2","deprecated":false,"id":"utm_contents/2","title":"utm_contents(conn, params)"},{"anchor":"utm_mediums/2","deprecated":false,"id":"utm_mediums/2","title":"utm_mediums(conn, params)"},{"anchor":"utm_sources/2","deprecated":false,"id":"utm_sources/2","title":"utm_sources(conn, params)"},{"anchor":"utm_terms/2","deprecated":false,"id":"utm_terms/2","title":"utm_terms(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.Api.StatsController"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"activate/2","deprecated":false,"id":"activate/2","title":"activate(conn, map)"},{"anchor":"activate_form/2","deprecated":false,"id":"activate_form/2","title":"activate_form(conn, params)"},{"anchor":"cancel_update_email/2","deprecated":false,"id":"cancel_update_email/2","title":"cancel_update_email(conn, params)"},{"anchor":"create_api_key/2","deprecated":false,"id":"create_api_key/2","title":"create_api_key(conn, map)"},{"anchor":"delete_api_key/2","deprecated":false,"id":"delete_api_key/2","title":"delete_api_key(conn, map)"},{"anchor":"delete_me/2","deprecated":false,"id":"delete_me/2","title":"delete_me(conn, params)"},{"anchor":"google_auth_callback/2","deprecated":false,"id":"google_auth_callback/2","title":"google_auth_callback(conn, params)"},{"anchor":"login/2","deprecated":false,"id":"login/2","title":"login(conn, map)"},{"anchor":"login_form/2","deprecated":false,"id":"login_form/2","title":"login_form(conn, params)"},{"anchor":"logout/2","deprecated":false,"id":"logout/2","title":"logout(conn, params)"},{"anchor":"new_api_key/2","deprecated":false,"id":"new_api_key/2","title":"new_api_key(conn, params)"},{"anchor":"password_reset/2","deprecated":false,"id":"password_reset/2","title":"password_reset(conn, params)"},{"anchor":"password_reset_form/2","deprecated":false,"id":"password_reset_form/2","title":"password_reset_form(conn, params)"},{"anchor":"password_reset_request/2","deprecated":false,"id":"password_reset_request/2","title":"password_reset_request(conn, params)"},{"anchor":"password_reset_request_form/2","deprecated":false,"id":"password_reset_request_form/2","title":"password_reset_request_form(conn, _)"},{"anchor":"register/2","deprecated":false,"id":"register/2","title":"register(conn, map)"},{"anchor":"register_from_invitation/2","deprecated":false,"id":"register_from_invitation/2","title":"register_from_invitation(conn, map)"},{"anchor":"request_activation_code/2","deprecated":false,"id":"request_activation_code/2","title":"request_activation_code(conn, params)"},{"anchor":"save_settings/2","deprecated":false,"id":"save_settings/2","title":"save_settings(conn, map)"},{"anchor":"update_email/2","deprecated":false,"id":"update_email/2","title":"update_email(conn, map)"},{"anchor":"user_settings/2","deprecated":false,"id":"user_settings/2","title":"user_settings(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.AuthController"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.AuthPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"activate.html/1","deprecated":false,"id":"activate.html/1","title":"activate.html(assigns)"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"delimit_integer/1","deprecated":false,"id":"delimit_integer/1","title":"delimit_integer(number)"},{"anchor":"format_invoices/1","deprecated":false,"id":"format_invoices/1","title":"format_invoices(invoice_list)"},{"anchor":"login_form.html/1","deprecated":false,"id":"login_form.html/1","title":"login_form.html(assigns)"},{"anchor":"new_api_key.html/1","deprecated":false,"id":"new_api_key.html/1","title":"new_api_key.html(assigns)"},{"anchor":"password_reset_form.html/1","deprecated":false,"id":"password_reset_form.html/1","title":"password_reset_form.html(assigns)"},{"anchor":"password_reset_request_form.html/1","deprecated":false,"id":"password_reset_request_form.html/1","title":"password_reset_request_form.html(assigns)"},{"anchor":"password_reset_request_success.html/1","deprecated":false,"id":"password_reset_request_success.html/1","title":"password_reset_request_success.html(assigns)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"present_subscription_status/1","deprecated":false,"id":"present_subscription_status/1","title":"present_subscription_status(status)"},{"anchor":"register_success.html/1","deprecated":false,"id":"register_success.html/1","title":"register_success.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"subscription_colors/1","deprecated":false,"id":"subscription_colors/1","title":"subscription_colors(_)"},{"anchor":"subscription_interval/1","deprecated":false,"id":"subscription_interval/1","title":"subscription_interval(subscription)"},{"anchor":"subscription_quota/2","deprecated":false,"id":"subscription_quota/2","title":"subscription_quota(subscription, options \\\\ [])"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"user_settings.html/1","deprecated":false,"id":"user_settings.html/1","title":"user_settings.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.AuthView"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthorizeSiteAccess","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, allowed_roles)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(allowed_roles)"}]}],"sections":[],"title":"PlausibleWeb.AuthorizeSiteAccess"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthorizeSitesApiPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.AuthorizeSitesApiPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.AuthorizeStatsApiPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.AuthorizeStatsApiPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.BillingController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"change_enterprise_plan/2","deprecated":false,"id":"change_enterprise_plan/2","title":"change_enterprise_plan(conn, params)"},{"anchor":"change_plan/2","deprecated":false,"id":"change_plan/2","title":"change_plan(conn, map)"},{"anchor":"change_plan_form/2","deprecated":false,"id":"change_plan_form/2","title":"change_plan_form(conn, params)"},{"anchor":"change_plan_preview/2","deprecated":false,"id":"change_plan_preview/2","title":"change_plan_preview(conn, map)"},{"anchor":"choose_plan/2","deprecated":false,"id":"choose_plan/2","title":"choose_plan(conn, params)"},{"anchor":"ping_subscription/2","deprecated":false,"id":"ping_subscription/2","title":"ping_subscription(conn, params)"},{"anchor":"preview_susbcription/2","deprecated":false,"id":"preview_susbcription/2","title":"preview_susbcription(_, _)"},{"anchor":"upgrade/2","deprecated":false,"id":"upgrade/2","title":"upgrade(conn, params)"},{"anchor":"upgrade_enterprise_plan/2","deprecated":false,"id":"upgrade_enterprise_plan/2","title":"upgrade_enterprise_plan(conn, params)"},{"anchor":"upgrade_success/2","deprecated":false,"id":"upgrade_success/2","title":"upgrade_success(conn, params)"},{"anchor":"upgrade_to_enterprise_plan/2","deprecated":false,"id":"upgrade_to_enterprise_plan/2","title":"upgrade_to_enterprise_plan(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.BillingController"},{"deprecated":false,"group":"","id":"PlausibleWeb.BillingView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"change_enterprise_plan_contact_us.html/1","deprecated":false,"id":"change_enterprise_plan_contact_us.html/1","title":"change_enterprise_plan_contact_us.html(assigns)"},{"anchor":"change_plan.html/1","deprecated":false,"id":"change_plan.html/1","title":"change_plan.html(assigns)"},{"anchor":"change_plan_preview.html/1","deprecated":false,"id":"change_plan_preview.html/1","title":"change_plan_preview.html(assigns)"},{"anchor":"choose_plan.html/1","deprecated":false,"id":"choose_plan.html/1","title":"choose_plan.html(assigns)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"present_currency/1","deprecated":false,"id":"present_currency/1","title":"present_currency(arg)"},{"anchor":"present_date/1","deprecated":false,"id":"present_date/1","title":"present_date(date)"},{"anchor":"reccommended_plan/1","deprecated":false,"id":"reccommended_plan/1","title":"reccommended_plan(usage)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"upgrade.html/1","deprecated":false,"id":"upgrade.html/1","title":"upgrade.html(assigns)"},{"anchor":"upgrade_success.html/1","deprecated":false,"id":"upgrade_success.html/1","title":"upgrade_success.html(assigns)"},{"anchor":"upgrade_to_enterprise_plan.html/1","deprecated":false,"id":"upgrade_to_enterprise_plan.html/1","title":"upgrade_to_enterprise_plan.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.BillingView"},{"deprecated":false,"group":"","id":"PlausibleWeb.CRMAuthPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.CRMAuthPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.Captcha","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"enabled?/0","deprecated":false,"id":"enabled?/0","title":"enabled?()"},{"anchor":"sitekey/0","deprecated":false,"id":"sitekey/0","title":"sitekey()"},{"anchor":"verify/1","deprecated":false,"id":"verify/1","title":"verify(token)"}]}],"sections":[],"title":"PlausibleWeb.Captcha"},{"deprecated":false,"group":"","id":"PlausibleWeb.Components.Generic","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"notice/1","deprecated":false,"id":"notice/1","title":"notice(assigns)"},{"anchor":"styled_link/1","deprecated":false,"id":"styled_link/1","title":"styled_link(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Components.Generic"},{"deprecated":false,"group":"","id":"PlausibleWeb.Components.Site.Feature","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"target/4","deprecated":false,"id":"target/4","title":"target(site, setting, conn, set_to)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"toggle/1","deprecated":false,"id":"toggle/1","title":"toggle(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Components.Site.Feature"},{"deprecated":false,"group":"","id":"PlausibleWeb.ConnCase","sections":[],"title":"PlausibleWeb.ConnCase"},{"deprecated":false,"group":"","id":"PlausibleWeb.ControllerHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"render_error/2","deprecated":false,"id":"render_error/2","title":"render_error(conn, status)"},{"anchor":"render_error/3","deprecated":false,"id":"render_error/3","title":"render_error(conn, status, message)"}]}],"sections":[],"title":"PlausibleWeb.ControllerHelpers"},{"deprecated":false,"group":"","id":"PlausibleWeb.Email","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"activation_email/2","deprecated":false,"id":"activation_email/2","title":"activation_email(user, code)"},{"anchor":"base_email/0","deprecated":false,"id":"base_email/0","title":"base_email()"},{"anchor":"base_email/1","deprecated":false,"id":"base_email/1","title":"base_email(map)"},{"anchor":"cancellation_email/1","deprecated":false,"id":"cancellation_email/1","title":"cancellation_email(user)"},{"anchor":"check_stats_email/1","deprecated":false,"id":"check_stats_email/1","title":"check_stats_email(user)"},{"anchor":"create_site_email/1","deprecated":false,"id":"create_site_email/1","title":"create_site_email(user)"},{"anchor":"dashboard_locked/4","deprecated":false,"id":"dashboard_locked/4","title":"dashboard_locked(user, usage, last_cycle, suggested_plan)"},{"anchor":"enterprise_over_limit_internal_email/5","deprecated":false,"id":"enterprise_over_limit_internal_email/5","title":"enterprise_over_limit_internal_email(user, usage, last_cycle, site_usage, site_allowance)"},{"anchor":"error_report/3","deprecated":false,"id":"error_report/3","title":"error_report(reported_by, trace_id, feedback)"},{"anchor":"existing_user_invitation/1","deprecated":false,"id":"existing_user_invitation/1","title":"existing_user_invitation(invitation)"},{"anchor":"import_failure/2","deprecated":false,"id":"import_failure/2","title":"import_failure(user, site)"},{"anchor":"import_success/2","deprecated":false,"id":"import_success/2","title":"import_success(user, site)"},{"anchor":"invitation_accepted/1","deprecated":false,"id":"invitation_accepted/1","title":"invitation_accepted(invitation)"},{"anchor":"invitation_rejected/1","deprecated":false,"id":"invitation_rejected/1","title":"invitation_rejected(invitation)"},{"anchor":"mailer_email_from/0","deprecated":false,"id":"mailer_email_from/0","title":"mailer_email_from()"},{"anchor":"new_user_invitation/1","deprecated":false,"id":"new_user_invitation/1","title":"new_user_invitation(invitation)"},{"anchor":"over_limit_email/4","deprecated":false,"id":"over_limit_email/4","title":"over_limit_email(user, usage, last_cycle, suggested_plan)"},{"anchor":"ownership_transfer_accepted/1","deprecated":false,"id":"ownership_transfer_accepted/1","title":"ownership_transfer_accepted(invitation)"},{"anchor":"ownership_transfer_rejected/1","deprecated":false,"id":"ownership_transfer_rejected/1","title":"ownership_transfer_rejected(invitation)"},{"anchor":"ownership_transfer_request/2","deprecated":false,"id":"ownership_transfer_request/2","title":"ownership_transfer_request(invitation, new_owner_account)"},{"anchor":"password_reset_email/2","deprecated":false,"id":"password_reset_email/2","title":"password_reset_email(email, reset_link)"},{"anchor":"priority_email/0","deprecated":false,"id":"priority_email/0","title":"priority_email()"},{"anchor":"priority_email/1","deprecated":false,"id":"priority_email/1","title":"priority_email(map)"},{"anchor":"render/3","deprecated":false,"id":"render/3","title":"render(email, template, assigns \\\\ [])"},{"anchor":"site_member_removed/1","deprecated":false,"id":"site_member_removed/1","title":"site_member_removed(membership)"},{"anchor":"site_setup_help/2","deprecated":false,"id":"site_setup_help/2","title":"site_setup_help(user, site)"},{"anchor":"site_setup_success/2","deprecated":false,"id":"site_setup_success/2","title":"site_setup_success(user, site)"},{"anchor":"spike_notification/5","deprecated":false,"id":"spike_notification/5","title":"spike_notification(email, site, current_visitors, sources, dashboard_link)"},{"anchor":"trial_one_week_reminder/1","deprecated":false,"id":"trial_one_week_reminder/1","title":"trial_one_week_reminder(user)"},{"anchor":"trial_over_email/1","deprecated":false,"id":"trial_over_email/1","title":"trial_over_email(user)"},{"anchor":"trial_upgrade_email/3","deprecated":false,"id":"trial_upgrade_email/3","title":"trial_upgrade_email(user, day, arg)"},{"anchor":"weekly_report/3","deprecated":false,"id":"weekly_report/3","title":"weekly_report(email, site, assigns)"},{"anchor":"welcome_email/1","deprecated":false,"id":"welcome_email/1","title":"welcome_email(user)"},{"anchor":"yearly_expiration_notification/1","deprecated":false,"id":"yearly_expiration_notification/1","title":"yearly_expiration_notification(user)"},{"anchor":"yearly_renewal_notification/1","deprecated":false,"id":"yearly_renewal_notification/1","title":"yearly_renewal_notification(user)"}]}],"sections":[],"title":"PlausibleWeb.Email"},{"deprecated":false,"group":"","id":"PlausibleWeb.EmailView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"activation_email.html/1","deprecated":false,"id":"activation_email.html/1","title":"activation_email.html(assigns)"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"cancellation_email.html/1","deprecated":false,"id":"cancellation_email.html/1","title":"cancellation_email.html(assigns)"},{"anchor":"check_stats_email.html/1","deprecated":false,"id":"check_stats_email.html/1","title":"check_stats_email.html(assigns)"},{"anchor":"create_site_email.html/1","deprecated":false,"id":"create_site_email.html/1","title":"create_site_email.html(assigns)"},{"anchor":"dashboard_locked.html/1","deprecated":false,"id":"dashboard_locked.html/1","title":"dashboard_locked.html(assigns)"},{"anchor":"date_format/1","deprecated":false,"id":"date_format/1","title":"date_format(date)"},{"anchor":"enterprise_over_limit_internal.html/1","deprecated":false,"id":"enterprise_over_limit_internal.html/1","title":"enterprise_over_limit_internal.html(assigns)"},{"anchor":"error_report_email.html/1","deprecated":false,"id":"error_report_email.html/1","title":"error_report_email.html(assigns)"},{"anchor":"existing_user_invitation.html/1","deprecated":false,"id":"existing_user_invitation.html/1","title":"existing_user_invitation.html(assigns)"},{"anchor":"google_analytics_import.html/1","deprecated":false,"id":"google_analytics_import.html/1","title":"google_analytics_import.html(assigns)"},{"anchor":"greet_recipient/1","deprecated":false,"id":"greet_recipient/1","title":"greet_recipient(_)"},{"anchor":"invitation_accepted.html/1","deprecated":false,"id":"invitation_accepted.html/1","title":"invitation_accepted.html(assigns)"},{"anchor":"invitation_rejected.html/1","deprecated":false,"id":"invitation_rejected.html/1","title":"invitation_rejected.html(assigns)"},{"anchor":"new_user_invitation.html/1","deprecated":false,"id":"new_user_invitation.html/1","title":"new_user_invitation.html(assigns)"},{"anchor":"over_limit.html/1","deprecated":false,"id":"over_limit.html/1","title":"over_limit.html(assigns)"},{"anchor":"ownership_transfer_accepted.html/1","deprecated":false,"id":"ownership_transfer_accepted.html/1","title":"ownership_transfer_accepted.html(assigns)"},{"anchor":"ownership_transfer_rejected.html/1","deprecated":false,"id":"ownership_transfer_rejected.html/1","title":"ownership_transfer_rejected.html(assigns)"},{"anchor":"ownership_transfer_request.html/1","deprecated":false,"id":"ownership_transfer_request.html/1","title":"ownership_transfer_request.html(assigns)"},{"anchor":"password_reset_email.html/1","deprecated":false,"id":"password_reset_email.html/1","title":"password_reset_email.html(assigns)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"sentry_link/2","deprecated":false,"id":"sentry_link/2","title":"sentry_link(trace_id, dsn \\\\ Sentry.Config.dsn())"},{"anchor":"site_member_removed.html/1","deprecated":false,"id":"site_member_removed.html/1","title":"site_member_removed.html(assigns)"},{"anchor":"site_setup_help_email.html/1","deprecated":false,"id":"site_setup_help_email.html/1","title":"site_setup_help_email.html(assigns)"},{"anchor":"site_setup_success_email.html/1","deprecated":false,"id":"site_setup_success_email.html/1","title":"site_setup_success_email.html(assigns)"},{"anchor":"spike_notification.html/1","deprecated":false,"id":"spike_notification.html/1","title":"spike_notification.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"trial_one_week_reminder.html/1","deprecated":false,"id":"trial_one_week_reminder.html/1","title":"trial_one_week_reminder.html(assigns)"},{"anchor":"trial_over_email.html/1","deprecated":false,"id":"trial_over_email.html/1","title":"trial_over_email.html(assigns)"},{"anchor":"trial_upgrade_email.html/1","deprecated":false,"id":"trial_upgrade_email.html/1","title":"trial_upgrade_email.html(assigns)"},{"anchor":"welcome_email.html/1","deprecated":false,"id":"welcome_email.html/1","title":"welcome_email.html(assigns)"},{"anchor":"yearly_expiration_notification.html/1","deprecated":false,"id":"yearly_expiration_notification.html/1","title":"yearly_expiration_notification.html(assigns)"},{"anchor":"yearly_renewal_notification.html/1","deprecated":false,"id":"yearly_renewal_notification.html/1","title":"yearly_renewal_notification.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.EmailView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Endpoint","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"broadcast/3","deprecated":false,"id":"broadcast/3","title":"broadcast(topic, event, msg)"},{"anchor":"broadcast!/3","deprecated":false,"id":"broadcast!/3","title":"broadcast!(topic, event, msg)"},{"anchor":"broadcast_from/4","deprecated":false,"id":"broadcast_from/4","title":"broadcast_from(from, topic, event, msg)"},{"anchor":"broadcast_from!/4","deprecated":false,"id":"broadcast_from!/4","title":"broadcast_from!(from, topic, event, msg)"},{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(opts)"},{"anchor":"config/2","deprecated":false,"id":"config/2","title":"config(key, default \\\\ nil)"},{"anchor":"config_change/2","deprecated":false,"id":"config_change/2","title":"config_change(changed, removed)"},{"anchor":"host/0","deprecated":false,"id":"host/0","title":"host()"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"},{"anchor":"local_broadcast/3","deprecated":false,"id":"local_broadcast/3","title":"local_broadcast(topic, event, msg)"},{"anchor":"local_broadcast_from/4","deprecated":false,"id":"local_broadcast_from/4","title":"local_broadcast_from(from, topic, event, msg)"},{"anchor":"patch_session_opts/0","deprecated":false,"id":"patch_session_opts/0","title":"patch_session_opts()"},{"anchor":"path/1","deprecated":false,"id":"path/1","title":"path(path)"},{"anchor":"script_name/0","deprecated":false,"id":"script_name/0","title":"script_name()"},{"anchor":"secure_cookie?/0","deprecated":false,"id":"secure_cookie?/0","title":"secure_cookie?()"},{"anchor":"start_link/1","deprecated":false,"id":"start_link/1","title":"start_link(opts \\\\ [])"},{"anchor":"static_integrity/1","deprecated":false,"id":"static_integrity/1","title":"static_integrity(path)"},{"anchor":"static_lookup/1","deprecated":false,"id":"static_lookup/1","title":"static_lookup(path)"},{"anchor":"static_path/1","deprecated":false,"id":"static_path/1","title":"static_path(path)"},{"anchor":"static_url/0","deprecated":false,"id":"static_url/0","title":"static_url()"},{"anchor":"struct_url/0","deprecated":false,"id":"struct_url/0","title":"struct_url()"},{"anchor":"subscribe/2","deprecated":false,"id":"subscribe/2","title":"subscribe(topic, opts \\\\ [])"},{"anchor":"unsubscribe/1","deprecated":false,"id":"unsubscribe/1","title":"unsubscribe(topic)"},{"anchor":"url/0","deprecated":false,"id":"url/0","title":"url()"},{"anchor":"websocket_url/0","deprecated":false,"id":"websocket_url/0","title":"websocket_url()"}]}],"sections":[],"title":"PlausibleWeb.Endpoint"},{"deprecated":false,"group":"","id":"PlausibleWeb.ErrorHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"error_tag/2","deprecated":false,"id":"error_tag/2","title":"error_tag(assigns, field)"},{"anchor":"translate_error/1","deprecated":false,"id":"translate_error/1","title":"translate_error(arg)"}]}],"sections":[],"title":"PlausibleWeb.ErrorHelpers"},{"deprecated":false,"group":"","id":"PlausibleWeb.ErrorReportController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"submit_error_report/2","deprecated":false,"id":"submit_error_report/2","title":"submit_error_report(conn, arg2)"}]}],"sections":[],"title":"PlausibleWeb.ErrorReportController"},{"deprecated":false,"group":"","id":"PlausibleWeb.ErrorView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"404_error.html/1","deprecated":false,"id":"404_error.html/1","title":"404_error.html(assigns)"},{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"generic_error.html/1","deprecated":false,"id":"generic_error.html/1","title":"generic_error.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"server_error.html/1","deprecated":false,"id":"server_error.html/1","title":"server_error.html(assigns)"},{"anchor":"server_error_report_thanks.html/1","deprecated":false,"id":"server_error_report_thanks.html/1","title":"server_error_report_thanks.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.ErrorView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Favicon","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, list)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(_)"}]}],"sections":[],"title":"PlausibleWeb.Favicon"},{"deprecated":false,"group":"","id":"PlausibleWeb.FirstLaunchPlug","sections":[],"title":"PlausibleWeb.FirstLaunchPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.FormHelpers","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"styled_error/1","deprecated":false,"id":"styled_error/1","title":"styled_error(error)"},{"anchor":"styled_label/4","deprecated":false,"id":"styled_label/4","title":"styled_label(form, field, text, opts \\\\ [])"},{"anchor":"styled_select/4","deprecated":false,"id":"styled_select/4","title":"styled_select(form, field, options, opts \\\\ [])"},{"anchor":"styled_text_input/3","deprecated":false,"id":"styled_text_input/3","title":"styled_text_input(form, field, opts \\\\ [])"}]}],"sections":[],"title":"PlausibleWeb.FormHelpers"},{"deprecated":false,"group":"","id":"PlausibleWeb.InvitationController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"accept_invitation/2","deprecated":false,"id":"accept_invitation/2","title":"accept_invitation(conn, map)"},{"anchor":"reject_invitation/2","deprecated":false,"id":"reject_invitation/2","title":"reject_invitation(conn, map)"},{"anchor":"remove_invitation/2","deprecated":false,"id":"remove_invitation/2","title":"remove_invitation(conn, map)"}]}],"sections":[],"title":"PlausibleWeb.InvitationController"},{"deprecated":false,"group":"","id":"PlausibleWeb.LastSeenPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.LastSeenPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.LayoutView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"app.html/1","deprecated":false,"id":"app.html/1","title":"app.html(assigns)"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"base_email.html/1","deprecated":false,"id":"base_email.html/1","title":"base_email.html(assigns)"},{"anchor":"base_error.html/1","deprecated":false,"id":"base_error.html/1","title":"base_error.html(assigns)"},{"anchor":"dogfood_api_destination/0","deprecated":false,"id":"dogfood_api_destination/0","title":"dogfood_api_destination()"},{"anchor":"dogfood_domain/1","deprecated":false,"id":"dogfood_domain/1","title":"dogfood_domain(conn)"},{"anchor":"dogfood_script_url/0","deprecated":false,"id":"dogfood_script_url/0","title":"dogfood_script_url()"},{"anchor":"embedded.html/1","deprecated":false,"id":"embedded.html/1","title":"embedded.html(assigns)"},{"anchor":"focus.html/1","deprecated":false,"id":"focus.html/1","title":"focus.html(assigns)"},{"anchor":"grace_period_end/1","deprecated":false,"id":"grace_period_end/1","title":"grace_period_end(user)"},{"anchor":"home_dest/1","deprecated":false,"id":"home_dest/1","title":"home_dest(conn)"},{"anchor":"is_current_tab/2","deprecated":false,"id":"is_current_tab/2","title":"is_current_tab(conn, tab)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"priority_email.html/1","deprecated":false,"id":"priority_email.html/1","title":"priority_email.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"render_layout/3","deprecated":false,"id":"render_layout/3","title":"render_layout(layout, assigns, list)"},{"anchor":"settings_tabs/1","deprecated":false,"id":"settings_tabs/1","title":"settings_tabs(conn)"},{"anchor":"site_settings.html/1","deprecated":false,"id":"site_settings.html/1","title":"site_settings.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"trial_notificaton/1","deprecated":false,"id":"trial_notificaton/1","title":"trial_notificaton(user)"},{"anchor":"websocket_url/0","deprecated":false,"id":"websocket_url/0","title":"websocket_url()"}]}],"sections":[],"title":"PlausibleWeb.LayoutView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.ChoosePlan","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, map, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"},{"anchor":"render_price_info/1","deprecated":false,"id":"render_price_info/1","title":"render_price_info(assigns)"},{"anchor":"two_months_free/1","deprecated":false,"id":"two_months_free/1","title":"two_months_free(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.ChoosePlan"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.Components.ComboBox","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"dropdown/1","deprecated":false,"id":"dropdown/1","title":"dropdown(assigns)"},{"anchor":"dropdown_anchor/1","deprecated":false,"id":"dropdown_anchor/1","title":"dropdown_anchor(assigns)"},{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, params, socket)"},{"anchor":"option/1","deprecated":false,"id":"option/1","title":"option(assigns)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"},{"anchor":"select_option/4","deprecated":false,"id":"select_option/4","title":"select_option(js \\\\ %JS{}, id, submit_value, display_value)"},{"anchor":"update/2","deprecated":false,"id":"update/2","title":"update(assigns, socket)"}]}],"sections":[],"title":"PlausibleWeb.Live.Components.ComboBox"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.Components.ComboBox.StaticSearch","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"suggest/3","deprecated":false,"id":"suggest/3","title":"suggest(input, choices, opts \\\\ [])"}]}],"sections":[],"title":"PlausibleWeb.Live.Components.ComboBox.StaticSearch"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.Components.Form","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"error/1","deprecated":false,"id":"error/1","title":"error(assigns)"},{"anchor":"input/1","deprecated":false,"id":"input/1","title":"input(assigns)"},{"anchor":"label/1","deprecated":false,"id":"label/1","title":"label(assigns)"},{"anchor":"password_input_with_strength/1","deprecated":false,"id":"password_input_with_strength/1","title":"password_input_with_strength(assigns)"},{"anchor":"password_length_hint/1","deprecated":false,"id":"password_length_hint/1","title":"password_length_hint(assigns)"},{"anchor":"strength_meter/1","deprecated":false,"id":"strength_meter/1","title":"strength_meter(assigns)"},{"anchor":"translate_error/1","deprecated":false,"id":"translate_error/1","title":"translate_error(arg)"}]}],"sections":[],"title":"PlausibleWeb.Live.Components.Form"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.Flash","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"clear_flash_button/1","deprecated":false,"id":"clear_flash_button/1","title":"clear_flash_button(assigns)"},{"anchor":"flash/1","deprecated":false,"id":"flash/1","title":"flash(assigns)"},{"anchor":"icon_error/1","deprecated":false,"id":"icon_error/1","title":"icon_error(assigns)"},{"anchor":"icon_success/1","deprecated":false,"id":"icon_success/1","title":"icon_success(assigns)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.Flash"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.FunnelSettings","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg1, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.FunnelSettings"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.FunnelSettings.Form","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_step_button/1","deprecated":false,"id":"add_step_button/1","title":"add_step_button(assigns)"},{"anchor":"evaluation/1","deprecated":false,"id":"evaluation/1","title":"evaluation(assigns)"},{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg1, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"remove_step_button/1","deprecated":false,"id":"remove_step_button/1","title":"remove_step_button(assigns)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"},{"anchor":"submit_button/1","deprecated":false,"id":"submit_button/1","title":"submit_button(assigns)"},{"anchor":"submit_button_inactive/1","deprecated":false,"id":"submit_button_inactive/1","title":"submit_button_inactive(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.FunnelSettings.Form"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.FunnelSettings.List","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.FunnelSettings.List"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.GoalSettings","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg1, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.GoalSettings"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.GoalSettings.Form","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"custom_event_fields/1","deprecated":false,"id":"custom_event_fields/1","title":"custom_event_fields(assigns)"},{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"pageview_fields/1","deprecated":false,"id":"pageview_fields/1","title":"pageview_fields(assigns)"},{"anchor":"pageviews_tab/1","deprecated":false,"id":"pageviews_tab/1","title":"pageviews_tab(assigns)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"},{"anchor":"suggest_page_paths/3","deprecated":false,"id":"suggest_page_paths/3","title":"suggest_page_paths(input, options, site)"},{"anchor":"tabs/1","deprecated":false,"id":"tabs/1","title":"tabs(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.GoalSettings.Form"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.GoalSettings.List","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.GoalSettings.List"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.PropsSettings","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg1, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.PropsSettings"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.PropsSettings.Form","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, arg2, socket)"},{"anchor":"handle_info/2","deprecated":false,"id":"handle_info/2","title":"handle_info(arg, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.PropsSettings.Form"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.PropsSettings.List","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.PropsSettings.List"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.RegisterForm","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, params, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, session, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.RegisterForm"},{"deprecated":false,"group":"","id":"PlausibleWeb.Live.ResetPasswordForm","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"handle_event/3","deprecated":false,"id":"handle_event/3","title":"handle_event(binary, map, socket)"},{"anchor":"mount/3","deprecated":false,"id":"mount/3","title":"mount(params, map, socket)"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.ResetPasswordForm"},{"deprecated":false,"group":"","id":"PlausibleWeb.LiveSocket","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"connect/3","deprecated":false,"id":"connect/3","title":"connect(params, socket, info)"},{"anchor":"id/1","deprecated":false,"id":"id/1","title":"id(socket)"}]}],"sections":[],"title":"PlausibleWeb.LiveSocket"},{"deprecated":false,"group":"","id":"PlausibleWeb.MJML.WeeklyReport","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"debug_mjml_template/0","deprecated":false,"id":"debug_mjml_template/0","title":"debug_mjml_template()"},{"anchor":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.MJML.WeeklyReport"},{"deprecated":false,"group":"","id":"PlausibleWeb.PageController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"index/2","deprecated":false,"id":"index/2","title":"index(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.PageController"},{"deprecated":false,"group":"","id":"PlausibleWeb.PageView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"index.html/1","deprecated":false,"id":"index.html/1","title":"index.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.PageView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"base_uri/0","deprecated":false,"id":"base_uri/0","title":"base_uri()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Controllers.Goals","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(conn, params)"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(conn, params)"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(conn, params)"},{"anchor":"index/2","deprecated":false,"id":"index/2","title":"index(conn, params)"},{"anchor":"open_api_operation/1","deprecated":false,"id":"open_api_operation/1","title":"open_api_operation(action)"},{"anchor":"shared_security/0","deprecated":false,"id":"shared_security/0","title":"shared_security()"},{"anchor":"shared_tags/0","deprecated":false,"id":"shared_tags/0","title":"shared_tags()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Controllers.Goals"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Controllers.SharedLinks","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"create/2","deprecated":false,"id":"create/2","title":"create(conn, params)"},{"anchor":"get/2","deprecated":false,"id":"get/2","title":"get(conn, params)"},{"anchor":"index/2","deprecated":false,"id":"index/2","title":"index(conn, params)"},{"anchor":"open_api_operation/1","deprecated":false,"id":"open_api_operation/1","title":"open_api_operation(action)"},{"anchor":"shared_security/0","deprecated":false,"id":"shared_security/0","title":"shared_security()"},{"anchor":"shared_tags/0","deprecated":false,"id":"shared_tags/0","title":"shared_tags()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Controllers.SharedLinks"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Errors","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"error/3","deprecated":false,"id":"error/3","title":"error(conn, status, message)"},{"anchor":"unauthorized/1","deprecated":false,"id":"unauthorized/1","title":"unauthorized(conn)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Errors"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Router","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"api/2","deprecated":false,"id":"api/2","title":"api(conn, _)"},{"anchor":"auth/2","deprecated":false,"id":"auth/2","title":"auth(conn, _)"},{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Router"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Error","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Error"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.CustomEvent"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Pageview"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CreateRequest.Revenue"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.CustomEvent"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.ListResponse"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.Pageview","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.Pageview"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.Revenue","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.Revenue"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Goal.Type","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Goal.Type"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Link","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Link"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.NotFound","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.NotFound"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.PaginationMetadata","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.PaginationMetadata"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.SharedLink","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.SharedLink"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.SharedLink.CreateRequest"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.SharedLink.ListResponse"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.Unauthorized","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.Unauthorized"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity","nodeGroups":[{"key":"types","name":"Types","nodes":[{"anchor":"t:t/0","deprecated":false,"id":"t/0","title":"t()"}]},{"key":"functions","name":"Functions","nodes":[{"anchor":"schema/0","deprecated":false,"id":"schema/0","title":"schema()"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Schemas.UnprocessableEntity"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Spec","sections":[],"title":"PlausibleWeb.Plugins.API.Spec"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Views.Error","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Views.Error"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Views.Goal","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Views.Goal"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Views.Pagination","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"render_metadata_links/4","deprecated":false,"id":"render_metadata_links/4","title":"render_metadata_links(meta, helper_fn, helper_fn_args, existing_params \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Views.Pagination"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugins.API.Views.SharedLink","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.Plugins.API.Views.SharedLink"},{"deprecated":false,"group":"","id":"PlausibleWeb.PluginsAPICase","sections":[],"title":"PlausibleWeb.PluginsAPICase"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugs.AuthorizePluginsAPI","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts \\\\ [])"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.Plugs.AuthorizePluginsAPI"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugs.MaybeDisableRegistration","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.Plugs.MaybeDisableRegistration"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugs.NoRobots","sections":[],"title":"PlausibleWeb.Plugs.NoRobots"},{"deprecated":false,"group":"","id":"PlausibleWeb.Plugs.RuntimeSessionAdapter","sections":[],"title":"PlausibleWeb.Plugs.RuntimeSessionAdapter"},{"deprecated":false,"group":"","id":"PlausibleWeb.RefInspector","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"parse/1","deprecated":false,"id":"parse/1","title":"parse(ref)"},{"anchor":"right_uri?/1","deprecated":false,"id":"right_uri?/1","title":"right_uri?(arg1)"}]}],"sections":[],"title":"PlausibleWeb.RefInspector"},{"deprecated":false,"group":"","id":"PlausibleWeb.RemoteIp","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"get/1","deprecated":false,"id":"get/1","title":"get(conn)"}]}],"sections":[],"title":"PlausibleWeb.RemoteIp"},{"deprecated":false,"group":"","id":"PlausibleWeb.RequireAccountPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.RequireAccountPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.RequireLoggedOutPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(options)"}]}],"sections":[],"title":"PlausibleWeb.RequireLoggedOutPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.Router","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"api/2","deprecated":false,"id":"api/2","title":"api(conn, _)"},{"anchor":"browser/2","deprecated":false,"id":"browser/2","title":"browser(conn, _)"},{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"csrf/2","deprecated":false,"id":"csrf/2","title":"csrf(conn, _)"},{"anchor":"flags/2","deprecated":false,"id":"flags/2","title":"flags(conn, _)"},{"anchor":"focus_layout/2","deprecated":false,"id":"focus_layout/2","title":"focus_layout(conn, _)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"},{"anchor":"internal_stats_api/2","deprecated":false,"id":"internal_stats_api/2","title":"internal_stats_api(conn, _)"},{"anchor":"kaffy_browser/2","deprecated":false,"id":"kaffy_browser/2","title":"kaffy_browser(conn, _)"},{"anchor":"public_api/2","deprecated":false,"id":"public_api/2","title":"public_api(conn, _)"},{"anchor":"shared_link/2","deprecated":false,"id":"shared_link/2","title":"shared_link(conn, _)"}]}],"sections":[],"title":"PlausibleWeb.Router"},{"deprecated":false,"group":"","id":"PlausibleWeb.SessionTimeoutPlug","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, opts)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts \\\\ [])"}]}],"sections":[],"title":"PlausibleWeb.SessionTimeoutPlug"},{"deprecated":false,"group":"","id":"PlausibleWeb.Site.MembershipController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"invite_member/2","deprecated":false,"id":"invite_member/2","title":"invite_member(conn, map)"},{"anchor":"invite_member_form/2","deprecated":false,"id":"invite_member_form/2","title":"invite_member_form(conn, params)"},{"anchor":"remove_member/2","deprecated":false,"id":"remove_member/2","title":"remove_member(conn, map)"},{"anchor":"transfer_ownership/2","deprecated":false,"id":"transfer_ownership/2","title":"transfer_ownership(conn, map)"},{"anchor":"transfer_ownership_form/2","deprecated":false,"id":"transfer_ownership_form/2","title":"transfer_ownership_form(conn, params)"},{"anchor":"update_role/2","deprecated":false,"id":"update_role/2","title":"update_role(conn, map)"}]}],"sections":[],"title":"PlausibleWeb.Site.MembershipController"},{"deprecated":false,"group":"","id":"PlausibleWeb.Site.MembershipView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"invite_member_form.html/1","deprecated":false,"id":"invite_member_form.html/1","title":"invite_member_form.html(assigns)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"transfer_ownership_form.html/1","deprecated":false,"id":"transfer_ownership_form.html/1","title":"transfer_ownership_form.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Site.MembershipView"},{"deprecated":false,"group":"","id":"PlausibleWeb.SiteController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"add_monthly_report_recipient/2","deprecated":false,"id":"add_monthly_report_recipient/2","title":"add_monthly_report_recipient(conn, map)"},{"anchor":"add_snippet/2","deprecated":false,"id":"add_snippet/2","title":"add_snippet(conn, params)"},{"anchor":"add_snippet_after_domain_change/2","deprecated":false,"id":"add_snippet_after_domain_change/2","title":"add_snippet_after_domain_change(conn, params)"},{"anchor":"add_spike_notification_recipient/2","deprecated":false,"id":"add_spike_notification_recipient/2","title":"add_spike_notification_recipient(conn, map)"},{"anchor":"add_weekly_report_recipient/2","deprecated":false,"id":"add_weekly_report_recipient/2","title":"add_weekly_report_recipient(conn, map)"},{"anchor":"change_domain/2","deprecated":false,"id":"change_domain/2","title":"change_domain(conn, params)"},{"anchor":"change_domain_submit/2","deprecated":false,"id":"change_domain_submit/2","title":"change_domain_submit(conn, map)"},{"anchor":"create_shared_link/2","deprecated":false,"id":"create_shared_link/2","title":"create_shared_link(conn, map)"},{"anchor":"create_site/2","deprecated":false,"id":"create_site/2","title":"create_site(conn, map)"},{"anchor":"delete_custom_domain/2","deprecated":false,"id":"delete_custom_domain/2","title":"delete_custom_domain(conn, map)"},{"anchor":"delete_google_auth/2","deprecated":false,"id":"delete_google_auth/2","title":"delete_google_auth(conn, params)"},{"anchor":"delete_shared_link/2","deprecated":false,"id":"delete_shared_link/2","title":"delete_shared_link(conn, map)"},{"anchor":"delete_site/2","deprecated":false,"id":"delete_site/2","title":"delete_site(conn, params)"},{"anchor":"disable_monthly_report/2","deprecated":false,"id":"disable_monthly_report/2","title":"disable_monthly_report(conn, params)"},{"anchor":"disable_spike_notification/2","deprecated":false,"id":"disable_spike_notification/2","title":"disable_spike_notification(conn, params)"},{"anchor":"disable_weekly_report/2","deprecated":false,"id":"disable_weekly_report/2","title":"disable_weekly_report(conn, params)"},{"anchor":"edit_shared_link/2","deprecated":false,"id":"edit_shared_link/2","title":"edit_shared_link(conn, map)"},{"anchor":"enable_monthly_report/2","deprecated":false,"id":"enable_monthly_report/2","title":"enable_monthly_report(conn, params)"},{"anchor":"enable_spike_notification/2","deprecated":false,"id":"enable_spike_notification/2","title":"enable_spike_notification(conn, params)"},{"anchor":"enable_weekly_report/2","deprecated":false,"id":"enable_weekly_report/2","title":"enable_weekly_report(conn, params)"},{"anchor":"forget_imported/2","deprecated":false,"id":"forget_imported/2","title":"forget_imported(conn, params)"},{"anchor":"import_from_google/2","deprecated":false,"id":"import_from_google/2","title":"import_from_google(conn, map)"},{"anchor":"import_from_google_confirm/2","deprecated":false,"id":"import_from_google_confirm/2","title":"import_from_google_confirm(conn, map)"},{"anchor":"import_from_google_user_metric_notice/2","deprecated":false,"id":"import_from_google_user_metric_notice/2","title":"import_from_google_user_metric_notice(conn, map)"},{"anchor":"import_from_google_view_id/2","deprecated":false,"id":"import_from_google_view_id/2","title":"import_from_google_view_id(conn, map)"},{"anchor":"import_from_google_view_id_form/2","deprecated":false,"id":"import_from_google_view_id_form/2","title":"import_from_google_view_id_form(conn, map)"},{"anchor":"index/2","deprecated":false,"id":"index/2","title":"index(conn, params)"},{"anchor":"make_private/2","deprecated":false,"id":"make_private/2","title":"make_private(conn, params)"},{"anchor":"make_public/2","deprecated":false,"id":"make_public/2","title":"make_public(conn, params)"},{"anchor":"new/2","deprecated":false,"id":"new/2","title":"new(conn, params)"},{"anchor":"new_shared_link/2","deprecated":false,"id":"new_shared_link/2","title":"new_shared_link(conn, params)"},{"anchor":"remove_monthly_report_recipient/2","deprecated":false,"id":"remove_monthly_report_recipient/2","title":"remove_monthly_report_recipient(conn, map)"},{"anchor":"remove_spike_notification_recipient/2","deprecated":false,"id":"remove_spike_notification_recipient/2","title":"remove_spike_notification_recipient(conn, map)"},{"anchor":"remove_weekly_report_recipient/2","deprecated":false,"id":"remove_weekly_report_recipient/2","title":"remove_weekly_report_recipient(conn, map)"},{"anchor":"reset_stats/2","deprecated":false,"id":"reset_stats/2","title":"reset_stats(conn, params)"},{"anchor":"settings/2","deprecated":false,"id":"settings/2","title":"settings(conn, map)"},{"anchor":"settings_custom_domain/2","deprecated":false,"id":"settings_custom_domain/2","title":"settings_custom_domain(conn, params)"},{"anchor":"settings_danger_zone/2","deprecated":false,"id":"settings_danger_zone/2","title":"settings_danger_zone(conn, params)"},{"anchor":"settings_email_reports/2","deprecated":false,"id":"settings_email_reports/2","title":"settings_email_reports(conn, params)"},{"anchor":"settings_funnels/2","deprecated":false,"id":"settings_funnels/2","title":"settings_funnels(conn, params)"},{"anchor":"settings_general/2","deprecated":false,"id":"settings_general/2","title":"settings_general(conn, params)"},{"anchor":"settings_goals/2","deprecated":false,"id":"settings_goals/2","title":"settings_goals(conn, params)"},{"anchor":"settings_people/2","deprecated":false,"id":"settings_people/2","title":"settings_people(conn, params)"},{"anchor":"settings_props/2","deprecated":false,"id":"settings_props/2","title":"settings_props(conn, params)"},{"anchor":"settings_search_console/2","deprecated":false,"id":"settings_search_console/2","title":"settings_search_console(conn, params)"},{"anchor":"settings_visibility/2","deprecated":false,"id":"settings_visibility/2","title":"settings_visibility(conn, params)"},{"anchor":"update_feature_visibility/2","deprecated":false,"id":"update_feature_visibility/2","title":"update_feature_visibility(conn, map)"},{"anchor":"update_google_auth/2","deprecated":false,"id":"update_google_auth/2","title":"update_google_auth(conn, map)"},{"anchor":"update_settings/2","deprecated":false,"id":"update_settings/2","title":"update_settings(conn, map)"},{"anchor":"update_shared_link/2","deprecated":false,"id":"update_shared_link/2","title":"update_shared_link(conn, map)"},{"anchor":"update_spike_notification/2","deprecated":false,"id":"update_spike_notification/2","title":"update_spike_notification(conn, map)"}]}],"sections":[],"title":"PlausibleWeb.SiteController"},{"deprecated":false,"group":"","id":"PlausibleWeb.SiteView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"change_domain.html/1","deprecated":false,"id":"change_domain.html/1","title":"change_domain.html(assigns)"},{"anchor":"edit_shared_link.html/1","deprecated":false,"id":"edit_shared_link.html/1","title":"edit_shared_link.html(assigns)"},{"anchor":"goal_name/1","deprecated":false,"id":"goal_name/1","title":"goal_name(arg)"},{"anchor":"google_logo/1","deprecated":false,"id":"google_logo/1","title":"google_logo(assigns \\\\ %{})"},{"anchor":"gravatar/2","deprecated":false,"id":"gravatar/2","title":"gravatar(email, opts)"},{"anchor":"import_from_google_confirm.html/1","deprecated":false,"id":"import_from_google_confirm.html/1","title":"import_from_google_confirm.html(assigns)"},{"anchor":"import_from_google_user_metric_form.html/1","deprecated":false,"id":"import_from_google_user_metric_form.html/1","title":"import_from_google_user_metric_form.html(assigns)"},{"anchor":"import_from_google_view_id_form.html/1","deprecated":false,"id":"import_from_google_view_id_form.html/1","title":"import_from_google_view_id_form.html(assigns)"},{"anchor":"index.html/1","deprecated":false,"id":"index.html/1","title":"index.html(assigns)"},{"anchor":"new.html/1","deprecated":false,"id":"new.html/1","title":"new.html(assigns)"},{"anchor":"new_shared_link.html/1","deprecated":false,"id":"new_shared_link.html/1","title":"new_shared_link.html(assigns)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"render_snippet/1","deprecated":false,"id":"render_snippet/1","title":"render_snippet(site)"},{"anchor":"settings_custom_domain.html/1","deprecated":false,"id":"settings_custom_domain.html/1","title":"settings_custom_domain.html(assigns)"},{"anchor":"settings_danger_zone.html/1","deprecated":false,"id":"settings_danger_zone.html/1","title":"settings_danger_zone.html(assigns)"},{"anchor":"settings_email_reports.html/1","deprecated":false,"id":"settings_email_reports.html/1","title":"settings_email_reports.html(assigns)"},{"anchor":"settings_funnels.html/1","deprecated":false,"id":"settings_funnels.html/1","title":"settings_funnels.html(assigns)"},{"anchor":"settings_general.html/1","deprecated":false,"id":"settings_general.html/1","title":"settings_general.html(assigns)"},{"anchor":"settings_goals.html/1","deprecated":false,"id":"settings_goals.html/1","title":"settings_goals.html(assigns)"},{"anchor":"settings_people.html/1","deprecated":false,"id":"settings_people.html/1","title":"settings_people.html(assigns)"},{"anchor":"settings_props.html/1","deprecated":false,"id":"settings_props.html/1","title":"settings_props.html(assigns)"},{"anchor":"settings_search_console.html/1","deprecated":false,"id":"settings_search_console.html/1","title":"settings_search_console.html(assigns)"},{"anchor":"settings_visibility.html/1","deprecated":false,"id":"settings_visibility.html/1","title":"settings_visibility.html(assigns)"},{"anchor":"shared_link_dest/2","deprecated":false,"id":"shared_link_dest/2","title":"shared_link_dest(site, link)"},{"anchor":"snippet.html/1","deprecated":false,"id":"snippet.html/1","title":"snippet.html(assigns)"},{"anchor":"snippet_after_domain_change.html/1","deprecated":false,"id":"snippet_after_domain_change.html/1","title":"snippet_after_domain_change.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"with_indefinite_article/1","deprecated":false,"id":"with_indefinite_article/1","title":"with_indefinite_article(word)"}]}],"sections":[],"title":"PlausibleWeb.SiteView"},{"deprecated":false,"group":"","id":"PlausibleWeb.StatsController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"authenticate_shared_link/2","deprecated":false,"id":"authenticate_shared_link/2","title":"authenticate_shared_link(conn, map)"},{"anchor":"csv_export/2","deprecated":false,"id":"csv_export/2","title":"csv_export(conn, params)"},{"anchor":"shared_link/2","deprecated":false,"id":"shared_link/2","title":"shared_link(conn, arg2)"},{"anchor":"stats/2","deprecated":false,"id":"stats/2","title":"stats(conn, params)"}]}],"sections":[],"title":"PlausibleWeb.StatsController"},{"deprecated":false,"group":"","id":"PlausibleWeb.StatsView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"base_domain/0","deprecated":false,"id":"base_domain/0","title":"base_domain()"},{"anchor":"large_number_format/1","deprecated":false,"id":"large_number_format/1","title":"large_number_format(n)"},{"anchor":"plausible_url/0","deprecated":false,"id":"plausible_url/0","title":"plausible_url()"},{"anchor":"pretty_stats_url/1","deprecated":false,"id":"pretty_stats_url/1","title":"pretty_stats_url(arg)"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"shared_link_password.html/1","deprecated":false,"id":"shared_link_password.html/1","title":"shared_link_password.html(assigns)"},{"anchor":"site_locked.html/1","deprecated":false,"id":"site_locked.html/1","title":"site_locked.html(assigns)"},{"anchor":"stats.html/1","deprecated":false,"id":"stats.html/1","title":"stats.html(assigns)"},{"anchor":"stats_container_class/1","deprecated":false,"id":"stats_container_class/1","title":"stats_container_class(conn)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"},{"anchor":"waiting_first_pageview.html/1","deprecated":false,"id":"waiting_first_pageview.html/1","title":"waiting_first_pageview.html(assigns)"}]}],"sections":[],"title":"PlausibleWeb.StatsView"},{"deprecated":false,"group":"","id":"PlausibleWeb.Tracker","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"call/2","deprecated":false,"id":"call/2","title":"call(conn, list)"},{"anchor":"child_spec/1","deprecated":false,"id":"child_spec/1","title":"child_spec(arg)"},{"anchor":"init/1","deprecated":false,"id":"init/1","title":"init(opts)"}]}],"sections":[],"title":"PlausibleWeb.Tracker"},{"deprecated":false,"group":"","id":"PlausibleWeb.UnsubscribeController","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"monthly_report/2","deprecated":false,"id":"monthly_report/2","title":"monthly_report(conn, map)"},{"anchor":"weekly_report/2","deprecated":false,"id":"weekly_report/2","title":"weekly_report(conn, map)"}]}],"sections":[],"title":"PlausibleWeb.UnsubscribeController"},{"deprecated":false,"group":"","id":"PlausibleWeb.UnsubscribeView","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"__resource__/0","deprecated":false,"id":"__resource__/0","title":"__resource__()"},{"anchor":"render/2","deprecated":false,"id":"render/2","title":"render(template, assigns \\\\ %{})"},{"anchor":"success.html/1","deprecated":false,"id":"success.html/1","title":"success.html(assigns)"},{"anchor":"template_not_found/2","deprecated":false,"id":"template_not_found/2","title":"template_not_found(template, assigns)"}]}],"sections":[],"title":"PlausibleWeb.UnsubscribeView"}],"tasks":[{"deprecated":false,"group":"","id":"Mix.Tasks.CancelSubscription","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(list)"}]}],"sections":[],"title":"mix cancel_subscription"},{"deprecated":false,"group":"","id":"Mix.Tasks.CleanClickhouse","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(_)"}]}],"sections":[],"title":"mix clean_clickhouse"},{"deprecated":false,"group":"","id":"Mix.Tasks.CreateFreeSubscription","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"execute/1","deprecated":false,"id":"execute/1","title":"execute(user_id)"},{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(arg1)"}]}],"sections":[],"title":"mix create_free_subscription"},{"deprecated":false,"group":"","id":"Mix.Tasks.DownloadCountryDatabase","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(_)"}]}],"sections":[],"title":"mix download_country_database"},{"deprecated":false,"group":"","id":"Mix.Tasks.GenerateReferrerFavicons","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(_)"}]}],"sections":[],"title":"mix generate_referrer_favicons"},{"deprecated":false,"group":"","id":"Mix.Tasks.PullSandboxSubscription","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(list)"}]}],"sections":[],"title":"mix pull_sandbox_subscription"},{"deprecated":false,"group":"","id":"Mix.Tasks.SendPageview","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"run/1","deprecated":false,"id":"run/1","title":"run(opts)"}]}],"sections":[],"title":"mix send_pageview"}]} \ No newline at end of file diff --git a/readme.html b/readme.html index 4cc4ad18f..6ae56f826 100644 --- a/readme.html +++ b/readme.html @@ -13,7 +13,7 @@ - + diff --git a/search.html b/search.html index 392219fcc..91c5aa1a4 100644 --- a/search.html +++ b/search.html @@ -13,7 +13,7 @@ - + @@ -107,7 +107,7 @@ Plausible
- +