From 410f3e57329a381790937ea9c0c414d91034a85d Mon Sep 17 00:00:00 2001 From: vinibrsl Date: Thu, 24 Aug 2023 17:24:31 +0000 Subject: [PATCH] deploy: dbc3b91a4b4998b19213faf8fa539b2cbaaf5dd7 --- .build | 5 +- 404.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.PaddleApi.html | 2 +- Plausible.Billing.Plans.html | 62 +-- Plausible.Billing.Quota.html | 374 ++++++++++++++++++ Plausible.Billing.SiteLocker.html | 2 +- Plausible.Billing.html | 47 +-- 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 +- Plausible.DataMigration.html | 2 +- Plausible.DebugReplayInfo.html | 2 +- Plausible.Ecto.EventName.html | 2 +- Plausible.Event.WriteBuffer.html | 2 +- Plausible.Factory.html | 2 +- Plausible.Funnel.Step.html | 2 +- Plausible.Funnel.html | 2 +- Plausible.Funnels.html | 2 +- Plausible.Geo.html | 66 ++-- Plausible.Goal.html | 2 +- Plausible.Goals.html | 2 +- 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 | 2 +- Plausible.Ingestion.Request.html | 2 +- Plausible.Mailer.html | 2 +- Plausible.OpenTelemetry.Sampler.html | 2 +- Plausible.PaddleApi.Mock.html | 2 +- ...sible.PromEx.Plugins.PlausibleMetrics.html | 2 +- Plausible.PromEx.html | 2 +- Plausible.Props.html | 2 +- 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 +- 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 | 2 +- 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 | 4 +- ...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 448892 -> 450217 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 | 2 +- PlausibleWeb.Api.PaddleController.html | 2 +- PlausibleWeb.Api.StatsController.html | 18 +- PlausibleWeb.AuthController.html | 14 +- 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 | 2 +- PlausibleWeb.Components.Site.Feature.html | 2 +- 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 +- ...Live.Components.ComboBox.StaticSearch.html | 2 +- PlausibleWeb.Live.Components.ComboBox.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.PropsSettings.html | 2 +- PlausibleWeb.LiveSocket.html | 2 +- PlausibleWeb.MJML.WeeklyReport.html | 2 +- PlausibleWeb.PageController.html | 2 +- PlausibleWeb.PageView.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 | 106 ++--- PlausibleWeb.SiteView.html | 2 +- PlausibleWeb.StatsController.html | 2 +- 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 | 11 +- contributing.html | 2 +- dist/search_data-A220C12C.js | 1 + dist/search_data-A45B4826.js | 1 - dist/sidebar_items-40F1100A.js | 1 - dist/sidebar_items-CD185F1C.js | 1 + readme.html | 2 +- search.html | 4 +- 223 files changed, 1255 insertions(+), 940 deletions(-) create mode 100644 Plausible.Billing.Quota.html create mode 100644 dist/search_data-A220C12C.js delete mode 100644 dist/search_data-A45B4826.js delete mode 100644 dist/sidebar_items-40F1100A.js create mode 100644 dist/sidebar_items-CD185F1C.js diff --git a/.build b/.build index 59655fab3..cbfefa242 100644 --- a/.build +++ b/.build @@ -20,6 +20,7 @@ Plausible.Billing.EnterprisePlan.html Plausible.Billing.EnterprisePlanAdmin.html Plausible.Billing.PaddleApi.html Plausible.Billing.Plans.html +Plausible.Billing.Quota.html Plausible.Billing.SiteLocker.html Plausible.Billing.html Plausible.ChangesetHelpers.html @@ -240,8 +241,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-A45B4826.js -dist/sidebar_items-40F1100A.js +dist/search_data-A220C12C.js +dist/sidebar_items-CD185F1C.js index.html readme.html search.html diff --git a/404.html b/404.html index cba65d46d..e03927700 100644 --- a/404.html +++ b/404.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.CleanClickhouse.html b/Mix.Tasks.CleanClickhouse.html index 02e3adf46..9476fac81 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 b6010ecb2..af28551fd 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 067aed270..46f9a2b97 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 a27434497..ab1f8d4c2 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 b2421b067..93aa162fe 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 95b84a148..01a7495bf 100644 --- a/Mix.Tasks.SendPageview.html +++ b/Mix.Tasks.SendPageview.html @@ -13,7 +13,7 @@ - + diff --git a/ObanErrorReporter.html b/ObanErrorReporter.html index 413327bed..51b3ef62b 100644 --- a/ObanErrorReporter.html +++ b/ObanErrorReporter.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.AsyncInsertRepo.html b/Plausible.AsyncInsertRepo.html index f256c9dab..cbb559bd1 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 51c5cf4b1..916cad5ad 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 f232ff36c..f19adb51f 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 4969f3c9a..38fc74ad6 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 82dcfef38..3c02d8a28 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 2369854b7..be444d1f2 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 6030e9c48..b7bd4e148 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 d494e7573..c77775268 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 6b8405f80..0e84b38be 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 ebcba5ef8..96ad01554 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 654b03eb3..b6c9a8991 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 93cc57426..53276b084 100644 --- a/Plausible.Billing.EnterprisePlanAdmin.html +++ b/Plausible.Billing.EnterprisePlanAdmin.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Billing.PaddleApi.html b/Plausible.Billing.PaddleApi.html index 5e9983fc9..447ebe354 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 d7a1d00bb..2230c33a1 100644 --- a/Plausible.Billing.Plans.html +++ b/Plausible.Billing.Plans.html @@ -13,7 +13,7 @@ - + @@ -148,22 +148,12 @@ Plausible -
- - -

Returns the limit of sites a user can have.

- -
-
subscription_interval(subscription) @@ -270,16 +260,16 @@ Functions still choose from old plans.

-
+
- + Link to this function -

monthly_pageview_limit(subscription)

+

get_subscription_plan(subscription)

- + View Source @@ -289,43 +279,7 @@ still choose from old plans.

-
-
@spec monthly_pageview_limit(Plausible.Billing.Subscription.t()) ::
-  non_neg_integer() | nil
- -
- - -
-
-
- - - -
- -
- -
@spec site_limit(Plausible.Auth.User.t()) :: non_neg_integer() | :unlimited
- -
- -

Returns the limit of sites a user can have.

For enterprise customers, returns :unlimited. The site limit is checked in a -background job so as to avoid service disruption.

@@ -337,7 +291,7 @@ background job so as to avoid service disruption.

subscription_interval(subscription)

- + View Source @@ -359,7 +313,7 @@ background job so as to avoid service disruption.

suggest(user, usage_during_cycle)

- + View Source diff --git a/Plausible.Billing.Quota.html b/Plausible.Billing.Quota.html new file mode 100644 index 000000000..2d36a3fe1 --- /dev/null +++ b/Plausible.Billing.Quota.html @@ -0,0 +1,374 @@ + + + + + + + + + + Plausible.Billing.Quota — Plausible v0.0.1 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Plausible.Billing.Quota + (Plausible v0.0.1) + +

+ + +
+

This module provides functions to work with plans usage and limits.

+
+ + +
+

+ + + Summary + +

+
+

+ Functions +

+ +
+ + +

Returns the limit of pageviews for a subscription.

+ +
+ +
+ + +

Returns the amount of pageviews sent by the sites the user owns in last 30 days.

+ +
+ +
+ + +

Returns the limit of sites a user can have.

+ +
+ +
+ + +

Returns the number of sites the given user owns.

+ +
+ +
+ + +

Returns whether the limit has been exceeded or not.

+ +
+ +
+ +
+ + +
+

+ + +Functions + +

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

monthly_pageview_limit(subscription)

+ + + + View Source + + + +
+ +
+ +
+ +
@spec monthly_pageview_limit(Plausible.Billing.Subscription.t()) ::
+  non_neg_integer() | :unlimited
+ +
+ +

Returns the limit of pageviews for a subscription.

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

monthly_pageview_usage(user)

+ + + + View Source + + + +
+ +
+ +
+ +
@spec monthly_pageview_usage(Plausible.Auth.User.t()) :: non_neg_integer()
+ +
+ +

Returns the amount of pageviews sent by the sites the user owns in last 30 days.

+
+
+
+ + + +
+ +
+ +
@spec site_limit(Plausible.Auth.User.t()) :: non_neg_integer() | :unlimited
+ +
+ +

Returns the limit of sites a user can have.

For enterprise customers, returns :unlimited. The site limit is checked in a +background job so as to avoid service disruption.

+
+
+
+ + + +
+ +
+ +
@spec site_usage(Plausible.Auth.User.t()) :: non_neg_integer()
+ +
+ +

Returns the number of sites the given user owns.

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

within_limit?(usage, limit)

+ + + + View Source + + + +
+ +
+ +
+ +
@spec within_limit?(non_neg_integer(), non_neg_integer() | :unlimited) :: boolean()
+ +
+ +

Returns whether the limit has been exceeded or not.

+
+
+ +
+
+ + +
+
+
+
+ + + + + + diff --git a/Plausible.Billing.SiteLocker.html b/Plausible.Billing.SiteLocker.html index 9af82f36d..ad90714dc 100644 --- a/Plausible.Billing.SiteLocker.html +++ b/Plausible.Billing.SiteLocker.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Billing.html b/Plausible.Billing.html index cd3989272..56388d9b8 100644 --- a/Plausible.Billing.html +++ b/Plausible.Billing.html @@ -13,7 +13,7 @@ - + @@ -238,14 +238,6 @@ Plausible -
-
- usage(user) - -
- -
-
usage_breakdown(user) @@ -378,7 +370,7 @@ Functions

last_two_billing_cycles(user, today \\ Timex.today())

- + View Source @@ -402,7 +394,7 @@ Functions

last_two_billing_months_usage(user, today \\ Timex.today())

- + View Source @@ -412,6 +404,13 @@ Functions
+
+ +
@spec last_two_billing_months_usage(Plausible.Auth.User.t(), Date.t()) ::
+  {non_neg_integer(), non_neg_integer()}
+ +
+
@@ -468,7 +467,7 @@ Functions

paddle_api()

- + View Source @@ -589,28 +588,6 @@ Functions
-
-
-
- - - -
- -
@@ -622,7 +599,7 @@ Functions

usage_breakdown(user)

- + View Source diff --git a/Plausible.ChangesetHelpers.html b/Plausible.ChangesetHelpers.html index 76edfc109..80f794619 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 4382908a3..c9d4d5f34 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 37301a5f4..f5d07710c 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 2a23c741d..8b17dbf3f 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 c129e80c1..afe0e0495 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 82e6e9f70..2cca3c30e 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 09fd4762b..387c48aac 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 5db13717d..30626394e 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 f89e4e769..d106f3f3d 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 36f16ed66..b50f6f4bb 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 b60c04960..c81f21d96 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 6ca1ec12c..cbf965776 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 221c4dd33..906eb60c1 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 ebb975d87..366c8e46d 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 3ddd36bd3..23464308e 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 3ee625dd6..244a4a82e 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 525585c31..2ed3c3a26 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 89c9c1723..2990e8bad 100644 --- a/Plausible.ClickhouseEventV2.html +++ b/Plausible.ClickhouseEventV2.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.ClickhouseRepo.html b/Plausible.ClickhouseRepo.html index b81e43841..b7b7fb697 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 414d847a6..00ccc507e 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 88807a584..f6474c068 100644 --- a/Plausible.ClickhouseSessionV2.html +++ b/Plausible.ClickhouseSessionV2.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.ConfigHelpers.html b/Plausible.ConfigHelpers.html index f04836bb1..bcb4c6024 100644 --- a/Plausible.ConfigHelpers.html +++ b/Plausible.ConfigHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.DataCase.html b/Plausible.DataCase.html index b36db7330..38065fc7e 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 14545c766..a396db21a 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 21d89e246..24d855c0e 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.html b/Plausible.DataMigration.html index b69ded1d3..6d3c0ee79 100644 --- a/Plausible.DataMigration.html +++ b/Plausible.DataMigration.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.DebugReplayInfo.html b/Plausible.DebugReplayInfo.html index 22ad2d377..874a1667a 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 ea2a2981e..76e7df8ac 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 81220f831..9b6422c10 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 cbf6475a1..ce569e2c2 100644 --- a/Plausible.Factory.html +++ b/Plausible.Factory.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Funnel.Step.html b/Plausible.Funnel.Step.html index dcc01038c..c886ba94b 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 efb64641e..81e6c7c5a 100644 --- a/Plausible.Funnel.html +++ b/Plausible.Funnel.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Funnels.html b/Plausible.Funnels.html index ba9cfafdd..d07a1fc7e 100644 --- a/Plausible.Funnels.html +++ b/Plausible.Funnels.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Geo.html b/Plausible.Geo.html index 9120fd93c..6ac6487a6 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 2e67bd059..b5f85fa9a 100644 --- a/Plausible.Goal.html +++ b/Plausible.Goal.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Goals.html b/Plausible.Goals.html index 4dbcef2c1..64a083137 100644 --- a/Plausible.Goals.html +++ b/Plausible.Goals.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Google.Api.Mock.html b/Plausible.Google.Api.Mock.html index 9505601ac..bc6014acf 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 c11f4440e..597115610 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 9dfa07bd4..e750cd53d 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 070cb91b8..5fc09f020 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 85f5e1653..e9488862d 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 4ec3c576a..4bb3629c2 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 15990d85a..c55be1874 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 84c9b034b..6379d155a 100644 --- a/Plausible.HTTPClient.html +++ b/Plausible.HTTPClient.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.ImportDeletionRepo.html b/Plausible.ImportDeletionRepo.html index 22be72390..71244ce3d 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 4dc135ee5..0f1c617ef 100644 --- a/Plausible.Imported.html +++ b/Plausible.Imported.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.IngestRepo.html b/Plausible.IngestRepo.html index 0bce3f541..ca15867ce 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 2952a12c0..c3b17adfe 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 fbc5570eb..7db53bdf9 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 6100ebee1..23222c2cc 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 faeff1735..150dfa19c 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 d2237a03c..7a2ad8af3 100644 --- a/Plausible.Ingestion.Event.html +++ b/Plausible.Ingestion.Event.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Ingestion.Request.html b/Plausible.Ingestion.Request.html index 05bcfe278..fa35c0634 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 d8b85da16..3ee027716 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 7de248f7e..066954cde 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 93105ee90..83b05ec3f 100644 --- a/Plausible.PaddleApi.Mock.html +++ b/Plausible.PaddleApi.Mock.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.PromEx.Plugins.PlausibleMetrics.html b/Plausible.PromEx.Plugins.PlausibleMetrics.html index de43b3e94..13a4b3618 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 1a205e4e4..5310aaefe 100644 --- a/Plausible.PromEx.html +++ b/Plausible.PromEx.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Props.html b/Plausible.Props.html index 7fb480bda..ad82ec7c5 100644 --- a/Plausible.Props.html +++ b/Plausible.Props.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Purge.html b/Plausible.Purge.html index a36d0638c..8fc630b25 100644 --- a/Plausible.Purge.html +++ b/Plausible.Purge.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Release.html b/Plausible.Release.html index e28e60dce..019002435 100644 --- a/Plausible.Release.html +++ b/Plausible.Release.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Repo.html b/Plausible.Repo.html index 21718fdbd..da7bc6f50 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 09a590077..07a3e9808 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 970f52195..63972912e 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 ad388717d..b1c8b5805 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 cf7c5c5f3..c71052c71 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 06ec0382e..a6cef1001 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 755d11ebe..93ceaade5 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 e94bdc55a..df6bdb108 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 0ee9f5f86..686b2798c 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 f1dc5f5be..3edb43173 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 71f4d32f1..a41202f6e 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 0d0e0f2de..b63310a82 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 5af507da8..90e08a9d7 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 0d5974d16..777c696b8 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 0f335feeb..c4b885502 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 c435c3092..e1d8fb110 100644 --- a/Plausible.Site.Membership.html +++ b/Plausible.Site.Membership.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Site.MonthlyReport.html b/Plausible.Site.MonthlyReport.html index 1f440ce16..927005e3b 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 8acd51a4a..04c4c6aae 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 9a37d36f9..2d44e13c5 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 c6aade941..873deba17 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 000f87596..ebcdae8b6 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 c9f69c86e..3c9a9e318 100644 --- a/Plausible.Site.html +++ b/Plausible.Site.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.SiteAdmin.html b/Plausible.SiteAdmin.html index a85caca3a..052133ae2 100644 --- a/Plausible.SiteAdmin.html +++ b/Plausible.SiteAdmin.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Sites.html b/Plausible.Sites.html index eedadd5b0..fbb307245 100644 --- a/Plausible.Sites.html +++ b/Plausible.Sites.html @@ -13,7 +13,7 @@ - + @@ -311,7 +311,7 @@ Functions

create_shared_link(site, name, password \\ nil)

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

get_for_user(user_id, domain, roles \\ [:owner, :admin, :viewer])

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

get_for_user!(user_id, domain, roles \\ [:owner, :admin, :viewer])

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

has_admin_access?(user_id, site)

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

has_goals?(site)

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

has_stats?(site)

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

is_member?(user_id, site)

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

locked?(site)

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

owned_site_ids(user)

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

owned_sites_count(user)

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

owned_sites_domains(user)

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

owner_for(site)

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

role(user_id, site)

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

shared_link_url(site, link)

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

stats_start_date(site)

- + View Source diff --git a/Plausible.Stats.Aggregate.html b/Plausible.Stats.Aggregate.html index b856aec26..4cff4abb3 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 f6a129685..38dfd56fa 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 4049e7529..6b714a748 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 443158186..6f897bc6b 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 338b5d95f..aaf9b44b2 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 317162291..4e9967c36 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 3753dd5cc..a05217b8e 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 dd1a9a289..14faa264e 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 cb2e37ee9..f0958899e 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 828e16a18..5dcb97faa 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 e59e17860..4a0e6a530 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 0edcc59aa..d2acaea1b 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 f740e6d02..6bc9627d1 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 eaa9e1031..073f9655f 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 61aa96633..81cb0dab6 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 a532ed83d..eeef70ca5 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 e3171ec88..008d8b931 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 606ef565a..d0fb1209e 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 6adbb8984..448d2872d 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 f94a4537d..f7b0d05db 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 854adfd99..e883f10ae 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 1d4215d91..0db808b0e 100644 --- a/Plausible.TestUtils.html +++ b/Plausible.TestUtils.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Themes.html b/Plausible.Themes.html index 7e3712259..17735a742 100644 --- a/Plausible.Themes.html +++ b/Plausible.Themes.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Timezones.html b/Plausible.Timezones.html index 34a95175d..23785c299 100644 --- a/Plausible.Timezones.html +++ b/Plausible.Timezones.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.Users.html b/Plausible.Users.html index a075b82bf..63c452c65 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 e29427faa..b850742d5 100644 --- a/Plausible.Workers.CheckUsage.html +++ b/Plausible.Workers.CheckUsage.html @@ -13,7 +13,7 @@ - + @@ -188,7 +188,7 @@ Functions

check_enterprise_subscriber(subscriber, billing_mod)

- + View Source diff --git a/Plausible.Workers.CleanEmailVerificationCodes.html b/Plausible.Workers.CleanEmailVerificationCodes.html index ede96f430..ba26cb13a 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 ef695f4df..0850e94ce 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 8a1f4213a..1e2fe3963 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 3ed9f470a..75a2ea615 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 560f0cf64..6f7c829e5 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 0f7304415..668023a03 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 267678076..136baa1ef 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 e4fcb87ee..6f30a2942 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 8b89cad8e..5032d62a4 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 c85aca4d8..fb707866b 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 1aa248ef7..4ae0e6955 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 f9cb9022f..46780e4c5 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 10a0eb037..c316096b6 100644 --- a/Plausible.Workers.SpikeNotifier.html +++ b/Plausible.Workers.SpikeNotifier.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.epub b/Plausible.epub index f3d98d2cb60309b3fc8bed29517167c06d8d8a2b..557cba0d9b2c46acf05c6a9ce4d95ae74cb4d564 100644 GIT binary patch delta 133677 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

Jcki?()*#=ff7_c!BJ63lPm`YfqO0}zqyKanP z9ZA4PsUnO^_dmBbS=o;elkH80U?}Fc0FKg}oUc(m6k5utb6{zdN$am|Pm!syokcLf zyJAt8A)I6@s{W9%sNJ1UOZQ64Ps%KMN6#uS{`qL_5#2l zU)tUgZK80~Y|g#k8kH33ol8CO@<=jw;RfM#!CK?wEr+Hjez5McJwJZ3m5z>4j$EB5hB%ts zlD%_v<9Y5Xu?9=p_(sCTE4_me_s%LBlafWeqb{z-@Te~7?qS`4mb|0=di#RUnneYm z0vgwVn~G_K8KB9{CLD6PgbqgE19{Y%`8@SNMJDXS1h&iL_nCXKQ?h>cU4^gtg{Hr* z$zxMonM_v07Ym4eZ|!=w`;YY7`l7dV_h#U8t+C;Wq@^j}3>hi(M5$k-Ar_EX^9NPv z$@7F45Q{G8FviVQc~zLk1jmvF^5CmMu@!Ywjow+lD`jlq$2)Xlb^JUW6>(Pi4@-%| zjeA>A^TX>mRq-o7ijDsk`*kHLfbrM!4Df;%{A?&h3v1nbxylU}LA&re4DA2&8NFpH zHMVA<&k_@Z_3P!x(JK2VJL5ZPzJu{1Wv}#;X2-?4a7a_xA(&>VM@Tp(vIa>8P_({) zzqoLRNZ;*e`;H;o;RQ+_#ltG(Ofu4b8=9T~D#vkb7WMXwBaR}q9Ce+P>Z=YZNGWsU z)l@W#ZJdU-ULlYffnG|h<`@O}ah3Rx=KQg%&?#{Vv`N{h4%D8Q2%z497jshb`_q~Ok zQ<9k-=rs4^Bc=qG9lpp)LbLBz)=Kn!#>kt-P9bbSkI%x7wM1f5+9J}1Va%c^fb z4e_o-A6pHP!&o-~4OpMIuLs7jIT@&(s>&O$|HN1?spQOjhJGD}$l}i4>hB+0qH(>8 z&;F~wcy{_dsBP^`>)Wq+TY^}y;!cX=m+9$XmLf=y9$wa(%l^&+ZmS@H34vE%h}}{G z0gmmu5CMKgZj6QI11Pu4==TI)HSD9>AKVSJudQJOqAcT>0q!U~ITJ3$QI7@o!(ts@$_)&u5vbHo5U*YXkLvjqeymTi1 zHNQ_q>jdE9B5cFKI={S6G<=q6}l;dRocfqBZ-JU*tCe{ z092QXZZ#KBd}z@cQP(>lQj0=IEq!}9@U>O7KVQt3p+)TJWKdGklsuP~nFf4(?D!n$ z6>=|1>qRnZ&ovaN@Lo|8^HXDjiMg^l(`HbVQCp&od>CnF6IjeN&3g3YNvjj6l#`gIznP%N`X8Sr$jPBzfTyWpLRU# zHCUVHF`8lVAMPB%lXv%BLVHBY-rn@@60QzQq4h}cPJ|G zeCwgb4$<@pvmPrOf{*f9Qs1=!4gIYf1IzR5_u(Iv(t(y=e&#>pm+|N< zUIWdnF9iAyyH4m2PY##w?lz?Je)}4C&>H`({=}=xQ+A>Gxu)#{IAw+ zr`pEr^I$k2!{W{|vs5X7C9*Xs{4ypV)bt&RD_e^g_4x7h>TK0G0e0ZzvB|^F+Y@?e}v2d+hCo>-21scglNpJ`$o>Z$0vhD@?I6& zIs0!zHY$}z_pfAGskAxRFJx|YidnN*6C46rX!@KdYF3<9YIdBdms0l!$Ij2bppV0r z#*^j3X9eFM^%pd<&8#tY200rC+>-wI?QWBfkc1`UG(0J0rc_EDl%)A^*yH|izm}}I z4rqKdd`~h+;c;L!iISG|+ zp4F+Ko16#fmo}g2M}x(W*GrqA1{MUe{8Dq-iU>ZHs#}%9XNfO4b!nXv#P_A2J5s*0 z+5UPw#a%mNu-!Y73?qf!yFeQytoxFV@lI(#d1+EN%0o!NW9u^9-ibt5!%uh4tI*dpQ|CaePpZ3tfZY{@n8(d#;W= zE4x8`7_AH+Rr2`!tXc4HI^RYnO)?&HXQySYE>WY?<&u=Kc{#J-WOXV;rHrt~apqjZ z^ExIK>3cXO8$r`=#POLOaK(DP*nA+dJD1lRqrixC`4zF736OGz)P3AD{~!Fnh~7H9 zNE7r?eoF55MZ#*ocbWn4xH$tPXGyg z|0C-rKyw$jnGOX!5fQZU-|n3E!~d%CHkz)mOgSgLK88qeP07xT=10~jMUsgHNm#wF z4|rsQvA7DMUywv1cco&_AG|i!G$2L&TVR=y#RO@a0abn*T&powD#zdeZo)ggF)88{ zCN~3|M+1LRlvaQ(ieCT?p0W5*!K8U)?n{*>w#@Ze_&^;PNG!#8*QS z0*MGjNZ>=vb*K5AF=4H?jZFbHld4l|A2O7KkN_jmKCK2y7AC+kCP`%*u25=BvdF;K zLQ^Zn0?ow!#;0l8YOKG|^Wgo^A2W9b z5Cs-U;%n5;KN1egQ`CWSyWgig|8nEiM1=cX&ZYhs_?ofOz4^;^{2Qv;+E4un2n>q_ z`IL8J$!@uM{OxxAR_!`v$`a1!+aILbu*C@6I!Y7tBMev`NqcvLSM}$WwvFSWP=8p+ z-y-ZwmN)NbNzFlXm8XhAYeuM-`Pe$*64Q?KfwE9l)J6C~};x29n9dSk@{zhCuF6v4SiZ~; z+Bom4LS1l8AMbIez{&@CW!eZigUKuweqT!ZhS-&$F-qvWyli1zGHxP2-(Bgq@zV%4@(!N|pB zzM!WcOupFoI6M#AhjI`=mJ zokn?czlg_T>&z`;o2K%@?~p+3VC-7>lRvTP; zTrC7-5GZ=wo#eIYty^P!5nZOi9y47|^G2Dv`8EC)gVz%mK3o+(ubWqS1kxQZgAz7N zN7P$<%pGB>Y}Wn;Dd5MrD#Y*q44;DNRC!-hX8Y-$3Zm|B83TEBIo_(1$zH`_2mZS2 zy~+fT`|8mSA!i0F+HB|Q4>H)X^{Q51)2Yh4g71D$>)Ck9fy;B^i9L1kdXLi2G2)JZ zpcnScxWEB;f($4h5CC$YfbJ&zWk5-51DbX@gWUI%M4wJlS)*%bJ=*Ws@A-2op?Mh{ z)>KGZ7b)6x@6MT2|EKI&ik#gJ`@bV&QK}pOZ_BnkI)7Uilzm-t9nko9XN8`874w*9akQ z{Ai@S1PwFL*CpM@m-r9y`ak_$JBN^SR|S=;9Te40j*KG` zr6YVdfX?y!wUFn%9{vF%q<|6wcEOk65#GgnP%~UpuW18(wm*4-fiaLp==yNXwsnA~ zSZ~3`4+CFdwaO6k*UCAj~2z4kRPexBF zQ%~Mdl$1M*$eSm#<4 zj)4?fL>BUr zup73k%B^@v<$b9X(N!%M$-hU>(12Jfk53?6&QMcduOe?-wnX<)93(svJqiEg5g?}P z4CMg}Ri58Tc8lsDR<+)0s7X8sMdKOqgX0f5SP;*0(J_7+7cceK#WUD+SGupNWbmqc z)MI=x{LyGB-~t{@#w|0Q6m3*qf@wif<2kgmGcw24UMWN$a`c4qIZ^d+7DRD-b%U$Q z@TI(HxLJO$0ukbOPH`LmSv0@^{a2 zdvZ&&d@emSyV^!^fX~_LA!Y<@76qC z4lK%;RpfUz8#HY>BG1fE)cy7-1l7Ja+T6VSYM$8P1HLR3+n(*kNh-1@kJ$a_j)=yY zd>BHzL+6CZ5^D2|ns~2B1m$me9x4O48mtjqXZe|P8i2Z8Me?oh~I8(C&hUo(m^!u zxhkS5Afu)kR+WD&j{biv4$o(*{3B+}L}Hgj{#F4G4p{k-8byvz?|WAcWu=>+;sUxI z0}?;YD6?GNAW5H3RhAe_`x&2Mg&m1&%`l>4!>B+zl=2!U#Df_~Ii$?elKdr~sssGy z%tJaZ>+>`c8kVep7`po7TV&Vu z2TVD2h&2-;&;qQi`wxWq#n>nw#5?scP}I?6d5Tku>q_Kao_ zXP`xlEl4Ga96hb;kL%~(?X6_jv9F+k>6?3oXu&l2rg1J8m{G<`0r5*vakUhVRJw91 z80qk3@U5CZc=9K|orMr~5_xOXPDV0Xn~lpTqq z;0k{W#am_!g*aooh$-2vrrSkQs$;+oNU4b;-yH&2-gkdxppx0mBU(M^B`L~ zs0oxUI7ybLLc=eY_C}UPCu8)MTYRMCC^wZU zLhPUOcHg@!;UQm(EJF ze;)p}aPhjTzL=Q>=3h6i6s?$yS?MJ0e$4|ErJpDJ@`!LujN?FW_3BCw%yvOG+9V@_CAO7u)_W-WowmrF#n>NfRz z8N^?mg-@#e?KkV)2I{$4*5-RIp=4N(m_B$!J-RJk(R{VJe*BHr_q%>!X@BBz)U)7G zRdJoHk^GNuSe+vBAa#k7gjnWldK~wevJwc`TqO^F`LXims)E~n0ACnH@D}9F*qY!+ z5dRxs3Q?+W0b&zd5MT?UnsQIF{0z*4I~oFoq|Cyh#Vkn^7oV>>FDOInXh&^7^Efb7 zAW_l1qvXGy&t1{l5TJmHZ|S6`NqrfXUVBHxqa~V8?o`HAsrNln_}<`zsM3lM^)w7@ z}Fyjy7Ue0zt`ImA`w$H$bv3q9$Cs} z+#|$-W*IM?L2kbeQBXGjilFT#?7oFDoXZ{-`bafhJGPZzkFA8bdt(M-hGMDoM$r4! zklU)=K=M<~)Z3wmEw`XfB9AQBZ6eu4$87{z(J}=M$VE~+#!MBWYZ|+o#wa8jE0%Lh z6$)1<*f(}g{y9!R;K@yB5-wQQ{+I8~@m|f79kn^+^QS*3@Jv*5xwy%sBvRl7Q!z2A z%F)Dchx>L&wfUMlwZ)C?n8s)SsM^>p1%(78p{=g>mxW zWO@8|Q{ncag>j$SdF|7ti;(;>leB!L|<;Iyeq$cH#w)XQW@@z~(l!HRp zzSEAa>X?}ASO)}+A1_AOJbMu|HSI8SG@l7h}rN5(Zc~9k(jW!?_1Zy$c)QCmw9HdAP z&xoEqM&03zJyxX41AxkS%V8c`4@aO9HOcpiax>RBpvCe6saS}KGnG%g;0(#P8SDm@ zdotb0x{FqjRQ`3&Scr=*Pw9#$7>b~hOqyo7D5tWO(0z3xG1f2>jNJ^3v@P9F{iCNd zHR@0($qF$Fx2YC#iMkt+)b+$0nU+^!qQjScM8*yuWWhjNfXMYp9^ zVzpPq*JAIb#b17x7$I6o%U!BNNwSv5&i;{$38OqEg{%DI9z2Q79G5oSYvlauCroF1 zQOnZ$;&AJpHC!I%ayEx=50(~ueOqsVH;X+-TjD zsB*nF(VrH?$;n7n(^k~`5SgG}yYITc%UfBS$k}yqaCw&hcr?RIV8}waw9t`M-bcU= zL{0|i@i%AxKdRobF%zw8!i;U(wrxA<*mgQL@7T6&+jht9*tU}nC+B%*KFpt3wf5Ro zb>)^-e(bAUMU+${Hm)u zD**rKRVG|g9UR0tFu?uN*2V4#AfZIh#69AkZ;wFDIVncM0dR#H@s?t;Xm+P(wY9Pq zu6EXk_uOh|1QeYYU6-O|Vm(>A^NQvnrP9u9FXho{9rnr(yzWo`yLh;}h=L{T`nqM7 zVSG=%RQlST9@T%{!Z3BSafRJyPW@iTfH<2@9aWC7^Z_L~Ys1jDTXTpzJg6;0bZ0FU zfeFpF%v%j}_#u`08TBRhf$!zzVD6 z^ek+`fQ1XC_y}je-NoeDfHyWAHD`*y@Or&=htC7qN&1a%fdPJ zgZ@UOdXklfzB!XWOj+E8aPsjJMneqEpH%?PLkzw;qn2)Lesau9at*lFyEK0l?Qb$L zdjVVGr=MR_YAVcKG(+CxmYtYc^w(I!1S!FY+?Jqs+w4z+7KBb#`T@6!3J^z6Uq5^S zWk8|V*9G;}WtwYNib&t4Tso*f&=ebp&vp0Fz1N-T5< z!H#7{w=+@3l}BQm%@xC;P{<&uQGWmnIABH|37bM3SjV8V3Wgs-6#FH7B*sX>*{=2+ z4pBjg5*EEFtJOabC`K6luKy&N48|ODTNrZ~UwUS^MG}q`kD*)kBkU&vI>?rBR5&+X zK*CUEicWj@u|&$z?l<_;0~unWia@YFWsRIO|I^U!L;X4d%iAVgx2tU-EVL!g0w^z8 z(^X2M6|%J@b}Vj#Rg_}vwm90GCzFB*snhAum7LNr!PDyZ2kC zYA1Q0KaE9GNc6+@ldU1PYEIb;-c!QAiCpD{reT@-1p7}2L~QC@gt`R_}T z`$57=nTrh|x0*rvw;aF%zWlD^^!wp&HZM;W9$x%6P)5E@@l#9Ow^cSHA2t)96S_q? z$e~L8$;#jSxU2bT_{OvhR{q~FRK+aU^_Rh8V&)i1N$xk}8!z9Bf6AmOU6(jeq~w<}`JmT($Re#a@@kb{-x%TM9F0{Kx#D2jWS;gD5 zfK3-0i}Pq~zt!u~qQ9A(lIE@1LR+jq9$q>&sxZO!?-?c3Q&E>jtxrEgYAI(}OF>mX z!hGS02*k`RjBx zMin?@hOKTMuTbw*OqK?x-Pbw^!th=(TftVW7yJ4;3k>^Sa@c0#zFQeg2e>FBS!^L? zK_;PK)JcA?pf>V$9`J_8unF5`G;lW>L_1@%_#}jF5zPQPWnOXA(^Y$BTF7bc)7`2F z(?((qvb27;HGI}l(Fc~O)m7Yr=xn}h#Ot*AqE>>r{}$d!+uvZ%cXWl?qS?Wn&{~d) z;KvYqZmT1~syef76YIusBF?0YIXZ3QK<`>&2USsx@<9twY4B5Hxh&IE#)&HyHqU91XnK43>EhR>u z$H%X$U>}1=sQ(Mn+_Q#Y8uLMgBh-*k-k`V9#;!V_s3lbvAV6cdVr$p+rJlmuN}1kV z+IlY-6Qj2=nkYT#WC&eyw5cC-Vt0mArKe-OYzYPkhth?Uu_25NPO+bJekp|MV!0>l0BJ({4nXBjl%GcZ7{?)RcJAZ`E8kTkXs+#VKS(|QTw1z{c z`N|zI3fO&jbcB0^-BQW5yJ?(d0{p+c94&+YK9vBoWkhJzQUTJHS07auP`IJJM+HAC zKU|QoEM^3(cq3T~7Z$|j;$_fN(k0boB)+V|A&pJy(MT%!_T9DnOBe4v+3`|3>#WCo z)oe)fjUO6x2UYX5(24TU{xKOFn+9Nh*f&u|#B=^d{-v%boNbG#b|+S6R(3y-F!!IEQfh9LHM{hzE@d-@leWl6?wV7Gl)S_8LLi zX_fL=nEz`%%HO#Zj#W=dnLxU{#IMq|6W>4jUiZ#~x(?{!qp#!a|N3}$sa zL!P7yW4*xxaAE!q{nAA%YzCAnhrz5Vt2Zgn%<_w{7x|4Qf(>U_xCW3Lp)_g_Q)zdZ zG&6$t-4%}7B0=ivWDqQz{}^f)=+KuiaOSk-L-v*mM?k8^YP=!qD2+I%=CwqLn$$BK zu}Y`RN9e-M2rA9=U@G!IMjKaySs5&h6f&T=vudit8=SzIb_5BRP5}*?FnJ8O#5i2n zz`DyqUxT}uK8Yc*1)=u%f@z4ock}Q`+)R4{R66y#YgXt3;K62@!ReGy!5vxpEF9{r z30`gCHHXQ+kg_%;k4)rtx=!md#OZ0W(J|z|2mWYKBrGE(+}E$c=L4ue;jSXk1oiDso1NWD39mQn}TIZK#3?K?t?#N1JgjZHw z#G^Z1$i0X*@+_DPlfomWXAV)$77m0*i<0Bmq(T>%YWOlNss$8vjt4ZV(uwS-Q(MnR zM(VA7`w{nQ9Fed%hvzXc*iapv`V~Mqa9DT+ZR|L_Dvh8-g|Qzc&EIV-?wwgajuLvz z53EQOdZfAa)&6r$TY0(>amy0W`@MP2G{d>mvf8P4ZfCV>b|SdGNfjmY;KE#VM;<=< zukfONfB&xcP#oX@&}^Mj+n9=}hz~Rx|EcQ$$H>vAs0llIvy&i&=-IfS5FPPuMmfd^ zb`0r7d~ZEIhtgU|uYQsKTr2A9CfQJ#&Hd7MZY}g~SCK<_kBL~ggvmNXJIR!Ee=R>c zdJ`z9y{X&ySY~y+d!z+LaLv@Ju=irU8S=~{8ax4s4gnnYEuqR)XPn=|#>;%idAhySmQ7LUuWpX)QaG{|ah@r2We{?3D=+Yv29+ zx&Hp-JhWv0`#0*n&~QLEOu!?f*dF50*Rq7PpVbB(C{xkd;9e8QGU z8#Ns9>N0EFpi#zJxrQ?A2|lDEv%uLy8K&XW0ML7n67hiql3+)X=B$F8rAsQ&&Yf~* zg+q<~$vpB$$hLIhNpJ^#X-kak?N(56xoT9>1 z4^9p(QI%~L%456p@1rZS{#~Ed)9}73w0^ZJ6B>AAsiX?lronlSy~MV z5LA2*L5|C7oxwfNCay*e-Z^W<=~{!Ybro)vES1n8USddvy3N6tDYU!jzyiIqHwq3J zO^BGe2xkS?Xc+>ejCX`OypRE)J?z1XWE6l6*H#5bmw2yHmPZ{bhH{co7TSpeKAqVt z+Hx6T;6k=>rNQtoX%pTfEyRL$N-b3dO!*YiFbNJ;W3>N9U!@*^WgPqmrcX;CnGOH0 zpEWn4NJ^r98taf+D=yTr33PixYY%DPEZ;Zq&+njk;rEP{B`W!5X#r*&l+JsDt7%yN z967a&!dSR;ne}Y^$HKV1*s%I84j*_&iCVvvT0Q^<~O|qGaZ}6~ql5C*K_kV--Y&Ztsn5o0j6AT7u835x0O@pSEPN`p9b8 zPUE6V`s}i*>GO3ZBU-q~0BnR1fCD&Td_p~!P}&5|UbXGg&94liLfM6mDm5Z-gMW9s zZ2qXxwz>_jm)nOHIcz#mAoz)XzdGZ77~Ssxs!O*9P58L6xZknBZonAnx13WnKI6Ri;c*ptOmrP&7r~I9%7AZ28VV6A3 z94R39{$V_by0QR}BT2*S=_SZEiN9v5qH@)NF;l@I+swG%zzzCuXNeSVdkNlf8Q*4# zR~h1PRM{F3a^Le4oD>E0^WM^S7V6}#cFUc|=m!*rBn~_8ce*kP5#_D|X_L-iQ~-tS zGh?|07svi;D?lq7gls2P0)<}peX*^tpA-;}oeUf_hK#zIA*n0RzrBykkB`qYGJo4Su`u?E|4&-On7;!h`0Krn|4QcgLEk6Uf0VW7_VK!kx%sx!FgKq zVX&e1$L(%2M*r?w=!(8$1A3lE+jotJSPXvUgUzHAuc6RtEA&YwSR>nr4`^_kddxGx zzVuQfTE3l=yoTu3yMg!`8P&LPn0$5D`Fm>vOH|d~(~2~1H*r;4@%IVRbwZuAP*zCI z#$1QPCCaPm^kXs|1fC&e#b-L14(AiJ>x$WqqBjmV0&`O*&f($K>wu}gXyfG)&mqgL z>?93v>9}=E2fs6g;DOfN3nq7H?BU<+jVzjh>tiVq zAcTLys1A@tfUBHus+8o(Hrx)vGT4XDL@0ESEXs^#p0EJ&C0fHmW8e?|d@@H-}|SR}%6?4|m3t`grJbN%alqUB0@cTq^q$SwRPlE4l-+Cr}(JiKY2 zglm4W3xToiwP7R*1-Q1iBpfy@kf*WU5HKfSrBV^8ztmk`6b3KDYdJ+(v0G8|H1^Qd#0bu;hi<*QuEvo_KMx40PnpX z250BgoQMFp2Tr<+y?*(_cj}W>w$BNq_4;0i{K|zjY;46=3f?DZg*eEEVgz1Prx}zY zRcx2@m}1+Pd;LM2hie5Za+4K5yBhkCYZ9cZst6103A!T>`SY_F}NJ{kaUKhdY;a~XgW8gR>Dlqo;g|KU(IFGSA3 zC`*Hb1TkBkhTt97S-kNx7!Id~n03R{%EF{!@wDhkcF7_kt_52i&rWpH_%xB0-E2p1 z=P2|N#(Xqj5_Bb_6?#E95qeWHl<>~(UW9`Tv2HXxv21V_MYpIR4#WJbRZZv#gf+g>6p2|xfrLfJuh5y3S(F&&`5p4 z(Uw-AbASx3kNwB$8%Jd99X(NVXy&iBOjSXz+9i?l#%y1js^de$3W!LM?p4 zw-jr$r(v|d0WUpy@5jHmo$=Ip#{&y~!O^G+m1eCLjL7ssTsyTxCxUu@kVa{|&loezNf;*iXa4tK$384p@Xg2Tq}6 zZT|txcrhR@^u5)4ihT=~UgiCCpZ~Yo>8KoV{FjJBGVcUs{gQSH^=}12#pUf zBH>Vk2wDoNE0P_mUN}>Nh+?}#Ma|^c5ZjNWzzjb|PR2X6qp*e8_mGYeYK9_rX;C<% z<|9*$MGm>jpnxwrTeRiP!|+?|uM>x2Bb>~De-TNbBr(aCc2GT5dyu-TFVd*bbySF! z8!rLmHPHgN+@mK3gx|G93t88(DpP2|^LYKru*9HV)ZILqy`*AstTAA%oxscghka2p zA;#|;Tj^Pe`;17#Lq}p5NXAM!Yd9I1BJ*T|GdnlSKF$Qk+-12{o(LY( znp;P{mx4EH^==SK2~lou9*&{fr2_R>0RVmA2I)9aJEQ-wTUly30(GwnJ$V|4hD4EG z3^x;(BwB-8!^shYDtlG+a;<6+t-$c*2$y5Zj<7&{RBEIy6+&P`bOH1!RH)h~i7Q~4Pj z5gxKcv>GhWOzf{o{Ck3kq@)(KigrM3U_7%C3zdjOb@v2fG0hl@1kqTYZu^{XvY5py z-w7cTO!dGmp$wRcC55I$BB=)vAlUuw2?*DIOEPWly>3?>@q`&Xr5LWVq^42CCX1ut zqgVLxZ)+>`)?vd{GL04!?CoT~qt1Lp$mdWXiYM^;Rfwvk(?_aK{eeHK4oyS5tsG>A zQe*0~ke!6H9jZ{7VRZe4h4JHtTFXX26I3^trTNMSH4K%6eY^kj${F1X2>vdM^aJDL z=#1=*rGTI&=xsW$gAH)w<~DI->tPS~p6s->`^D($EuQcXZ!6dAQMr@9=Vg80SDK#S zZIVO3@7q0Qn=tNlf@?8!+^UOx?vTUCNCd?z$TrZna??$P{nWBDR|yvGzw`R-QF|$(jGDlDUHt=1d%+G+b%ri^rIs{M;4l zqi;+%fBpozw`_^l=*e@33);|BVd^wc9HSVEc&Jw{M4}BZAr&I6uh5__H4<^trkH7$ z$(+uKe(GO=ZGewZhuHhay_wPW1=judPEl+3lNOG$DGTjzqgFLRI>>-FgUo8iIG zYhWZ-8S{tCfi`Rt(uOu$NxkBseRA+gy(;A4^;y!asswi(oTt!x;*Qzg61iTLMoVa( zm(G(c(@1lJ} zq@247f?gFaSPf=FKa^GEFM10kdU)dvGslB98^pUP!Zw6C$Yd85mV;%!ij=YSq_9$* zW%N5Wr`gDO42Le0xS_GrpVR}{*27*d!j=@@S{U4v3zgcX)}P$W&@oDbJTAW{B?!9p z?YB0ORdqIKtk{(KVMEtb_(AxS*{x0D(c+ zdq!JV!*?$iwV=lIc!+r4>_ZiWs1k2sbjk4Lyzu20A8<^V*%0Y^Ou%`Efd|}YgEsws zuMFsK;CpNCX$qi_Iq$IT@4@b;n#e3EfnQTD7S zZN5p}?6G=-MTV?rI8(Ry{0o$z1sk=F?Oy0#Jn7{^__5t}>si(C(7n;1B9kmjM}7SE#d+1kG4uoQeO*1} zknr9d-@_>~3QBM+&~PV}QJO$EBAdf<={itp^uRj9%pG~-4bmIi z(dR9u>Kl#@wQKDUaz(v}btPc`)y@rA@4vIzpxgj2M$5`gn+9%`|iGzqshy>5Oht=gpE6p!MDd79MP$^@OFtEu)LrRT-NwbV4 zs}L-cinipkTVP}O&CS43$CPkP8sAD#Rqo~cLnv;jtE#AMYjKyPV1~!{Ymfk>XIPb> z71ko@0LOhWukn_089{LMciA4Itl;t3%`^kuPM|9wMD6A`aiU%wF#DrmVPfVgI5EtT zWEwX4jwfbG5IXHu8SAUfj-aVzcN3h@U_vhK z(&2VVS=0-k1co!1nbcT=E;#^lGW&zW7b!vV3fsPBS)zZNxvUwHT>+zE;M#a=N~#hB zuM`=Cd_fbdix&oE)FZ3PDlQ z1nRMwa2{Q2EF^gr8`9B&?gs!Yh;!>$#5W7vuhyN8P#B()fFs}yys3t4YN-yX4(u*15<~mY z2o%IB=YbIxnG>+&lm|z-b-wkP*#(WoSM;v#HV)g9G;kqCMoPDM#{3-JBpHgasufvjxld{TLv$FY z<`m(2eA@3|FnoYw>P3`?qfuxY=cORQQ&_GVT5Ga}uI}A=hU!{O=?uAz>WfdulTqJ} zH*6*mnMyW`?WWz4su&Ek^?LPM#(WoD8hM!gzqqt&x)Q|g)E#FhQw&Qw&&?y-l& z0+<=<$%@-c#|&7LPnqqL`o5$IcHwVTj;JPzJ^lUezAu0?`1$9P!Nt75i}d-9q3t56 zR9l_M)!ixPCQS}uEx;h+Zs>`y%E+%VQ^9k(eBG4;Z5E#Do1b0}^YrnlXWr0P;s+HR zVd+p_ekj0luU`E;@x=VzT@_~rhQbHx1nBz&aCG%YP^TQ`>rc;A_!zg4c zJO7KtUTXXwW9OxASG8Koe_T6zwxhA$XceHN1oz`zHG;A{(qz@Nl+x#|9ii?Yb;qz zb3iYgx*iJlW@+uVICvVrIJ}U_(e4qkm`fQt!7{Z;33=wXDt?-3Zy=hV-8m5*lp6pQ zMZBLP7KNKD;3i>R+&o=PU%5Sdz670@mRE)-;S9iqr8v3Imz{IUYc$3FmJg)K6($ZWNL=+uuDnPq11SR}B{C)j{X+ zYyZ}S3TVp+OJM@VrZWHGG$k}$)W9%h=s{z>{r=fN9e>+#6iuuyqg1c@c2+5mqP?|c zhr>@}C23U|9WBh)(jgoM^=2$I0s7-!i)v7n$GMlr{PK-dT)51*EPk|NHzYs=#SD!d z16aL-)x;@}U=@|>dLYs8QOW{(0uNmt}2-AT2=l0oGT)W6H0Zdp7;bw32*N;b3 z{n6R!<68Owha}6viT+Gc)^^0v6U&n3Pq6=$4C_nV ziq%&>X%~ESz%bP>R<_s_3p(SxCO6;knz?mN644i@)5`*7_Sgt7Wd0!%Su`sO<32#V ztYs!%$luO9X_I*m1rJ!~!`0dHhlT$tNZxAuX_m(IOh~QcQ@y&fYc_l``h^rbFyzkr z^6WOYP?E6uGDYHP-r@#mtfs5x9i#bG8oS~OrSR1?%#hbKwpXq&t>Go zr2w%^NSl)lm*xQHVb?T5k;dGz8iT`Tn?C~So&(_*{9AsrFDwEadB%WI=ZfYQDDSt$ z{_b7+MYG5y%AF+SN~t-UiHfAz9k&eWtiNJ@F-o_IH_1VpW4wCa5hMWfMgo^LKHXorR;%HUT5o8U1$# zs!yNE^0T+C?E3|Pwax8ocQs3cmO=$@CP19m0s98Z1Bm&hpr>mJiFKygbgrvK^lDH1 zV)aJwNY@ug-S0)SNh1Hn>1A3ojl`(HU%Do*G4B2ut!|!Rx$k3oChn9w1Ct z**ZGgGsW*M9f#L>I$RK?&z%hIWZycg+w0r+2KD5QSq1>S*=WeET{fjL1Lrx#!xS=F zHkwgMm3jp|KvWR`tGykIpkYpKpT9q}j-5{#Y41=ja1!=cDFiw%SM4sn%z8UB8l7LY zonJ6CI`@dWb>d54BEdL zTj|aOwtU@R@TqBWMu!hnD`;t3!xh}Y@-#EjzgS*Ub#LKU zu@`wy@|W}MK&=QiY>v^;me9GQO;-VL0S>P5PIayo)zk+!%%5pr%x*FxwL~m#GiJ2; zyI4F>p^06aueRsvTC4-swcaLc1*Ih|(wl$UpJ%g04ZF~!|O$K9e*1cuIq zEQWtR+n}7i5M3rE`MGTt?2LtS;17?M6 z;Jo5mmR%z~YSDJOvZxE*>k1d$)LhoB&_@!te!(Y+`38mWXk8Q5RDYc_7;>Yxc_VWo z;qyQnpeo^f5dLRzats z7&?rVkqG&MVEyP$!N~b*`RgLZT^~L|hXXD}eKbsl(wtfPhXbEm+CI^u3lY`E`uSx* z7fw2PrKYWOjej)7Nm^nR%Q3>)yg4Ls<>ldFY28l0if^~YklAWi&M{w`6@lUEqjeDU z$D~v6ooXQ(ZKD}6?Qb*~At0?L^VWEJ;*NyymNqp$3eOGaT5KVa2JxW?WE)Z*yDc1; zK}UjY5A9Hl-tjq1VTX-v|KFwE;sk>K8jqFOq7RJp}fqmqb7D*$$Bq8r)kf)g!a z(8q3%ClJjR1j*QLeRC0e${N&@!vUt7*PJ5tWCk2>jC1~Wd{ zVlHNgf-Y39DEN`=G~bb&C!4FtMDWm>%N0Ts@Abg`^b=~$R8+7$>wY*`?CcNv9S&gR zplDYp=B0GsDP2uX1khQ-%7cNMtdBXsN&K7JtYAB8t1XLwp`xxfd%=94oGLf9K#kJH z3B*VZYiM+RF;V~;6=5`p{iqPu6Obe$pD(I!5PZEFtmQzg|2{d&LjjsLgx;NGHoxgc^tMKNt*lFKNU5@0z*Uy1CHY3cH5VUpJ+ zmf5(vdYDb0?qa9R+4Q_ZdbJC~CRie$9VU5rV_q|EICZd4&QeURHr2G4lq&0rX09n| z$~KrzC^`Sp&bx%(`I=tyC-#pC>}s&1E$c6$u!Owyk(vR&lq?-?-I{xJv0t#Bd-)jO zp}fLV`5+=81^|jArNojX(=)Qs7FCL|0mH8QHPx9!B!?z5{+hN05cw9ys!0vm9USdi zhAx&ZT@m{&=0wG-s5U7kM2jZJS=lPsgcG&B2`#49$!)VzoeUezU8g)zPSZ3)`n9k44Z)%fs&NQf;v7+wB)Jg% z=$D&4eqlA#n^%&VFrCcX3Cy^kiWWvi$f3QpKO-G_FKwn>-=;eMdZzmb_tBLgD@FpJ zGR{~gcmc9E`7Ax(|JwtvG&byhe!+cTG>~)+f5u)qm;8dcZGm`$z3?wKt2`L2WVVLz z@t+J6F0SxbkEn8@nWPNoD9Dz+{%`3+yqRoPOe=+$fC8hKYAnuuWV9X3&f4>b zrlLJT=F?QUdkU zV;btUSLMO&ODhi5V?*A|w`Z*G*&rlFeSvD0i6HBs1Os0xy?3J9Prw{mhWjQUD+rDN zin%K~v*-AUZ+Af7p+zNs-UY4A1UJ!z0zJsWC9^$-tAv9GOz&fZr^AN1Gke1<-wet_ z)H77i!W`ETjc@laY9lA>dT1bQndt^|O4{3D0GErc9pNdf&* z!@;R(m~a^NT)l4Wu%36W*G*35+N{+D(3Pgu%h<1G(3%cUjFjm`l>_AlJ!^$rWTW9+ zpFD06jpkZWAA*vruc913LfD6^4P%U7`qKBf!_$F8t*FD=W7bgZY2TJ3c_KI|)YSfJ z#zxJFsPMqdoli(S3Z)1dBVufCgATYmF66qX9#MAEu@SOoPlMoP@}g6#YjQCH5V&fL zv8rc#uDg{}SJzCjo5&hP@x-vU7^`h;VvTVo#Gq#wSyd>v?u#@k7x&<2RB>qbb*(K> zvyhV#K#}6e@PSTLnmls?#~rFK^905IJV*5g#V7{b<@Q!X`u5#|H@BsIWkAaW09X`C z|Hh#* zfCnD)M$5)(&Q8)aK{sWkRD{i2W&N-v$9tW4dmW3fWRu;zpljym96(gL-_q6E-4>#3B;H=^la#T9y5 zhV};-0K>#(?V#o>h)WLu4qPn6ICS3__a29H;8U&jCmn^!?}o)x#uwrjY&gM?xCPXEunRaENWZ`_r=r6L z=dsToL0=ui>9(bQ;!Idj1)7DumSb<%Ovi|!gkmOSsYLV_kbC|kiJimF?M;{1XY(#% zxWB4LxQa~X4lMsrQU8A}7aGiKqc&;2$zWoDLrGN53etR8R3e=@SF2DXEQp{~%P80% z6V4H2>*tGJVk#YFBdUe`0XXn}_>1Fp)M3Nhj_>Q)<6E1e1=TWk)brahVy0Pi6)NL0 zk08R(nG23wS3vwhy|0T4+Dvq`MQ|+k@d0X_1EN~qbNo+xVXU-1oW|uG8KIVJj(QaU zGg8+Rnd(s`FlpTSnYEBPQiTqEo>IR+@=FIXBue~0P#9$>taw;7SQ%Zyz;b+C;4HV1 z92(BQa&3tu^*NaJ&$)`_OXutaRC~Gq;IU@~nhx?@Tzpx+NDaR(2X7Xbi#{OEJQ1`r zr(CdTkBFsLBg!7LkyB6#C+Ae8B> zGL$HCucFmb`wt|zC}(lOQ}sGZQqgl~M`2a@gvZF5K6RIU;jr>cHa64)N2c%Zwz;h0}c+ z;GW_%R9IM{VeaY3nuOt?3ESh< zR-rqu@^RNme41xLSk>OO;dDiY5YPlLps7{lxgUw{3Oi-wI|*@&PSNoS<_qDTh$Pgk z^3!?1S8Fq&WTmLF1Fpb?(dCq>_*U3R$5WxvJJg6740TF-l!H1`3;6-{c8}V`C~nW-AgPUy9wkeB|C*agcBMMD-}1W zr5_pVtm+_+)m-IxD4sl}AN|C8YC+mcGi73bK(SB^iV!5Bqi-6B)9+T2x#B!aF-$1? z>#!HQNc~2>?ytb<(>CDMmeFgi7)<4RUzYfhcW`TGOw(_J zqX&OvH5UpG-YDt>)e-ca7mx53tqu>wybo@U8?VSTbej9)TL6SWeTg@N{~X^9VY?Y2 zb|n`K`>D{atjjEkt!y$xGRUphm&&vkj0Rd# zY8?YQ(A9vie-}ZA&`L`ibDJg53h%{*+n_OHvk;C%I6~_ujQC4`X}R*K)A~DDt8wBx zL$-p}(^s6V(sm~ljO%XT9VSb10=taP^L+QycGq$HrQ5|2)BPv0vD59f@}MvA8#m^F z-Az+#4DW7W9ur6S$%2*L#zZQ{A4{=l3iQCg<3#|Q$lGg%E0<9=WbSluj^C!{SS<^0+Z*}TP698=8 zl*p7-{;Z6RrP0!6yJ_eRy4AnwRVh6~(dsR_`j?a2s5c9}4d~Z;8qiK_Y8#6)y%Ub; z$%*2S1X&m}9DCBTW8L?&)be{2^Ga(H*4? zFky0VLvShtEIifH>6i(?8CM2_ZEu-iTcH0VigTKF?WXPIf{6m|ORO%IFy>02va#_b^8Ae;Ui;$-_(<7FZ<(48CHKHY+AQJp!YY7+SL_y`5;QwmlT;Z8f*2>GY8UVVt}%LNm_9u zoMKtlqZ^ug45iezY&=8K_=icZ%#wf>O-Ax8Q*x_kCH)VK?B(IKcsEs>m>y}`NrGh# z5a}WluX!3zG(c!1j*^GD7A^&#GYxI=Er`b|Dr(|95f+>xMS9g<%ll7QRA{LNkOclG zEI7>x@L-#itp2m7pb=C+>*{lXwIBkFW%A{;4I}_z{*@Fi(ucH71Dmuo*LSw?I4I z(@+jD`>Uq@q%BH3A_X6TjxdCJx#zG}`V_k6w;|dj~ z4RBN===enDaRnr?0e_LbhEi-{4!QDidRRw<4W_FUyrrIhDJnl0&X^SVc(M*9G#VR( zxxU`PWFwV0hH(i>umBsLQX*3}L6=mSg-7n8wBqpuT0%stAC9J`D6|vsEmigr`5Boc zxJIyWD~`Cn*q_UJvA#eT4pVt!0`DxIaT<&{%xbhF@zFBkW}23B-)k+tj|epJ>nswl zf0y}-=TEs$x$l4os2#7cy5jy71W-bC?6-3))KrwemC2K5X=Bf7N5$n^@ZM8dn7`@$!EE zhOgd87cj8GtEP^r;GNhku`Dce$Kb`dS0DWv{|hy$d}@P8Met~HtlMU>ZX(GL}Rm3D%>~Z zYoxCgwE*fNncgMJ4424$gvCOQx%c}Zg}44Xooe~+c@bp(syVk!r^oK)=xXFJ`3FJ6D zwf9EQOZwEqSF`y%TD$bE1E0!jIl!8he@H4yURV(^ zNFzU!De7_I`RHMd-2m&RAG^cLEkg@!&8xLHpTYWSp}Y`)4v-c4A5|F<7whP~)(GBq zDlj+&I?K7YHVT2EE=|d*+NR~%)5J_%BCdTDLBv%ryQ+6BB4yte^fQ*P9E4w&89Lt) z1au`#pMl%Fxzc8V#chp#qcH>XXKp6VXDRi#i>3Xb(Xc4@`k7sb5T=i|)J-mCTVI0A zW&k0vO0@MGFTs^;obG|=8uSb)Uke>Dk)b!a;>TWU+ENz_cn#tM`h0fO=M-r}Bl@!l z-K^eYG@GBQR);K2Za3+^DF+kO3eV@ot=c@y;5bgU5UQa)1`)gq>}u%D@(*FpP+}V}>jrzR*H@yI&_$w_%S#|1?vpT0 zt^~~Ye+_$4swF4GNI*b>#c7JvKiqnUDF~Rf*(nH=H0V+=SQKiZd5{#-HLC^FR(}TD zfZyV2X%wYkq=4CkFuim=#aNS%i1ab5^}2$cf(#1AHNy76>`bZZ5U9BirUH7gm6EJwllbMjEJqD5=+ z5u;Qx^{Qeo*}8~ZX$bcxQ9n8|XcOuz4jJu{Mwhxh4e&?odGX{Sx*w9WN+iKlBeC4P z*VdnVsM3OyVRn`%||r{SRu&z3J9=CZ<_Ln<&#fx_B4oESSg+kJyY~y8Zy6 zo}|GBbF(0xdc|Crm{~0CMt{dcPY`zC(pCg51Hfn`tt1zkoP-5EV}3if3b?1neA~z# zdj>To8LWq8iX&Fb00RXQGb1ZZ|8?ul25I_f4OMUqPYoZbISPd`Xc?@pXMmn~dffG5 zkE~`X*KoH!@(_)wqc@J#QpF@6spDnCkeDc;SeFZ%ZFkmv1cQ%5-6vv zlsj$34vc#oCj)P-;rBxdqDKiahJ%Flz=#}7$n=Ej!7-U|a74oNEMg`LK%mCLo?@U= zmQFQMxWoU$YC0Pe)I6-qT)lVc2>eKu4KOb`r4r@V2p&M7$Kxg@U!)`*=f}fA(!n@R zXln3dI}1>$o6kkX2zV;ct|)z)VlHkcrM{n{SD3YOSm)ul%FF3>0j2a=F9sVS?)K;Z zzzUkpOr{v=`2G3??3#O0Q;b0MTBWJGXGp$fZ+K!aU4f!(kMH9Ro|To{YW%yV0T7G& z)jEM?eK=-{BTE&B_8@?YN|MzRI@>qukZZ=vjyFwariA1kn=a&wf*s>#=_HoF1BBvc zrHta#_OM#BtXD=u3@S~*%eh)c3v)zTBa`q23)!!|#a@C_mV7n0eKPCYuIf00W3z2S zJAYH6yhf1D%K>YUk%c9`y19b~57-qsHgUATp|(s$((i1H%7VYXYnywDr)Kc#`2G&* zvC`P2e7-#VAmifY_H=B$pHQekg}9nY?J|DKecj&xU~j0qW4|`&-5-s`X=rFXKSb&| z>paF_r)ElU523UonutTn2^_h=;k(Um!!9CaqUQkh|1$0^f0{9F|8|?T17y>;$t~Lf zw3H1yL#q3&;J&KhO-|C#R~TBi{f@)=C|2rzms*eJv%Wi%3plo+?yunc+xmZPxmZuk zujS3o(3V=Ilu@TPjnK)nEg2jQdQ|2tgy$T{uBva)698XM#Z(fei=8M(U=8u<@o95C z>^-)-sA&M9YgbBHA8suL0Jvj}ISZJht@$MrbB z(56>d$FLDN5QZ(-H4N9m?wR4`L9&72Wr6)Nd=KnHh8w{i6vO?XAG9_iH&P4un2&Ni zB7KcVhY`e(a?CbIVZ;tNj7%uKIf_E+fP>J9$Q9Q;kE<@3Jc&=phz*xij#EhT$l2|1UP@ev92Tu zlK{D&2}Zdj^ULs_7E`RJg;08`w4{6ypM^+E%oW3$T!vhP$&SnkuZkIw10+gK1y|_p zTlCxS4<<2A0(ZtF&ggaX1kdn@Qihef3{_PWSgs za9J`+6w*0ClT>8Ho1mOg4iSHionw>Oe43!SwPOAR7%`DzMyw%cQ>~OH#c&drN!!7V z|2rI&V%dP#8OUuA1D*@A7vQ$UiGBDa=o%pBR4Q#z0R`=#QAo@IdwX&l`k)_rE4vFk z`Y!>$5AuF4XJn2mrl;=J$%B6e{?7zlO4ETS((-{IM$W3AaV7)3yFQ%KmO=3k-lOcHHU%5AkW|!f-;`Tv> z-v5kfOqq%pRk{stK58PY^`o3%Q->`fn*}G8i)$jm3cm_{V%CSXRX~Y)B}uJDRD=ji zildxn8R3_qmKEfB64NAj?v1ohHMvHnY z!N|B{-r3LFr_@F)Iz+li*W~nOx1?*FG}R2a`2rqHchfml$UD6*h(plwDL2mh^vOtY zwhEKZV|-8>u(p%ml-_nV*~m`nrm;JhO-{Tw9*kV;QjOzyL3LiuhN&pxlHp3x86z>~ zn5{HTRXk&278fg+@|e+COCn{N9Fm)RFGdZTGzDJb8ZRUXgEI(@E>WQksjN~W#O zv4NM+!vq_DLqd_(AR6jH?|5Z!UC+O|J4ASiB|!z|+^vCivkm>SLxP!j%>g^jOFUOjcNm2=p45s8F(<1~(%{c2n;ZYzIC3D7ua7%H3kK8}@!x zLbFwW&`{--Z*{{TOsl)eb;0gkak1pnT5W1J0u`V3>~LH9U7D@kF6a-|s=t7%OobQZ z4PMvTc9w4OeL=K4|6_e_YqWeF?k~t1%|i>)YaLmT?grCakWc;E2jyn?DapHvC__sC z-a}|fE96HJ>iyX6+XM8z*~16*3jX0k!?HPl;=&)Cy2Tusf{+Cm$@b&Og(iohSnC{# z;Y*{ug@g!RE(_03FmT?;7!hhiAFZzX3s|E%F6K}a^22Q=LRutA;K^M6;d9M_(&3y0UF4qP=i&G7yg$9CY zFgAg?D+m;&ZLS18WAui?|i!EYDW_4nbY6qlq8!q zRp2X9m5A8bc2?Vo0xMp0QKE_~!oYuj41Ee_2D!Pv&`-==3&b{sdAifmUb+#yD-0(M zJB_&Iy6ZDoZs7`xBTM1PAb$36^!W7r(c_EL2relnT}lAw{dbknPyYJzkJ0e-^mK53 zQNQRuA{lhOhdX*_%nHo=S=VW8e2_KoYex3DxF3ZFJtqbS8-oks`@W#Z;_5Dc@GItF zGJ>QG&o7Q~??Yd#oxy%VY(Bq@&CzHIuuW^|jwH+ZU6SSE)00Km8PZRpBYAZ374zuf zZ9K9q@eA*Vhr7soGjOnrs(p7nJUe$+fZu(FZcXb#JI1%Kw!|L&e-@7~w$L8kWuZOZ zS7`Q5dLVjsVL#A`?|Ymuwa}^xfT8_H^;yfQzX6wS#{?FC6T4oSK+)zRK+rDgW^bCp z7?DTfG{YHoW@uYQ`v8l+Qt$SG_7(P=Aw^R*DNAy;2-@BxGI@T#^E<<-n_V z!{pbUna(;)ajG-G|4IV{BR+=I39XW#`?LAAlAeL%LWYdw8n9Yk!&O=t11c3@<3o%H zg@jFQ$<+|mBt*4D;EAW1xLy}O%7JHK>gcj5XSsoY`9=7wSK&QYDb)LrIpHK+gm3T< z<}`D;uxwr_?@A*U1&bB05uR^Ugp3=(N4dx{P#2*y6_Bl>W$|vUVrxcP$z_=Is#$sH z*<#-O$R{ngSSao)18A+`%1Z9gVx`06p_|X8u!LOj=+?s?~_s z&@lrNb$~2ejQ=IzhF$8)q|hR}4lU)`$d1rMn-k9P7|H`McQkdut>x5}k$2qZE^(4a%Af?&@RjVR@rXR%_LB*3zth z(CENr5noEIT_*YnN*dY|oi`nvFiRW-jc^#ES z47XQQx$$9ibQ>Us4t4u8_~(D}AG`YH3$KfWG_ond6!I=-Wwwo@s*-+trdcTrDcT zfbaOiTeZo64sAy-Rc4jCC*kqNJ5|GfqTuEe8de+ZsHtnhE&{YrWH9HIbQH2)3IAO6 z)5yzOfNLOq{^D-zK3*;7)c4lXqhB3&x>%86fL4VxNZZz*0UZ7odj_pXE{EW*CP>h# z@|jzf_yi{$E-*L^tib7vL74k&D7Z`W$m0S(RXD{wC2!5(X$qy|hz9G3Ctlirg-~-8 zTmq1K+L7?p45YsC1nUMw+kpnRr0-*cjn=?-v~qc^X9{&_9u*j#Gv*unss zXHd})oa1P`;-eWM!P=Tyn}D2?)kkQcqmeWJjD4%DK%eGdl5=FaSd{be61F;DhgivzGDDaI~@0D2Js?X z&2hqR6{@qB*UJR#0cn@S%mlc9Iej@fIX-=P{P_q^JW8pIDF`GsB%DEPl({xBhTadRVPxSM_7$5aU149DYsd4m_i{kOar z<@2|fU+rVt4?~V_7toKkAda>v2&jyui#XFU~7QbO597j%rP)*eJD_DL(}Y~9RgZ9wzyKHMp8+3CwmYIy~hX=Mzkbn)0aBh>tm>Cy?UEPMZ+ zz5D54oaD!oC}RF^%vo+=b{6N(mG(4A=ECLGbeQTQDJ8G0m`X^0xZ-l*L~4_%)YGKk zLM2j6I~1wR%n)uKy*`dvD!H|1u}HNV@RU@?%z#84Aj_CJ;Ut{JKMJ^J=ejZ}#FN?@ zHWm%H5rb4`Ft7uQ5AuN&3S!2M;DcOb8K|?^nF?9QiMVCAC0C6EYX(}$MLg+f8Ye_i z(~lF5I7IXz6IUL8lCcGEa3dqrX#f#TjK<~UO@Nqj)_}}rMi=-!kd2daGR{X#Waz<4 zIFiwTn|W1$a<&Dj);Gw3XF*LTCXcp?2wp59h9G?y6x(6?x)Bi72w*;p@P8#IV<{%+ zOtr+%1{mCw=qh9$ zp@bA|QC25xS0DQTi)(GNpjFRUOVh|p$b-$;*Yx`%-w44TRX z$NlDbraty_|B(>jM<)*M_7>EnY|)DD$$N-b_FJ^Iygr;COR1Jo4J zM%uRa43t<4*e|d~n9CumD?(t6qoB48xY38SJq4++J;Aa8!`(oG8`Af8gAHBV0v%e} zi(RGuYV>B+ufHzk9Ggka9h)0K^9(B51n1H4sNtjeAi>%|txZJENph{1^Z1rCj2qNj zSwx9{TO2`U<&ZPlTJBQZ2$P)qF&!%WXKwUmhA?uK!p2gsIaY|fjR$Sc039!op6nu^ zOQWwaj#<}rIoZy2HRNq@~M`_JNkrLz~&NfP^*@D`OP{N5T zkc;kVgsd7yuYBJzfTuVd^=Jn1B3w*W#T1Nx-6>Qr+7K)3=^0ULl$lj2uo;&qt<=_= z&`q2>rf}%apD=|R0eep2H-UZQ6#iPVSLfe99UY%6V@i33P*IIzvhGwTzny|H+8naq zLc2jX4;fBNi=*q~$F(MZ2XMY}_lGU8?+My>#JmDoIiYTT_e`QX-=zsRJ4$F~xBV@D zS_*?dS0?L?i!rihrX@Bu#3KrAmCl`11al>@RfHrhC$DB~s$Kqowv!%<$6GNIkR3*D zBQVQsSjvVvwc{VCVF+!6Td)BYrNczwn5J~vYskcgO6@VmK%uW_gwSrX*_@8AQLQC_ zbl0hrOIhtqG5hu1Jm_l;d}0C)$e98PGyH-OFPq$@X)1ijj-{ou;S`&${e+FvyRRxE|dWh z<}^)fj$NeVIYMEV;C@HDOGT#D7a;)A=f70ief8Mt0_que5FSy&A{fFjza)fz8pSY@ zd6mUsFBcIGF`TCYO%;mH?|w1eeVV`xFG~3-eX*6WXKQ>}^RISC1IsWMSmRa6!YL$X z&R}&*#QH3zH#cL8QX0~EiDxp6%oQ!{y-9Z8`Yz;>|t+{|h9*Xyk|e7V5}N7s|)>n>w^F_cCjHG-%6hSKnSrtd{qiBZh+dvT#31 z{vBNKnciuVU|W?m_aWPVGieaxkNYG?%hc{ucmNMzhK<1IT>EkLmJb{kGG5v;N-*?F zFx-=dd&SkC>6WCvPb5{DxLOwIw-7MRYO%J41Qjbhv~;w0q_6P{y>)Z+_IFmPaGBa% zciwwh*>pkLtEPKZ>Q@{8AwO=p#awY$8Cct9I{y8C1-;`H^cpLFy|BZ9Vueb9jfSJq z@aUkMZOd2Ie*ypi|Nrb*TTk3L6n>vy;Z4G9gg9 z=5dikF9NcEru5fOugV zK`oUD6pH+uNrY1G_=HI`d_nXQVS>zJ7REJV0}W$;4H=P(BuF`uW0-(BUbup&M8?&s zmZ(cJjfiY(BvfB-O`ue8TQ`D@kVspJ*k32?b7Hiopg2F zxS?AsSlpx@n1@heyi3qUCHjjF{1vRL!vxHKX_9f+4%>!#OK^X$`0t>rv(_!E6M6+j zMoi|j?pI$Zr6!$bq!1D~T0sMj${5UFOx0^tpvi6%i_r20BCd0J$)zS+Zy@Yd-&jy_3g&=KD{2^W-ZDA^R;?YBHbhd~{l=@>vOP^I3g0QvgtuaqDh+l)5f5?UU*7 z@9paX(zN%QtUWm}BFiiad7U4-(x_H{a)(K$PRw#lam;Wh_zyN|*l=NqbyBe<87+XfDG_p)2}F684!a(0fDUp%^L zP4CvPQ>Nk~aKbckv-%agR8YQ9ER=4*)4)wA6Ik2?Eec)eIxv5BGHM`YA=WZ~)PROH zGe;f3vj*M27|h7~v_QveFue_`_9t7~Xq$}fviMqoZx6sNO>I~Wu7j?-5viUb4J8vH zkg+o!J9|5AZ>#!w&2`6}pJb>dhs&oqYmc=Y$2ot@;TAc2g7MZP4Vnh$+YNErBZ+}r zloN?^m}4A6k{P}*Ca{CmkJBlCJB7?Y?ci<(8X0H2P{TT)7c~Upv)b&C48zb+ zl=Q<8N1aZ`JS5~HvQH9XMR+YE;jvVLu&Jj%5A*0Q#!MoN+?S}^1RQ@QgS1~+k&Qvf zU>N4nFzq3dXl1qFu;*hjEizzAdbJf!AwLD2I6btM7^MOxx89QtHfP$9RP2KIl(2h0 z^AHvU`zc8hV7HzU1vGs3suIvC-7*Z*p8j3XXh=zXK<`pO2~2Q7l~HsLeJ2CVOvb1bEByJdlw%=HuIU)(ASPU72P1b> z8fp;S4f+njPHga2i-i);W(f#;yCA&ERWdX&Z2W3+tlVi)F8BjU%s!wG(_9PGkBYk; zV^T2d(zY`b<~YmgvF@+APK>~hCI5O51g!cb!}n0+2q>8o;UOh|^aX-q1-BmKTAb8U zD$;3=3MPSS^|8(>z1_k5=~TVc3mCFhVis>C;G6RF*d*2~1+7B#5w6|Q_9^#Jf))0s zf)}}O+}*!^adUlj)$8?ry>~rpW76Jy`bWXl%YXjvjxH}R&A*_3<=&mL%JVj+nP=R6 zq%e)u_j^>{rDk-0u|<>C;A9go>R#F(ZT=~`e%xkwtL6V6Yo!uSNl*@tA9o?ks3_r5Lc`ENWWfvy&%2b2U2sB$_4oo%o*G3pXkBsb0YJb zeaKwV`Ml`t^-odvYemn^A?Tr8DG-bDV(DOn^i|E)MhxbE3MB&1P6XD?If3=!5MXVZ z^JNfr>ehEIPrvwjVf^i3FqYCp+wTVEq=rK9o#)As@zQHmWqGT#!Aa3i;JhlbtuZ-T zMcHiY93QarWqtSZu(WsKKc7D}iv3-ep!046d-1x*Lv`-gT}@s7*^02NL9OTO$Mxni zC`_nlYgxsAM>y9N@OBp))-9% ztcz8ms4i4r>pxs2u0vf_;$GEsKe}?>)~0V=rrEH!b+&y-yEQkNGOP*#8>RKSkX*&&${l@{Y5=2@6m8*zw#8Kw(GVi}GpABPzxETm-IpfIhJ z0On6#cWcLzm@^+c*C7E^uK_f#ecYH)c*}7{)3pX+zVx+)GWBhrWsjHt<7r5_Mgw#* zhgdE@+0Qy5HhUfowXo6x$A!|We`okhmC#1?b~dkUb0st_WvhehQH={il~0&&-!Hdm z96ft~j{e%&4J-TMVK3+g-S7wZmy@an$}~i)cgo4T*xg)n`u*Z&7b|kAcj_R$&Mj!& zV_1^7a#x0PC+ayG40K384fy>*W|pI#rgF>aj}iD;EB9#tLU5gppB^9Bj3+W>Bg35{zU=sLW87s9I(PfIKz4*i+@&0RR8&n89x2HV}sIehNYX76}?jmYsBW zy^heL-CnvViU#PVTLiR3TSO>QC8>>#G`;sd`ec2Q4k^l!Y&o%$G-$TI#Ij8O9R8dc zeh8Hw(h_sUuqJ077hXJ8I4@Abuu^A#-mE|+SA>y7;|U{POv(J!Ous|p&{=dB|;v93xQ}X@x$1M8EucG!C=K`Q5N7)4EWjFq~1Hm6IS5 zd05m17h;atLeoTr6DB5Mjwufrois)yrXumL`JxxH1n(!e9-5!iuHKKT~pr z&P6E`vh=oXuE{iC`LIWo8K=p8K5sC(u~O6C%3qsHAtY0kRjY|BlFCc(*0Dz7se&Zx z_9y!@6vlerYlMY02u?~3p?_uOyO2=F`K=vJM&>4>pvXhQ=$y(>FA8F#2r`|sgGou5 z_9^%6doSj$N#gkM2>rf)e%cMelq59AEF1(;5QX1X-zrr-(qZ3=>vy`+JHAuS#rHi~ zTnU-Bbn16{tGJ$8Xw@;SXj0piNT|Ct+sh?53CiOd*x!gf#9x3L`nhm zc>VZ;%|%)=vco~#AK{H_>UEyGq8JzPcS7b^D}+&%PYClA!9B`(%o;g-n;8}AAq%UPKduGO;BxT3WeKvk>v z_5X&5Yq7g_^{;Dzo@*q~RtNC6Wbv5M7+mW#r7p6Ib^1oc}O#Wxb$xPDtCy+Z(%c z@lHky8uOO?fNefNY$;KRq&8?IrZyn_3GQSAg*~^K;CAPsG5D_ZAamdp;K@fMM=kNd z)OcS_Ur7v8TP@FWd`ZdzRrUEFW#zUt&ri$4{-A&Q`t-Da|K?d~*~0P{yU=nw(5I&5 zTxw4E9s$%VOMR9&-Q44${jz82m%`Gmv)clY zelp`*d{n*J)9(M2b`4xisRU>;lnVK#9V{t>9vImKYoc&(GYZ?W>mZD_2jOohe=$E(MVrVhTp+J>?}`mn@NXT~8OY8upYN{xs!sQCtz8 zze_={qGHQ}_NxhdpjBP6GV%Y={xC52*}cj>F~{U`^LJm^t;0%6@v zs+3U0>7?L!&IEX%8W3L0xZCh|w;hc@fXQNiR$Rf~TCskPDtgD7ny`{TaFr4RPUw;v z_AV6?v}sThM7K3*gk~kgfeA^MoIQNAHQ$2)6zdC%EM5Myq>bhvI*m?XNEj?l2bHAD zgS-q$?b79-3l&e7msi){j#(TuiJRX19A{=f7{xAp*Db5`VvjO`$*# zH5N!7!!`}=r~eAtb7r7q(ohuv&yYI@WL;Bn@Z%-o7T2xJBIoygWwvIR3Z)PiO{@N3 z2bKuHnVS-z{0aUcMnXYzO*W0N{(5bHFDR`LL`c7yNKx+7<)E1mnB9hzXg`X}b~oP& zY8u5J6<-_OYe#|S#8VLY?KhyR4Q)!Z@=LGJ&Y;3CeU76X6~@#^tXpo1Ws}D#`^A+d7g!2A;BqSD!B11oI3?jJgyO#Y(Wj%DT<U7OA-Th>L zh8lRxj*(l`fWmcS!1cf3e(w_LPVv#1#Ldp~@67CLW{tbnwr+T7CR|MHdb$*zLFw}K z8Tt3)Lyi>YEaMd|p=(}FFK0i0y8nE`oSWH2x(sW^={tW?o%in_Y`>E#@97C^<|MyH z0;QT~AYx z|6knp=VjkT=2J7b!F$|)X|pdGv6FSXVqrR-t)$Bnxn=C>!a9CI_-M7+qC4Sk@G*|0 zy%wO4J@+-q0AO&Y&0AhYnYOW115LLMsoF10mPn(gAkMwJQW-y9j=~Ci7!O21# zBfb<;wHg6}A_A^)7_FJeHIX9O6%2kH)08zzF_G9)4Mz||OhTG&rL#4Fc|ylh z=iB+}q}YOR9HaH*)Buv6yAhY2;Azly;A(P2x_2Jfs78>W+~f(-O{TLJ%=o<}y zeFU;o5LVGWp{2He#NBe2B`t`2y(b?&{dn^yO>P>f74iesu<8mhaRsQ!>zf~b{&+Se zuMo8L<2py|czakCbiqZEfi5eH0@U#($iU2r9+aG)j)#n#NmtvnAu5b$eV>-t{dI2b7q&YL&LfC-P$JI*)=KZIwJckFy@wjxLCWvp(!}k>f_7kY zvTi=0C0;Rr-|k_2fa0E8vte``beL-yHDL17?Ju2wYP%tXZHbA)tOfILc$f9`o*X*U zMLK9xP`Lc}`P>c=g69WB#iF?Fow;?%SP+Utq?X)xYZNo30cevl%nPJ{<`1GaI$ zW2Y@-Q|4`yJ8lY4sFQX1^I*``@ao$_y2o}Qj;Dj|Po3m-1Rv|H zV%P#<*kk!wmkf+}5;EWnC2QO2n_7xTtcxAt058!c@96xIQC+k}N6A{sl0gm~m2;7E z?88vdeiCgT0@e&`ve&ujkx?rmAa^yzYYfkS8S*F;H#kD>Y1!C|8;q_~@}X-H?pzav z(+h~_e6xXl!oVTBc^SQtf*hHcyI@Bz3wSd<)GqRDD`1LU1b>ZCQ)!oI#JMKtkI~HI3$zfG9v@#h4u~2_7HU z*y?@Ce3@a_XWE1Wb+b&HQndP1#&Q@k+VOH;&~meC>T}}0*gX^QoiPs5Tlm_P65k8m zuecSyo4S831|}ai)vA0RmRx3_8$+Cb)ldR^Sn_#v(wfA#_rnGQ33jCB7@yTtQ6rU( zVHkLI1kKZAO-1QG}gYxd}G`f60M{9y_dkWAI2(KT%^%C7bJ+q_7w}xwj+V?!= zc-Z7=7oclb%syZxzw=4x)`et8>YnE-G~wQMu1;}Z zgz1Vx3e!p{5QcATGU;*&sj>M(6SUijlCvA8l8;KJptS=yfGL=Ckx-GfXfzmdxjBEV zOl8%Cdb}$oUAt~sW=V-(a5kUWKjr*9=ILa z0GpU_sa_$V5*^>7Q_WSUrR430cfa{oVXkEk=4r$3y^x11f<4R=6C47xh72mT2DZfn6E);ET&TKJ-|wBl6ZQiYUTR@^=m zVryoo`RQ^-qgtfBjbE62E0ul>aBUm9}C_de-8)v`=@u0g{_(Uz8u=sE+(Kj zFU5ejsPFrC_#MabAipi7e&V+i=Huk+?o4?9^Vniz8^VL`9L=BFDe%oxZr7}Wf)m#D*-zZ3O; zOVry7^nXm)@4Wf;c!P88!u^Ke-)76cdVP7q_Ki;fcKcp9j8u#e31-ZN$EDyBz3^qCQ1ZF|G|^On-E>vY0l zmxZlKE+fm81U`R(nPyqW;1fVpz#!`X|a?8;G)7XlX))-l_ zpk-%1_5prS8gS0iOyK#jn}x$n<88nxyTUvJ6nxIL2Uas_1haVINkwNfq`MZKW{^vR zf;M4eL5JixKbqQSFzh<9+rl#P!tX?^{a^BQjJisM?E8O}s$OW-$XHFDsCu7y5Hrg< zQ?2r>!{ZAtcse-iojyH2IqMvI;n!74DfhzTUa#6-*sfZid12+zjPb&W(kZh$tew}j zb{^#vI~gqw1@8`f^#Q*A_4`9%D@b0=h`P|O_Aw!#D9IhxT2<@s@!R+Po&0u?s)_G~ z`>0#rUmJgNjLae(D^W+EQmo^SP)EmQ?z`oyX8PVJcC{0@zaxPQSD1`dhP19<4<4lA z@gUjeg-364WuKM7E}xq?@tcQ0eYx}UctDIFJTksuc^T}6j2}D@#&3&##v**+%s=@I zn7<$1m(D4Q??_Si@ab#lKGX+s*j*ocDB~vGLal!Y?=|+V7hdmVv${G+iCEXlBSBvX zlpw1Ym9pf|-*;D2GPV1A@@`!hrmq}|u7lzJ9R$+u3;)9)QH$sIdbe>kyHF^a%eB(F zT`#)lEc`7&31tUpUANAlgzeh&)jDtk8Pf)1;L@t~Dp5V9VrfW{{-u1Hkfe-69%GBa zy7qrV8JIR17Tls{0?OQKldwT;$*RSHb7s&Z+aN$R~K!T^R( zWxIg9LeDLw;-pYD_(!pAQ93rLeSn{2%cv9~Vg?OqxN{~bvPmw0jyXo4=1vfd3?n|_ z(M>nedt_0vHs`l46Vi@|F-|Q?IBgokc&&fDC|z4QUOC@1kws)cWp0GxLt(M}1D0L6 z$p{1;rny~g2Q7?N=~qwl0!BF`xd9B+g_eY$+>n+Q1onbEw|O~#f6s3==;TZC<(x&!Djr@4LYT5<8AY>fY3>h#Uw$6lCCiZiN?u= z_oPbGNstU*ThP2iQM~G;9tDB3PQv3DCGDzn3hl7VONCdZx-;+QWW#O}&~Glnq2MkH zD~WMUg|@wN!*at8T^z3K^!Dna)=Gc3;Tq==79?szipH=hE|=RPu(H&3P%0d@nzuFa z*haOX%bu_F-|^YK4*gyVmK#o@{wEs$?YbL_31843oP6Ac-aF~_k55j|PW$fb;NC9u z)chhfi8EQ`oliFzRajL>9B;N!d=-|HEvuddz#ip#0&0~cyIsww>f|Hf(J~! z2~m$cjgnb4kSLmpZq+ZiAN7OPM2s@e_J8JobQ1*0BvlHBn$JUm1jIAaVYR1i2+LD zx0`dZYsofeAwbUw&UsR8g^x(Y;IlkEjG1gR1qe!u03_%E7c9x-RWf2fv=AI zzNvpB%H>-)qb$WjD}#S`#*StNx7uV7*2g;z6xrJ{?A-=?H3&EiX`YFOt~xWK_n$n} ztjC~5J*xEQ$F65r7(i!*=YI>lu98&sdPbiANS^H$<+*p+p8JaWY_G3AMw6S@WJSt< zqX$CRNY4%Z`4S7w+7DaQzC8PJ-6!VIC~uTE%3tTyvtL9X@FRaN;#3ukDzc)nh6Mpzm~aP!ZbLkphTro9|pK zv7kA}S)>Y{YryLsc%6AR>VGTldTr`qSGV7qPOOL$f*Dtp#50oIo+NxhnY5Z3e}0?% zJyj*nH^g<2xXypf{#7y+cp%w&r@&;P$WQP z#rB*Z)e%;79T2P-2DBS`5g?$YV~Yqysw7p%==u=bo+fXTN7ZAXg^8Fsn&ldjtHILS57m{aBAl@k5uQE zEE$1nnk=25(+J`OMxJYv_Vk2>If)^h%XinDmZH&iyB{>*MFis zlqzC^^35^u=n)x+VO7z(lskH++}EL;k_i=?Biw)SBNFcQhYzQxr|UBA_?dAJd)(|zpk(TUXz8^**OcnP)2}Xslv~= zN9^2r{=J?HN=c=ixf4i4CWRXV#i}vESP?R$Bvvp!akd*4+6g#?RRD^)oQVrJaR^n6 zx-ox?A`oa(WytQK$BG4S^3@jHqc$IL4?ol36}B37gqSSlK!(=&3YiH6MvTvXK4p(6 zpjwJA~LJG>Nd42@OP@t@knHt#%@{A)H+RpOFxc6=))B zYYHIT1|T0Xlo=0(oCU8)p_aHr2x+XzP$qvV;|NVog>Bk3j%nN1!@_oQ54n^Vxlsf~ zw4rBV^X$|&o6rl$QUaV^GUX7XsL-4m!1Id-dx=jr1^)|mStjmae=z6`4toQXPbb*9 z>moXMg5|C{wENquoYuun@3!ewTVC%3?A;|*IUP3<#yef;x42*_mJ{ozJOQtZWAlGz z4WIJRGzVv%k{=;t3FY(ST3Ay)(KBJ_WqCA5faBmdL*bD*YtJiM+Fozjnq29(v={gB zp}88AdS=zI43Rc7ZUyvX2HIE!)x;`X1Y>3eb!?R^Zjt4xpci6HMYPp8P2`etu4iZ< zDQ9=cd#jl-O;Zq>m|4mY3q^SvgUEj^7OP0H3f*eP_9>r8#Y~*AuyRCETyNc`1yX{^ zwp2)@Xx@j9wm{7R+9Z9etPWPr^|PMeFt2-j&^zpR4+aPK>iHAyCF48)=UCmvTeRP( zr=ykr99+!L21-v2@N1QxnhW=qp5MfUkW*1qp#Q4$SWPWhN&MJ0ekQ)9VZMLO8;K;; zC6>@iiG6KQLg{M%eJqCIft6x0eT|hOZ_~@0L4J9fKbB7wI=0x9acA+8@txPRx8FQw zIz<`2HQKe;0y~gT8b<8XB3ynK0abBw`7&Y++*)F=Bt-NKMYpEMI8G z&3XB1XBQ80+%3agi&AV%s(sI!AOo{e2MeE8$SV!7JIt?GZ+&1>#G;ckg{ z%~CzeMVNCcdB~-LRJVC5!y>lMO~h)v(p$4_rAwri z#-*ghaA`g1q={EF1|GIPkX!G>CgIzojB(>K;pXqFDq=UdvrGP1&T}9~3d58v6A`O^o`rkP@5#kspD7Ep|7VBMZWq zRzf5Vz>BLO^AVO52PsVw!a=tzz_oEm9mBVk0HXuE^TuI1g#Us?V}C{?fU*@DUSv}u zOH>fGNKmfHoX8%UF@ZG#6uu`h%`ih+02F8@WQMgSiG?CG(syVO7F1PNfv(7EA!LFW zRT?E^MmfNMQn9dcb~YKxEq#4-Nr-ny9Uwh+4{ zI4Zyu>yhF8$+33^7k_V1s_?@GX=eb$a648liT?lq$P#BcBS#^y<~( z<~19$d7W5my^jOO0SZCbcJa50Fg~KvW|jx5kHa+hDX1GuteXH4%CG078uSSTpurEV zvo(GI<0?`~EyQZ-VyvN0hnr1f-^7060*L?s^pJre1Rw_hfC`J8sIv7q%gnlc&k)1L z>pn#;jo4NIR004n;?a=6*m>I^2H^68B~T)|qo&p*e1s+f+Au+90028s>w#NT!q`%up`oq~P4uG#4fOeg5`?wL$Qr0I8k8^?rn^H>7_HKXCuM zN7O0<&%;G#!P*x}k>x7OzwcJIVB@H)b3sw^(gZn$mbSodMi}XIcdkgXc<#X2_GOu} zQiX8mpkJXDK_cAsb*c<_Z&)x3yZ&oH^#ie(2NAmDSx5P7~YVG9L5%;Px#lU38=C8WP z2wWcaHP7P!m5l>n>8``Be|K>wjqFI+$>@td@5oM+!(~ax)Q+%o#RkhE!e;FnIG?Qv zMTegWzhwy_xZ+#0 z_fS^Mvc>pibk5=_Yu@4s*d~Df5VSUbJUX}UuGRKe<3I#B->JFgwR%I)39X&3hZDwOqb->UnxGGw$1+E2a)hyQch7gIgcqZrtA4N@lkq@NM|fNyZUAA;$7abSX6cg?=QKuEeE7 zw<>>;QgxA?*vQau$gU7B-kQEt-w+@VUHHyT{t$=7W?>C?Vccod>87&@&3zO8o83( zWAS%&plk`eEUg8;VFk9>Z72p9Ct_GPs1fhtV2UU{0%ded@Bi2?9Qd-l1> zN1K$j?XND-(Wh=lbd{lX*@69z+_yxPl(EUi4zo)&&quz;Z)hVfKPBLx$i-&MX(i2~ zKE&Qvqyn{ATuz%3f*NljIi7`uDCs|u&hcxO(@AS2>SrZCH^fFzD(SqfiSXjvFZkr% zqIbz&VXX9`+%cFSIa*90Hf7FNI^-c)nqZ5db2bdi$dV16#_&EWRvFE<6!)qgBHHsb z5oLM}fNR5w3z%eVow^QB*0PyI()mdglPudlk+}W@S)gvIo`--H0x&3cz2zzn_E^w0 ztqNf#N4+=U?S3iKJb09En^xNq0&q>TR7p$QocueGq$7o#`_>M$n^Ztj@UceUS94-ga?LZ`Fz7M<>w(E}3j5a1BbTw>~TMX86v^eh>Cpyd<@ZyK{4m{8u z^fe0OW=HWs0xcWTy}zAv#k^)!xsXa&pw-_iz`Gp`@fPgfTC@M6zV2PY*haqXsQA6! zGK!{TjEcOtVxrS;no*uP$occHi}f3EHZfO{?bJk+sC6b#phbPHHyF}Pp-z1?Ulowv z$C-JH`RW?Q1;I&TFT?X1T{Sf8=;+)a!r7=?p{A;uX4ypPNv@jb{N#JdML1vE3V4{W$4YJ~;~<%mAHd1bHM=XsGE%+j}Z_ zFDIB9N(N}>Q)ty6=#v+HLIBJ4%$7H7c2!d%M~Eq0724|42KDhzpOCF-J@fD6hv!|a zoRe$r-7ofcY}RQqtFx{vN~+L4hYefmx(FZ(q1lgR3#zsIzHbVpWjEX1yS1051Pu3_ z4EmP}7J-B4zycYlH@mfL5&EJ6QiA#87p%!3nh*0O3g{4g*zWLKZay|4sqQ5td$@~& zflLqo?c}s%0ZFAgj5q-jk2loS)%6)TZ9@W(ZDd0< z>kJt+{gv3i&R{3aVWOR)&~{SNbCMAa@s!;%ngO}gT$xR`n(}cl#((wd|K`Fa!5Sxl zHfgtvW;gV#8k1L3A&+>%-&_pNKr!>G)*>3p;sjn=6-JUHLFHhwpU zh~8v>u705h4?korMI?(ft1`t;Gg!9I5O~kSS{B#%yL#Aca3CL-lsGl92o)70#liQ6 zNk*rNW)giOoNr7I@xjV6Zyt>En*)P^TIMt?hT7e084#e=PogVl3XL*eL(hAsVB^)5 z(V%;VcPey5H2U>(IVapVT^`KpMm}G^&29(i-|L_tD?i@9a5ue2??Hz4O6%VPY(^CS z4VO)7>;ldNPlUp|iU~9DYc+lnnAAWZrw-)>9qGAkKCLx9v9N;i-|n4$H|CE7{zB=> zGjDk5baSBf?SkQEZxK-Pqm9D;C_*t6fj1R7K!RrGq z&lkH~dq(*?&kKf~zD?ofe9)___7t;~4)HI`$u)bg{(ApRJ9$trwsQ8)1vsQH-@H99SrKsB@DtQRt*b?I;k8586eZnEobOx5DH{;eAUBKALJbawv7e`IN}TDO%0Tkon9|Q^%vu zH;p_d@}Z%o>>!Ij!Ji3|ULHX-1wR+u*=jp!qlH^wpuN`lxFYN_a}fD}FjTHNgyBVK z;@vS*L}7tS`+th%9ugj?E}6LbMu5aMeVVnPi<4()quVB5LP@J*6=cCXXX9c8r@Lg7 zY%o4^&pzmo-Tp2m#|8~5*CDm8N{NE`UVv=LSqr!4$%?6dGD6LLYh_6ZLxhgyO`NQ{ zQ1JjjW6acAfumc7(9)Ckkk44~0wI>_Dvk3elQJag$ zW094SVf1a1Gt=#=>oDPFsZQpp7k#4g>NaluB0?`vA&wnMZoK~wjt)Bv*F1p(=`o>% zi6}fm+*<=_ts<6n?3n1J^4z4Sq8*ZTR-z;3*QF1Q6Pz69sFOpQBkTxSEVg5E#duXw z)5-%tAjb{5i87}PoPig`Rt4@qV-6&Uzh>EF;`8NqLzHmr6=sdoGh(TDIbw(+z3QKu z{>Eb$^^u%l#zHhBqCudhm7NQtNVbzvEsxm;%)2y*5|rmt#OXtvB~MO2w{(mLwTVeo z=`3;(RswHW*&1itobl1ebqcYR16CAkd_Oez}eyC8y`2%C}bg?xZQMTL2 ztT(IgIiF_3KIQRB(t!NM)NP|WUnLTnE|Pw}#Jq>Of$)3A0kmm&p7Xel>qwple(j@N z_rukHa;A2%e69Y58w0*AMW6zY?SCt)o>@w@#WG`gm)Gj; zj{@0&wC~NxH2)@71%Q-y@XkgMQ%mx#`=h~h`YmGQSyIVk?&*p0)?43@8Qgh{YXh4( zFWG)@*%3rL<1~|GQk=UEwiwbB5~KxmmC2FY9yynpry`$s5a#^q<|WA?0t({iLnF6m z#qaGP43Ap-dwLoQJcx0jUv23CJB@M)>n&Na%Lr8r6q$JjQ z#ZJ*9{DFx{f62>je>0{>*01C+4 zVQZLr$B6f+-^+JRHkAMNKOnaeBxF$HFdo|8s3?Y3H>J?_=Z_w1rYg-{GMbLm1m;IM zsTj7Vjst%ZV*{bh^UPJty??N6LcL3fg4pos7rqK*4;ml%%@^(26;iqjq+0?UX)n!7 z-SUy{ibeBm;*)_68+5lUx0untE7Nh;BAA5PJ!8VZ2M2tMJAKWNAuCGn{8Ky2he&|U zLIZOcAx}NsXYC`Ql|c*OR0v*L=23|9nE;U|KmeOqz$x>@GH``$I!F9k{Vp!x_lE8l zvf#?OTjtJ~&|t;g$PRI20Z+lq-T0Y98?RZuN@Yxo53o#+8LXmboyna9G6JSGj#*a8 zVvBV~+e;b_4{Z(f98U{#qQG;IJmh#VI{jHIyE62(e-{=;!_iK`c+fD53LeZRdv zzP#Mbl|N)8mN-Ds-HWN9V3}{j4d3<`LOFQ-8DH=0?d^@r{GYmG2=R6$;d@JXh7zPX zuriX3ZcJtvSs}Wtk#lv;4-M3V3%~>>Xq}XO&WW4ctEx>(zy01;orR<5Ws|eGQcG8g zKvYbXO(J|Q^@(ME2$^BrW32M7kI0iEFi+#!IZAX9w66F4JCj{pz>NpYDCIv@b(f)jv5 z2?3bk5+F@NfB_Jvm$qS<|7$7+(#_~mI?mu>I%A&w-|bG*-xojek))D#uUo$ZFos31mea&&PUp6|97t7Dh}GZ@QIBh=cLgxrLeVzAe_H#>M&a`_W#+rD%Y(|C<-x9Yc0&cYs(Z&gI59tu_&)+8cC{Xg5Z(Y3zGC zrp0#VjgQZjz5COdv$yjRO6Sv!l+unrK`zfrc;{Uv0eB%MpMeKt*mdxqIv&DvVSewA zo&9akdef$#RbX5l;@fC4z@+eapZj?DBMtWb1wEzDcPg2uRFJuBaf`XHUd4^k|I!a< z+7ADvfIog4_0n0-{wE{6tfr{MePO~4D>?_6uv$mfMJRuPj3R?MKLfshNxAe~O$Q}c ztBl^LH;yk_4=;$vh41>pRdSs(LMd*e$iGOVSIIYhc`Y_=z+|88!1+rr!-$OO0$jT@ zrJ@mzoFSZzmFwB9x1$cA{{@N9cIFb8DPNIp;{fYFN@(YYhaCN*N0|5C?b++mEhHtCHhB&i|0Z3DW-s#iU2i&egk}Cc?iP zKEd?2<~su$9tol?F2D9o)Rp!&t&Bni?mh&+*shLvy|ubOO}lnv{0XFFYfK-?a)fFM zfZ1NQWki!!TuY)WmM2iKo9Y;c>dX0DaT z4iqqa_j|_-k9#ZA4y~OIK1)S(Ng+ z!+kj6tu6A|^{FZfS-!PD_6@Cp$vQU`5(1fpDBs626n}!ZQleH3=z}AWnlfvK%?Ye| zT{t*lQU*kCLC8ifrQ<_`pS4it+>s|h>+sS+BKEx+&PxNnGHRkxbSSvl3yKoO(*$xNHTp}#32?~ZAP@M;#%Y&v@%u$s72)wEup<)^k7yW_)Y8|c3$QECqU;$ zb@(50ztqQLFcanyZ_0SSR}S%~BuG!Ptc>?O?I$vRMby4!?cs}kF8;+K%X?_6TA(H4 zz|dxqgJdTlI0_cMylUWqJ!@%ius9R4KiUQFIAA1X!~Z4UtX?(j&>nJeG04iz0DJo?XCT@jO#tA zvVgMYw&?kT(HLjvg<2xHeP24ITGFfA#hsh6-8q_ETbHh0Xtlte&nVgx6Soi&@|ojk zH-8h_M^=fbOpQ~H!$pYkK8^{3TU}H;+Pyw`6tPK|Vr`_=b&>5jF7#b>$?`Yjg76>@ zA!y{G#!v_yvj_n7Lx172vaP4lGEq__7{!2;BR+= zViU#q8%98xY&HK&jolvoat{16jOxg3d1t;*AZ}DUApL>QFjF3v64qHQ%=gozCsazakyoR;4!^50PX7d= zLB*Y!DPJeEO~6_OB=?|@%24iYW{A`Gf#G?t$1r?oW%npKGv>39-wslxT{Y7j`!v!` z@u<(^SP{`*)|?x6w^^I!^$-Fw4_si?Co$58^?lrE@*3$!BN9@xLl$@9OBL+Ni|=sINeu?( zo{w7=|KdU}6;u+m+y{-%C{&zcdKR`lJc$>U#^A{zZiMsEB!dbYu!$p1WO;dQ1+5yE z<#D;|g6sv~Zac3*ODZr8DD{Ix2f3G+?RA)byR5;sysOO#;SQE_HwZm=jr{8Jt(xw; zM9kCvpKKh+Xws4)5+N(fsqMFriyBc~a8!N6Exf+Qp4(l_Pcl9#J}K^L1RDyEE!b(C zCf;UGLov8<-dj^*Nm8ZKDFpe2k;9b8G3`c;6u&Y|H+;@E(O=G0z_p0!f1nmUo!c_= zwvp|P$mOP$W^$zTAHfMEUQ9qa!a-dt+oM;t>Rr=0xcPx;>`VF_8R~ zBZuwggR&`GnF_2#V4N&HRU`c{r#j!Et1J#f4z;P^^q9SXM!!d{lR@92p%K>G8T>}5 zw^4+n5mh_FC?5$|Q5m9`$K#055b^HEU=23*JnT0*&ajW9Ixn(>u#j~*MMMq^6&gAJ zv{twMWu<7OB%=N?855(}6Y=RD3 zq7AL@f?$55_vZw&Gs4f06MxMspCoOYK97uw9 zt(ihvw;4F`4rRAk* zS~J{A??OPBIfEc)Pv1mqas_1R1Xga=sfC}fAR5GWX`N*X4 zqmP}eW*7xg>4&_iV79E%rpG&5@V^b8t>dLqa~)DhZBkD0;Kle=g{Q%Abd5%wNWqY>wYK81fH)uH5<21Yd&KZv%X%v@=(F9Zkfh{mxPzy7Dh|BYj!hVqaGevV$}xu2_w4CZ_0? zX*cn+UoXW3`U*{SQXFJ=pR8FgaOh#*LSCDcLlZe?y24(v;x*VlqD((NyaT%DRR>ys(lXNIh%I7YC;lFyUJ)~xs~$# zFQ>5y5(G^s^pSApI~C;umPieS2%QeD`nv$asHy!MvEdy{%`48fA4YH-_rbfm)tLke z5#$i*59vNL^xv;40XnapE~CdfPQsmLFgkee!5>BQpQA#jz$Q!euh_cTuX?VagT7Vx z@LqoLezGlZ!l>5`N6r`^b1C9II}JCn;&EZFJWMjoLn{eec|+10;2lymGFgn63YP(2 zOVuNx9{mcW0-I+vU$~cCq%~STQUP>Oi~Skn6@#aAi0q#{g`W0=m7fT@ADj&NWlHyZ{y_FW@%Q#Ja# z&mI3y**>hkeILCW)b!fiviK`gDH2$g3Yb0tn=1Y6lmKP)Sa|GM+*pyj5z4D_eCNzw zm0&YV(U9Cbldd!191GL8#N5$2z31)b@}oP4WSpflKjs7ffA)AWBz$ZQlIvv@G% zr(x7W7z{OGC`2(%_Wkcr@hLy>RSAC1v;e=u>Qm}%0DEGnHR9K%Hovf%LL}B2ZdQ|o z(|jLgk|qer539aCc}F;P8{+^AF1O!X<{xU`{!Tx*7Oc$y@%m@>REY!1F_iLfrxM|G zO0vb0DSF}1)d~+GCa+bI^va&bErSSdNHqrN`rwf;*ardgf}9~s5I00!J!GlMZn&nF ze>Mmd>4vE%XS0trSV|r8|T#B=Cy@itl9AP`*j9DZNx6{wHAvU^eD1T}907qhmy6uB@UzD)i@JgLj ze64-nf}YTT@r<(MKb6%|f(>GTmOs#&SQB@qa?u3wfT`Rs9cOC!nWBB%X-48Y(}k|s ziUjd$b0F=bpG7lN=PtlMqrPxE3~@7w{QHH#s#t4$xR_q`NKN!Mvd#;8v7H=EC$8P<)E8-XWtF|`d*HD=kziv!pSp5Y}u>> z5u(dS5yG(39KtX_3#wy7MkJvd^~FG#=6%C4Z}Xo=)LMs04KuR)Ft!i>_PYH~t5P$# zTbO3ZyxrJ>$#9C=bL7SKAzG7TW9aR^V_|k+G7taFX_|6%h(>*$L%RtvW=4<1&x+@T ziHp#|=};-wDY3^YIC*;3_}<)zb^A*PMN7*{8^a6QG(YyVncSbtq+rzC^e4K# zvl-U~sxIvP!NKk3$NQ?!ZoAhMj}m4n!Mk1IB&GK9a7G`NC&+|0&uh_Er1Vz4pYp1} z5IcK7L>Y`-4SGFR%4SG&Sm4X3%{b=m-CZJrlx7Z-&YL!A;J!m7>?AFuPCHCg@Rh zwPotOk~j%!m}L+`m1WU=4Tk3Gfm~6fsHbc7LY$R27nXc)EN>U=$1{zFisL%&coJB#jDGbLR)tbr z43&cbX7lA_$0`5)ZPHVI|UM81>ggrQ58egf~i%x&A)84aXfujQwy2HAqg$4Rsp?9i9{;M zeIX(K_6ii+=;bD_$!g0nSzpwpuDSRSks%m%Ux#m3g`L`7tZ*p3^w#_6% z4<>%(L(}u69aIFvhglyAP&cgF^2|&35|9=!*^7IIjA)65F<{*i?~9|BrH$TbXs*jq zK~NQv;R!;3_E`bstP~O%GC$i9Ua+iRIn~FWaa*s@4je|$IW2Pp&0)q7ka^jmD@~}z zO+1eQfq!v=Z$Uh40EVw5n;9E`UGFupAOr$e1>w)bX%D9(NGm1Hg~c?bFI+9)wCAQ9$HL%^33H-GSrH|V5!RX8 zbc{xW%mnTH6?Db+RWYnanKW=W9y|z@+!@Ys)wK=FH>r0eX~kS~pE3DsTT#c>7$E$x zyM*g{Fr0lcbup>uV1yvNVK|&I)cAKiwGxSv|;nuVDoprc{thAC(P(J#T7IN;&+rTC(}{)^Wo7=#EE`y*dA}Ol;%1rM+TDONc7EhqUgZ-L zh>|~*XW@TEze^hYM8issLy~h}IQ&DhpA2_a_KE}tn=hC${*kIcl5d`MqV zP6tMC`}CXO@a#!#n$B^xxjzu=cx+9 z6*VGBV0u$HY0wW)+;$ae9!Ujc6$D6N5J>byoOfzqTWT2z6HQ0+s3gOn2CRDz#Q*M_oo2 zyet9J7MrWX?u!Ixm)0DkmX0HqE=@l-k&f4(g@9FP2k>vr{K%C{ziJkAmXXxfUlveG zAT*2?K*xU_Jf5^L{XQZ7-#MRTD_5k32^ry~O25so}zmgPe zo~Ddjf7>wq5P~4uj}~)_>NsJ)G}?`IDws!gz!|;nyw4foV^DG;V^y}aBB3;okv-mT zp4$T#M&TG`_+$~tJTYeDDKRWjkr`Cx<~;%&+=LSbavyk!;K|02h{~n{UYf|T`=Ad- zZ%1dUo=+KxRp2HiHx>@c*RZffr~$Tif3-C$%T1E9vl%v~S7XlBT0Fn0+fZ=ATu4%} zx2c1rWeinqq`LJRqeZPw7&BVt({j!m97EEE3*MnXSdG8~LLia)@1cuDs-Y8shML5! zYRYakvA$gt`?t0YuO9e6U*;|&3{td8ALg?WqG^|FGhi)0xDmsPkZJct7M#0QE9}8& zh;c(MyOLHe$TG7!ne{7+W`EWjR+0{;tHp+@t3D_9<2$Vxe$0s17|wS!%sgh?Q+0g7 z;iq0Xx^4VckTK>@ePu6vX78z52>`g~1lh%@MC9g~td4 z-%-K0kFW>+Or>wg7fr=Zu6px^|Ca8~nx-62|NkF~+X0?>p?=mLdKO(t^#)$P&AWab z(CRg@(b;ybVe1Y*$M22ZfUWK2_1}$o;a3}VJ)gfzR>O7^k&i91ANd;i+cyj3Ddi3d zrK3k{_5^LTq72ZRVsM&gk0%-k(v)205e=Ak*i2h1$cU)+v((RHC>mpbfWAJHEqkVRY@GH~ z3sFUcR2VI*(X_-hPqnQr1Uz%5rG>)`*AdX$wm(MjQ-Gr0lt$_oj?J-6;XBy^b&CN~E9DsHsyLq~F*)LAFVT6Fd`K{CV|+sa zGUNOKn1`Zsc2d1Tdp?_DSd{(kuze!_pCG#Xiq^YL{xq1*i4j3&4`f#yEta+AldE8s z6KB*{KK)82r;G#zpca}39pA;h**kCnc2q=dD0p(r)4|2K$o#BQ?v$RuT&+H!$f1=d z&7Rk6pKY@4A)UCw=IE%Yq4sNq9KQL^ z49as^Cz`ww4{4lc7{>0i4l|SPo>(k*w-nO5(Q}^!accB+ZUl1)`OJ65QnFO+U&NUB z@`;o40kTsQXJf!o_K_;pkp8tyeY&|tdBdIcjCW;o2#Yt`zm?po4#7Oq&FJgT{aN^&m{9ej`px4KEi3n_Kv7*UuW9%5&7E+jGtrn-ox5+A7?HMP-$B~@fnnz-C zY;QNIg{9i42-N>ejDBK>q1ws{fbASEtz|Nu{<-ZzVQgkvyBnMB_Hsbp-M%y;HCVoJ zQw2TEcmMWAxAn%q*6IZ0a9N7^UBqRJe(GL_uWxqVpZRN9%{*m`Rks8sg$ajTtSj)d zw^&{DNI#eoD+T^`rz>q#Xt%PJMB8`C35&|bYdVA=C#(>wjZDR|*cmuPuM$`K9IrAz z-)$W*Gw(Z4_Dsu~WvujrAQt*P0B#p@B9 zNSjDGfy|&C9_|;JAlT{4{O^&r(N`AHlV26emm$dIKbIlQnyN|2|;QMHgt$CL`WSPbCHDq>Jqf>%_wuovSBxdf}%UUm?1nM)Wa zd#6WMM_SSi@1D03!74;E?OnTkRX=?A%db@**7U2CNf-_ zWFjHRDAn91A1DBN``-LO#A*M!hFuiLC{$V;qGVFUsICUwNg&1l3yE?7Ki)=l4(qV> zTC*!0%xLG(PegffbEyj-(3Lt%0=g!ga*9`Jc{pfxmQ$$KN{9^jcz16 z-`_5qP%@Ko|WU z1?IN?%E6)&d`+g;CFqiQPdp4sDD81=qsZNBtf#|X-OfhAixo3l$iH^uJR!gwOf`43 zE5&4bCTe`ksHl|xmk>eSIPdbO;+@YCRbR7;9Fm~1g8Hk)#-Zyo!F`^_R&1YMXKra~ zT)Y#vT)9MRSv+ZMshfnyOaoW4dOROw3WOV*prfr1`^kQkgGOi7T_dP6;yLYoGEuT# zRVJ}2{~FPi)auH}%}oraAH-$NsjZ~JP*x;b_6S0WIdRat2%OZ>`&hqGdUCoZX?pvl z_z(|&dn8B0@R8$y_+29}H&V9cS7fHLOhts$$Pi>13xVAv-Ir$Gf5l&Du3Wx4T6f~| zmtwb+GKJPdDg(92AjK?6Rk*Q|Upm~XwavPzypemZql||^q*SaRL=Q%4Pb*CcL4bQlx6sQ%a?>O@2N6^D z!yn=HDVHu`3+Os22v?GQb6F4*)g;VB=IBk|FmR%6640v))hHHrR)AlwZKjx6_CFuo zNDuK)4Re&G1Qagl;)qh*Q` zU1wnXxSM*G?a1=cO}a$9(q>x_32Z3IOjMzL@K}635WCs*rTM}ZaKWY&*c^ShcMG85 zi>eh$&QtwC=ErG~z#;X$*6(h?4CkFl?XYdiXl2=7j%d+LI7LgCk5R`uP>^P!$v<%( z=t2yA*2Ul(d!>)$Qud$i)SYy*4Fpg4Y+YefQX^|IXDCmyfl4i)VQ?UnNK$#`Y3XKZN+lW0rxh<#! z^qGe%<-^Xo!gF|CmJ6>;3}mSl&semt5XgBjsCMR%|Ipe)nvhpEfls~ z`K!dX4;JQP7VhXsoc>so8d;2%#bd7qM-=rFsqcpG5U9*9zN|w=u4?7WwTSOi?M`Nz z-U3}2XC5HFN|2f{8n`ZTxuw9~$uf9Nd>cSxI$WRN0KC;a{2UoY{;f2IyrHwg&+uBV zz0&Juv(l@#Zvmkub0;ds1<<3?uRY8_ZIJT`4g8f~Hp7XCDcPs!Yw2!De(*bYXAy+t%KEkSaE-^?#N#-YkL4lS!D zwgJf#0cdSLOW(MNaXI1ikY^XXHP$kCTYkM58%wkl{@e1GQ6f)QBoIk+MjYR_FgT!( zHPVm4&Fa(AaH`SOJq9;r=(^uX&LE8v}jKVb&ovV5HfUX=IC2d)gl(X=eQD9nm zH1I+AS<^)$&|Ly>1QSr9YxOG~+HO<)GNP{ULfu^Q;zS+zx&C~-vNHPoT!--6{|r57 z_j$X9{L4u4I$QOP(B2u!VVU>nbaU6~VQw97FT=5B6DYIXxw||4+12n7-Jh~tfFr+r z2z+1|+MPYq*(bvEN`Csk-L*q!%@OshsuJ+1Rm;vDF)QtQR=fgQwEzeMIq#?x{}`8c zSG=mxh@4)?(R_R2S6bA0EnUCxUBB4v-|ZgE_ULc!X~yr*AzJ$Mc=)r#n)WVc18<06 zKFx|B|L}A*CWUIiUuwAKe`YK!p3Ps&(uS>Ul>W8?7U=(%#J7FVzNG@AL>OnY4}|nq zjXk6%x5|2y`U6;hcuVpC%zd=-4S#4`PY|rZh=!0k6BQPElb8?o{G3d;>Z;N;{YU@y zal{`AdBkndT?^+}r=G{u^*KoIZ;thDQMf50Xgq35I>D^uiSSru;EwigB!lf)Pga z1HEuhB4?2}c8)N#_doU{v2ed4oP!`x3bf---AX!F?#BG3o@0YCHDa>(L02$km}P0Q z?%8e_I*~|64H*oErRj&%$bCVkJjE&!Ppt(KiVgklLW5A+RQfG+R?UjFOY&I7=?A+v z#CZR^jmQEW^zqHl!s(B59v&f~pY zyMXSj06DR$?0pz4ns9a%Kj$>=_wwehNjztSl_YD&LlRU&4Pj5C zc0(A?Fez-~;LV6Qalv%Fg6|Gs1OC~9X7R8-VER8)N%yPf-lrc?d)9xzCPY!VFN3MB zTMkfGix3?q(}7%<|9J&b#=2^@`88x`gfVYyf|!6`piH`E6YLHe+rT<#S z@E_nDloho&k3jZKMFwk;j_cBjVS2aYf&XZTwS2~Jy($8I9U{H@=v>kLJX;A-om2ou zmVEatgIm(y@yNmC3>TDGkyf1od!oKt1Bxl@i4&+snIn3|#_K*7tOs1Za? zhI`j&Jh_tMrc^swv^)}Vg+6wW3MyKR{V~vmdiZv%A6^3zQz0TeFg&xBQa4;6)HIaN zRJLe|1QE*NJEg5Q$Q)XaS?aez3f9zbE*}+nqcZ9Bs?|{WN$$5RDmmhmk_z>A{cQ#x?ye7qbO>wSRu={DS9R-JcXw z_E9Ly7h8FcNU)nQHMd+&@Or(ziq6fmt#=1h8&plJm;9i5TYx&S_U92gjY0D-iUxxQ z7KP}1f;$_8;8fg5SjjTVMwj>(qlY}BM3&R|MEjKl7MH#*%0DB#9Bu~_5r{PCR)8qn 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

=(eQQ#J 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 Hhx++{iIdGG delta 132521 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
@~e%Ry&nuRiPuEOQA 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 Oe-URvp diff --git a/Plausible.html b/Plausible.html index bcb0bfdb5..d333f928c 100644 --- a/Plausible.html +++ b/Plausible.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Api.ExternalController.html b/PlausibleWeb.Api.ExternalController.html index 3936f0184..f3eced03f 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 1e9e805bf..f1ff05e7f 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 2be444106..41278dc11 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 b03f55a04..192a45741 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 374e42827..e90fa1552 100644 --- a/PlausibleWeb.Api.InternalController.html +++ b/PlausibleWeb.Api.InternalController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Api.PaddleController.html b/PlausibleWeb.Api.PaddleController.html index dd7ef643f..1c11283b6 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 0d50bc9c0..53e0472d9 100644 --- a/PlausibleWeb.Api.StatsController.html +++ b/PlausibleWeb.Api.StatsController.html @@ -13,7 +13,7 @@ - + @@ -692,13 +692,13 @@ and month. The default depends on the Plausible.Query.from/2 for each default.

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

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

  • 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 @@ -713,20 +713,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 d8f1b33ac..b5f1660a6 100644 --- a/PlausibleWeb.AuthController.html +++ b/PlausibleWeb.AuthController.html @@ -13,7 +13,7 @@ - + @@ -376,7 +376,7 @@ Functions

    create_api_key(conn, map)

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

    delete_api_key(conn, map)

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

    delete_me(conn, params)

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

    google_auth_callback(conn, params)

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

    logout(conn, params)

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

    new_api_key(conn, params)

    - + View Source diff --git a/PlausibleWeb.AuthPlug.html b/PlausibleWeb.AuthPlug.html index 8801ecd49..e237cfb5e 100644 --- a/PlausibleWeb.AuthPlug.html +++ b/PlausibleWeb.AuthPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.AuthView.html b/PlausibleWeb.AuthView.html index 99fd38c01..489a2e2bb 100644 --- a/PlausibleWeb.AuthView.html +++ b/PlausibleWeb.AuthView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.AuthorizeSiteAccess.html b/PlausibleWeb.AuthorizeSiteAccess.html index 667c63156..41ffb23fb 100644 --- a/PlausibleWeb.AuthorizeSiteAccess.html +++ b/PlausibleWeb.AuthorizeSiteAccess.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.AuthorizeSitesApiPlug.html b/PlausibleWeb.AuthorizeSitesApiPlug.html index 8030807d8..c075138ad 100644 --- a/PlausibleWeb.AuthorizeSitesApiPlug.html +++ b/PlausibleWeb.AuthorizeSitesApiPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.AuthorizeStatsApiPlug.html b/PlausibleWeb.AuthorizeStatsApiPlug.html index 526f4db36..bd2a683c5 100644 --- a/PlausibleWeb.AuthorizeStatsApiPlug.html +++ b/PlausibleWeb.AuthorizeStatsApiPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.BillingController.html b/PlausibleWeb.BillingController.html index e2b84c3e8..0f7e088b3 100644 --- a/PlausibleWeb.BillingController.html +++ b/PlausibleWeb.BillingController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.BillingView.html b/PlausibleWeb.BillingView.html index 877bf482f..d3cfe9db9 100644 --- a/PlausibleWeb.BillingView.html +++ b/PlausibleWeb.BillingView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.CRMAuthPlug.html b/PlausibleWeb.CRMAuthPlug.html index bb59e252a..e02781d91 100644 --- a/PlausibleWeb.CRMAuthPlug.html +++ b/PlausibleWeb.CRMAuthPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Captcha.html b/PlausibleWeb.Captcha.html index d0c5503f5..07c87feca 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 7649dc20b..60e9e411a 100644 --- a/PlausibleWeb.Components.Generic.html +++ b/PlausibleWeb.Components.Generic.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Components.Site.Feature.html b/PlausibleWeb.Components.Site.Feature.html index d0f97f028..a1c3e2aeb 100644 --- a/PlausibleWeb.Components.Site.Feature.html +++ b/PlausibleWeb.Components.Site.Feature.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.ConnCase.html b/PlausibleWeb.ConnCase.html index 4f7d4d9d8..c97a51edc 100644 --- a/PlausibleWeb.ConnCase.html +++ b/PlausibleWeb.ConnCase.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.ControllerHelpers.html b/PlausibleWeb.ControllerHelpers.html index 391fb1495..64fb56ecf 100644 --- a/PlausibleWeb.ControllerHelpers.html +++ b/PlausibleWeb.ControllerHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Email.html b/PlausibleWeb.Email.html index a89c1f4dc..231c32a92 100644 --- a/PlausibleWeb.Email.html +++ b/PlausibleWeb.Email.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.EmailView.html b/PlausibleWeb.EmailView.html index 7b4464ee8..7ef1ad3e5 100644 --- a/PlausibleWeb.EmailView.html +++ b/PlausibleWeb.EmailView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Endpoint.html b/PlausibleWeb.Endpoint.html index 3664ee1da..8261e778d 100644 --- a/PlausibleWeb.Endpoint.html +++ b/PlausibleWeb.Endpoint.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.ErrorHelpers.html b/PlausibleWeb.ErrorHelpers.html index 44d305f6b..377a76285 100644 --- a/PlausibleWeb.ErrorHelpers.html +++ b/PlausibleWeb.ErrorHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.ErrorReportController.html b/PlausibleWeb.ErrorReportController.html index d1697f2c3..786cf5376 100644 --- a/PlausibleWeb.ErrorReportController.html +++ b/PlausibleWeb.ErrorReportController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.ErrorView.html b/PlausibleWeb.ErrorView.html index fad80050e..14e3b5a94 100644 --- a/PlausibleWeb.ErrorView.html +++ b/PlausibleWeb.ErrorView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Favicon.html b/PlausibleWeb.Favicon.html index de229ac4f..3b6f0a5fd 100644 --- a/PlausibleWeb.Favicon.html +++ b/PlausibleWeb.Favicon.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.FirstLaunchPlug.html b/PlausibleWeb.FirstLaunchPlug.html index 8efcf8602..7f0b486f9 100644 --- a/PlausibleWeb.FirstLaunchPlug.html +++ b/PlausibleWeb.FirstLaunchPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.FormHelpers.html b/PlausibleWeb.FormHelpers.html index 3714ede62..37c3cb311 100644 --- a/PlausibleWeb.FormHelpers.html +++ b/PlausibleWeb.FormHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.InvitationController.html b/PlausibleWeb.InvitationController.html index b8626bc49..b801a6d86 100644 --- a/PlausibleWeb.InvitationController.html +++ b/PlausibleWeb.InvitationController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.LastSeenPlug.html b/PlausibleWeb.LastSeenPlug.html index 04bcf420c..f32a8efba 100644 --- a/PlausibleWeb.LastSeenPlug.html +++ b/PlausibleWeb.LastSeenPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.LayoutView.html b/PlausibleWeb.LayoutView.html index 8417ee0f0..f7741dcf7 100644 --- a/PlausibleWeb.LayoutView.html +++ b/PlausibleWeb.LayoutView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.Components.ComboBox.StaticSearch.html b/PlausibleWeb.Live.Components.ComboBox.StaticSearch.html index 93a122810..973a6904c 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 022709313..74b7830cf 100644 --- a/PlausibleWeb.Live.Components.ComboBox.html +++ b/PlausibleWeb.Live.Components.ComboBox.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.Flash.html b/PlausibleWeb.Live.Flash.html index 8a7a1f67b..2feb359f6 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 c8a8fcbb3..334e69442 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 371198ddf..dc3353da8 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 26d165c10..ab1a0526f 100644 --- a/PlausibleWeb.Live.FunnelSettings.html +++ b/PlausibleWeb.Live.FunnelSettings.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Live.PropsSettings.html b/PlausibleWeb.Live.PropsSettings.html index 8f573e6eb..a29b870fd 100644 --- a/PlausibleWeb.Live.PropsSettings.html +++ b/PlausibleWeb.Live.PropsSettings.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.LiveSocket.html b/PlausibleWeb.LiveSocket.html index 9b1cdf018..d975c7b3d 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 224ad9b49..364e58fa4 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 976278f72..2fa4332d6 100644 --- a/PlausibleWeb.PageController.html +++ b/PlausibleWeb.PageController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.PageView.html b/PlausibleWeb.PageView.html index 91e7d1e39..8d89cf4c8 100644 --- a/PlausibleWeb.PageView.html +++ b/PlausibleWeb.PageView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Plugs.NoRobots.html b/PlausibleWeb.Plugs.NoRobots.html index d23f43e60..7759b6287 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 8cd0eb858..72fbe2e27 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 6ff1331bd..c22894616 100644 --- a/PlausibleWeb.RefInspector.html +++ b/PlausibleWeb.RefInspector.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.RemoteIp.html b/PlausibleWeb.RemoteIp.html index bb906f64f..f57dae59e 100644 --- a/PlausibleWeb.RemoteIp.html +++ b/PlausibleWeb.RemoteIp.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.RequireAccountPlug.html b/PlausibleWeb.RequireAccountPlug.html index 31dd7a097..cf4d21312 100644 --- a/PlausibleWeb.RequireAccountPlug.html +++ b/PlausibleWeb.RequireAccountPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.RequireLoggedOutPlug.html b/PlausibleWeb.RequireLoggedOutPlug.html index 318c37de9..56f92a378 100644 --- a/PlausibleWeb.RequireLoggedOutPlug.html +++ b/PlausibleWeb.RequireLoggedOutPlug.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Router.html b/PlausibleWeb.Router.html index 988f651a7..46c4ee119 100644 --- a/PlausibleWeb.Router.html +++ b/PlausibleWeb.Router.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.SessionTimeoutPlug.html b/PlausibleWeb.SessionTimeoutPlug.html index 16e681676..d0dab0e46 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 02c4afe58..921e9b8d5 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 7b6a57ef5..63fc56874 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 e6da6d87c..cb4943c36 100644 --- a/PlausibleWeb.SiteController.html +++ b/PlausibleWeb.SiteController.html @@ -13,7 +13,7 @@ - + @@ -580,7 +580,7 @@ Functions

    add_monthly_report_recipient(conn, map)

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

    add_snippet(conn, params)

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

    add_snippet_after_domain_change(conn, params)

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

    add_spike_notification_recipient(conn, map)

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

    add_weekly_report_recipient(conn, map)

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

    change_domain(conn, params)

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

    change_domain_submit(conn, map)

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

    create_goal(conn, map)

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

    create_shared_link(conn, map)

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

    create_site(conn, map)

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

    delete_custom_domain(conn, map)

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

    delete_goal(conn, map)

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

    delete_google_auth(conn, params)

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

    delete_shared_link(conn, map)

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

    delete_site(conn, params)

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

    disable_monthly_report(conn, params)

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

    disable_spike_notification(conn, params)

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

    disable_weekly_report(conn, params)

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

    edit_shared_link(conn, map)

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

    enable_monthly_report(conn, params)

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

    enable_spike_notification(conn, params)

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

    enable_weekly_report(conn, params)

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

    forget_imported(conn, params)

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

    import_from_google(conn, map)

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

    import_from_google_confirm(conn, map)

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

    import_from_google_user_metric_notice(conn, map)

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

    import_from_google_view_id(conn, map)

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

    import_from_google_view_id_form(conn, map)

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

    make_private(conn, params)

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

    make_public(conn, params)

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

    new_goal(conn, params)

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

    new_shared_link(conn, params)

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

    remove_monthly_report_recipient(conn, map)

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

    remove_spike_notification_recipient(conn, map)

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

    remove_weekly_report_recipient(conn, map)

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

    reset_stats(conn, params)

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

    settings(conn, map)

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

    settings_custom_domain(conn, params)

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

    settings_danger_zone(conn, params)

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

    settings_email_reports(conn, params)

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

    settings_funnels(conn, params)

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

    settings_general(conn, params)

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

    settings_goals(conn, params)

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

    settings_people(conn, params)

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

    settings_props(conn, params)

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

    settings_search_console(conn, params)

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

    settings_visibility(conn, params)

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

    update_feature_visibility(conn, map)

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

    update_google_auth(conn, map)

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

    update_settings(conn, map)

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

    update_shared_link(conn, map)

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

    update_spike_notification(conn, map)

    - + View Source diff --git a/PlausibleWeb.SiteView.html b/PlausibleWeb.SiteView.html index bdfd64cb4..3e84aa4d3 100644 --- a/PlausibleWeb.SiteView.html +++ b/PlausibleWeb.SiteView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.StatsController.html b/PlausibleWeb.StatsController.html index 49a1169bc..5977523bf 100644 --- a/PlausibleWeb.StatsController.html +++ b/PlausibleWeb.StatsController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.StatsView.html b/PlausibleWeb.StatsView.html index 78f7c9da3..bf17c9c66 100644 --- a/PlausibleWeb.StatsView.html +++ b/PlausibleWeb.StatsView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.Tracker.html b/PlausibleWeb.Tracker.html index cdc5f75bf..2a28ffbf5 100644 --- a/PlausibleWeb.Tracker.html +++ b/PlausibleWeb.Tracker.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.UnsubscribeController.html b/PlausibleWeb.UnsubscribeController.html index bb71782a9..d050e8962 100644 --- a/PlausibleWeb.UnsubscribeController.html +++ b/PlausibleWeb.UnsubscribeController.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.UnsubscribeView.html b/PlausibleWeb.UnsubscribeView.html index 7ccf4d7c0..ed419215b 100644 --- a/PlausibleWeb.UnsubscribeView.html +++ b/PlausibleWeb.UnsubscribeView.html @@ -13,7 +13,7 @@ - + diff --git a/PlausibleWeb.html b/PlausibleWeb.html index a022b9cdf..0dbc573d1 100644 --- a/PlausibleWeb.html +++ b/PlausibleWeb.html @@ -13,7 +13,7 @@ - + diff --git a/account-locking.html b/account-locking.html index 3a5418171..4cf31e314 100644 --- a/account-locking.html +++ b/account-locking.html @@ -13,7 +13,7 @@ - + diff --git a/api-reference.html b/api-reference.html index 191117300..84c39a6ca 100644 --- a/api-reference.html +++ b/api-reference.html @@ -13,7 +13,7 @@ - + @@ -247,6 +247,15 @@ period.

    + +
    + + +

    This module provides functions to work with plans usage and limits.

    +
    diff --git a/contributing.html b/contributing.html index 5f87fa8c7..c92cfe9fe 100644 --- a/contributing.html +++ b/contributing.html @@ -13,7 +13,7 @@ - + diff --git a/dist/search_data-A220C12C.js b/dist/search_data-A220C12C.js new file mode 100644 index 000000000..9c7922010 --- /dev/null +++ b/dist/search_data-A220C12C.js @@ -0,0 +1 @@ +searchData={"content_type":"text/markdown","items":[{"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?/1","title":"Plausible.Auth.enterprise?/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.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#changeset/2","title":"Plausible.Auth.User.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#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#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#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#needs_to_upgrade?/1","title":"Plausible.Billing.needs_to_upgrade?/1","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#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":"Finds a plan by product ID.\n\nReturns nil when plan can't be found.","ref":"Plausible.Billing.Plans.html#find/2","title":"Plausible.Billing.Plans.find/2","type":"function"},{"doc":"Returns a list of 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#for_user/1","title":"Plausible.Billing.Plans.for_user/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#get_subscription_plan/1","title":"Plausible.Billing.Plans.get_subscription_plan/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":"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 sent 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 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#check_sites_for/1","title":"Plausible.Billing.SiteLocker.check_sites_for/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":"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":"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#enabled_for?/1","title":"Plausible.Funnels.enabled_for?/1","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.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/2","title":"Plausible.HTTPClient.get/2","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: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":"[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#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":"","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":"","ref":"Plausible.Props.html#enabled_for?/1","title":"Plausible.Props.enabled_for?/1","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#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#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#changeset/2","title":"Plausible.Site.Membership.changeset/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.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#set_allowed_props_for_site/3","title":"Plausible.SiteAdmin.set_allowed_props_for_site/3","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#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_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":"","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.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":"Expects a single goal filter in the query. Returns a list of custom\nprops for that goal. Works for both custom event and pageview goals.","ref":"Plausible.Stats.CustomProps.html#props_for_goal/2","title":"Plausible.Stats.CustomProps.props_for_goal/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#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#submit_button/2","title":"Plausible.Test.Support.HTML.submit_button/2","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#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#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#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#all_props_breakdown/2","title":"PlausibleWeb.Api.StatsController.all_props_breakdown/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#prop_breakdown/2","title":"PlausibleWeb.Api.StatsController.prop_breakdown/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#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_form/2","title":"PlausibleWeb.AuthController.password_form/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_form/2","title":"PlausibleWeb.AuthController.register_form/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#register_from_invitation_form/2","title":"PlausibleWeb.AuthController.register_from_invitation_form/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#set_password/2","title":"PlausibleWeb.AuthController.set_password/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#invitation_expired.html/1","title":"PlausibleWeb.AuthView.invitation_expired.html/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_form.html/1","title":"PlausibleWeb.AuthView.password_form.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_form.html/1","title":"PlausibleWeb.AuthView.register_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#register_from_invitation_form.html/1","title":"PlausibleWeb.AuthView.register_from_invitation_form.html/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/1","title":"PlausibleWeb.AuthView.subscription_quota/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.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#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.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.html/1","title":"PlausibleWeb.BillingView.change_enterprise_plan.html/1","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#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_plan.html/1","title":"PlausibleWeb.BillingView.upgrade_to_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":"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_goal/2","title":"PlausibleWeb.SiteController.create_goal/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_goal/2","title":"PlausibleWeb.SiteController.delete_goal/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_goal/2","title":"PlausibleWeb.SiteController.new_goal/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_goal.html/1","title":"PlausibleWeb.SiteView.new_goal.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 a simple, 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 thousands of 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.\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- **Open website 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.\n- **Define key goals and track conversions**: Set custom events or page URLs as your goals and see how they convert over time to understand and identify the trends that matter. Includes easy ways to track outbound link clicks 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\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 fully [open source web analytics](https://plausible.io/open-source-website-analytics) and we have a free as in beer [Plausible Analytics Self-Hosted](https://plausible.io/self-hosted-web-analytics) solution. It’s exactly the same product as our cloud solution with a less frequent release schedule (think of it as a long term support release).\n\nBug fixes and new features are released to the cloud version several times per week. Features are battle-tested in the cloud which allows us to fix any bugs before the general self-hosted release. Every six months or so we combine all the changes into a new self-hosted release.\n\nThe main difference between the two is that the self-hosted version you have to install, host and manage yourself on your own infrastructure while the cloud version we manage everything for your ease and convenience. Here's the overview of all the differences:\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| Releases | 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 approximately twice per year so latest features won't be immediately available. You can see all the [currently unreleased features in the changelog](https://github.com/plausible/analytics/blob/master/CHANGELOG.md).|\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) directly here on GitHub. 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 [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\nThe only exception is our JavaScript tracker which gets included on your website. To avoid issues with AGPL virality, we've\nreleased the tracker under the MIT license. You can [find it here](https://github.com/plausible/analytics/blob/master/tracker/LICENSE.md).","ref":"readme.html#license","title":"License - 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-A45B4826.js b/dist/search_data-A45B4826.js deleted file mode 100644 index f591d3dbf..000000000 --- a/dist/search_data-A45B4826.js +++ /dev/null @@ -1 +0,0 @@ -searchData={"content_type":"text/markdown","items":[{"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?/1","title":"Plausible.Auth.enterprise?/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.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#changeset/2","title":"Plausible.Auth.User.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#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#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#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#needs_to_upgrade?/1","title":"Plausible.Billing.needs_to_upgrade?/1","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/1","title":"Plausible.Billing.usage/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#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":"Finds a plan by product ID.\n\nReturns nil when plan can't be found.","ref":"Plausible.Billing.Plans.html#find/2","title":"Plausible.Billing.Plans.find/2","type":"function"},{"doc":"Returns a list of 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#for_user/1","title":"Plausible.Billing.Plans.for_user/1","type":"function"},{"doc":"","ref":"Plausible.Billing.Plans.html#monthly_pageview_limit/1","title":"Plausible.Billing.Plans.monthly_pageview_limit/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.Plans.html#site_limit/1","title":"Plausible.Billing.Plans.site_limit/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":"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":"","ref":"Plausible.Billing.SiteLocker.html","title":"Plausible.Billing.SiteLocker","type":"module"},{"doc":"","ref":"Plausible.Billing.SiteLocker.html#check_sites_for/1","title":"Plausible.Billing.SiteLocker.check_sites_for/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":"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":"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#enabled_for?/1","title":"Plausible.Funnels.enabled_for?/1","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.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/2","title":"Plausible.HTTPClient.get/2","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: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":"[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#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":"","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":"","ref":"Plausible.Props.html#enabled_for?/1","title":"Plausible.Props.enabled_for?/1","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#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#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#changeset/2","title":"Plausible.Site.Membership.changeset/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.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#set_allowed_props_for_site/3","title":"Plausible.SiteAdmin.set_allowed_props_for_site/3","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#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_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":"","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.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":"Expects a single goal filter in the query. Returns a list of custom\nprops for that goal. Works for both custom event and pageview goals.","ref":"Plausible.Stats.CustomProps.html#props_for_goal/2","title":"Plausible.Stats.CustomProps.props_for_goal/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#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#submit_button/2","title":"Plausible.Test.Support.HTML.submit_button/2","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#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#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#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#all_props_breakdown/2","title":"PlausibleWeb.Api.StatsController.all_props_breakdown/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#prop_breakdown/2","title":"PlausibleWeb.Api.StatsController.prop_breakdown/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#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_form/2","title":"PlausibleWeb.AuthController.password_form/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_form/2","title":"PlausibleWeb.AuthController.register_form/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#register_from_invitation_form/2","title":"PlausibleWeb.AuthController.register_from_invitation_form/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#set_password/2","title":"PlausibleWeb.AuthController.set_password/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#invitation_expired.html/1","title":"PlausibleWeb.AuthView.invitation_expired.html/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_form.html/1","title":"PlausibleWeb.AuthView.password_form.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_form.html/1","title":"PlausibleWeb.AuthView.register_form.html/1","type":"function"},{"doc":"","ref":"PlausibleWeb.AuthView.html#register_from_invitation_form.html/1","title":"PlausibleWeb.AuthView.register_from_invitation_form.html/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/1","title":"PlausibleWeb.AuthView.subscription_quota/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.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#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.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.html/1","title":"PlausibleWeb.BillingView.change_enterprise_plan.html/1","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#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_plan.html/1","title":"PlausibleWeb.BillingView.upgrade_to_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":"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_goal/2","title":"PlausibleWeb.SiteController.create_goal/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_goal/2","title":"PlausibleWeb.SiteController.delete_goal/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_goal/2","title":"PlausibleWeb.SiteController.new_goal/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_goal.html/1","title":"PlausibleWeb.SiteView.new_goal.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 a simple, 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 thousands of 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.\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- **Open website 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.\n- **Define key goals and track conversions**: Set custom events or page URLs as your goals and see how they convert over time to understand and identify the trends that matter. Includes easy ways to track outbound link clicks 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\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 fully [open source web analytics](https://plausible.io/open-source-website-analytics) and we have a free as in beer [Plausible Analytics Self-Hosted](https://plausible.io/self-hosted-web-analytics) solution. It’s exactly the same product as our cloud solution with a less frequent release schedule (think of it as a long term support release).\n\nBug fixes and new features are released to the cloud version several times per week. Features are battle-tested in the cloud which allows us to fix any bugs before the general self-hosted release. Every six months or so we combine all the changes into a new self-hosted release.\n\nThe main difference between the two is that the self-hosted version you have to install, host and manage yourself on your own infrastructure while the cloud version we manage everything for your ease and convenience. Here's the overview of all the differences:\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| Releases | 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 approximately twice per year so latest features won't be immediately available. You can see all the [currently unreleased features in the changelog](https://github.com/plausible/analytics/blob/master/CHANGELOG.md).|\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) directly here on GitHub. 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 [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\nThe only exception is our JavaScript tracker which gets included on your website. To avoid issues with AGPL virality, we've\nreleased the tracker under the MIT license. You can [find it here](https://github.com/plausible/analytics/blob/master/tracker/LICENSE.md).","ref":"readme.html#license","title":"License - 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-40F1100A.js b/dist/sidebar_items-40F1100A.js deleted file mode 100644 index 72d7a2dbd..000000000 --- a/dist/sidebar_items-40F1100A.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","id":"License"}],"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?/1","deprecated":false,"id":"enterprise?/1","title":"enterprise?(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":"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":"changeset/2","deprecated":false,"id":"changeset/2","title":"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":"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":"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":"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":"needs_to_upgrade?/1","deprecated":false,"id":"needs_to_upgrade?/1","title":"needs_to_upgrade?(user)"},{"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/1","deprecated":false,"id":"usage/1","title":"usage(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":"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":"find/2","deprecated":false,"id":"find/2","title":"find(product_id_or_subscription, scope \\\\ all())"},{"anchor":"for_user/1","deprecated":false,"id":"for_user/1","title":"for_user(user)"},{"anchor":"monthly_pageview_limit/1","deprecated":false,"id":"monthly_pageview_limit/1","title":"monthly_pageview_limit(subscription)"},{"anchor":"site_limit/1","deprecated":false,"id":"site_limit/1","title":"site_limit(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":"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.SiteLocker","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"anchor":"check_sites_for/1","deprecated":false,"id":"check_sites_for/1","title":"check_sites_for(user)"},{"anchor":"set_lock_status_for/2","deprecated":false,"id":"set_lock_status_for/2","title":"set_lock_status_for(user, status)"}]}],"sections":[],"title":"Plausible.Billing.SiteLocker"},{"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.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, funnel_id)"},{"anchor":"enabled_for?/1","deprecated":false,"id":"enabled_for?/1","title":"enabled_for?(actor)"},{"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, now \\\\ DateTime.utc_now())"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(id, site)"},{"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 \\\\ [])"}]}],"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/2","deprecated":false,"id":"get/2","title":"get(url, headers \\\\ [])"},{"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: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":"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":"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.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":"enabled_for?/1","deprecated":false,"id":"enabled_for?/1","title":"enabled_for?(user)"},{"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":"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)"}]}],"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":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(schema, attrs)"}]}],"sections":[],"title":"Plausible.Site.Membership"},{"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":"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":"set_allowed_props_for_site/3","deprecated":false,"id":"set_allowed_props_for_site/3","title":"set_allowed_props_for_site(arg1, arg2, params)"},{"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":"functions","name":"Functions","nodes":[{"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_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":"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)"},{"anchor":"props_for_goal/2","deprecated":false,"id":"props_for_goal/2","title":"props_for_goal(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":"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":"submit_button/2","deprecated":false,"id":"submit_button/2","title":"submit_button(html, form)"},{"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":"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":"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":"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":"all_props_breakdown/2","deprecated":false,"id":"all_props_breakdown/2","title":"all_props_breakdown(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":"prop_breakdown/2","deprecated":false,"id":"prop_breakdown/2","title":"prop_breakdown(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":"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_form/2","deprecated":false,"id":"password_form/2","title":"password_form(conn, params)"},{"anchor":"password_reset/2","deprecated":false,"id":"password_reset/2","title":"password_reset(conn, map)"},{"anchor":"password_reset_form/2","deprecated":false,"id":"password_reset_form/2","title":"password_reset_form(conn, map)"},{"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, params)"},{"anchor":"register_form/2","deprecated":false,"id":"register_form/2","title":"register_form(conn, params)"},{"anchor":"register_from_invitation/2","deprecated":false,"id":"register_from_invitation/2","title":"register_from_invitation(conn, params)"},{"anchor":"register_from_invitation_form/2","deprecated":false,"id":"register_from_invitation_form/2","title":"register_from_invitation_form(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":"set_password/2","deprecated":false,"id":"set_password/2","title":"set_password(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":"invitation_expired.html/1","deprecated":false,"id":"invitation_expired.html/1","title":"invitation_expired.html(assigns)"},{"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_form.html/1","deprecated":false,"id":"password_form.html/1","title":"password_form.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_form.html/1","deprecated":false,"id":"register_form.html/1","title":"register_form.html(assigns)"},{"anchor":"register_from_invitation_form.html/1","deprecated":false,"id":"register_from_invitation_form.html/1","title":"register_from_invitation_form.html(assigns)"},{"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/1","deprecated":false,"id":"subscription_quota/1","title":"subscription_quota(subscription)"},{"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, map)"},{"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":"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, map)"},{"anchor":"upgrade_success/2","deprecated":false,"id":"upgrade_success/2","title":"upgrade_success(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.html/1","deprecated":false,"id":"change_enterprise_plan.html/1","title":"change_enterprise_plan.html(assigns)"},{"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":"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_plan.html/1","deprecated":false,"id":"upgrade_to_plan.html/1","title":"upgrade_to_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)"}]}],"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(form, 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":"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.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/2","deprecated":false,"id":"suggest/2","title":"suggest(input, options)"}]}],"sections":[],"title":"PlausibleWeb.Live.Components.ComboBox.StaticSearch"},{"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":"cancel_button/1","deprecated":false,"id":"cancel_button/1","title":"cancel_button(assigns)"},{"anchor":"error/1","deprecated":false,"id":"error/1","title":"error(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":"input/1","deprecated":false,"id":"input/1","title":"input(assigns)"},{"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.PropsSettings","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"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":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.PropsSettings"},{"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.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":"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_goal/2","deprecated":false,"id":"create_goal/2","title":"create_goal(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_goal/2","deprecated":false,"id":"delete_goal/2","title":"delete_goal(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_goal/2","deprecated":false,"id":"new_goal/2","title":"new_goal(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_goal.html/1","deprecated":false,"id":"new_goal.html/1","title":"new_goal.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.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-CD185F1C.js b/dist/sidebar_items-CD185F1C.js new file mode 100644 index 000000000..4aa459da9 --- /dev/null +++ b/dist/sidebar_items-CD185F1C.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","id":"License"}],"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?/1","deprecated":false,"id":"enterprise?/1","title":"enterprise?(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":"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":"changeset/2","deprecated":false,"id":"changeset/2","title":"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":"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":"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":"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":"needs_to_upgrade?/1","deprecated":false,"id":"needs_to_upgrade?/1","title":"needs_to_upgrade?(user)"},{"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":"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":"find/2","deprecated":false,"id":"find/2","title":"find(product_id_or_subscription, scope \\\\ all())"},{"anchor":"for_user/1","deprecated":false,"id":"for_user/1","title":"for_user(user)"},{"anchor":"get_subscription_plan/1","deprecated":false,"id":"get_subscription_plan/1","title":"get_subscription_plan(subscription)"},{"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":"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":"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":"functions","name":"Functions","nodes":[{"anchor":"check_sites_for/1","deprecated":false,"id":"check_sites_for/1","title":"check_sites_for(user)"},{"anchor":"set_lock_status_for/2","deprecated":false,"id":"set_lock_status_for/2","title":"set_lock_status_for(user, status)"}]}],"sections":[],"title":"Plausible.Billing.SiteLocker"},{"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.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, funnel_id)"},{"anchor":"enabled_for?/1","deprecated":false,"id":"enabled_for?/1","title":"enabled_for?(actor)"},{"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, now \\\\ DateTime.utc_now())"},{"anchor":"delete/2","deprecated":false,"id":"delete/2","title":"delete(id, site)"},{"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 \\\\ [])"}]}],"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/2","deprecated":false,"id":"get/2","title":"get(url, headers \\\\ [])"},{"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: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":"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":"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.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":"enabled_for?/1","deprecated":false,"id":"enabled_for?/1","title":"enabled_for?(user)"},{"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":"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)"}]}],"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":"functions","name":"Functions","nodes":[{"anchor":"changeset/2","deprecated":false,"id":"changeset/2","title":"changeset(schema, attrs)"}]}],"sections":[],"title":"Plausible.Site.Membership"},{"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":"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":"set_allowed_props_for_site/3","deprecated":false,"id":"set_allowed_props_for_site/3","title":"set_allowed_props_for_site(arg1, arg2, params)"},{"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":"functions","name":"Functions","nodes":[{"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_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":"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)"},{"anchor":"props_for_goal/2","deprecated":false,"id":"props_for_goal/2","title":"props_for_goal(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":"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":"submit_button/2","deprecated":false,"id":"submit_button/2","title":"submit_button(html, form)"},{"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":"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":"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":"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":"all_props_breakdown/2","deprecated":false,"id":"all_props_breakdown/2","title":"all_props_breakdown(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":"prop_breakdown/2","deprecated":false,"id":"prop_breakdown/2","title":"prop_breakdown(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":"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_form/2","deprecated":false,"id":"password_form/2","title":"password_form(conn, params)"},{"anchor":"password_reset/2","deprecated":false,"id":"password_reset/2","title":"password_reset(conn, map)"},{"anchor":"password_reset_form/2","deprecated":false,"id":"password_reset_form/2","title":"password_reset_form(conn, map)"},{"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, params)"},{"anchor":"register_form/2","deprecated":false,"id":"register_form/2","title":"register_form(conn, params)"},{"anchor":"register_from_invitation/2","deprecated":false,"id":"register_from_invitation/2","title":"register_from_invitation(conn, params)"},{"anchor":"register_from_invitation_form/2","deprecated":false,"id":"register_from_invitation_form/2","title":"register_from_invitation_form(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":"set_password/2","deprecated":false,"id":"set_password/2","title":"set_password(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":"invitation_expired.html/1","deprecated":false,"id":"invitation_expired.html/1","title":"invitation_expired.html(assigns)"},{"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_form.html/1","deprecated":false,"id":"password_form.html/1","title":"password_form.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_form.html/1","deprecated":false,"id":"register_form.html/1","title":"register_form.html(assigns)"},{"anchor":"register_from_invitation_form.html/1","deprecated":false,"id":"register_from_invitation_form.html/1","title":"register_from_invitation_form.html(assigns)"},{"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/1","deprecated":false,"id":"subscription_quota/1","title":"subscription_quota(subscription)"},{"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, map)"},{"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":"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, map)"},{"anchor":"upgrade_success/2","deprecated":false,"id":"upgrade_success/2","title":"upgrade_success(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.html/1","deprecated":false,"id":"change_enterprise_plan.html/1","title":"change_enterprise_plan.html(assigns)"},{"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":"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_plan.html/1","deprecated":false,"id":"upgrade_to_plan.html/1","title":"upgrade_to_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)"}]}],"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(form, 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":"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.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/2","deprecated":false,"id":"suggest/2","title":"suggest(input, options)"}]}],"sections":[],"title":"PlausibleWeb.Live.Components.ComboBox.StaticSearch"},{"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":"cancel_button/1","deprecated":false,"id":"cancel_button/1","title":"cancel_button(assigns)"},{"anchor":"error/1","deprecated":false,"id":"error/1","title":"error(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":"input/1","deprecated":false,"id":"input/1","title":"input(assigns)"},{"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.PropsSettings","nodeGroups":[{"key":"functions","name":"Functions","nodes":[{"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":"render/1","deprecated":false,"id":"render/1","title":"render(assigns)"}]}],"sections":[],"title":"PlausibleWeb.Live.PropsSettings"},{"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.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":"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_goal/2","deprecated":false,"id":"create_goal/2","title":"create_goal(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_goal/2","deprecated":false,"id":"delete_goal/2","title":"delete_goal(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_goal/2","deprecated":false,"id":"new_goal/2","title":"new_goal(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_goal.html/1","deprecated":false,"id":"new_goal.html/1","title":"new_goal.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.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 fce3fe7e4..1cba6340a 100644 --- a/readme.html +++ b/readme.html @@ -13,7 +13,7 @@ - + diff --git a/search.html b/search.html index 2a3d22394..2f9d258ec 100644 --- a/search.html +++ b/search.html @@ -13,7 +13,7 @@ - + @@ -107,7 +107,7 @@ Plausible
    - +