From 48a294095f8b939ea793255bb1f0ca5c0c110c10 Mon Sep 17 00:00:00 2001 From: mayel Date: Sun, 31 Dec 2023 17:29:00 +0000 Subject: [PATCH] deploy: 1a540f44acfc105893e1c7efe61fba09fdc5cc31 --- .build | 26 +- 404.html | 2 +- ActivityPub.Actor.html | 2 +- ActivityPub.Config.Error.html | 2 +- ActivityPub.Config.html | 2 +- ActivityPub.Federator.APPublisher.html | 2 +- ActivityPub.Federator.Adapter.html | 2 +- ActivityPub.Federator.Fetcher.html | 2 +- ActivityPub.Federator.HTTP.Connection.html | 2 +- ActivityPub.Federator.HTTP.RateLimit.html | 2 +- ...vityPub.Federator.HTTP.RequestBuilder.html | 2 +- ActivityPub.Federator.HTTP.RetryAfter.html | 2 +- ActivityPub.Federator.HTTP.Tesla.html | 156 +++--- ActivityPub.Federator.HTTP.html | 2 +- ActivityPub.Federator.Publisher.html | 2 +- ActivityPub.Federator.Transformer.html | 2 +- ActivityPub.Federator.WebFinger.html | 2 +- ActivityPub.Federator.Worker.html | 2 +- ...Pub.Federator.Workers.PublisherWorker.html | 2 +- ...yPub.Federator.Workers.ReceiverWorker.html | 2 +- ...Federator.Workers.RemoteFetcherWorker.html | 2 +- ActivityPub.Federator.html | 2 +- ActivityPub.Fixtures.html | 2 +- ActivityPub.Instances.Instance.html | 2 +- ActivityPub.Instances.html | 2 +- ActivityPub.MRF.SimplePolicy.html | 2 +- ActivityPub.MRF.html | 2 +- ActivityPub.Object.html | 2 +- ActivityPub.Pruner.PruneDatabaseWorker.html | 2 +- ActivityPub.Pruner.html | 2 +- ActivityPub.Queries.html | 2 +- ActivityPub.Safety.Containment.html | 2 +- ActivityPub.Safety.Keys.html | 2 +- ActivityPub.Safety.Signatures.html | 2 +- ActivityPub.Utils.html | 2 +- ActivityPub.Web.ActivityPubController.html | 2 +- ActivityPub.Web.ActorView.html | 2 +- ActivityPub.Web.Endpoint.html | 2 +- ActivityPub.Web.ErrorHelpers.html | 2 +- ActivityPub.Web.ErrorView.html | 2 +- ActivityPub.Web.LayoutView.html | 2 +- ActivityPub.Web.ObjectView.html | 2 +- ActivityPub.Web.Plugs.DigestPlug.html | 2 +- ...Pub.Web.Plugs.EnsureHTTPSignaturePlug.html | 2 +- ActivityPub.Web.Plugs.HTTPSignaturePlug.html | 2 +- ...b.Plugs.MappedSignatureToIdentityPlug.html | 2 +- ActivityPub.Web.RedirectController.html | 2 +- ActivityPub.Web.Router.html | 2 +- ActivityPub.Web.Telemetry.html | 2 +- ActivityPub.Web.UserSocket.html | 2 +- ActivityPub.Web.WebFingerController.html | 2 +- ActivityPub.Web.html | 2 +- ActivityPub.html | 2 +- AnimalAvatarGenerator.html | 2 +- Arrows.html | 2 +- Bonfire.Boundaries.Acls.html | 6 +- Bonfire.Boundaries.Acts.SetBoundaries.html | 2 +- Bonfire.Boundaries.Blocks.LiveHandler.html | 2 +- Bonfire.Boundaries.Blocks.html | 2 +- Bonfire.Boundaries.Circles.html | 2 +- Bonfire.Boundaries.Controlleds.html | 2 +- Bonfire.Boundaries.Debug.html | 2 +- Bonfire.Boundaries.Fixtures.html | 2 +- ...re.Boundaries.FixturesUsersMigrations.html | 2 +- Bonfire.Boundaries.Grants.html | 2 +- Bonfire.Boundaries.Integration.html | 2 +- Bonfire.Boundaries.LiveHandler.html | 2 +- Bonfire.Boundaries.Queries.html | 2 +- Bonfire.Boundaries.Roles.html | 2 +- Bonfire.Boundaries.RuntimeConfig.html | 2 +- Bonfire.Boundaries.Summary.html | 2 +- Bonfire.Boundaries.Users.html | 2 +- Bonfire.Boundaries.Verbs.html | 2 +- Bonfire.Boundaries.Web.ExcludeBoundaries.html | 2 +- Bonfire.Boundaries.Web.Routes.html | 2 +- Bonfire.Boundaries.html | 2 +- Bonfire.Common.Benchmark.html | 2 +- Bonfire.Common.Cache.html | 2 +- ...e.Common.Changelog.Github.DataGrabber.html | 2 +- Bonfire.Common.Config.Error.html | 2 +- ...re.Common.Config.LoadExtensionsConfig.html | 2 +- Bonfire.Common.Config.html | 2 +- Bonfire.Common.ConfigModule.html | 2 +- Bonfire.Common.ContextModule.html | 2 +- Bonfire.Common.DatesTimes.html | 2 +- Bonfire.Common.Enums.html | 2 +- Bonfire.Common.Errors.html | 14 +- Bonfire.Common.Extend.html | 2 +- Bonfire.Common.ExtensionBehaviour.html | 2 +- Bonfire.Common.ExtensionModule.html | 2 +- Bonfire.Common.Extensions.Diff.html | 2 +- Bonfire.Common.Extensions.html | 2 +- Bonfire.Common.HTTP.Connection.html | 2 +- Bonfire.Common.HTTP.RequestBuilder.html | 2 +- Bonfire.Common.HTTP.html | 2 +- ...e.Common.Localise.Cldr.AcceptLanguage.html | 258 ++++----- Bonfire.Common.Localise.Cldr.Calendar.html | 30 +- Bonfire.Common.Localise.Cldr.Currency.html | 162 +++--- ...re.Common.Localise.Cldr.Date.Interval.html | 28 +- Bonfire.Common.Localise.Cldr.Date.html | 14 +- ....Common.Localise.Cldr.DateTime.Format.html | 82 +-- ...mmon.Localise.Cldr.DateTime.Formatter.html | 4 +- ...ommon.Localise.Cldr.DateTime.Interval.html | 6 +- ...ommon.Localise.Cldr.DateTime.Relative.html | 64 +-- Bonfire.Common.Localise.Cldr.DateTime.html | 18 +- Bonfire.Common.Localise.Cldr.Interval.html | 24 +- Bonfire.Common.Localise.Cldr.Language.html | 66 +-- Bonfire.Common.Localise.Cldr.List.html | 186 +++---- Bonfire.Common.Localise.Cldr.Locale.html | 50 +- ....Common.Localise.Cldr.Number.Cardinal.html | 20 +- ...re.Common.Localise.Cldr.Number.Format.html | 50 +- ...ocalise.Cldr.Number.Formatter.Decimal.html | 2 +- ...e.Common.Localise.Cldr.Number.Ordinal.html | 20 +- ...Localise.Cldr.Number.PluralRule.Range.html | 2 +- ...re.Common.Localise.Cldr.Number.Symbol.html | 16 +- ...re.Common.Localise.Cldr.Number.System.html | 56 +- ...on.Localise.Cldr.Number.Transliterate.html | 22 +- Bonfire.Common.Localise.Cldr.Number.html | 178 +++--- ...ommon.Localise.Cldr.Rbnf.NumberSystem.html | 14 +- ...ire.Common.Localise.Cldr.Rbnf.Ordinal.html | 18 +- ...re.Common.Localise.Cldr.Rbnf.Spellout.html | 14 +- ...re.Common.Localise.Cldr.Time.Interval.html | 18 +- Bonfire.Common.Localise.Cldr.Time.html | 18 +- Bonfire.Common.Localise.Cldr.Unit.html | 124 ++--- Bonfire.Common.Localise.Cldr.html | 182 +++---- Bonfire.Common.Localise.Gettext.Helpers.html | 12 +- Bonfire.Common.Localise.Gettext.Plural.html | 22 +- Bonfire.Common.Localise.Gettext.html | 2 +- Bonfire.Common.Localise.html | 2 +- Bonfire.Common.Media.html | 2 +- Bonfire.Common.Modularity.DeclareHelpers.html | 2 +- Bonfire.Common.Module.Override.html | 2 +- Bonfire.Common.Needles.Pointers.Queries.html | 2 +- Bonfire.Common.Needles.Preload.html | 2 +- Bonfire.Common.Needles.Tables.Queries.html | 2 +- Bonfire.Common.Needles.Tables.html | 2 +- Bonfire.Common.Needles.html | 2 +- Bonfire.Common.PubSub.Event.html | 2 +- Bonfire.Common.PubSub.html | 2 +- Bonfire.Common.QueryModule.html | 2 +- Bonfire.Common.Repo.Delete.html | 2 +- Bonfire.Common.Repo.Preload.html | 2 +- Bonfire.Common.Repo.Utils.html | 2 +- Bonfire.Common.Repo.html | 2 +- Bonfire.Common.RepoTemplate.html | 2 +- Bonfire.Common.RuntimeConfig.html | 2 +- Bonfire.Common.SchemaModule.html | 2 +- Bonfire.Common.Settings.LiveHandler.html | 2 +- ...re.Common.Settings.LoadInstanceConfig.html | 2 +- Bonfire.Common.Settings.html | 2 +- Bonfire.Common.Simulation.html | 2 +- Bonfire.Common.StartupTimer.html | 2 +- Bonfire.Common.Test.Interactive.Helpers.html | 2 +- Bonfire.Common.Test.Interactive.Observer.html | 2 +- Bonfire.Common.Test.Interactive.html | 10 +- Bonfire.Common.TestInstanceRepo.html | 2 +- Bonfire.Common.Text.html | 2 +- Bonfire.Common.TextExtended.html | 2 +- Bonfire.Common.Types.html | 2 +- Bonfire.Common.URIs.html | 2 +- Bonfire.Common.Utils.html | 2 +- Bonfire.Common.html | 2 +- Bonfire.Data.AccessControl.Acl.html | 2 +- Bonfire.Data.AccessControl.Circle.html | 2 +- Bonfire.Data.AccessControl.Controlled.html | 2 +- Bonfire.Data.AccessControl.Encircle.html | 2 +- Bonfire.Data.AccessControl.Grant.html | 2 +- Bonfire.Data.AccessControl.InstanceAdmin.html | 2 +- Bonfire.Data.AccessControl.Stereotyped.html | 2 +- Bonfire.Data.AccessControl.Verb.html | 2 +- Bonfire.Data.ActivityPub.Actor.Migration.html | 2 +- Bonfire.Data.ActivityPub.Actor.html | 2 +- Bonfire.Data.ActivityPub.Peer.html | 2 +- Bonfire.Data.ActivityPub.Peered.html | 2 +- Bonfire.Data.Assort.Ranked.Migration.html | 2 +- Bonfire.Data.Assort.Ranked.html | 12 +- Bonfire.Data.Edges.Edge.html | 2 +- Bonfire.Data.Edges.EdgeTotal.html | 2 +- Bonfire.Data.Identity.Account.html | 2 +- Bonfire.Data.Identity.Accounted.html | 2 +- Bonfire.Data.Identity.Alias.html | 2 +- Bonfire.Data.Identity.AuthSecondFactor.html | 2 +- Bonfire.Data.Identity.CareClosure.html | 2 +- Bonfire.Data.Identity.Caretaker.html | 2 +- Bonfire.Data.Identity.Character.html | 2 +- ...re.Data.Identity.Credential.Migration.html | 2 +- Bonfire.Data.Identity.Credential.html | 2 +- Bonfire.Data.Identity.Email.html | 2 +- Bonfire.Data.Identity.ExtraInfo.html | 2 +- Bonfire.Data.Identity.Named.html | 2 +- Bonfire.Data.Identity.Self.html | 2 +- Bonfire.Data.Identity.Settings.html | 2 +- Bonfire.Data.Identity.User.html | 2 +- Bonfire.Data.SharedUser.html | 2 +- Bonfire.Data.Social.APActivity.html | 2 +- Bonfire.Data.Social.Activity.html | 2 +- Bonfire.Data.Social.Bookmark.html | 2 +- Bonfire.Data.Social.Boost.html | 2 +- Bonfire.Data.Social.Created.html | 2 +- Bonfire.Data.Social.Feed.html | 2 +- Bonfire.Data.Social.FeedPublish.html | 2 +- Bonfire.Data.Social.Flag.html | 2 +- Bonfire.Data.Social.Follow.html | 2 +- Bonfire.Data.Social.Inbox.html | 2 +- Bonfire.Data.Social.Like.html | 2 +- Bonfire.Data.Social.Message.html | 2 +- Bonfire.Data.Social.Pin.html | 2 +- Bonfire.Data.Social.Post.html | 2 +- Bonfire.Data.Social.PostContent.html | 2 +- Bonfire.Data.Social.Profile.html | 2 +- Bonfire.Data.Social.Replied.html | 2 +- Bonfire.Data.Social.Request.html | 2 +- Bonfire.Data.Social.Seen.html | 2 +- Bonfire.Data.Social.Sensitive.html | 2 +- Bonfire.Ecto.Acts.Begin.html | 2 +- Bonfire.Ecto.Acts.Commit.html | 2 +- Bonfire.Ecto.Acts.Delete.html | 2 +- Bonfire.Ecto.Acts.Work.html | 2 +- Bonfire.Ecto.html | 2 +- Bonfire.Epics.Act.html | 2 +- Bonfire.Epics.Debug.html | 2 +- Bonfire.Epics.Epic.html | 2 +- Bonfire.Epics.Error.html | 2 +- Bonfire.Epics.Test.html | 2 +- Bonfire.Epics.html | 2 +- Bonfire.Federate.ActivityPub.Adapter.html | 2 +- ...ire.Federate.ActivityPub.AdapterUtils.html | 2 +- ...re.Federate.ActivityPub.BoundariesMRF.html | 2 +- ...ederate.ActivityPub.FederationModules.html | 12 +- Bonfire.Federate.ActivityPub.Incoming.html | 2 +- Bonfire.Federate.ActivityPub.Instances.html | 2 +- ....Federate.ActivityPub.NodeinfoAdapter.html | 2 +- Bonfire.Federate.ActivityPub.Outgoing.html | 2 +- Bonfire.Federate.ActivityPub.Peered.html | 2 +- ...re.Federate.ActivityPub.RuntimeConfig.html | 2 +- Bonfire.Federate.ActivityPub.Simulate.html | 2 +- Bonfire.Federate.ActivityPub.html | 2 +- Bonfire.Files.Acts.AttachMedia.html | 2 +- Bonfire.Files.Acts.URLPreviews.html | 2 +- Bonfire.Files.BannerUploader.html | 2 +- Bonfire.Files.Blurred.html | 2 +- ...ire.Files.CapsuleIntegration.Attacher.html | 2 +- Bonfire.Files.Definition.html | 2 +- Bonfire.Files.DocumentUploader.html | 2 +- Bonfire.Files.FaviconStore.html | 2 +- Bonfire.Files.FileDenied.html | 2 +- Bonfire.Files.IconUploader.html | 2 +- Bonfire.Files.Image.Edit.html | 2 +- Bonfire.Files.ImageUploader.html | 2 +- Bonfire.Files.LiveHandler.html | 2 +- Bonfire.Files.Media.Queries.html | 2 +- Bonfire.Files.Media.html | 2 +- Bonfire.Files.Prepare.html | 2 +- Bonfire.Files.ResponsiveImage.html | 6 +- Bonfire.Files.Routes.html | 2 +- Bonfire.Files.RuntimeConfig.html | 2 +- Bonfire.Files.Simulation.html | 2 +- Bonfire.Files.Versions.html | 2 +- Bonfire.Files.html | 6 +- Bonfire.Invite.Links.Fake.html | 2 +- Bonfire.Invite.Links.Integration.html | 2 +- Bonfire.Invite.Links.LiveHandler.html | 2 +- Bonfire.Invite.Links.Web.Routes.html | 2 +- Bonfire.Invite.Links.html | 2 +- Bonfire.InviteLink.html | 2 +- Bonfire.Localise.html | 2 +- Bonfire.Logging.html | 2 +- Bonfire.Mailer.Checker.html | 2 +- Bonfire.Mailer.RuntimeConfig.html | 2 +- Bonfire.Mailer.html | 2 +- Bonfire.Me.Accounts.ChangeEmailFields.html | 2 +- Bonfire.Me.Accounts.ChangePasswordFields.html | 2 +- Bonfire.Me.Accounts.ConfirmEmailFields.html | 2 +- Bonfire.Me.Accounts.ForgotPasswordFields.html | 2 +- Bonfire.Me.Accounts.LoginFields.html | 2 +- Bonfire.Me.Accounts.Queries.html | 2 +- Bonfire.Me.Accounts.SecondFactors.html | 6 +- Bonfire.Me.Accounts.html | 2 +- Bonfire.Me.Acts.Caretaker.html | 2 +- Bonfire.Me.Acts.Creator.html | 2 +- Bonfire.Me.Characters.html | 2 +- Bonfire.Me.DeleteWorker.html | 2 +- Bonfire.Me.Fake.Helpers.html | 2 +- Bonfire.Me.Fake.html | 2 +- Bonfire.Me.Integration.html | 2 +- Bonfire.Me.Mails.EmailView.html | 2 +- Bonfire.Me.Mails.html | 2 +- Bonfire.Me.Profiles.LiveHandler.html | 2 +- Bonfire.Me.Profiles.html | 2 +- Bonfire.Me.RuntimeConfig.html | 2 +- Bonfire.Me.SharedUsers.html | 2 +- Bonfire.Me.Users.LiveHandler.html | 2 +- Bonfire.Me.Users.Queries.html | 2 +- Bonfire.Me.Users.html | 2 +- Bonfire.Messages.Fake.html | 2 +- Bonfire.Messages.Integration.html | 2 +- Bonfire.Messages.LiveHandler.html | 509 ++++++++++++++++++ Bonfire.Messages.html | 2 +- Bonfire.Posts.Acts.Posts.Publish.html | 2 +- Bonfire.Posts.Fake.html | 2 +- Bonfire.Posts.Integration.html | 2 +- Bonfire.Posts.LiveHandler.html | 323 +++++++++++ Bonfire.Posts.html | 2 +- Bonfire.RuntimeConfig.html | 2 +- Bonfire.Search.Acts.Queue.html | 2 +- Bonfire.Search.Fuzzy.html | 2 +- Bonfire.Search.HTTP.html | 2 +- Bonfire.Search.Indexer.html | 2 +- Bonfire.Search.LiveHandler.html | 2 +- Bonfire.Search.Meili.html | 2 +- Bonfire.Search.RuntimeConfig.html | 2 +- Bonfire.Search.Stopwords.html | 2 +- Bonfire.Search.Web.Routes.html | 2 +- Bonfire.Search.html | 2 +- Bonfire.Seeder.html | 2 +- Bonfire.Social.APActivities.html | 2 +- Bonfire.Social.Activities.html | 2 +- Bonfire.Social.Acts.Activity.UnderObject.html | 2 +- Bonfire.Social.Acts.Activity.html | 2 +- Bonfire.Social.Acts.Federate.html | 2 +- Bonfire.Social.Acts.Feeds.html | 2 +- Bonfire.Social.Acts.LivePush.html | 2 +- Bonfire.Social.Acts.Objects.Delete.html | 2 +- Bonfire.Social.Acts.PostContents.html | 2 +- Bonfire.Social.Acts.Sensitivity.html | 2 +- Bonfire.Social.Acts.Threaded.html | 2 +- Bonfire.Social.Bookmarks.LiveHandler.html | 385 +++++++++++++ Bonfire.Social.Bookmarks.html | 2 +- Bonfire.Social.Boosts.LiveHandler.html | 355 ++++++++++++ Bonfire.Social.Boosts.html | 2 +- Bonfire.Social.Edges.html | 2 +- Bonfire.Social.Fake.html | 2 +- Bonfire.Social.FeedActivities.html | 2 +- Bonfire.Social.Feeds.LiveHandler.html | 2 +- Bonfire.Social.Feeds.html | 2 +- Bonfire.Social.Flags.LiveHandler.html | 261 +++++++++ Bonfire.Social.Flags.html | 2 +- Bonfire.Social.Graph.Aliases.LiveHandler.html | 261 +++++++++ Bonfire.Social.Graph.Aliases.html | 2 +- Bonfire.Social.Graph.Fake.html | 2 +- Bonfire.Social.Graph.Follows.LiveHandler.html | 325 +++++++++++ Bonfire.Social.Graph.Follows.html | 2 +- Bonfire.Social.Graph.Import.html | 2 +- Bonfire.Social.Graph.Integration.html | 2 +- Bonfire.Social.Graph.Requests.html | 2 +- Bonfire.Social.Graph.html | 2 +- Bonfire.Social.Integration.html | 2 +- Bonfire.Social.Likes.LiveHandler.html | 385 +++++++++++++ Bonfire.Social.Likes.html | 2 +- Bonfire.Social.LivePush.html | 2 +- Bonfire.Social.Objects.LiveHandler.html | 2 +- Bonfire.Social.Objects.html | 2 +- Bonfire.Social.Pins.LiveHandler.html | 291 ++++++++++ Bonfire.Social.Pins.html | 2 +- Bonfire.Social.PostContents.html | 2 +- Bonfire.Social.Seen.html | 2 +- Bonfire.Social.Tags.html | 2 +- Bonfire.Social.Threads.LiveHandler.html | 2 +- Bonfire.Social.Threads.html | 2 +- Bonfire.System.OS.Monitor.html | 2 +- Bonfire.Tag.Autocomplete.html | 2 +- Bonfire.Tag.Hashtag.html | 2 +- Bonfire.Tag.Queries.html | 2 +- Bonfire.Tag.Simulate.html | 2 +- Bonfire.Tag.Tagged.html | 2 +- Bonfire.Tag.Tags.html | 2 +- Bonfire.Tag.TextContent.Formatter.html | 2 +- Bonfire.Tag.TextContent.Process.html | 2 +- Bonfire.Tag.Web.Routes.html | 2 +- Bonfire.Tag.html | 2 +- Bonfire.Tags.Acts.AutoBoost.html | 2 +- Bonfire.Tags.Acts.Tag.html | 2 +- Bonfire.Telemetry.Storage.html | 2 +- Bonfire.UI.Common.ComponentID.html | 2 +- Bonfire.UI.Common.EndpointTemplate.html | 2 +- Bonfire.UI.Common.ErrorHelpers.html | 2 +- Bonfire.UI.Common.ErrorReportingPlug.html | 2 +- Bonfire.UI.Common.LiveHandlers.html | 2 +- ....UI.Common.LivePlugs.AllowTestSandbox.html | 2 +- Bonfire.UI.Common.LivePlugs.Csrf.html | 2 +- Bonfire.UI.Common.LivePlugs.Helpers.html | 2 +- Bonfire.UI.Common.LivePlugs.Locale.html | 2 +- ...ire.UI.Common.LivePlugs.StaticChanged.html | 2 +- Bonfire.UI.Common.LivePlugs.html | 2 +- ...re.UI.Common.MaybeStaticGeneratorPlug.html | 2 +- Bonfire.UI.Common.MultiTenancyPlug.html | 2 +- ...UI.Common.MultiselectLive.LiveHandler.html | 2 +- Bonfire.UI.Common.NavModule.html | 2 +- Bonfire.UI.Common.Notifications.html | 2 +- Bonfire.UI.Common.PlugProtect.html | 2 +- Bonfire.UI.Common.Plugs.ActivityPub.html | 2 +- Bonfire.UI.Common.Presence.html | 2 +- Bonfire.UI.Common.PreviewContentLive.html | 2 +- Bonfire.UI.Common.ReusableModalLive.html | 2 +- Bonfire.UI.Common.Routes.html | 2 +- Bonfire.UI.Common.SEO.html | 2 +- Bonfire.UI.Common.SettingsModule.html | 2 +- Bonfire.UI.Common.SmartInput.LiveHandler.html | 2 +- Bonfire.UI.Common.SmartInputModule.html | 8 +- Bonfire.UI.Common.StaticGenerator.html | 2 +- Bonfire.UI.Common.StaticGeneratorPlug.html | 2 +- Bonfire.UI.Common.Testing.Helpers.html | 2 +- Bonfire.UI.Common.WidgetModule.html | 2 +- Bonfire.UI.Common.html | 2 +- Bonfire.UI.Me.Integration.html | 2 +- Bonfire.UI.Me.LivePlugs.AccountRequired.html | 2 +- Bonfire.UI.Me.LivePlugs.AdminRequired.html | 2 +- ...re.UI.Me.LivePlugs.LoadCurrentAccount.html | 2 +- ....Me.LivePlugs.LoadCurrentAccountUsers.html | 2 +- Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html | 2 +- ...I.Me.LivePlugs.LoadCurrentUserCircles.html | 2 +- Bonfire.UI.Me.LivePlugs.UserRequired.html | 2 +- Bonfire.UI.Me.Plugs.AccountRequired.html | 2 +- Bonfire.UI.Me.Plugs.AdminRequired.html | 2 +- Bonfire.UI.Me.Plugs.GuestOnly.html | 2 +- Bonfire.UI.Me.Plugs.LoadCurrentAccount.html | 2 +- ...e.UI.Me.Plugs.LoadCurrentAccountUsers.html | 2 +- Bonfire.UI.Me.Plugs.LoadCurrentUser.html | 2 +- Bonfire.UI.Me.Plugs.UserRequired.html | 2 +- Bonfire.UI.Me.Routes.html | 2 +- Bonfire.UI.Me.RuntimeConfig.html | 2 +- Bonfire.UI.Messages.Routes.html | 229 ++++++++ Bonfire.UI.Messages.RuntimeConfig.html | 263 +++++++++ Bonfire.UI.Moderation.RuntimeConfig.html | 263 +++++++++ Bonfire.UI.Posts.Routes.html | 229 ++++++++ Bonfire.UI.Posts.RuntimeConfig.html | 263 +++++++++ Bonfire.UI.Reactions.Routes.html | 229 ++++++++ Bonfire.UI.Reactions.RuntimeConfig.html | 263 +++++++++ Bonfire.UI.Social.Benchmark.html | 2 +- Bonfire.UI.Social.Graph.RuntimeConfig.html | 263 +++++++++ Bonfire.UI.Social.Integration.html | 2 +- Bonfire.UI.Social.Routes.html | 2 +- Bonfire.UI.Social.RuntimeConfig.html | 2 +- Bonfire.Web.Endpoint.html | 2 +- Bonfire.Web.FakeRemoteEndpoint.html | 2 +- Bonfire.Web.Router.Reverse.html | 2 +- Bonfire.Web.Router.html | 2 +- Bonfire.Web.Routes.html | 2 +- Bonfire.Web.Telemetry.html | 2 +- ConsoleHelpers.html | 2 +- DaisyTheme.html | 2 +- DummyAdapter.html | 2 +- EctoSparkles.AutoMigrator.html | 2 +- EctoSparkles.Changesets.Errors.html | 2 +- EctoSparkles.Changesets.html | 2 +- EctoSparkles.DataMigration.Config.html | 2 +- EctoSparkles.DataMigration.Runner.html | 2 +- EctoSparkles.DataMigration.html | 34 +- EctoSparkles.ErlangTermBinary.html | 2 +- EctoSparkles.Log.html | 2 +- EctoSparkles.Migrator.html | 2 +- EctoSparkles.NPlus1Detector.html | 2 +- EctoSparkles.SanitiseStrings.html | 20 +- EctoSparkles.html | 40 +- Exto.html | 44 +- Import2Alias.CallerTracer.html | 2 +- Import2Alias.Server.html | 2 +- Import2Alias.html | 2 +- ...lassTree.Bonfire.UI.Common.LayoutLive.html | 2 +- ...lassTree.Bonfire.UI.Common.LayoutView.html | 2 +- Mix.Tasks.Bonfire.Account.New.html | 4 +- Mix.Tasks.Bonfire.Deps.Compile.html | 2 +- Mix.Tasks.Bonfire.Localise.Extract.html | 4 +- Mix.Tasks.Bonfire.Release.html | 2 +- Mix.Tasks.Bonfire.Secrets.html | 4 +- Mix.Tasks.Bonfire.User.Admin.Promote.html | 2 +- Mix.Tasks.Docs.Deps.html | 2 +- Mix.Tasks.Import2alias.html | 2 +- Needle.Changesets.html | 2 +- Needle.Form.html | 2 +- Needle.Migration.html | 2 +- Needle.Mixin.html | 10 +- Needle.NotFound.html | 2 +- Needle.Pointable.html | 6 +- Needle.Pointer.html | 2 +- Needle.Pointers.html | 2 +- Needle.Random.html | 2 +- Needle.Table.html | 2 +- Needle.Tables.html | 2 +- Needle.ULID.Migration.html | 2 +- Needle.ULID.html | 2 +- Needle.Unpointable.html | 2 +- Needle.Virtual.html | 6 +- Paginator.Page.html | 2 +- Paginator.PageInfo.html | 2 +- Paginator.html | 92 ++-- Releaser.Git.html | 2 +- Releaser.Publish.html | 2 +- Releaser.Tests.html | 2 +- Releaser.VersionUtils.html | 2 +- UserAuthLiveMount.html | 2 +- Voodoo.html | 12 +- Zest.Faking.html | 2 +- Zest.html | 2 +- api-reference.html | 121 ++++- architecture.html | 10 +- bonfire-flavoured-elixir.html | 64 +-- bonfire_umbrella.epub | Bin 1293657 -> 1323272 bytes boundaries.html | 2 +- changelog-autogenerated.html | 2 +- changelog.html | 2 +- classic.html | 2 +- community.html | 2 +- cooperation.html | 2 +- database.html | 282 +++++----- deploy.html | 14 +- deps-classic.html | 2 +- deps-cooperation.html | 2 +- dist/search_data-AF8E67A3.js | 1 - dist/search_data-B7FC5534.js | 1 + dist/sidebar_items-D2CBD495.js | 1 - dist/sidebar_items-DDA9C532.js | 1 + extension-activity_pub.html | 40 +- extension-arrows.html | 68 +-- extension-bonfire.html | 2 +- extension-bonfire_boundaries.html | 2 +- extension-bonfire_common.html | 2 +- extension-bonfire_data_access_control.html | 2 +- extension-bonfire_data_activity_pub.html | 4 +- extension-bonfire_data_assort.html | 4 +- extension-bonfire_data_identity.html | 4 +- extension-bonfire_data_shared_user.html | 4 +- extension-bonfire_data_social.html | 4 +- extension-bonfire_ecto.html | 2 +- extension-bonfire_editor_milkdown.html | 2 +- extension-bonfire_epics.html | 2 +- extension-bonfire_federate_activitypub.html | 2 +- extension-bonfire_files.html | 2 +- extension-bonfire_invite_links.html | 2 +- extension-bonfire_mailer.html | 2 +- extension-bonfire_me.html | 2 +- extension-bonfire_messages.html | 2 +- extension-bonfire_posts.html | 2 +- extension-bonfire_search.html | 2 +- extension-bonfire_social.html | 2 +- extension-bonfire_social_graph.html | 2 +- extension-bonfire_tag.html | 2 +- extension-bonfire_ui_common.html | 2 +- extension-bonfire_ui_me.html | 6 +- extension-bonfire_ui_messages.html | 225 ++++++++ extension-bonfire_ui_moderation.html | 225 ++++++++ extension-bonfire_ui_posts.html | 225 ++++++++ extension-bonfire_ui_reactions.html | 225 ++++++++ extension-bonfire_ui_social.html | 6 +- extension-bonfire_ui_social_graph.html | 225 ++++++++ extension-ecto_sparkles.html | 26 +- extension-exto.html | 44 +- extension-grumble.html | 32 +- extension-needle.html | 106 ++-- extension-needle_ulid.html | 4 +- extension-paginator.html | 32 +- extension-voodoo.html | 2 +- extension-zest.html | 38 +- graphql.html | 60 +-- hacking.html | 4 +- haha.html | 2 +- mrf.html | 38 +- readme.html | 2 +- reflow.html | 2 +- search.html | 4 +- upcycle.html | 2 +- 561 files changed, 8417 insertions(+), 2054 deletions(-) create mode 100644 Bonfire.Messages.LiveHandler.html create mode 100644 Bonfire.Posts.LiveHandler.html create mode 100644 Bonfire.Social.Bookmarks.LiveHandler.html create mode 100644 Bonfire.Social.Boosts.LiveHandler.html create mode 100644 Bonfire.Social.Flags.LiveHandler.html create mode 100644 Bonfire.Social.Graph.Aliases.LiveHandler.html create mode 100644 Bonfire.Social.Graph.Follows.LiveHandler.html create mode 100644 Bonfire.Social.Likes.LiveHandler.html create mode 100644 Bonfire.Social.Pins.LiveHandler.html create mode 100644 Bonfire.UI.Messages.Routes.html create mode 100644 Bonfire.UI.Messages.RuntimeConfig.html create mode 100644 Bonfire.UI.Moderation.RuntimeConfig.html create mode 100644 Bonfire.UI.Posts.Routes.html create mode 100644 Bonfire.UI.Posts.RuntimeConfig.html create mode 100644 Bonfire.UI.Reactions.Routes.html create mode 100644 Bonfire.UI.Reactions.RuntimeConfig.html create mode 100644 Bonfire.UI.Social.Graph.RuntimeConfig.html delete mode 100644 dist/search_data-AF8E67A3.js create mode 100644 dist/search_data-B7FC5534.js delete mode 100644 dist/sidebar_items-D2CBD495.js create mode 100644 dist/sidebar_items-DDA9C532.js create mode 100644 extension-bonfire_ui_messages.html create mode 100644 extension-bonfire_ui_moderation.html create mode 100644 extension-bonfire_ui_posts.html create mode 100644 extension-bonfire_ui_reactions.html create mode 100644 extension-bonfire_ui_social_graph.html diff --git a/.build b/.build index 1140acb06f7..33e2788a349 100644 --- a/.build +++ b/.build @@ -293,10 +293,12 @@ Bonfire.Me.Users.Queries.html Bonfire.Me.Users.html Bonfire.Messages.Fake.html Bonfire.Messages.Integration.html +Bonfire.Messages.LiveHandler.html Bonfire.Messages.html Bonfire.Posts.Acts.Posts.Publish.html Bonfire.Posts.Fake.html Bonfire.Posts.Integration.html +Bonfire.Posts.LiveHandler.html Bonfire.Posts.html Bonfire.RuntimeConfig.html Bonfire.Search.Acts.Queue.html @@ -321,26 +323,33 @@ Bonfire.Social.Acts.Objects.Delete.html Bonfire.Social.Acts.PostContents.html Bonfire.Social.Acts.Sensitivity.html Bonfire.Social.Acts.Threaded.html +Bonfire.Social.Bookmarks.LiveHandler.html Bonfire.Social.Bookmarks.html +Bonfire.Social.Boosts.LiveHandler.html Bonfire.Social.Boosts.html Bonfire.Social.Edges.html Bonfire.Social.Fake.html Bonfire.Social.FeedActivities.html Bonfire.Social.Feeds.LiveHandler.html Bonfire.Social.Feeds.html +Bonfire.Social.Flags.LiveHandler.html Bonfire.Social.Flags.html +Bonfire.Social.Graph.Aliases.LiveHandler.html Bonfire.Social.Graph.Aliases.html Bonfire.Social.Graph.Fake.html +Bonfire.Social.Graph.Follows.LiveHandler.html Bonfire.Social.Graph.Follows.html Bonfire.Social.Graph.Import.html Bonfire.Social.Graph.Integration.html Bonfire.Social.Graph.Requests.html Bonfire.Social.Graph.html Bonfire.Social.Integration.html +Bonfire.Social.Likes.LiveHandler.html Bonfire.Social.Likes.html Bonfire.Social.LivePush.html Bonfire.Social.Objects.LiveHandler.html Bonfire.Social.Objects.html +Bonfire.Social.Pins.LiveHandler.html Bonfire.Social.Pins.html Bonfire.Social.PostContents.html Bonfire.Social.Seen.html @@ -409,7 +418,15 @@ Bonfire.UI.Me.Plugs.LoadCurrentUser.html Bonfire.UI.Me.Plugs.UserRequired.html Bonfire.UI.Me.Routes.html Bonfire.UI.Me.RuntimeConfig.html +Bonfire.UI.Messages.Routes.html +Bonfire.UI.Messages.RuntimeConfig.html +Bonfire.UI.Moderation.RuntimeConfig.html +Bonfire.UI.Posts.Routes.html +Bonfire.UI.Posts.RuntimeConfig.html +Bonfire.UI.Reactions.Routes.html +Bonfire.UI.Reactions.RuntimeConfig.html Bonfire.UI.Social.Benchmark.html +Bonfire.UI.Social.Graph.RuntimeConfig.html Bonfire.UI.Social.Integration.html Bonfire.UI.Social.Routes.html Bonfire.UI.Social.RuntimeConfig.html @@ -515,8 +532,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-AF8E67A3.js -dist/sidebar_items-D2CBD495.js +dist/search_data-B7FC5534.js +dist/sidebar_items-DDA9C532.js extension-activity_pub.html extension-arrows.html extension-bonfire.html @@ -544,7 +561,12 @@ extension-bonfire_social_graph.html extension-bonfire_tag.html extension-bonfire_ui_common.html extension-bonfire_ui_me.html +extension-bonfire_ui_messages.html +extension-bonfire_ui_moderation.html +extension-bonfire_ui_posts.html +extension-bonfire_ui_reactions.html extension-bonfire_ui_social.html +extension-bonfire_ui_social_graph.html extension-ecto_sparkles.html extension-exto.html extension-grumble.html diff --git a/404.html b/404.html index 28f1f13777a..c3b547a8380 100644 --- a/404.html +++ b/404.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Actor.html b/ActivityPub.Actor.html index 2728a4f8177..7a939e96b1b 100644 --- a/ActivityPub.Actor.html +++ b/ActivityPub.Actor.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Config.Error.html b/ActivityPub.Config.Error.html index e2ad23b8bcd..b146dc52e0c 100644 --- a/ActivityPub.Config.Error.html +++ b/ActivityPub.Config.Error.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Config.html b/ActivityPub.Config.html index effe3f72a14..93d81cb46be 100644 --- a/ActivityPub.Config.html +++ b/ActivityPub.Config.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.APPublisher.html b/ActivityPub.Federator.APPublisher.html index 4379dac551a..e1edbf8c514 100644 --- a/ActivityPub.Federator.APPublisher.html +++ b/ActivityPub.Federator.APPublisher.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.Adapter.html b/ActivityPub.Federator.Adapter.html index 4ae7faa8d95..eb1323232d4 100644 --- a/ActivityPub.Federator.Adapter.html +++ b/ActivityPub.Federator.Adapter.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.Fetcher.html b/ActivityPub.Federator.Fetcher.html index ff83ad53e51..da7c28276b8 100644 --- a/ActivityPub.Federator.Fetcher.html +++ b/ActivityPub.Federator.Fetcher.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.HTTP.Connection.html b/ActivityPub.Federator.HTTP.Connection.html index 8f0da021b96..0ed44241893 100644 --- a/ActivityPub.Federator.HTTP.Connection.html +++ b/ActivityPub.Federator.HTTP.Connection.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.HTTP.RateLimit.html b/ActivityPub.Federator.HTTP.RateLimit.html index 4461fa69f53..bb6c85b8d61 100644 --- a/ActivityPub.Federator.HTTP.RateLimit.html +++ b/ActivityPub.Federator.HTTP.RateLimit.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.HTTP.RequestBuilder.html b/ActivityPub.Federator.HTTP.RequestBuilder.html index c2e85aa6b8b..1613661726c 100644 --- a/ActivityPub.Federator.HTTP.RequestBuilder.html +++ b/ActivityPub.Federator.HTTP.RequestBuilder.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.HTTP.RetryAfter.html b/ActivityPub.Federator.HTTP.RetryAfter.html index 837a2ae7468..f2b9ab1aa9d 100644 --- a/ActivityPub.Federator.HTTP.RetryAfter.html +++ b/ActivityPub.Federator.HTTP.RetryAfter.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.HTTP.Tesla.html b/ActivityPub.Federator.HTTP.Tesla.html index aac3c01c1cb..c38cc81f3b9 100644 --- a/ActivityPub.Federator.HTTP.Tesla.html +++ b/ActivityPub.Federator.HTTP.Tesla.html @@ -13,7 +13,7 @@ - + @@ -429,11 +429,11 @@

delete(client, url, opts)

-

Perform a DELETE request.

See request/1 or request/2 for options definition.

delete("/users")
-delete("/users", query: [scope: "admin"])
-delete(client, "/users")
-delete(client, "/users", query: [scope: "admin"])
-delete(client, "/users", body: %{name: "Jon"})
+

Perform a DELETE request.

See request/1 or request/2 for options definition.

delete("/users")
+delete("/users", query: [scope: "admin"])
+delete(client, "/users")
+delete(client, "/users", query: [scope: "admin"])
+delete(client, "/users", body: %{name: "Jon"})
@@ -462,11 +462,11 @@

delete!(client, url, opts)

-

Perform a DELETE request.

See request!/1 or request!/2 for options definition.

delete!("/users")
-delete!("/users", query: [scope: "admin"])
-delete!(client, "/users")
-delete!(client, "/users", query: [scope: "admin"])
-delete!(client, "/users", body: %{name: "Jon"})
+

Perform a DELETE request.

See request!/1 or request!/2 for options definition.

delete!("/users")
+delete!("/users", query: [scope: "admin"])
+delete!(client, "/users")
+delete!(client, "/users", query: [scope: "admin"])
+delete!(client, "/users", body: %{name: "Jon"})
@@ -494,11 +494,11 @@

get(client, url, opts)

-

Perform a GET request.

See request/1 or request/2 for options definition.

get("/users")
-get("/users", query: [scope: "admin"])
-get(client, "/users")
-get(client, "/users", query: [scope: "admin"])
-get(client, "/users", body: %{name: "Jon"})
+

Perform a GET request.

See request/1 or request/2 for options definition.

get("/users")
+get("/users", query: [scope: "admin"])
+get(client, "/users")
+get(client, "/users", query: [scope: "admin"])
+get(client, "/users", body: %{name: "Jon"})
@@ -527,11 +527,11 @@

get!(client, url, opts)

-

Perform a GET request.

See request!/1 or request!/2 for options definition.

get!("/users")
-get!("/users", query: [scope: "admin"])
-get!(client, "/users")
-get!(client, "/users", query: [scope: "admin"])
-get!(client, "/users", body: %{name: "Jon"})
+

Perform a GET request.

See request!/1 or request!/2 for options definition.

get!("/users")
+get!("/users", query: [scope: "admin"])
+get!(client, "/users")
+get!(client, "/users", query: [scope: "admin"])
+get!(client, "/users", body: %{name: "Jon"})
@@ -559,11 +559,11 @@

head(client, url, opts)

-

Perform a HEAD request.

See request/1 or request/2 for options definition.

head("/users")
-head("/users", query: [scope: "admin"])
-head(client, "/users")
-head(client, "/users", query: [scope: "admin"])
-head(client, "/users", body: %{name: "Jon"})
+

Perform a HEAD request.

See request/1 or request/2 for options definition.

head("/users")
+head("/users", query: [scope: "admin"])
+head(client, "/users")
+head(client, "/users", query: [scope: "admin"])
+head(client, "/users", body: %{name: "Jon"})
@@ -592,11 +592,11 @@

head!(client, url, opts)

-

Perform a HEAD request.

See request!/1 or request!/2 for options definition.

head!("/users")
-head!("/users", query: [scope: "admin"])
-head!(client, "/users")
-head!(client, "/users", query: [scope: "admin"])
-head!(client, "/users", body: %{name: "Jon"})
+

Perform a HEAD request.

See request!/1 or request!/2 for options definition.

head!("/users")
+head!("/users", query: [scope: "admin"])
+head!(client, "/users")
+head!(client, "/users", query: [scope: "admin"])
+head!(client, "/users", body: %{name: "Jon"})
@@ -624,11 +624,11 @@

options(client, url, opts)

-

Perform a OPTIONS request.

See request/1 or request/2 for options definition.

options("/users")
-options("/users", query: [scope: "admin"])
-options(client, "/users")
-options(client, "/users", query: [scope: "admin"])
-options(client, "/users", body: %{name: "Jon"})
+

Perform a OPTIONS request.

See request/1 or request/2 for options definition.

options("/users")
+options("/users", query: [scope: "admin"])
+options(client, "/users")
+options(client, "/users", query: [scope: "admin"])
+options(client, "/users", body: %{name: "Jon"})
@@ -657,11 +657,11 @@

options!(client, url, opts)

-

Perform a OPTIONS request.

See request!/1 or request!/2 for options definition.

options!("/users")
-options!("/users", query: [scope: "admin"])
-options!(client, "/users")
-options!(client, "/users", query: [scope: "admin"])
-options!(client, "/users", body: %{name: "Jon"})
+

Perform a OPTIONS request.

See request!/1 or request!/2 for options definition.

options!("/users")
+options!("/users", query: [scope: "admin"])
+options!(client, "/users")
+options!(client, "/users", query: [scope: "admin"])
+options!(client, "/users", body: %{name: "Jon"})
@@ -690,10 +690,10 @@

patch(client, url, body, opts)

-

Perform a PATCH request.

See request/1 or request/2 for options definition.

patch("/users", %{name: "Jon"})
-patch("/users", %{name: "Jon"}, query: [scope: "admin"])
-patch(client, "/users", %{name: "Jon"})
-patch(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+

Perform a PATCH request.

See request/1 or request/2 for options definition.

patch("/users", %{name: "Jon"})
+patch("/users", %{name: "Jon"}, query: [scope: "admin"])
+patch(client, "/users", %{name: "Jon"})
+patch(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
@@ -722,10 +722,10 @@

patch!(client, url, body, opts)

-

Perform a PATCH request.

See request!/1 or request!/2 for options definition.

patch!("/users", %{name: "Jon"})
-patch!("/users", %{name: "Jon"}, query: [scope: "admin"])
-patch!(client, "/users", %{name: "Jon"})
-patch!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+

Perform a PATCH request.

See request!/1 or request!/2 for options definition.

patch!("/users", %{name: "Jon"})
+patch!("/users", %{name: "Jon"}, query: [scope: "admin"])
+patch!(client, "/users", %{name: "Jon"})
+patch!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
@@ -754,10 +754,10 @@

post(client, url, body, opts)

-

Perform a POST request.

See request/1 or request/2 for options definition.

post("/users", %{name: "Jon"})
-post("/users", %{name: "Jon"}, query: [scope: "admin"])
-post(client, "/users", %{name: "Jon"})
-post(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+

Perform a POST request.

See request/1 or request/2 for options definition.

post("/users", %{name: "Jon"})
+post("/users", %{name: "Jon"}, query: [scope: "admin"])
+post(client, "/users", %{name: "Jon"})
+post(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
@@ -786,10 +786,10 @@

post!(client, url, body, opts)

-

Perform a POST request.

See request!/1 or request!/2 for options definition.

post!("/users", %{name: "Jon"})
-post!("/users", %{name: "Jon"}, query: [scope: "admin"])
-post!(client, "/users", %{name: "Jon"})
-post!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+

Perform a POST request.

See request!/1 or request!/2 for options definition.

post!("/users", %{name: "Jon"})
+post!("/users", %{name: "Jon"}, query: [scope: "admin"])
+post!(client, "/users", %{name: "Jon"})
+post!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
@@ -818,10 +818,10 @@

put(client, url, body, opts)

-

Perform a PUT request.

See request/1 or request/2 for options definition.

put("/users", %{name: "Jon"})
-put("/users", %{name: "Jon"}, query: [scope: "admin"])
-put(client, "/users", %{name: "Jon"})
-put(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+

Perform a PUT request.

See request/1 or request/2 for options definition.

put("/users", %{name: "Jon"})
+put("/users", %{name: "Jon"}, query: [scope: "admin"])
+put(client, "/users", %{name: "Jon"})
+put(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
@@ -850,10 +850,10 @@

put!(client, url, body, opts)

-

Perform a PUT request.

See request!/1 or request!/2 for options definition.

put!("/users", %{name: "Jon"})
-put!("/users", %{name: "Jon"}, query: [scope: "admin"])
-put!(client, "/users", %{name: "Jon"})
-put!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
+

Perform a PUT request.

See request!/1 or request!/2 for options definition.

put!("/users", %{name: "Jon"})
+put!("/users", %{name: "Jon"}, query: [scope: "admin"])
+put!(client, "/users", %{name: "Jon"})
+put!(client, "/users", %{name: "Jon"}, query: [scope: "admin"])
@@ -895,11 +895,11 @@

request(client \\ %Tesla.Client{}, options) Examples

-
ExampleApi.request(method: :get, url: "/users/path")
+
ExampleApi.request(method: :get, url: "/users/path")
 
 # use shortcut methods
-ExampleApi.get("/users/1")
-ExampleApi.post(client, "/users", %{name: "Jon"})
+
ExampleApi.get("/users/1") +ExampleApi.post(client, "/users", %{name: "Jon"})
@@ -957,11 +957,11 @@

trace(client, url, opts)

-

Perform a TRACE request.

See request/1 or request/2 for options definition.

trace("/users")
-trace("/users", query: [scope: "admin"])
-trace(client, "/users")
-trace(client, "/users", query: [scope: "admin"])
-trace(client, "/users", body: %{name: "Jon"})
+

Perform a TRACE request.

See request/1 or request/2 for options definition.

trace("/users")
+trace("/users", query: [scope: "admin"])
+trace(client, "/users")
+trace(client, "/users", query: [scope: "admin"])
+trace(client, "/users", body: %{name: "Jon"})
@@ -990,11 +990,11 @@

trace!(client, url, opts)

-

Perform a TRACE request.

See request!/1 or request!/2 for options definition.

trace!("/users")
-trace!("/users", query: [scope: "admin"])
-trace!(client, "/users")
-trace!(client, "/users", query: [scope: "admin"])
-trace!(client, "/users", body: %{name: "Jon"})
+

Perform a TRACE request.

See request!/1 or request!/2 for options definition.

trace!("/users")
+trace!("/users", query: [scope: "admin"])
+trace!(client, "/users")
+trace!(client, "/users", query: [scope: "admin"])
+trace!(client, "/users", body: %{name: "Jon"})
diff --git a/ActivityPub.Federator.HTTP.html b/ActivityPub.Federator.HTTP.html index e5d97f4a89e..b58b201f062 100644 --- a/ActivityPub.Federator.HTTP.html +++ b/ActivityPub.Federator.HTTP.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.Publisher.html b/ActivityPub.Federator.Publisher.html index ae584ac22ae..9163716623e 100644 --- a/ActivityPub.Federator.Publisher.html +++ b/ActivityPub.Federator.Publisher.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.Transformer.html b/ActivityPub.Federator.Transformer.html index c3004581427..4441cfabe99 100644 --- a/ActivityPub.Federator.Transformer.html +++ b/ActivityPub.Federator.Transformer.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.WebFinger.html b/ActivityPub.Federator.WebFinger.html index 40109a84a41..7685c7e1d9d 100644 --- a/ActivityPub.Federator.WebFinger.html +++ b/ActivityPub.Federator.WebFinger.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.Worker.html b/ActivityPub.Federator.Worker.html index 0debf57c6be..41f2e042013 100644 --- a/ActivityPub.Federator.Worker.html +++ b/ActivityPub.Federator.Worker.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.Workers.PublisherWorker.html b/ActivityPub.Federator.Workers.PublisherWorker.html index 8a211cc054e..07b06ff398c 100644 --- a/ActivityPub.Federator.Workers.PublisherWorker.html +++ b/ActivityPub.Federator.Workers.PublisherWorker.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.Workers.ReceiverWorker.html b/ActivityPub.Federator.Workers.ReceiverWorker.html index a5951a39104..3e84999b02c 100644 --- a/ActivityPub.Federator.Workers.ReceiverWorker.html +++ b/ActivityPub.Federator.Workers.ReceiverWorker.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.Workers.RemoteFetcherWorker.html b/ActivityPub.Federator.Workers.RemoteFetcherWorker.html index 515307ca9f0..53f2b2d8d76 100644 --- a/ActivityPub.Federator.Workers.RemoteFetcherWorker.html +++ b/ActivityPub.Federator.Workers.RemoteFetcherWorker.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Federator.html b/ActivityPub.Federator.html index bef17b80361..1b301bd8932 100644 --- a/ActivityPub.Federator.html +++ b/ActivityPub.Federator.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Fixtures.html b/ActivityPub.Fixtures.html index 5b81d8fad31..a41edaef745 100644 --- a/ActivityPub.Fixtures.html +++ b/ActivityPub.Fixtures.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Instances.Instance.html b/ActivityPub.Instances.Instance.html index 7c12452aa60..be0d2e3ac5d 100644 --- a/ActivityPub.Instances.Instance.html +++ b/ActivityPub.Instances.Instance.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Instances.html b/ActivityPub.Instances.html index 825878b622c..116bc00eb8f 100644 --- a/ActivityPub.Instances.html +++ b/ActivityPub.Instances.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.MRF.SimplePolicy.html b/ActivityPub.MRF.SimplePolicy.html index eec5577cdec..6c821128dc1 100644 --- a/ActivityPub.MRF.SimplePolicy.html +++ b/ActivityPub.MRF.SimplePolicy.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.MRF.html b/ActivityPub.MRF.html index 647e319ccc9..6717eab0432 100644 --- a/ActivityPub.MRF.html +++ b/ActivityPub.MRF.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Object.html b/ActivityPub.Object.html index 260b992c54e..49f487bc656 100644 --- a/ActivityPub.Object.html +++ b/ActivityPub.Object.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Pruner.PruneDatabaseWorker.html b/ActivityPub.Pruner.PruneDatabaseWorker.html index fc5e1e37280..f136d877efb 100644 --- a/ActivityPub.Pruner.PruneDatabaseWorker.html +++ b/ActivityPub.Pruner.PruneDatabaseWorker.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Pruner.html b/ActivityPub.Pruner.html index c0866e0ebad..a016d94b1cd 100644 --- a/ActivityPub.Pruner.html +++ b/ActivityPub.Pruner.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Queries.html b/ActivityPub.Queries.html index eeafa0d27a7..1e519c02890 100644 --- a/ActivityPub.Queries.html +++ b/ActivityPub.Queries.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Safety.Containment.html b/ActivityPub.Safety.Containment.html index c774a9bf822..ff90f9e0286 100644 --- a/ActivityPub.Safety.Containment.html +++ b/ActivityPub.Safety.Containment.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Safety.Keys.html b/ActivityPub.Safety.Keys.html index 5a0d89a2f8f..c374a4b130a 100644 --- a/ActivityPub.Safety.Keys.html +++ b/ActivityPub.Safety.Keys.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Safety.Signatures.html b/ActivityPub.Safety.Signatures.html index 3cc5b64ff8f..b71917f67a4 100644 --- a/ActivityPub.Safety.Signatures.html +++ b/ActivityPub.Safety.Signatures.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Utils.html b/ActivityPub.Utils.html index 26e1c8976db..cc9a3a716a7 100644 --- a/ActivityPub.Utils.html +++ b/ActivityPub.Utils.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.ActivityPubController.html b/ActivityPub.Web.ActivityPubController.html index 22bdc6bc33d..3ab53fd4113 100644 --- a/ActivityPub.Web.ActivityPubController.html +++ b/ActivityPub.Web.ActivityPubController.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.ActorView.html b/ActivityPub.Web.ActorView.html index f10d43d1a97..d504348048d 100644 --- a/ActivityPub.Web.ActorView.html +++ b/ActivityPub.Web.ActorView.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.Endpoint.html b/ActivityPub.Web.Endpoint.html index b9557409b9d..083031f0c55 100644 --- a/ActivityPub.Web.Endpoint.html +++ b/ActivityPub.Web.Endpoint.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.ErrorHelpers.html b/ActivityPub.Web.ErrorHelpers.html index 69f0023d558..3cee3466886 100644 --- a/ActivityPub.Web.ErrorHelpers.html +++ b/ActivityPub.Web.ErrorHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.ErrorView.html b/ActivityPub.Web.ErrorView.html index 81c0e9052d8..a9fb7b1bd68 100644 --- a/ActivityPub.Web.ErrorView.html +++ b/ActivityPub.Web.ErrorView.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.LayoutView.html b/ActivityPub.Web.LayoutView.html index c28f6569d90..096b969b7af 100644 --- a/ActivityPub.Web.LayoutView.html +++ b/ActivityPub.Web.LayoutView.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.ObjectView.html b/ActivityPub.Web.ObjectView.html index 623c5d9f095..510749c07d9 100644 --- a/ActivityPub.Web.ObjectView.html +++ b/ActivityPub.Web.ObjectView.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.Plugs.DigestPlug.html b/ActivityPub.Web.Plugs.DigestPlug.html index 46dc2eb8251..347d16f34d7 100644 --- a/ActivityPub.Web.Plugs.DigestPlug.html +++ b/ActivityPub.Web.Plugs.DigestPlug.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html b/ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html index bb1ba2b02cb..a1f8841a22b 100644 --- a/ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html +++ b/ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.Plugs.HTTPSignaturePlug.html b/ActivityPub.Web.Plugs.HTTPSignaturePlug.html index 03fa5c0a147..73a899340a8 100644 --- a/ActivityPub.Web.Plugs.HTTPSignaturePlug.html +++ b/ActivityPub.Web.Plugs.HTTPSignaturePlug.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html b/ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html index 38d33017508..c8abe992a0b 100644 --- a/ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html +++ b/ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.RedirectController.html b/ActivityPub.Web.RedirectController.html index 87f8bc0da55..9ee29aba0a0 100644 --- a/ActivityPub.Web.RedirectController.html +++ b/ActivityPub.Web.RedirectController.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.Router.html b/ActivityPub.Web.Router.html index ba4223ce6d4..ed3061eb5cd 100644 --- a/ActivityPub.Web.Router.html +++ b/ActivityPub.Web.Router.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.Telemetry.html b/ActivityPub.Web.Telemetry.html index 71ff2643276..bf9f1b6ac48 100644 --- a/ActivityPub.Web.Telemetry.html +++ b/ActivityPub.Web.Telemetry.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.UserSocket.html b/ActivityPub.Web.UserSocket.html index 652b4b3e75d..215e7c833fa 100644 --- a/ActivityPub.Web.UserSocket.html +++ b/ActivityPub.Web.UserSocket.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.WebFingerController.html b/ActivityPub.Web.WebFingerController.html index ac54c410c3c..55c528d3a42 100644 --- a/ActivityPub.Web.WebFingerController.html +++ b/ActivityPub.Web.WebFingerController.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.Web.html b/ActivityPub.Web.html index c84daffd725..cc4cccc7c98 100644 --- a/ActivityPub.Web.html +++ b/ActivityPub.Web.html @@ -13,7 +13,7 @@ - + diff --git a/ActivityPub.html b/ActivityPub.html index 31aa995b582..e1ac2cf1e82 100644 --- a/ActivityPub.html +++ b/ActivityPub.html @@ -13,7 +13,7 @@ - + diff --git a/AnimalAvatarGenerator.html b/AnimalAvatarGenerator.html index 151d0b65d5c..14728c18b00 100644 --- a/AnimalAvatarGenerator.html +++ b/AnimalAvatarGenerator.html @@ -13,7 +13,7 @@ - + diff --git a/Arrows.html b/Arrows.html index 14955188e37..29ea858eb41 100644 --- a/Arrows.html +++ b/Arrows.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Acls.html b/Bonfire.Boundaries.Acls.html index 62e4d68e91b..6c1f42d37e5 100644 --- a/Bonfire.Boundaries.Acls.html +++ b/Bonfire.Boundaries.Acls.html @@ -13,7 +13,7 @@ - + @@ -138,8 +138,8 @@

ACLs represent fully populated access control rules that can be reused. -Can be reused to secure multiple objects, thus exists independently of any object.

The table doesn't have any fields of its own:

has_many(:grants, Grant)
-has_many(:controlled, Controlled)
+Can be reused to secure multiple objects, thus exists independently of any object.

The table doesn't have any fields of its own:

has_many(:grants, Grant)
+has_many(:controlled, Controlled)
diff --git a/Bonfire.Boundaries.Acts.SetBoundaries.html b/Bonfire.Boundaries.Acts.SetBoundaries.html index 2a20b215854..c8501cfe620 100644 --- a/Bonfire.Boundaries.Acts.SetBoundaries.html +++ b/Bonfire.Boundaries.Acts.SetBoundaries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Blocks.LiveHandler.html b/Bonfire.Boundaries.Blocks.LiveHandler.html index a3078a27f24..6eb8e0f02ef 100644 --- a/Bonfire.Boundaries.Blocks.LiveHandler.html +++ b/Bonfire.Boundaries.Blocks.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Blocks.html b/Bonfire.Boundaries.Blocks.html index f4cd56ed537..44dd5c6fbfd 100644 --- a/Bonfire.Boundaries.Blocks.html +++ b/Bonfire.Boundaries.Blocks.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Circles.html b/Bonfire.Boundaries.Circles.html index 1cca0489791..f8caa53e456 100644 --- a/Bonfire.Boundaries.Circles.html +++ b/Bonfire.Boundaries.Circles.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Controlleds.html b/Bonfire.Boundaries.Controlleds.html index 9e4c8ff2e3b..ea9c8455ab7 100644 --- a/Bonfire.Boundaries.Controlleds.html +++ b/Bonfire.Boundaries.Controlleds.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Debug.html b/Bonfire.Boundaries.Debug.html index 5b627f246a3..1408fc965bc 100644 --- a/Bonfire.Boundaries.Debug.html +++ b/Bonfire.Boundaries.Debug.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Fixtures.html b/Bonfire.Boundaries.Fixtures.html index cc6fd85df75..73dbd327970 100644 --- a/Bonfire.Boundaries.Fixtures.html +++ b/Bonfire.Boundaries.Fixtures.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.FixturesUsersMigrations.html b/Bonfire.Boundaries.FixturesUsersMigrations.html index 87d711ab168..75f3ed5c628 100644 --- a/Bonfire.Boundaries.FixturesUsersMigrations.html +++ b/Bonfire.Boundaries.FixturesUsersMigrations.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Grants.html b/Bonfire.Boundaries.Grants.html index 2edc96ccdeb..f6e23c95ccd 100644 --- a/Bonfire.Boundaries.Grants.html +++ b/Bonfire.Boundaries.Grants.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Integration.html b/Bonfire.Boundaries.Integration.html index 4495eac0318..003571b6462 100644 --- a/Bonfire.Boundaries.Integration.html +++ b/Bonfire.Boundaries.Integration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.LiveHandler.html b/Bonfire.Boundaries.LiveHandler.html index 8464044ef17..883e3cc8ab7 100644 --- a/Bonfire.Boundaries.LiveHandler.html +++ b/Bonfire.Boundaries.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Queries.html b/Bonfire.Boundaries.Queries.html index 413ee4bdec1..9c872e56671 100644 --- a/Bonfire.Boundaries.Queries.html +++ b/Bonfire.Boundaries.Queries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Roles.html b/Bonfire.Boundaries.Roles.html index ffe601643d3..2c9a8cc5b22 100644 --- a/Bonfire.Boundaries.Roles.html +++ b/Bonfire.Boundaries.Roles.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.RuntimeConfig.html b/Bonfire.Boundaries.RuntimeConfig.html index bf04920ac5c..5b4b3153767 100644 --- a/Bonfire.Boundaries.RuntimeConfig.html +++ b/Bonfire.Boundaries.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Summary.html b/Bonfire.Boundaries.Summary.html index d5fbfefc288..2afc6b5dc07 100644 --- a/Bonfire.Boundaries.Summary.html +++ b/Bonfire.Boundaries.Summary.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Users.html b/Bonfire.Boundaries.Users.html index 735ec3e50a4..6eefb2662d5 100644 --- a/Bonfire.Boundaries.Users.html +++ b/Bonfire.Boundaries.Users.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Verbs.html b/Bonfire.Boundaries.Verbs.html index 70655659ccc..88cee3567ee 100644 --- a/Bonfire.Boundaries.Verbs.html +++ b/Bonfire.Boundaries.Verbs.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Web.ExcludeBoundaries.html b/Bonfire.Boundaries.Web.ExcludeBoundaries.html index 76c6d4d1376..6705c902058 100644 --- a/Bonfire.Boundaries.Web.ExcludeBoundaries.html +++ b/Bonfire.Boundaries.Web.ExcludeBoundaries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.Web.Routes.html b/Bonfire.Boundaries.Web.Routes.html index a5a458ae83e..214ea81c28c 100644 --- a/Bonfire.Boundaries.Web.Routes.html +++ b/Bonfire.Boundaries.Web.Routes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Boundaries.html b/Bonfire.Boundaries.html index 2c7480f7ec7..ae71eb7109e 100644 --- a/Bonfire.Boundaries.html +++ b/Bonfire.Boundaries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Benchmark.html b/Bonfire.Common.Benchmark.html index aef324f4a15..5cfc806adad 100644 --- a/Bonfire.Common.Benchmark.html +++ b/Bonfire.Common.Benchmark.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Cache.html b/Bonfire.Common.Cache.html index fa7fd8e7dcb..2816f7f213c 100644 --- a/Bonfire.Common.Cache.html +++ b/Bonfire.Common.Cache.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Changelog.Github.DataGrabber.html b/Bonfire.Common.Changelog.Github.DataGrabber.html index cdfe34c84b6..f93e5d50a1d 100644 --- a/Bonfire.Common.Changelog.Github.DataGrabber.html +++ b/Bonfire.Common.Changelog.Github.DataGrabber.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Config.Error.html b/Bonfire.Common.Config.Error.html index 87ea321fcb0..79e56514c77 100644 --- a/Bonfire.Common.Config.Error.html +++ b/Bonfire.Common.Config.Error.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Config.LoadExtensionsConfig.html b/Bonfire.Common.Config.LoadExtensionsConfig.html index 1ff948a9dd2..bb052eadd27 100644 --- a/Bonfire.Common.Config.LoadExtensionsConfig.html +++ b/Bonfire.Common.Config.LoadExtensionsConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Config.html b/Bonfire.Common.Config.html index b3c910556f0..31ee24842ff 100644 --- a/Bonfire.Common.Config.html +++ b/Bonfire.Common.Config.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.ConfigModule.html b/Bonfire.Common.ConfigModule.html index 4dc28ba9932..f28ace0f2e4 100644 --- a/Bonfire.Common.ConfigModule.html +++ b/Bonfire.Common.ConfigModule.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.ContextModule.html b/Bonfire.Common.ContextModule.html index 082bde6bc06..46d8f342707 100644 --- a/Bonfire.Common.ContextModule.html +++ b/Bonfire.Common.ContextModule.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.DatesTimes.html b/Bonfire.Common.DatesTimes.html index d40f882c15e..81c22b15c04 100644 --- a/Bonfire.Common.DatesTimes.html +++ b/Bonfire.Common.DatesTimes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Enums.html b/Bonfire.Common.Enums.html index b12dfc4f2df..2458e86f793 100644 --- a/Bonfire.Common.Enums.html +++ b/Bonfire.Common.Enums.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Errors.html b/Bonfire.Common.Errors.html index 4d157abc37d..cab3cc2a376 100644 --- a/Bonfire.Common.Errors.html +++ b/Bonfire.Common.Errors.html @@ -13,7 +13,7 @@ - + @@ -495,12 +495,12 @@

format_mfa(module, fun, arity)

Examples -
iex> Exception.format_mfa(Foo, :bar, 1)
-{Foo, :bar, "Foo.bar/1"}
-iex> Exception.format_mfa(Foo, :bar, [])
-{Foo, :bar, "Foo.bar()"}
-iex> Exception.format_mfa(nil, :bar, [])
-{nil, :bar, "nil.bar()"}

Anonymous functions are reported as -func/arity-anonfn-count-, +

iex> Exception.format_mfa(Foo, :bar, 1)
+{Foo, :bar, "Foo.bar/1"}
+iex> Exception.format_mfa(Foo, :bar, [])
+{Foo, :bar, "Foo.bar()"}
+iex> Exception.format_mfa(nil, :bar, [])
+{nil, :bar, "nil.bar()"}

Anonymous functions are reported as -func/arity-anonfn-count-, where func is the name of the enclosing function. Convert to "anonymous fn in func/arity"

diff --git a/Bonfire.Common.Extend.html b/Bonfire.Common.Extend.html index 99c3b28ad92..0f3c4efe1c5 100644 --- a/Bonfire.Common.Extend.html +++ b/Bonfire.Common.Extend.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.ExtensionBehaviour.html b/Bonfire.Common.ExtensionBehaviour.html index ea5cb674a99..e64277f6b28 100644 --- a/Bonfire.Common.ExtensionBehaviour.html +++ b/Bonfire.Common.ExtensionBehaviour.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.ExtensionModule.html b/Bonfire.Common.ExtensionModule.html index 21612970a44..6c653dc8e93 100644 --- a/Bonfire.Common.ExtensionModule.html +++ b/Bonfire.Common.ExtensionModule.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Extensions.Diff.html b/Bonfire.Common.Extensions.Diff.html index ac66babfb9b..a24045aa14d 100644 --- a/Bonfire.Common.Extensions.Diff.html +++ b/Bonfire.Common.Extensions.Diff.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Extensions.html b/Bonfire.Common.Extensions.html index 484a011ba07..d9edf510eab 100644 --- a/Bonfire.Common.Extensions.html +++ b/Bonfire.Common.Extensions.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.HTTP.Connection.html b/Bonfire.Common.HTTP.Connection.html index 07fcc93b7b1..6c18c4c8695 100644 --- a/Bonfire.Common.HTTP.Connection.html +++ b/Bonfire.Common.HTTP.Connection.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.HTTP.RequestBuilder.html b/Bonfire.Common.HTTP.RequestBuilder.html index 019989e239c..36677128727 100644 --- a/Bonfire.Common.HTTP.RequestBuilder.html +++ b/Bonfire.Common.HTTP.RequestBuilder.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.HTTP.html b/Bonfire.Common.HTTP.html index c0db6e96b1e..be994cc4ff1 100644 --- a/Bonfire.Common.HTTP.html +++ b/Bonfire.Common.HTTP.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Localise.Cldr.AcceptLanguage.html b/Bonfire.Common.Localise.Cldr.AcceptLanguage.html index e8d63ca6bc8..9d82e7f67fc 100644 --- a/Bonfire.Common.Localise.Cldr.AcceptLanguage.html +++ b/Bonfire.Common.Localise.Cldr.AcceptLanguage.html @@ -13,7 +13,7 @@ - + @@ -142,7 +142,7 @@

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."

@@ -255,54 +255,54 @@

best_match(accept_language)

Examples -
iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
-{:ok,
- %Cldr.LanguageTag{
+
iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
-{:ok,
- %Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.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: []
- }}
-
-iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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"}}
+
transform: %{}, + language_variants: [] + }} + +iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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"}}
@@ -363,95 +363,95 @@

parse(tokens_or_string)

Example -
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: []
-    }}
- ]}
-
-iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3,invalid_tag")
-{:ok,
- [
-   {1.0,
-    %Cldr.LanguageTag{
+      transform: %{},
+      language_variants: []
+    }}
+ ]}
+
+iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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"}} + ]}
@@ -496,92 +496,92 @@

parse!(accept_language)

Example -
iex> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3")
-[
-  {1.0,
-   %Cldr.LanguageTag{
+
iex> Bonfire.Common.Localise.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: []
+   }}
+]
 
 Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3,invalid_tag")
-[
-  {1.0,
-   %Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.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/Bonfire.Common.Localise.Cldr.Calendar.html b/Bonfire.Common.Localise.Cldr.Calendar.html index 4721c0e6554..48224aeda23 100644 --- a/Bonfire.Common.Localise.Cldr.Calendar.html +++ b/Bonfire.Common.Localise.Cldr.Calendar.html @@ -13,7 +13,7 @@ - + @@ -299,16 +299,16 @@

calendar_from_locale(locale)

Examples
iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale "en-GB"
-{:ok, Cldr.Calendar.GB}
+{:ok, Cldr.Calendar.GB}
 
 iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale "en-GB-u-ca-gregory"
-{:ok, Cldr.Calendar.Gregorian}
+{:ok, Cldr.Calendar.Gregorian}
 
 iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale "en"
-{:ok, Cldr.Calendar.US}
+{:ok, Cldr.Calendar.US}
 
 iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale "fa-IR"
-{:ok, Cldr.Calendar.Persian}
+{:ok, Cldr.Calendar.Persian}
@@ -351,10 +351,10 @@

calendar_from_territory(territory)

Examples
iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory :US
-{:ok, Cldr.Calendar.Gregorian}
+{:ok, Cldr.Calendar.Gregorian}
 
 iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory :XX
-{:error, {Cldr.UnknownTerritoryError, "The territory :XX is unknown"}}

+{:error, {Cldr.UnknownTerritoryError, "The territory :XX is unknown"}}

@@ -604,19 +604,19 @@

strftime_options!(locale \\ Bonfire.Common. Example

iex: MyApp.Cldr.Calendar.strftime_options!
-[
-  am_pm_names: #Function<0.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>,
-  month_names: #Function<1.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>,
-  abbreviated_month_names: #Function<2.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>,
-  day_of_week_names: #Function<3.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>,
-  abbreviated_day_of_week_names: #Function<4.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>
-]

+[ + am_pm_names: #Function<0.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>, + month_names: #Function<1.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>, + abbreviated_month_names: #Function<2.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>, + day_of_week_names: #Function<3.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2>, + abbreviated_day_of_week_names: #Function<4.32021692/1 in MyApp.Cldr.Calendar.strftime_options/2> +]

Typical usage

-
iex: NimbleStrftime.format(Date.today(), MyApp.Cldr.Calendar.strftime_options!())
+
iex: NimbleStrftime.format(Date.today(), MyApp.Cldr.Calendar.strftime_options!())
diff --git a/Bonfire.Common.Localise.Cldr.Currency.html b/Bonfire.Common.Localise.Cldr.Currency.html index 94719c99bba..3d998f69553 100644 --- a/Bonfire.Common.Localise.Cldr.Currency.html +++ b/Bonfire.Common.Localise.Cldr.Currency.html @@ -13,7 +13,7 @@ - + @@ -413,11 +413,11 @@

currencies_for_locale(locale, only \\ :all,

MyApp.Cldr.Currency.currencies_for_locale("en") => {:ok, - %{

 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,
@@ -427,12 +427,12 @@ 

currencies_for_locale(locale, only \\ :all, 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, @@ -442,7 +442,7 @@

currencies_for_locale(locale, only \\ :all, symbol: "SUR", tender: true, to: nil - }, + }, ... }}

@@ -493,11 +493,11 @@

currencies_for_locale!(locale, only \\ :all Example

MyApp.Cldr.Currency.currencies_for_locale!("en") - => %{

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,
@@ -507,12 +507,12 @@ 

currencies_for_locale!(locale, only \\ :all 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, @@ -522,7 +522,7 @@

currencies_for_locale!(locale, only \\ :all symbol: "SUR", tender: true, to: nil -}, +}, ...

}

@@ -580,13 +580,13 @@

currency_for_code(currency_or_currency_code Examples

-
iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code("AUD")
-{:ok,
-  %Cldr.Currency{
+
iex> Bonfire.Common.Localise.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",
@@ -594,15 +594,15 @@ 

currency_for_code(currency_or_currency_code rounding: 0, symbol: "A$", tender: true -}} +}} -iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code("THB") -{:ok, - %Cldr.Currency{ +iex> Bonfire.Common.Localise.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", @@ -610,7 +610,7 @@

currency_for_code(currency_or_currency_code rounding: 0, symbol: "THB", tender: true -}}

+
}}
@@ -669,12 +669,12 @@

currency_for_code!(currency_or_currency_cod Examples

-
iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code!("AUD")
-%Cldr.Currency{
+
iex> Bonfire.Common.Localise.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",
@@ -682,14 +682,14 @@ 

currency_for_code!(currency_or_currency_cod rounding: 0, symbol: "A$", tender: true -} +} -iex> Bonfire.Common.Localise.Cldr.Currency.currency_for_code!("THB") -%Cldr.Currency{ +iex> Bonfire.Common.Localise.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", @@ -697,7 +697,7 @@

currency_for_code!(currency_or_currency_cod rounding: 0, symbol: "THB", tender: true -}

+
}
@@ -738,15 +738,15 @@

currency_from_locale(locale)

Examples -
iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale("en")
+
iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale("en")
 iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale locale
 :USD
 
-iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale("en-AU")
+iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale("en-AU")
 iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale locale
 :AUD
 
-iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale("en-GB")
+iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale("en-GB")
 :GBP
@@ -790,14 +790,14 @@

currency_history_for_locale(language_tag) Example

-
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]}
-  }
-}
+
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]}
+  }
+}
@@ -856,9 +856,9 @@

currency_strings(locale, only \\ :all, exce Example

-
MyApp.Cldr.Currency.currency_strings("en")
-=> {:ok,
- %{
+
MyApp.Cldr.Currency.currency_strings("en")
+=> {:ok,
+ %{
    "mexican silver pesos" => :MXP,
    "sudanese dinar" => :SDD,
    "bad" => :BAD,
@@ -868,7 +868,7 @@ 

currency_strings(locale, only \\ :all, exce "guyanaese dollars" => :GYD, "equatorial guinean ekwele" => :GQE, ... - }}

+
}}
@@ -927,8 +927,8 @@

currency_strings!(locale_name, only \\ :all Example

-
MyApp.Cldr.Currency.currency_strings!("en")
-=> %{
+
MyApp.Cldr.Currency.currency_strings!("en")
+=> %{
   "mexican silver pesos" => :MXP,
   "sudanese dinar" => :SDD,
   "bad" => :BAD,
@@ -938,7 +938,7 @@ 

currency_strings!(locale_name, only \\ :all "guyanaese dollars" => :GYD, "equatorial guinean ekwele" => :GQE, ... - }

+
}
@@ -976,10 +976,10 @@

current_currency_from_locale(locale)

Example -
iex> MyApp.Cldr.Currency.current_currency_from_locale("en")
+
iex> MyApp.Cldr.Currency.current_currency_from_locale("en")
 :USD
 
-iex> MyApp.Cldr.Currency.current_currency_from_locale("en-AU")
+iex> MyApp.Cldr.Currency.current_currency_from_locale("en-AU")
 :AUD
@@ -1027,7 +1027,7 @@

current_territory_currencies()

Example -
iex> Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies()
+
iex> Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies()
@@ -1119,11 +1119,11 @@

known_currency_code(currency_code)

Examples -
iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code("AUD")
-{:ok, :AUD}
+
iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code("AUD")
+{:ok, :AUD}
 
-iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code("GGG")
-{:error, {Cldr.UnknownCurrencyError, "The currency \"GGG\" is invalid"}}
+
iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code("GGG") +{:error, {Cldr.UnknownCurrencyError, "The currency \"GGG\" is invalid"}}
@@ -1170,13 +1170,13 @@

known_currency_code?(currency_code)

Examples -
iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?("AUD")
+
iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?("AUD")
 true
 
-iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?("GGG")
+iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?("GGG")
 false
 
-iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(:XCV)
+iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(:XCV)
 false
@@ -1211,7 +1211,7 @@

known_currency_codes()

Example -
iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_codes()
+
iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_codes()
@@ -1270,14 +1270,14 @@

new(currency, options \\ [])

Example -
iex> Bonfire.Common.Localise.Cldr.Currency.new(:XAE, name: "Custom Name", digits: 0)
-{:ok,
- %Cldr.Currency{
+
iex> Bonfire.Common.Localise.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,
@@ -1287,11 +1287,11 @@ 

new(currency, options \\ [])

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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Currency.new(:XAE, name: "XAE", digits: 0) +{:error, {Cldr.CurrencyAlreadyDefined, "Currency :XAE is already defined."}}
@@ -1349,20 +1349,20 @@

pluralize(number, currency, options \\ [])< Examples

-
iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD)
-{:ok, "US dollar"}
+
iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD)
+{:ok, "US dollar"}
 
-iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(3, :USD)
-{:ok, "US dollars"}
+iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(3, :USD)
+{:ok, "US dollars"}
 
-iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: "zh")
-{:ok, "美元"}
+iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: "zh")
+{:ok, "美元"}
 
-iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: "fr")
-{:ok, "dollars des États-Unis"}
+iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: "fr")
+{:ok, "dollars des États-Unis"}
 
-iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD, locale: "fr")
-{:ok, "dollar des États-Unis"}
+
iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD, locale: "fr") +{:ok, "dollar des États-Unis"}
@@ -1404,8 +1404,8 @@

strings_for_currency(currency, locale)

Example -
iex> MyApp.Cldr.Currency.strings_for_currency(:AUD, "en")
-["a$", "australian dollars", "aud", "australian dollar"]
+
iex> MyApp.Cldr.Currency.strings_for_currency(:AUD, "en")
+["a$", "australian dollars", "aud", "australian dollar"]
diff --git a/Bonfire.Common.Localise.Cldr.Date.Interval.html b/Bonfire.Common.Localise.Cldr.Date.Interval.html index d5c29a14104..92ec6c15ba0 100644 --- a/Bonfire.Common.Localise.Cldr.Date.Interval.html +++ b/Bonfire.Common.Localise.Cldr.Date.Interval.html @@ -13,7 +13,7 @@ - + @@ -296,30 +296,30 @@

to_string(from, to, options)

Examples
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-12-31]
-{:ok, "Jan 1 – Dec 31, 2020"}
+{:ok, "Jan 1 – Dec 31, 2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12]
-{:ok, "Jan 1 – 12, 2020"}
+{:ok, "Jan 1 – 12, 2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
 ...> format: :long
-{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
+{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-12-01],
 ...> format: :long, style: :year_and_month
-{:ok, "January – December 2020"}
+{:ok, "January – December 2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
 ...> format: :short
-{:ok, "1/1/2020 – 1/12/2020"}
+{:ok, "1/1/2020 – 1/12/2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
 ...> format: :long, locale: "fr"
-{:ok, "mer. 1 – dim. 12 janv. 2020"}
+{:ok, "mer. 1 – dim. 12 janv. 2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
 ...> format: :long, locale: "th", number_system: :thai
-{:ok, "พ. ๑ ม.ค. – อา. ๑๒ ม.ค. ๒๐๒๐"}
+
{:ok, "พ. ๑ ม.ค. – อา. ๑๒ ม.ค. ๒๐๒๐"}
@@ -396,17 +396,17 @@

to_string!(from, to, options)

Examples -
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31])
+
iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31])
 "Jan 1 – Dec 31, 2020"
 
-iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12])
+iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12])
 "Jan 1 – 12, 2020"
 
-iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),
+iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),
 ...> format: :long
 "Wed, Jan 1 – Sun, Jan 12, 2020"
 
-iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-01]),
+iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-01]),
 ...> format: :long, style: :year_and_month
 "January – December 2020"
 
@@ -414,11 +414,11 @@ 

to_string!(from, to, options)

iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! ~I"2020-01/12" "Jan 1 – Dec 31, 2020" -iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]), +iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]), ...> format: :short "1/1/2020 – 1/12/2020" -iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]), +iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]), ...> format: :long, locale: "fr" "mer. 1 – dim. 12 janv. 2020"
diff --git a/Bonfire.Common.Localise.Cldr.Date.html b/Bonfire.Common.Localise.Cldr.Date.html index 3e1bd247fd7..dc09fbc040d 100644 --- a/Bonfire.Common.Localise.Cldr.Date.html +++ b/Bonfire.Common.Localise.Cldr.Date.html @@ -13,7 +13,7 @@ - + @@ -242,22 +242,22 @@

to_string(date, options \\ [])

Examples
iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :medium, locale: "en"
-{:ok, "Jul 10, 2017"}
+{:ok, "Jul 10, 2017"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], locale: "en"
-{:ok, "Jul 10, 2017"}
+{:ok, "Jul 10, 2017"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :full, locale: "en"
-{:ok, "Monday, July 10, 2017"}
+{:ok, "Monday, July 10, 2017"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :short, locale: "en"
-{:ok, "7/10/17"}
+{:ok, "7/10/17"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :short, locale: "fr"
-{:ok, "10/07/2017"}
+{:ok, "10/07/2017"}
 
 iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :long, locale: "af"
-{:ok, "10 Julie 2017"}
+
{:ok, "10 Julie 2017"}
diff --git a/Bonfire.Common.Localise.Cldr.DateTime.Format.html b/Bonfire.Common.Localise.Cldr.DateTime.Format.html index 65e8690a857..c0c8ee9dd66 100644 --- a/Bonfire.Common.Localise.Cldr.DateTime.Format.html +++ b/Bonfire.Common.Localise.Cldr.DateTime.Format.html @@ -13,7 +13,7 @@ - + @@ -440,10 +440,10 @@

calendars_for(locale \\ Bonfire.Common.Loca Example

-
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for(:en)
-{:ok, [:buddhist, :chinese, :coptic, :dangi, :ethiopic, :ethiopic_amete_alem,
+
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for(:en)
+{:ok, [:buddhist, :chinese, :coptic, :dangi, :ethiopic, :ethiopic_amete_alem,
  :generic, :gregorian, :hebrew, :indian, :islamic, :islamic_civil,
- :islamic_rgsa, :islamic_tbla, :islamic_umalqura, :japanese, :persian, :roc]}
+
:islamic_rgsa, :islamic_tbla, :islamic_umalqura, :japanese, :persian, :roc]}
@@ -489,21 +489,21 @@

date_formats(locale \\ Bonfire.Common.Local Examples:

-
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en)
-{:ok, %Cldr.Date.Formats{
+
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en)
+{:ok, %Cldr.Date.Formats{
   full: "EEEE, MMMM d, y",
   long: "MMMM d, y",
   medium: "MMM d, y",
   short: "M/d/yy"
-}}
+}}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en, :buddhist)
-{:ok, %Cldr.Date.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en, :buddhist)
+{:ok, %Cldr.Date.Formats{
   full: "EEEE, MMMM d, y G",
   long: "MMMM d, y G",
   medium: "MMM d, y G",
   short: "M/d/y GGGGG"
-}}
+
}}
@@ -552,21 +552,21 @@

date_time_at_formats(locale \\ Bonfire.Comm Examples:

-
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en)
-{:ok, %Cldr.DateTime.Formats{
+
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en)
+{:ok, %Cldr.DateTime.Formats{
   full: "{1} 'at' {0}",
   long: "{1} 'at' {0}",
   medium: "{1}, {0}",
-  short: "{1}, {0}"}
-}
+  short: "{1}, {0}"}
+}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en, :buddhist)
-{:ok, %Cldr.DateTime.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en, :buddhist)
+{:ok, %Cldr.DateTime.Formats{
   full: "{1} 'at' {0}",
   long: "{1} 'at' {0}",
   medium: "{1}, {0}",
-  short: "{1}, {0}"}
-}
+
short: "{1}, {0}"} +}
@@ -615,9 +615,9 @@

date_time_available_formats(locale \\ Bonfi Examples:

iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats "en"
-{
+{
   :ok,
-  %{
+  %{
     d: "d",
     h: "h a",
     hm: "h:mm a",
@@ -626,7 +626,7 @@ 

date_time_available_formats(locale \\ Bonfi hmv: "h:mm a v", ms: "mm:ss", y: "y", - yw: %{one: "'week' w 'of' Y", other: "'week' w 'of' Y"}, + yw: %{one: "'week' w 'of' Y", other: "'week' w 'of' Y"}, Bh: "h B", Bhm: "h:mm B", Bhms: "h:mm:ss B", @@ -652,7 +652,7 @@

date_time_available_formats(locale \\ Bonfi MEd: "E, M/d", MMM: "LLL", MMMEd: "E, MMM d", - MMMMW: %{one: "'week' W 'of' MMMM", other: "'week' W 'of' MMMM"}, + MMMMW: %{one: "'week' W 'of' MMMM", other: "'week' W 'of' MMMM"}, MMMMd: "MMMM d", MMMd: "MMM d", Md: "M/d", @@ -665,8 +665,8 @@

date_time_available_formats(locale \\ Bonfi yMd: "M/d/y", yQQQ: "QQQ y", yQQQQ: "QQQQ y" - } -}

+ } +}
@@ -712,21 +712,21 @@

date_time_formats(locale \\ Bonfire.Common. Examples:

-
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en)
-{:ok, %Cldr.DateTime.Formats{
+
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en)
+{:ok, %Cldr.DateTime.Formats{
   full: "{1}, {0}",
   long: "{1}, {0}",
   medium: "{1}, {0}",
   short: "{1}, {0}"
-}}
+}}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en, :buddhist)
-{:ok, %Cldr.DateTime.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en, :buddhist)
+{:ok, %Cldr.DateTime.Formats{
   full: "{1}, {0}",
   long: "{1}, {0}",
   medium: "{1}, {0}",
   short: "{1}, {0}"
-}}
+
}}
@@ -775,7 +775,7 @@

date_time_interval_fallback(locale \\ Bonfi Examples:

iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback :en, :gregorian
-[0, " – ", 1]
+[0, " – ", 1]
@@ -927,7 +927,7 @@

gmt_format(locale \\ Bonfire.Common.Localis Example

iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format :en
-{:ok, ["GMT", 0]}
+{:ok, ["GMT", 0]}
@@ -973,10 +973,10 @@

gmt_zero_format(locale \\ Bonfire.Common.Lo Example

iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format :en
-{:ok, "GMT"}
+{:ok, "GMT"}
 
 iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format :fr
-{:ok, "UTC"}
+{:ok, "UTC"}
@@ -1020,7 +1020,7 @@

hour_format(locale \\ Bonfire.Common.Locali Example

iex> Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format "en"
-{:ok, {"+HH:mm", "-HH:mm"}}
+{:ok, {"+HH:mm", "-HH:mm"}}
@@ -1120,21 +1120,21 @@

time_formats(locale \\ Bonfire.Common.Local Examples:

-
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en)
-{:ok, %Cldr.Time.Formats{
+
iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en)
+{:ok, %Cldr.Time.Formats{
   full: "h:mm:ss a zzzz",
   long: "h:mm:ss a z",
   medium: "h:mm:ss a",
   short: "h:mm a"
-}}
+}}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en, :buddhist)
-{:ok, %Cldr.Time.Formats{
+iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en, :buddhist)
+{:ok, %Cldr.Time.Formats{
   full: "h:mm:ss a zzzz",
   long: "h:mm:ss a z",
   medium: "h:mm:ss a",
   short: "h:mm a"
-}}
+
}}
diff --git a/Bonfire.Common.Localise.Cldr.DateTime.Formatter.html b/Bonfire.Common.Localise.Cldr.DateTime.Formatter.html index 0c6a6775681..8cfd9206ace 100644 --- a/Bonfire.Common.Localise.Cldr.DateTime.Formatter.html +++ b/Bonfire.Common.Localise.Cldr.DateTime.Formatter.html @@ -13,7 +13,7 @@ - + @@ -247,7 +247,7 @@

format(date, format, locale \\ Cldr.get_loc Examples

iex> Bonfire.Common.Localise.Cldr.DateTime.Formatter.format ~U[2017-09-03 10:23:00.0Z], "yy/MM/dd hh:MM", "en"
-{:ok, "17/09/03 10:09"}
+{:ok, "17/09/03 10:09"}
diff --git a/Bonfire.Common.Localise.Cldr.DateTime.Interval.html b/Bonfire.Common.Localise.Cldr.DateTime.Interval.html index 6dda48b593b..3f67a654791 100644 --- a/Bonfire.Common.Localise.Cldr.DateTime.Interval.html +++ b/Bonfire.Common.Localise.Cldr.DateTime.Interval.html @@ -13,7 +13,7 @@ - + @@ -334,10 +334,10 @@

to_string(from, to, options \\ [])

iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string ~U[2020-01-01 00:00:00.0Z],
 ...> ~U[2020-12-31 10:00:00.0Z]
-{:ok, "Jan 1, 2020, 12:00:00 AM – Dec 31, 2020, 10:00:00 AM"}
+{:ok, "Jan 1, 2020, 12:00:00 AM – Dec 31, 2020, 10:00:00 AM"}
 
 iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string ~U[2020-01-01 00:00:00.0Z], nil
-{:ok, "Jan 1, 2020, 12:00:00 AM –"}
+{:ok, "Jan 1, 2020, 12:00:00 AM –"}
diff --git a/Bonfire.Common.Localise.Cldr.DateTime.Relative.html b/Bonfire.Common.Localise.Cldr.DateTime.Relative.html index 37218f4d474..607da0c5a35 100644 --- a/Bonfire.Common.Localise.Cldr.DateTime.Relative.html +++ b/Bonfire.Common.Localise.Cldr.DateTime.Relative.html @@ -13,7 +13,7 @@ - + @@ -240,60 +240,60 @@

to_string(time, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(-1)
-{:ok, "1 second ago"}
+
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(-1)
+{:ok, "1 second ago"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1)
-{:ok, "in 1 second"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1)
+{:ok, "in 1 second"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day)
-{:ok, "tomorrow"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day)
+{:ok, "tomorrow"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, locale: "fr")
-{:ok, "demain"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, locale: "fr")
+{:ok, "demain"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, style: :narrow)
-{:ok, "tomorrow"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, style: :narrow)
+{:ok, "tomorrow"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year)
-{:ok, "in 1,234 years"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year)
+{:ok, "in 1,234 years"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year, locale: "fr")
-{:ok, "dans 1 234 ans"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year, locale: "fr")
+{:ok, "dans 1 234 ans"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(31)
-{:ok, "in 31 seconds"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(31)
+{:ok, "in 31 seconds"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], relative_to: ~D[2017-04-26])
-{:ok, "in 3 days"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], relative_to: ~D[2017-04-26])
+{:ok, "in 3 days"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :short, locale: "fr")
-{:ok, "dans 5 min"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :short, locale: "fr")
+{:ok, "dans 5 min"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :narrow, locale: "fr")
-{:ok, "+5 min"}
+iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :narrow, locale: "fr")
+{:ok, "+5 min"}
 
 iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string 2, unit: :wed, style: :short, locale: "en"
-{:ok, "in 2 Wed."}
+{:ok, "in 2 Wed."}
 
 iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string 1, unit: :wed, style: :short
-{:ok, "next Wed."}
+{:ok, "next Wed."}
 
 iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :wed, style: :short
-{:ok, "last Wed."}
+{:ok, "last Wed."}
 
 iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :wed
-{:ok, "last Wednesday"}
+{:ok, "last Wednesday"}
 
 iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :quarter
-{:ok, "last quarter"}
+{:ok, "last quarter"}
 
 iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :mon, locale: "fr"
-{:ok, "lundi dernier"}
+{:ok, "lundi dernier"}
 
-iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], unit: :ziggeraut)
-{:error, {Cldr.UnknownTimeUnit,
- "Unknown time unit :ziggeraut.  Valid time units are [:day, :fri, :hour, :minute, :mon, :month, :quarter, :sat, :second, :sun, :thu, :tue, :wed, :week, :year]"}}
+
iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], unit: :ziggeraut) +{:error, {Cldr.UnknownTimeUnit, + "Unknown time unit :ziggeraut. Valid time units are [:day, :fri, :hour, :minute, :mon, :month, :quarter, :sat, :second, :sun, :thu, :tue, :wed, :week, :year]"}}
diff --git a/Bonfire.Common.Localise.Cldr.DateTime.html b/Bonfire.Common.Localise.Cldr.DateTime.html index 9fb01d81efa..372ad83667e 100644 --- a/Bonfire.Common.Localise.Cldr.DateTime.html +++ b/Bonfire.Common.Localise.Cldr.DateTime.html @@ -13,7 +13,7 @@ - + @@ -247,19 +247,19 @@

to_string(date_time, options \\ [])

Examples -
iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
+
iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
 iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime
-{:ok, "Jan 1, 2000, 11:59:59 PM"}
+{:ok, "Jan 1, 2000, 11:59:59 PM"}
 iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, locale: "en"
-{:ok, "Jan 1, 2000, 11:59:59 PM"}
+{:ok, "Jan 1, 2000, 11:59:59 PM"}
 iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :long, locale: "en"
-{:ok, "January 1, 2000, 11:59:59 PM UTC"}
+{:ok, "January 1, 2000, 11:59:59 PM UTC"}
 iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :hms, locale: "en"
-{:ok, "11:59:59 PM"}
+{:ok, "11:59:59 PM"}
 iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :full, locale: "en"
-{:ok, "Saturday, January 1, 2000, 11:59:59 PM GMT"}
+{:ok, "Saturday, January 1, 2000, 11:59:59 PM GMT"}
 iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :full, locale: "fr"
-{:ok, "samedi 1 janvier 2000, 23:59:59 UTC"}
+
{:ok, "samedi 1 janvier 2000, 23:59:59 UTC"}
@@ -332,7 +332,7 @@

to_string!(date_time, options \\ [])

Examples -
iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
+
iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
 iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, locale: "en"
 "Jan 1, 2000, 11:59:59 PM"
 iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, format: :long, locale: "en"
diff --git a/Bonfire.Common.Localise.Cldr.Interval.html b/Bonfire.Common.Localise.Cldr.Interval.html
index 3fb11d1a9a1..17bab6273f3 100644
--- a/Bonfire.Common.Localise.Cldr.Interval.html
+++ b/Bonfire.Common.Localise.Cldr.Interval.html
@@ -13,7 +13,7 @@
 
     
     
-    
+    
 
       
 
@@ -306,11 +306,11 @@ 

to_string(interval, options)

iex> use CalendarInterval
 iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~I"2020-01-01/12",
 ...> format: :long
-{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
+{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
 
-iex> Bonfire.Common.Localise.Cldr.Interval.to_string Date.range(~D[2020-01-01], ~D[2020-12-31]),
+iex> Bonfire.Common.Localise.Cldr.Interval.to_string Date.range(~D[2020-01-01], ~D[2020-12-31]),
 ...> format: :long
-{:ok, "Wed, Jan 1 – Thu, Dec 31, 2020"}
+
{:ok, "Wed, Jan 1 – Thu, Dec 31, 2020"}
@@ -401,31 +401,31 @@

to_string(from, to, options \\ [])

Examples
iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-12-31]
-{:ok, "Jan 1 – Dec 31, 2020"}
+{:ok, "Jan 1 – Dec 31, 2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-01-12]
-{:ok, "Jan 1 – 12, 2020"}
+{:ok, "Jan 1 – 12, 2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],
 ...> format: :long
-{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
+{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-12-01],
 ...> format: :long, style: :year_and_month
-{:ok, "January – December 2020"}
+{:ok, "January – December 2020"}
 
 iex> use CalendarInterval
 iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~I"2020-01-01/12",
 ...> format: :long
-{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
+{:ok, "Wed, Jan 1 – Sun, Jan 12, 2020"}
 
 iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-12-01 10:05:00.0Z],
 ...> format: :long
-{:ok, "January 1, 2020, 12:00:00 AM UTC – December 1, 2020, 10:05:00 AM UTC"}
+{:ok, "January 1, 2020, 12:00:00 AM UTC – December 1, 2020, 10:05:00 AM UTC"}
 
 iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:05:00.0Z],
 ...> format: :long
-{:ok, "January 1, 2020, 12:00:00 AM UTC – 10:05:00 AM UTC"}
+{:ok, "January 1, 2020, 12:00:00 AM UTC – 10:05:00 AM UTC"}
@@ -517,7 +517,7 @@

to_string!(interval, options)

...> format: :long "Wed, Jan 1 – Sun, Jan 12, 2020" -iex> Bonfire.Common.Localise.Cldr.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31]), +iex> Bonfire.Common.Localise.Cldr.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31]), ...> format: :long "Wed, Jan 1 – Thu, Dec 31, 2020"
diff --git a/Bonfire.Common.Localise.Cldr.Language.html b/Bonfire.Common.Localise.Cldr.Language.html index 6c3bb4e9c79..9b9401d9030 100644 --- a/Bonfire.Common.Localise.Cldr.Language.html +++ b/Bonfire.Common.Localise.Cldr.Language.html @@ -13,7 +13,7 @@ - + @@ -284,12 +284,12 @@

available_languages(locale \\ get_locale()) Example

-
> Bonfire.Common.Localise.Cldr.Language.Language.available_languages(:en)
-["aa", "ab", "ace", "ach", "ada", "ady", "ae", "aeb", "af", "afh", "agq", "ain",
+
> Bonfire.Common.Localise.Cldr.Language.Language.available_languages(:en)
+["aa", "ab", "ace", "ach", "ada", "ady", "ae", "aeb", "af", "afh", "agq", "ain",
 "ak", "akk", "akz", "ale", "aln", "alt", "am", "an", "ang", "anp", "ar",
 "ar-001", "arc", "arn", "aro", "arp", "arq", "ars", "arw", "ary", "arz", "as",
 "asa", "ase", "ast", "av", "avk", "awa", "ay", "az", "ba", "bal", "ban", "bar",
-"bas", "bax", "bbc", "bbj", ...]
+
"bas", "bax", "bbc", "bbj", ...]
@@ -329,33 +329,33 @@

known_languages(locale \\ get_locale())

Example -
> Bonfire.Common.Localise.Cldr.Language.Language.known_languages(:en)
-%{"bez" => %{standard: "Bena"}, "lo" => %{standard: "Lao"},
-"kha" => %{standard: "Khasi"}, "eo" => %{standard: "Esperanto"},
-"rm" => %{standard: "Romansh"}, "ja" => %{standard: "Japanese"},
-"sw-CD" => %{standard: "Congo Swahili"},
-"pdc" => %{standard: "Pennsylvania German"}, "om" => %{standard: "Oromo"},
-"jut" => %{standard: "Jutish"}, "lij" => %{standard: "Ligurian"},
-"kut" => %{standard: "Kutenai"}, "vep" => %{standard: "Veps"},
-"yao" => %{standard: "Yao"}, "gez" => %{standard: "Geez"},
-"cr" => %{standard: "Cree"}, "ne" => %{standard: "Nepali"},
-"zbl" => %{standard: "Blissymbols"}, "ae" => %{standard: "Avestan"},
-"rof" => %{standard: "Rombo"}, "tkl" => %{standard: "Tokelau"},
-"rgn" => %{standard: "Romagnol"}, "el" => %{standard: "Greek"},
-"myv" => %{standard: "Erzya"}, "smj" => %{standard: "Lule Sami"},
-"fo" => %{standard: "Faroese"}, "ii" => %{standard: "Sichuan Yi"},
-"bum" => %{standard: "Bulu"}, "za" => %{standard: "Zhuang"},
-"raj" => %{standard: "Rajasthani"}, "mrj" => %{standard: "Western Mari"},
-"stq" => %{standard: "Saterland Frisian"}, "hu" => %{standard: "Hungarian"},
-"mga" => %{standard: "Middle Irish"}, "bej" => %{standard: "Beja"},
-"yue" => %{standard: "Cantonese"}, "xog" => %{standard: "Soga"},
-"ttt" => %{standard: "Muslim Tat"}, "uga" => %{standard: "Ugaritic"},
-"rup" => %{standard: "Aromanian"},
-"crs" => %{standard: "Seselwa Creole French"}, "oc" => %{standard: "Occitan"},
-"chp" => %{standard: "Chipewyan"}, "zen" => %{standard: "Zenaga"},
-"kmb" => %{standard: "Kimbundu"}, "nr" => %{standard: "South Ndebele"},
-"tiv" => %{standard: "Tiv"}, "aln" => %{standard: "Gheg Albanian"},
-"sh" => %{standard: "Serbo-Croatian"}, "fil" => %{...}, ...}
+
> Bonfire.Common.Localise.Cldr.Language.Language.known_languages(:en)
+%{"bez" => %{standard: "Bena"}, "lo" => %{standard: "Lao"},
+"kha" => %{standard: "Khasi"}, "eo" => %{standard: "Esperanto"},
+"rm" => %{standard: "Romansh"}, "ja" => %{standard: "Japanese"},
+"sw-CD" => %{standard: "Congo Swahili"},
+"pdc" => %{standard: "Pennsylvania German"}, "om" => %{standard: "Oromo"},
+"jut" => %{standard: "Jutish"}, "lij" => %{standard: "Ligurian"},
+"kut" => %{standard: "Kutenai"}, "vep" => %{standard: "Veps"},
+"yao" => %{standard: "Yao"}, "gez" => %{standard: "Geez"},
+"cr" => %{standard: "Cree"}, "ne" => %{standard: "Nepali"},
+"zbl" => %{standard: "Blissymbols"}, "ae" => %{standard: "Avestan"},
+"rof" => %{standard: "Rombo"}, "tkl" => %{standard: "Tokelau"},
+"rgn" => %{standard: "Romagnol"}, "el" => %{standard: "Greek"},
+"myv" => %{standard: "Erzya"}, "smj" => %{standard: "Lule Sami"},
+"fo" => %{standard: "Faroese"}, "ii" => %{standard: "Sichuan Yi"},
+"bum" => %{standard: "Bulu"}, "za" => %{standard: "Zhuang"},
+"raj" => %{standard: "Rajasthani"}, "mrj" => %{standard: "Western Mari"},
+"stq" => %{standard: "Saterland Frisian"}, "hu" => %{standard: "Hungarian"},
+"mga" => %{standard: "Middle Irish"}, "bej" => %{standard: "Beja"},
+"yue" => %{standard: "Cantonese"}, "xog" => %{standard: "Soga"},
+"ttt" => %{standard: "Muslim Tat"}, "uga" => %{standard: "Ugaritic"},
+"rup" => %{standard: "Aromanian"},
+"crs" => %{standard: "Seselwa Creole French"}, "oc" => %{standard: "Occitan"},
+"chp" => %{standard: "Chipewyan"}, "zen" => %{standard: "Zenaga"},
+"kmb" => %{standard: "Kimbundu"}, "nr" => %{standard: "South Ndebele"},
+"tiv" => %{standard: "Tiv"}, "aln" => %{standard: "Gheg Albanian"},
+"sh" => %{standard: "Serbo-Croatian"}, "fil" => %{...}, ...}
@@ -392,8 +392,8 @@

to_string(key, options \\ [])

Example -
iex> Bonfire.Common.Localise.Cldr.Language.Language.to_string("eo")
-{:ok, "Esperanto"}
+
iex> Bonfire.Common.Localise.Cldr.Language.Language.to_string("eo")
+{:ok, "Esperanto"}
diff --git a/Bonfire.Common.Localise.Cldr.List.html b/Bonfire.Common.Localise.Cldr.List.html index 90870d362a9..8a659bf4b57 100644 --- a/Bonfire.Common.Localise.Cldr.List.html +++ b/Bonfire.Common.Localise.Cldr.List.html @@ -13,7 +13,7 @@ - + @@ -138,8 +138,8 @@

Cldr backend module that formats lists.

If we have a list of days like ["Monday", "Tuesday", "Wednesday"] -then we can format that list for a given locale by:

iex> Bonfire.Common.Localise.Cldr.List.to_string(["Monday", "Tuesday", "Wednesday"], locale: "en")
-{:ok, "Monday, Tuesday, and Wednesday"}
+then we can format that list for a given locale by:

iex> Bonfire.Common.Localise.Cldr.List.to_string(["Monday", "Tuesday", "Wednesday"], locale: "en")
+{:ok, "Monday, Tuesday, and Wednesday"}
@@ -289,23 +289,23 @@

intersperse(list, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "en")
-{:ok, ["a", ", ", "b", ", and ", "c"]}
+
iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "en")
+{:ok, ["a", ", ", "b", ", and ", "c"]}
 
-iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "en", format: :unit_narrow)
-{:ok, ["a", " ", "b", " ", "c"]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "en", format: :unit_narrow)
+{:ok, ["a", " ", "b", " ", "c"]}
 
-iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "fr")
-{:ok, ["a", ", ", "b", " et ", "c"]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a", "b", "c"], locale: "fr")
+{:ok, ["a", ", ", "b", " et ", "c"]}
 
-iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2,3,4,5,6])
-{:ok, [1, ", ", 2, ", ", 3, ", ", 4, ", ", 5, ", and ", 6]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2,3,4,5,6])
+{:ok, [1, ", ", 2, ", ", 3, ", ", 4, ", ", 5, ", and ", 6]}
 
-iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a"])
-{:ok, ["a"]}
+iex> Bonfire.Common.Localise.Cldr.List.intersperse(["a"])
+{:ok, ["a"]}
 
-iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2])
-{:ok, [1, " and ", 2]}
+
iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2]) +{:ok, [1, " and ", 2]}
@@ -364,11 +364,11 @@

intersperse!(list, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.List.intersperse!(["a", "b", "c"], locale: "en")
-["a", ", ", "b", ", and ", "c"]
+
iex> Bonfire.Common.Localise.Cldr.List.intersperse!(["a", "b", "c"], locale: "en")
+["a", ", ", "b", ", and ", "c"]
 
-iex> Bonfire.Common.Localise.Cldr.List.intersperse!(["a", "b", "c"], locale: "en", format: :unit_narrow)
-["a", " ", "b", " ", "c"]
+
iex> Bonfire.Common.Localise.Cldr.List.intersperse!(["a", "b", "c"], locale: "en", format: :unit_narrow) +["a", " ", "b", " ", "c"]
@@ -403,9 +403,9 @@

list_formats_for(locale_name)

Example -
iex> Bonfire.Common.Localise.Cldr.List.list_formats_for(:en)
-[:or, :or_narrow, :or_short, :standard, :standard_narrow, :standard_short,
- :unit, :unit_narrow, :unit_short]
+
iex> Bonfire.Common.Localise.Cldr.List.list_formats_for(:en)
+[:or, :or_narrow, :or_short, :standard, :standard_narrow, :standard_short,
+ :unit, :unit_narrow, :unit_short]
@@ -440,63 +440,63 @@

list_patterns_for(locale_name)

Example -
iex> Bonfire.Common.Localise.Cldr.List.list_patterns_for(:en)
-%{
-  or: %{
-    2 => [0, " or ", 1],
-    end: [0, ", or ", 1],
-    middle: [0, ", ", 1],
-    start: [0, ", ", 1]
-  },
-  or_narrow: %{
-    2 => [0, " or ", 1],
-    end: [0, ", or ", 1],
-    middle: [0, ", ", 1],
-    start: [0, ", ", 1]
-  },
-  or_short: %{
-    2 => [0, " or ", 1],
-    end: [0, ", or ", 1],
-    middle: [0, ", ", 1],
-    start: [0, ", ", 1]
-  },
-  standard: %{
-    2 => [0, " and ", 1],
-    end: [0, ", and ", 1],
-    middle: [0, ", ", 1],
-    start: [0, ", ", 1]
-  },
-  standard_narrow: %{
-    2 => [0, ", ", 1],
-    end: [0, ", ", 1],
-    middle: [0, ", ", 1],
-    start: [0, ", ", 1]
-  },
-  standard_short: %{
-    2 => [0, " & ", 1],
-    end: [0, ", & ", 1],
-    middle: [0, ", ", 1],
-    start: [0, ", ", 1]
-  },
-  unit: %{
-    2 => [0, ", ", 1],
-    end: [0, ", ", 1],
-    middle: [0, ", ", 1],
-    start: [0, ", ", 1]
-  },
-  unit_narrow: %{
-    2 => [0, " ", 1],
-    end: [0, " ", 1],
-    middle: [0, " ", 1],
-    start: [0, " ", 1]
-  },
-  unit_short: %{
-    2 => [0, ", ", 1],
-    end: [0, ", ", 1],
-    middle: [0, ", ", 1],
-    start: [0, ", ", 1]
-  }
-}
+
iex> Bonfire.Common.Localise.Cldr.List.list_patterns_for(:en)
+%{
+  or: %{
+    2 => [0, " or ", 1],
+    end: [0, ", or ", 1],
+    middle: [0, ", ", 1],
+    start: [0, ", ", 1]
+  },
+  or_narrow: %{
+    2 => [0, " or ", 1],
+    end: [0, ", or ", 1],
+    middle: [0, ", ", 1],
+    start: [0, ", ", 1]
+  },
+  or_short: %{
+    2 => [0, " or ", 1],
+    end: [0, ", or ", 1],
+    middle: [0, ", ", 1],
+    start: [0, ", ", 1]
+  },
+  standard: %{
+    2 => [0, " and ", 1],
+    end: [0, ", and ", 1],
+    middle: [0, ", ", 1],
+    start: [0, ", ", 1]
+  },
+  standard_narrow: %{
+    2 => [0, ", ", 1],
+    end: [0, ", ", 1],
+    middle: [0, ", ", 1],
+    start: [0, ", ", 1]
+  },
+  standard_short: %{
+    2 => [0, " & ", 1],
+    end: [0, ", & ", 1],
+    middle: [0, ", ", 1],
+    start: [0, ", ", 1]
+  },
+  unit: %{
+    2 => [0, ", ", 1],
+    end: [0, ", ", 1],
+    middle: [0, ", ", 1],
+    start: [0, ", ", 1]
+  },
+  unit_narrow: %{
+    2 => [0, " ", 1],
+    end: [0, " ", 1],
+    middle: [0, " ", 1],
+    start: [0, " ", 1]
+  },
+  unit_short: %{
+    2 => [0, ", ", 1],
+    end: [0, ", ", 1],
+    middle: [0, ", ", 1],
+    start: [0, ", ", 1]
+  }
+}
@@ -547,23 +547,23 @@

to_string(list, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "en")
-{:ok, "a, b, and c"}
+
iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "en")
+{:ok, "a, b, and c"}
 
-iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "en", format: :unit_narrow)
-{:ok, "a b c"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "en", format: :unit_narrow)
+{:ok, "a b c"}
 
-iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "fr")
-{:ok, "a, b et c"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string(["a", "b", "c"], locale: "fr")
+{:ok, "a, b et c"}
 
-iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2,3,4,5,6])
-{:ok, "1, 2, 3, 4, 5, and 6"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2,3,4,5,6])
+{:ok, "1, 2, 3, 4, 5, and 6"}
 
-iex> Bonfire.Common.Localise.Cldr.List.to_string(["a"])
-{:ok, "a"}
+iex> Bonfire.Common.Localise.Cldr.List.to_string(["a"])
+{:ok, "a"}
 
-iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2])
-{:ok, "1 and 2"}
+
iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2]) +{:ok, "1 and 2"}
@@ -600,10 +600,10 @@

to_string!(list, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.List.to_string!(["a", "b", "c"], locale: "en")
+
iex> Bonfire.Common.Localise.Cldr.List.to_string!(["a", "b", "c"], locale: "en")
 "a, b, and c"
 
-iex> Bonfire.Common.Localise.Cldr.List.to_string!(["a", "b", "c"], locale: "en", format: :unit_narrow)
+iex> Bonfire.Common.Localise.Cldr.List.to_string!(["a", "b", "c"], locale: "en", format: :unit_narrow)
 "a b c"
diff --git a/Bonfire.Common.Localise.Cldr.Locale.html b/Bonfire.Common.Localise.Cldr.Locale.html index 4ce1ab28a28..0f41335f036 100644 --- a/Bonfire.Common.Localise.Cldr.Locale.html +++ b/Bonfire.Common.Localise.Cldr.Locale.html @@ -13,7 +13,7 @@ - + @@ -320,16 +320,16 @@

fallback_locale_names(locale)

Examples -
iex> Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names(:"fr-CA")
-{:ok, [:"fr-CA", :fr, :und]}
+
iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names(:nb)
-{:ok, [:nb, :no, :und]}
+
iex> Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names(:nb) +{:ok, [:nb, :no, :und]}
@@ -383,20 +383,20 @@

fallback_locales(locale)

Examples -
Bonfire.Common.Localise.Cldr.Locale.fallback_locales(:"fr-CA")
-=> {:ok,
-     [#Cldr.LanguageTag<fr-CA [validated]>, #Cldr.LanguageTag<fr [validated]>,
-      #Cldr.LanguageTag<und [validated]>]}
+
Bonfire.Common.Localise.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.
 
-Bonfire.Common.Localise.Cldr.Locale.fallback_locales(:nb))
-=> {:ok,
-     [#Cldr.LanguageTag<nb [validated]>, #Cldr.LanguageTag<no [validated]>,
-      #Cldr.LanguageTag<und [validated]>]}
+
Bonfire.Common.Localise.Cldr.Locale.fallback_locales(:nb)) +=> {:ok, + [#Cldr.LanguageTag<nb [validated]>, #Cldr.LanguageTag<no [validated]>, + #Cldr.LanguageTag<und [validated]>]}
@@ -527,15 +527,15 @@

locale_from_host(host, options \\ [])

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

territory_from_host(host)

Examples -
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/Bonfire.Common.Localise.Cldr.Number.Cardinal.html b/Bonfire.Common.Localise.Cldr.Number.Cardinal.html index 19cae5d0345..22937220952 100644 --- a/Bonfire.Common.Localise.Cldr.Number.Cardinal.html +++ b/Bonfire.Common.Localise.Cldr.Number.Cardinal.html @@ -13,7 +13,7 @@ - + @@ -449,31 +449,31 @@

pluralize(number, locale_name, substitution Examples

-
iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1, "en", %{one: "one"}
+
iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1, "en", %{one: "one"}
 "one"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one"}
 nil
 
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one", two: "two", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one", two: "two", other: "other"}
 "other"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 22, "en", %{one: "one", two: "two", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 22, "en", %{one: "one", two: "two", other: "other"}
 "other"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(1), "en", %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(1), "en", %{one: "one"}
 "one"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one"}
 nil
 
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one", two: "two"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one", two: "two"}
 nil
 
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
 "few"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
 "other"
diff --git a/Bonfire.Common.Localise.Cldr.Number.Format.html b/Bonfire.Common.Localise.Cldr.Number.Format.html index ade546ac085..d393ad3940e 100644 --- a/Bonfire.Common.Localise.Cldr.Number.Format.html +++ b/Bonfire.Common.Localise.Cldr.Number.Format.html @@ -13,7 +13,7 @@ - + @@ -462,7 +462,7 @@

decimal_format_list()

Example
#=> Bonfire.Common.Localise.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¤)",
@@ -472,7 +472,7 @@ 

decimal_format_list()

"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 ¤", ...]
@@ -520,8 +520,8 @@

decimal_format_list_for(locale \\ Bonfire.C Example

-
iex> Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list_for(:en)
-{:ok, ["#,##0%", "#,##0.###", "#,##0.00", "#,##0.00;(#,##0.00)","#E0",
+
iex> Bonfire.Common.Localise.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",
@@ -529,7 +529,7 @@ 

decimal_format_list_for(locale \\ Bonfire.C "¤#,##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"]}
@@ -582,8 +582,8 @@

default_grouping_for(locale \\ Bonfire.Comm Examples

-
iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for(:en)
-{:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}
+
iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for(:en)
+{:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}
@@ -635,8 +635,8 @@

default_grouping_for!(locale)

Examples -
iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!(:en)
-%{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}
+
iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!(:en)
+%{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}
@@ -693,18 +693,18 @@

formats_for(locale \\ Bonfire.Common.Locali 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 ¤"]}], ... }

@@ -795,8 +795,8 @@

minimum_grouping_digits_for(locale \\ Bonfi Examples

-
iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for("en")
-{:ok, 1}
+
iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for("en")
+{:ok, 1}
@@ -848,7 +848,7 @@

minimum_grouping_digits_for!(locale)

Examples -
iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!("en")
+
iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!("en")
 1
diff --git a/Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html b/Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html index 542a78066ba..6e2bf35de1a 100644 --- a/Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html +++ b/Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Localise.Cldr.Number.Ordinal.html b/Bonfire.Common.Localise.Cldr.Number.Ordinal.html index e3610af86a2..ba26063def7 100644 --- a/Bonfire.Common.Localise.Cldr.Number.Ordinal.html +++ b/Bonfire.Common.Localise.Cldr.Number.Ordinal.html @@ -13,7 +13,7 @@ - + @@ -452,31 +452,31 @@

pluralize(number, locale_name, substitution Examples

-
iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1, :en, %{one: "one"}
+
iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1, :en, %{one: "one"}
 "one"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one"}
 nil
 
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one", two: "two"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one", two: "two"}
 "two"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 22, :en, %{one: "one", two: "two", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 22, :en, %{one: "one", two: "two", other: "other"}
 "two"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: "one"}
 "one"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one"}
 nil
 
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one", two: "two"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one", two: "two"}
 "two"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
 "other"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
+iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
 "other"
diff --git a/Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html b/Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html index d89d6667a14..bae5a794083 100644 --- a/Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html +++ b/Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Localise.Cldr.Number.Symbol.html b/Bonfire.Common.Localise.Cldr.Number.Symbol.html index e16834891bf..aca5ebf4cad 100644 --- a/Bonfire.Common.Localise.Cldr.Number.Symbol.html +++ b/Bonfire.Common.Localise.Cldr.Number.Symbol.html @@ -13,7 +13,7 @@ - + @@ -372,9 +372,9 @@

number_symbols_for(locale \\ Bonfire.Common Example:

-
iex> Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for(:th)
-{:ok, %{
-   latn: %Cldr.Number.Symbol{
+
iex> Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for(:th)
+{:ok, %{
+   latn: %Cldr.Number.Symbol{
      decimal: ".",
      exponential: "E",
      group: ",",
@@ -387,8 +387,8 @@ 

number_symbols_for(locale \\ Bonfire.Common plus_sign: "+", superscripting_exponent: "×", time_separator: ":" - }, - thai: %Cldr.Number.Symbol{ + }, + thai: %Cldr.Number.Symbol{ decimal: ".", exponential: "E", group: ",", @@ -401,8 +401,8 @@

number_symbols_for(locale \\ Bonfire.Common plus_sign: "+", superscripting_exponent: "×", time_separator: ":" - } - }}

+
} + }}
diff --git a/Bonfire.Common.Localise.Cldr.Number.System.html b/Bonfire.Common.Localise.Cldr.Number.System.html index 92c407f4018..5b3f310ff26 100644 --- a/Bonfire.Common.Localise.Cldr.Number.System.html +++ b/Bonfire.Common.Localise.Cldr.Number.System.html @@ -13,7 +13,7 @@ - + @@ -311,23 +311,23 @@

number_system_for(locale, system_name)

Examples
iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for "th", :latn
-{:ok, %{digits: "0123456789", type: :numeric}}
+{:ok, %{digits: "0123456789", type: :numeric}}
 
 iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for "en", :default
-{:ok, %{digits: "0123456789", type: :numeric}}
+{:ok, %{digits: "0123456789", type: :numeric}}
 
 iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for "he", :traditional
-{:ok, %{rules: "hebrew", type: :algorithmic}}
+{:ok, %{rules: "hebrew", type: :algorithmic}}
 
 iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for "en", :native
-{:ok, %{digits: "0123456789", type: :numeric}}
+{:ok, %{digits: "0123456789", type: :numeric}}
 
 iex> Bonfire.Common.Localise.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}"} +}
@@ -418,10 +418,10 @@

number_system_names_for(locale)

Examples
iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for "en"
-{:ok, [:latn]}
+{:ok, [:latn]}
 
 iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for "zz"
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
@@ -503,13 +503,13 @@

number_systems_for(locale)

Examples
iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for "en"
-{:ok, %{default: :latn, native: :latn}}
+{:ok, %{default: :latn, native: :latn}}
 
 iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for "th"
-{:ok, %{default: :latn, native: :thai}}
+{:ok, %{default: :latn, native: :thai}}
 
 iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for "zz"
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
@@ -607,20 +607,20 @@

system_name_from(system_name, locale)

Examples -
ex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:default, "en")
-{:ok, :latn}
+
ex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:default, "en")
+{:ok, :latn}
 
-iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from("latn", "en")
-{:ok, :latn}
+iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from("latn", "en")
+{:ok, :latn}
 
-iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:native, "en")
-{:ok, :latn}
+iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:native, "en")
+{:ok, :latn}
 
-iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:nope, "en")
-{
+iex> Bonfire.Common.Localise.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.

@@ -667,16 +667,16 @@

to_system(number, system)

Examples
iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123456, :hebr
-{:ok, "קכ״ג׳תנ״ו"}
+{:ok, "קכ״ג׳תנ״ו"}
 
 iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hans
-{:ok, "一百二十三"}
+{:ok, "一百二十三"}
 
 iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hant
-{:ok, "一百二十三"}
+{:ok, "一百二十三"}
 
 iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hansfin
-{:ok, "壹佰贰拾叁"}
+{:ok, "壹佰贰拾叁"}
diff --git a/Bonfire.Common.Localise.Cldr.Number.Transliterate.html b/Bonfire.Common.Localise.Cldr.Number.Transliterate.html index ebdc9ab55b4..a1d49296d5a 100644 --- a/Bonfire.Common.Localise.Cldr.Number.Transliterate.html +++ b/Bonfire.Common.Localise.Cldr.Number.Transliterate.html @@ -13,7 +13,7 @@ - + @@ -156,12 +156,12 @@

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.numeric_systems/0.

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

@@ -275,22 +275,22 @@

transliterate(sequence, locale \\ Bonfire.C Examples

-
iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556")
+
iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556")
 "123556"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123,556.000", "fr", :default)
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123,556.000", "fr", :default)
 "123 556,000"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", :default)
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", :default)
 "123556"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", "thai")
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", "thai")
 "๑๒๓๕๕๖"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", :native)
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("123556", "th", :native)
 "๑๒๓๕๕๖"
 
-iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("Some number is: 123556", "th", "thai")
+iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate("Some number is: 123556", "th", "thai")
 "Some number is: ๑๒๓๕๕๖"
diff --git a/Bonfire.Common.Localise.Cldr.Number.html b/Bonfire.Common.Localise.Cldr.Number.html index 4e22c976e5d..b97336cbf16 100644 --- a/Bonfire.Common.Localise.Cldr.Number.html +++ b/Bonfire.Common.Localise.Cldr.Number.html @@ -13,7 +13,7 @@ - + @@ -435,19 +435,19 @@

parse(string, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.Number.parse("+1.000,34", locale: "de")
-{:ok, 1000.34}
+
iex> Bonfire.Common.Localise.Cldr.Number.parse("+1.000,34", locale: "de")
+{:ok, 1000.34}
 
-iex> Bonfire.Common.Localise.Cldr.Number.parse("-1_000_000.34")
-{:ok, -1000000.34}
+iex> Bonfire.Common.Localise.Cldr.Number.parse("-1_000_000.34")
+{:ok, -1000000.34}
 
-iex> Bonfire.Common.Localise.Cldr.Number.parse("1.000", locale: "de", number: :integer)
-{:ok, 1000}
+iex> Bonfire.Common.Localise.Cldr.Number.parse("1.000", locale: "de", number: :integer)
+{:ok, 1000}
 
-iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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"}}
@@ -519,17 +519,17 @@

resolve_currencies(list, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.Number.scan("100 US dollars")
+
iex> Bonfire.Common.Localise.Cldr.Number.scan("100 US dollars")
 ...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies
-[100, :USD]
+[100, :USD]
 
-iex> Bonfire.Common.Localise.Cldr.Number.scan("100 eurosports")
-...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(fuzzy: 0.75)
-[100, :EUR]
+iex> Bonfire.Common.Localise.Cldr.Number.scan("100 eurosports")
+...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(fuzzy: 0.75)
+[100, :EUR]
 
-iex> Bonfire.Common.Localise.Cldr.Number.scan("100 dollars des États-Unis")
-...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(locale: "fr")
-[100, :USD]
+
iex> Bonfire.Common.Localise.Cldr.Number.scan("100 dollars des États-Unis") +...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(locale: "fr") +[100, :USD]
@@ -606,19 +606,19 @@

resolve_currency(string, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("US dollars")
-[:USD]
+
iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("US dollars")
+[:USD]
 
-iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("100 eurosports", fuzzy: 0.75)
-[:EUR]
+iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("100 eurosports", fuzzy: 0.75)
+[:EUR]
 
-iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("dollars des États-Unis", locale: "fr")
-[:USD]
+iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency("dollars des États-Unis", locale: "fr")
+[:USD]
 
-iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.resolve_currency("not a known currency", locale: "fr") +{:error, + {Cldr.UnknownCurrencyError, + "The currency \"not a known currency\" is unknown or not supported"}}
@@ -682,13 +682,13 @@

resolve_per(string, options \\ [])

Examples
iex> Bonfire.Common.Localise.Cldr.Number.resolve_per "11%"
-["11", :percent]
+["11", :percent]
 
 iex> Bonfire.Common.Localise.Cldr.Number.resolve_per "% of linguists"
-[:percent, " of linguists"]
+[:percent, " of linguists"]
 
 iex> Bonfire.Common.Localise.Cldr.Number.resolve_per "% of linguists %"
-[:percent, " of linguists ", :percent]
+[:percent, " of linguists ", :percent]
@@ -745,9 +745,9 @@

resolve_pers(list, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.Number.scan("100%")
-...> |> Bonfire.Common.Localise.Cldr.Number.resolve_pers()
-[100, :percent]
+
iex> Bonfire.Common.Localise.Cldr.Number.scan("100%")
+...> |> Bonfire.Common.Localise.Cldr.Number.resolve_pers()
+[100, :percent]
@@ -807,20 +807,20 @@

scan(string, options \\ [])

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

to_approx_string(number, options \\ [])

Example
iex> Bonfire.Common.Localise.Cldr.Number.to_approx_string 1234
-{:ok, "~1,234"}
+{:ok, "~1,234"}
@@ -914,7 +914,7 @@

to_at_least_string(number, options \\ [])Example

iex> Bonfire.Common.Localise.Cldr.Number.to_at_least_string 1234
-{:ok, "1,234+"}
+{:ok, "1,234+"}
@@ -961,7 +961,7 @@

to_at_most_string(number, options \\ [])Example

iex> Bonfire.Common.Localise.Cldr.Number.to_at_most_string 1234
-{:ok, "≤1,234"}
+{:ok, "≤1,234"}
@@ -1008,7 +1008,7 @@

to_range_string(range, options \\ [])

Example
iex> Bonfire.Common.Localise.Cldr.Number.to_range_string 1234..5678
-{:ok, "1,234–5,678"}
+{:ok, "1,234–5,678"}
@@ -1127,21 +1127,21 @@

to_string(number, options \\ default_option

Wrapping elements is particularly useful when formatting a number with a currency symbol and the requirement is to have different HTML formatting -applied to the symbol than the number. For example:

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. @@ -1162,80 +1162,80 @@

to_string(number, options \\ default_option Examples

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

    iex> Bonfire.Common.Localise.Cldr.Number.to_string(12345, format: "0#")
-    {:error, {Cldr.FormatCompileError,
-      "Decimal format compiler: syntax error before: \"#\""}}
    iex> Bonfire.Common.Localise.Cldr.Number.to_string(1234, locale: "he", number_system: "hebr", format: :percent)
+    {:error, {Cldr.UnknownFormatError,
+      "The locale :he with number system :hebr does not define a format :percent"}}
@@ -1340,17 +1340,17 @@

validate_number_system(locale, number_syste Examples

iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system "en", :latn
-{:ok, :latn}
+{:ok, :latn}
 
 iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system "en", :default
-{:ok, :latn}
+{:ok, :latn}
 
 iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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/Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html b/Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html index 697dd286d04..69890723f79 100644 --- a/Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html +++ b/Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html @@ -13,7 +13,7 @@ - + @@ -139,9 +139,9 @@

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> Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.rule_sets(:und)
-...> |> Enum.sort()
-[
+defined in the Unicode CLDR data repository.  Available rules are identified by:

iex> Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.rule_sets(:und)
+...> |> Enum.sort()
+[
   :armenian_lower,
   :armenian_upper,
   :cyrillic_lower,
@@ -155,9 +155,9 @@ 

:roman_upper, :tamil, :zz_default -]

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

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

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

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

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

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

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

iex> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :roman)
+{:ok, "CXXIII"}
diff --git a/Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html b/Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html index 1e0cd62b8df..0354a4e7758 100644 --- a/Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html +++ b/Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html @@ -13,7 +13,7 @@ - + @@ -139,20 +139,20 @@

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> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets(:en)
-[:digits_ordinal]
+defined in the Unicode CLDR data repository.  Available rules are identified by:

iex> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets(:en)
+[:digits_ordinal]
 
-iex> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets("fr")
-...> |> Enum.sort()
-[
+iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal(123, :en)
-"123rd"

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

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

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

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

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

iex> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :ordinal)
+{:ok, "123rd"}
diff --git a/Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html b/Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html index 8f663f101d7..86fb268b8bc 100644 --- a/Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html +++ b/Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html @@ -13,7 +13,7 @@ - + @@ -139,9 +139,9 @@

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> Bonfire.Common.Localise.Cldr.Rbnf.Spellout.rule_sets("en")
-...> |> Enum.sort()
-[
+defined in the Unicode CLDR data repository.  Available rules are identified by:

iex> Bonfire.Common.Localise.Cldr.Rbnf.Spellout.rule_sets("en")
+...> |> Enum.sort()
+[
   :spellout_cardinal,
   :spellout_cardinal_verbose,
   :spellout_numbering,
@@ -149,9 +149,9 @@ 

:spellout_numbering_year, :spellout_ordinal, :spellout_ordinal_verbose -]

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

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

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

iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal(123, "en")
+"one hundred twenty-third"

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

iex> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :spellout)
+{:ok, "one hundred twenty-three"}
diff --git a/Bonfire.Common.Localise.Cldr.Time.Interval.html b/Bonfire.Common.Localise.Cldr.Time.Interval.html index bc6f0a7cddf..ff2e266098f 100644 --- a/Bonfire.Common.Localise.Cldr.Time.Interval.html +++ b/Bonfire.Common.Localise.Cldr.Time.Interval.html @@ -13,7 +13,7 @@ - + @@ -329,32 +329,32 @@

to_string(from, to, options \\ [])

Examples
iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :short
-{:ok, "10 – 10 AM"}
+{:ok, "10 – 10 AM"}
 
 iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :medium
-{:ok, "10:00 – 10:03 AM"}
+{:ok, "10:00 – 10:03 AM"}
 
 iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :long
-{:ok, "10:00 – 10:03 AM"}
+{:ok, "10:00 – 10:03 AM"}
 
 iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00],
 ...> format: :long, style: :flex
-{:ok, "10:00 – 10:03 in the morning"}
+{:ok, "10:00 – 10:03 in the morning"}
 
 iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],
 ...> format: :long, style: :flex
-{:ok, "12:00 – 10:00 in the morning"}
+{:ok, "12:00 – 10:00 in the morning"}
 
 iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],
 ...> format: :long, style: :zone
-{:ok, "12:00 – 10:00 AM Etc/UTC"}
+{:ok, "12:00 – 10:00 AM Etc/UTC"}
 
 iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00],
 ...> format: :long, style: :flex, locale: "th"
-{:ok, "10:00 – 10:03 ในตอนเช้า"}
+{:ok, "10:00 – 10:03 ในตอนเช้า"}
 
 iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], nil
-{:ok, "10:00:00 AM –"}
+{:ok, "10:00:00 AM –"}
diff --git a/Bonfire.Common.Localise.Cldr.Time.html b/Bonfire.Common.Localise.Cldr.Time.html index 23fc331e336..9990bdc6c74 100644 --- a/Bonfire.Common.Localise.Cldr.Time.html +++ b/Bonfire.Common.Localise.Cldr.Time.html @@ -13,7 +13,7 @@ - + @@ -244,20 +244,20 @@

to_string(time, options \\ [])

Examples
iex> Cldr.Time.to_string ~T[07:35:13.215217]
-{:ok, "7:35:13 AM"}
+{:ok, "7:35:13 AM"}
 
 iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :short
-{:ok, "7:35 AM"}
+{:ok, "7:35 AM"}
 
 iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :medium, locale: "fr"
-{:ok, "07:35:13"}
+{:ok, "07:35:13"}
 
 iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :medium
-{:ok, "7:35:13 AM"}
+{:ok, "7:35:13 AM"}
 
-iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
+iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC")
 iex> Cldr.Time.to_string datetime, format: :long
-{:ok, "11:59:59 PM UTC"}
+{:ok, "11:59:59 PM UTC"}
@@ -326,7 +326,7 @@

to_string!(time, options \\ [])

"7:35 AM" iex> Bonfire.Common.Localise.Cldr.Time.to_string ~T[07:35:13.215217], format: :short, period: :variant -{:ok, "7:35 AM"} +{:ok, "7:35 AM"} iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217], format: :medium, locale: "fr" "07:35:13" @@ -334,7 +334,7 @@

to_string!(time, options \\ [])

iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217], format: :medium "7:35:13 AM" -iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC") +iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], "Etc/UTC") iex> Bonfire.Common.Localise.Cldr.Time.to_string! datetime, format: :long "11:59:59 PM UTC"
diff --git a/Bonfire.Common.Localise.Cldr.Unit.html b/Bonfire.Common.Localise.Cldr.Unit.html index 9b4be608ea6..31401710d4b 100644 --- a/Bonfire.Common.Localise.Cldr.Unit.html +++ b/Bonfire.Common.Localise.Cldr.Unit.html @@ -13,7 +13,7 @@ - + @@ -1189,12 +1189,12 @@

localize(unit, options \\ [])

Examples -
iex> unit = Cldr.Unit.new!(1.83, :meter)
-iex> Bonfire.Common.Localise.Cldr.Unit.localize(unit, usage: :person_height, territory: :US)
-[
-  Cldr.Unit.new!(:foot, 6, usage: :person_height),
-  Cldr.Unit.new!(:inch, "0.04724409448818897637795275598", usage: :person_height)
-]
+
iex> unit = Cldr.Unit.new!(1.83, :meter)
+iex> Bonfire.Common.Localise.Cldr.Unit.localize(unit, usage: :person_height, territory: :US)
+[
+  Cldr.Unit.new!(:foot, 6, usage: :person_height),
+  Cldr.Unit.new!(:inch, "0.04724409448818897637795275598", usage: :person_height)
+]
@@ -1549,16 +1549,16 @@

parse(unit_string, options \\ [])

Examples
iex> Bonfire.Common.Localise.Cldr.Unit.parse "1kg"
-Cldr.Unit.new(1, :kilogram)
+Cldr.Unit.new(1, :kilogram)
 
 iex> Bonfire.Common.Localise.Cldr.Unit.parse "1 tages", locale: "de"
-Cldr.Unit.new(1, :day)
+Cldr.Unit.new(1, :day)
 
 iex> Bonfire.Common.Localise.Cldr.Unit.parse "1 tag", locale: "de"
-Cldr.Unit.new(1, :day)
+Cldr.Unit.new(1, :day)
 
-iex> Bonfire.Common.Localise.Cldr.Unit.parse("42 millispangels")
-{:error, {Cldr.UnknownUnitError, "Unknown unit was detected at \"spangels\""}}
+iex> Bonfire.Common.Localise.Cldr.Unit.parse("42 millispangels") +{:error, {Cldr.UnknownUnitError, "Unknown unit was detected at \"spangels\""}}
@@ -1620,15 +1620,15 @@

parse!(unit_string, options \\ [])

Examples
iex> Bonfire.Common.Localise.Cldr.Unit.parse! "1kg"
-Cldr.Unit.new!(1, :kilogram)
+Cldr.Unit.new!(1, :kilogram)
 
 iex> Bonfire.Common.Localise.Cldr.Unit.parse! "1 tages", locale: "de"
-Cldr.Unit.new!(1, :day)
+Cldr.Unit.new!(1, :day)
 
-iex> Bonfire.Common.Localise.Cldr.Unit.parse!("42 candela per lux")
-Cldr.Unit.new!(42, "candela per lux")
+iex> Bonfire.Common.Localise.Cldr.Unit.parse!("42 candela per lux")
+Cldr.Unit.new!(42, "candela per lux")
 
-iex> Bonfire.Common.Localise.Cldr.Unit.parse!("42 millispangels")
+iex> Bonfire.Common.Localise.Cldr.Unit.parse!("42 millispangels")
 ** (Cldr.UnknownUnitError) Unknown unit was detected at "spangels"
@@ -1708,25 +1708,25 @@

parse_unit_name(unit_name_string, options \ Examples

iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "kg"
-{:ok, :kilogram}
+{:ok, :kilogram}
 
 iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "w"
-{:ok, :watt}
+{:ok, :watt}
 
 iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "w", only: :duration
-{:ok, :week}
+{:ok, :week}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "m", only: [:year, :month, :day]
-{:ok, :month}
+iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "m", only: [:year, :month, :day]
+{:ok, :month}
 
 iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "tages", locale: "de"
-{:ok, :day}
+{:ok, :day}
 
 iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name "tag", locale: "de"
-{:ok, :day}
+{:ok, :day}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name("millispangels")
-{:error, {Cldr.UnknownUnitError, "Unknown unit was detected at \"spangels\""}}
+iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name("millispangels") +{:error, {Cldr.UnknownUnitError, "Unknown unit was detected at \"spangels\""}}
@@ -1806,7 +1806,7 @@

parse_unit_name!(unit_name_string, options iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! "w", only: :duration :week -iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! "m", only: [:year, :month, :day] +iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! "m", only: [:year, :month, :day] :month iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! "tages", locale: "de" @@ -1815,7 +1815,7 @@

parse_unit_name!(unit_name_string, options iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! "tag", locale: "de" :day -iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!("millispangels") +iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!("millispangels") ** (Cldr.UnknownUnitError) Unknown unit was detected at "spangels"

@@ -1896,17 +1896,17 @@

preferred_units(unit, options \\ [])

Examples -
iex> meter = Cldr.Unit.new!(:meter, 1)
+
iex> meter = Cldr.Unit.new!(:meter, 1)
 iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-US", usage: :person_height
-{:ok, [:foot, :inch], []}
+{:ok, [:foot, :inch], []}
 iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-US", usage: :person
-{:ok, [:inch], []}
+{:ok, [:inch], []}
 iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-AU", usage: :person
-{:ok, [:centimeter], []}
+{:ok, [:centimeter], []}
 iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-US", usage: :road
-{:ok, [:foot], [round_nearest: 1]}
+{:ok, [:foot], [round_nearest: 1]}
 iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: "en-AU", usage: :road
-{:ok, [:meter], [round_nearest: 1]}
+
{:ok, [:meter], [round_nearest: 1]}
@@ -1967,15 +1967,15 @@

preferred_units!(unit, options \\ [])

Examples -
iex> meter = Cldr.Unit.new!(:meter, 2)
+
iex> meter = Cldr.Unit.new!(:meter, 2)
 iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: "en-US", usage: :person_height
-[:foot, :inch]
+[:foot, :inch]
 iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: "en-AU", usage: :person
-[:centimeter]
+[:centimeter]
 iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: "en-US", usage: :road
-[:foot]
+[:foot]
 iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: "en-AU", usage: :road
-[:meter]
+
[:meter]
@@ -2179,8 +2179,8 @@

to_iolist(number, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist Cldr.Unit.new!(:gallon, 123)
-{:ok, ["123", " gallons"]}
+
iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist Cldr.Unit.new!(:gallon, 123)
+{:ok, ["123", " gallons"]}
@@ -2256,7 +2256,7 @@

to_iolist!(number, options \\ [])

Examples
iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist! 123, unit: :gallon
-["123", " gallons"]
+["123", " gallons"]
@@ -2327,35 +2327,35 @@

to_string(number, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 123)
-{:ok, "123 gallons"}
+
iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 123)
+{:ok, "123 gallons"}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1)
-{:ok, "1 gallon"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1)
+{:ok, "1 gallon"}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "af"
-{:ok, "1 gelling"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "af"
+{:ok, "1 gelling"}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "af-NA"
-{:ok, "1 gelling"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "af-NA"
+{:ok, "1 gelling"}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "bs"
-{:ok, "1 galon"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: "bs"
+{:ok, "1 galon"}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :long
-{:ok, "1 thousand gallons"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :long
+{:ok, "1 thousand gallons"}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :short
-{:ok, "1K gallons"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :short
+{:ok, "1K gallons"}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234)
-{:ok, "1,234 megahertz"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234)
+{:ok, "1,234 megahertz"}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234), style: :narrow
-{:ok, "1,234MHz"}
+iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234), style: :narrow
+{:ok, "1,234MHz"}
 
-iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megabyte, 1234), locale: "en", style: :unknown
-{:error, {Cldr.UnknownFormatError, "The unit style :unknown is not known."}}
+
iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megabyte, 1234), locale: "en", style: :unknown +{:error, {Cldr.UnknownFormatError, "The unit style :unknown is not known."}}
diff --git a/Bonfire.Common.Localise.Cldr.html b/Bonfire.Common.Localise.Cldr.html index b51a51e6db1..1aa49d43520 100644 --- a/Bonfire.Common.Localise.Cldr.html +++ b/Bonfire.Common.Localise.Cldr.html @@ -13,7 +13,7 @@ - + @@ -552,24 +552,24 @@

default_locale()

Example -
iex> Bonfire.Common.Localise.Cldr.default_locale()
-%Cldr.LanguageTag{
+
iex> Bonfire.Common.Localise.Cldr.default_locale()
+%Cldr.LanguageTag{
   backend: Bonfire.Common.Localise.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: [] +}
@@ -604,7 +604,7 @@

default_territory()

Example -
iex> Bonfire.Common.Localise.Cldr.default_territory()
+
iex> Bonfire.Common.Localise.Cldr.default_territory()
 :"001"
@@ -664,16 +664,16 @@

ellipsis(string, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.ellipsis("And furthermore")
+
iex> Bonfire.Common.Localise.Cldr.ellipsis("And furthermore")
 "And furthermore…"
 
-iex> Bonfire.Common.Localise.Cldr.ellipsis(["And furthermore", "there is much to be done"], locale: :ja)
+iex> Bonfire.Common.Localise.Cldr.ellipsis(["And furthermore", "there is much to be done"], locale: :ja)
 "And furthermore…there is much to be done"
 
-iex> Bonfire.Common.Localise.Cldr.ellipsis("And furthermore", format: :word)
+iex> Bonfire.Common.Localise.Cldr.ellipsis("And furthermore", format: :word)
 "And furthermore …"
 
-iex> Bonfire.Common.Localise.Cldr.ellipsis(["And furthermore", "there is much to be done"], locale: :ja, format: :word)
+iex> Bonfire.Common.Localise.Cldr.ellipsis(["And furthermore", "there is much to be done"], locale: :ja, format: :word)
 "And furthermore … there is much to be done"
@@ -709,23 +709,23 @@

get_locale()

Example -
iex> Bonfire.Common.Localise.Cldr.put_locale("pl")
-iex> Bonfire.Common.Localise.Cldr.get_locale()
-%Cldr.LanguageTag{
+
iex> Bonfire.Common.Localise.Cldr.put_locale("pl")
+iex> Bonfire.Common.Localise.Cldr.get_locale()
+%Cldr.LanguageTag{
    backend: Elixir.Bonfire.Common.Localise.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: [] + }
@@ -812,10 +812,10 @@

known_gettext_locale_name(locale_name)

Examples -
iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name("en")
+
iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name("en")
 "en"
 
-iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name("en-SA")
+iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name("en-SA")
 false
@@ -858,10 +858,10 @@

known_gettext_locale_name?(locale_name)

Examples -
iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?("en")
+
iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?("en")
 true
 
-iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?("!!")
+iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?("!!")
 false
@@ -935,10 +935,10 @@

known_locale_name(locale_name)

Examples -
iex> Bonfire.Common.Localise.Cldr.known_locale_name(:"en-AU")
+
iex> Bonfire.Common.Localise.Cldr.known_locale_name(:"en-AU")
 :"en-AU"
 
-iex> Bonfire.Common.Localise.Cldr.known_locale_name(:"en-SA")
+iex> Bonfire.Common.Localise.Cldr.known_locale_name(:"en-SA")
 false
@@ -980,10 +980,10 @@

known_locale_name?(locale_name)

Examples -
iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:en)
+
iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:en)
 true
 
-iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:"!!")
+iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:"!!")
 false
@@ -1037,8 +1037,8 @@

known_number_system_types()

Example -
iex> Bonfire.Common.Localise.Cldr.known_number_system_types()
-[:default, :finance, :native, :traditional]
+
iex> Bonfire.Common.Localise.Cldr.known_number_system_types()
+[:default, :finance, :native, :traditional]
@@ -1103,10 +1103,10 @@

known_rbnf_locale_name(locale_name)

Examples -
iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:en)
+
iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:en)
 :en
 
-iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:"en-SA")
+iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:"en-SA")
 false
@@ -1149,10 +1149,10 @@

known_rbnf_locale_name?(locale_name)

Examples -
iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:en)
+
iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:en)
 true
 
-iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:"!!")
+iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:"!!")
 false
@@ -1288,14 +1288,14 @@

put_gettext_locale(locale)

Examples
iex> import Cldr.LanguageTag.Sigil
-iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l"en")
-{:ok, "en"}
+iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l"en")
+{:ok, "en"}
 
 iex> import Cldr.LanguageTag.Sigil
-iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l"de")
-{:error,
-  {Cldr.UnknownLocaleError,
-    "Locale #Cldr.LanguageTag<de [validated]> does not map to a known gettext locale name"}}
+
iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l"de") +{:error, + {Cldr.UnknownLocaleError, + "Locale #Cldr.LanguageTag<de [validated]> does not map to a known gettext locale name"}}
@@ -1339,29 +1339,29 @@

put_locale(locale_name)

Examples -
iex> Bonfire.Common.Localise.Cldr.put_locale("en")
-{:ok,
- %Cldr.LanguageTag{
+
iex> Bonfire.Common.Localise.Cldr.put_locale("en")
+{:ok,
+ %Cldr.LanguageTag{
    backend: Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.put_locale("invalid-locale!")
-{:error, {Cldr.LanguageTag.ParseError,
-  "Expected a BCP47 language tag. Could not parse the remaining \"!\" starting at position 15"}}
+
iex> Bonfire.Common.Localise.Cldr.put_locale("invalid-locale!") +{:error, {Cldr.LanguageTag.ParseError, + "Expected a BCP47 language tag. Could not parse the remaining \"!\" starting at position 15"}}
@@ -1410,10 +1410,10 @@

quote(string, options \\ [])

Examples -
iex> Bonfire.Common.Localise.Cldr.quote("Quoted String")
+
iex> Bonfire.Common.Localise.Cldr.quote("Quoted String")
 "“Quoted String”"
 
-iex> Bonfire.Common.Localise.Cldr.quote("Quoted String", locale: :ja)
+iex> Bonfire.Common.Localise.Cldr.quote("Quoted String", locale: :ja)
 "「Quoted String」"
@@ -1544,47 +1544,47 @@

validate_locale(locale)

Examples -
iex> Bonfire.Common.Localise.Cldr.validate_locale(:en)
-{:ok,
-%Cldr.LanguageTag{
+
iex> Bonfire.Common.Localise.Cldr.validate_locale(:en)
+{:ok,
+%Cldr.LanguageTag{
   backend: Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.validate_locale Bonfire.Common.Localise.Cldr.default_locale()
-{:ok,
-%Cldr.LanguageTag{
+iex> Bonfire.Common.Localise.Cldr.validate_locale Bonfire.Common.Localise.Cldr.default_locale()
+{:ok,
+%Cldr.LanguageTag{
   backend: Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.validate_locale("zzz")
-{:error, {Cldr.InvalidLanguageError, "The language \"zzz\" is invalid"}}
+
iex> Bonfire.Common.Localise.Cldr.validate_locale("zzz") +{:error, {Cldr.InvalidLanguageError, "The language \"zzz\" is invalid"}}
@@ -1654,23 +1654,23 @@

validate_number_system_type(number_system_t Examples

-
iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:default)
-{:ok, :default}
+
iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:default)
+{:ok, :default}
 
-iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:traditional)
-{:ok, :traditional}
+iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:traditional)
+{:ok, :traditional}
 
-iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:latn)
-{
+iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.validate_number_system_type("bork")
-{
+iex> Bonfire.Common.Localise.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/Bonfire.Common.Localise.Gettext.Helpers.html b/Bonfire.Common.Localise.Gettext.Helpers.html index 6600afaa390..4d5d771d55f 100644 --- a/Bonfire.Common.Localise.Gettext.Helpers.html +++ b/Bonfire.Common.Localise.Gettext.Helpers.html @@ -13,7 +13,7 @@ - + @@ -143,9 +143,9 @@

# Simple translation usage: - <%= l("Hello") %> - <%= l("Hello %{name}", name: "Bookchin") %> - <%= l("Hi", [], "test context") %> + <%= l("Hello") %> + <%= l("Hello %{name}", name: "Bookchin") %> + <%= l("Hi", [], "test context") %> output: @@ -157,8 +157,8 @@

# Plural translation usage: - <%= lp("Hi friend", "Hi friends", 2) %> - <%= lp("Hiya %{user_or_users}", "Hiyas %{user_or_users}", 1, [user_or_users: "Bookchin"], "test context") %> + <%= lp("Hi friend", "Hi friends", 2) %> + <%= lp("Hiya %{user_or_users}", "Hiyas %{user_or_users}", 1, [user_or_users: "Bookchin"], "test context") %> output: Hi friends diff --git a/Bonfire.Common.Localise.Gettext.Plural.html b/Bonfire.Common.Localise.Gettext.Plural.html index c9d1ce0cc7d..4ce0f268bf0 100644 --- a/Bonfire.Common.Localise.Gettext.Plural.html +++ b/Bonfire.Common.Localise.Gettext.Plural.html @@ -13,7 +13,7 @@ - + @@ -221,10 +221,10 @@

nplurals(locale_name)

Examples

-
iex> Bonfire.Common.Localise.Gettext.Plural.nplurals("pl")
+
iex> Bonfire.Common.Localise.Gettext.Plural.nplurals("pl")
 4
 
-iex> Bonfire.Common.Localise.Gettext.Plural.nplurals("en")
+iex> Bonfire.Common.Localise.Gettext.Plural.nplurals("en")
 2

@@ -262,28 +262,28 @@

plural(locale, n)

Examples -
iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 1)
+
iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 1)
 0
 
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 2)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 2)
 1
 
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 5)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 5)
 2
 
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 112)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("pl", 112)
 2
 
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 1)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 1)
 0
 
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 2)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 2)
 1
 
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 112)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("en", 112)
 1
 
-iex> Bonfire.Common.Localise.Gettext.Plural.plural("en_GB", 112)
+iex> Bonfire.Common.Localise.Gettext.Plural.plural("en_GB", 112)
 1
diff --git a/Bonfire.Common.Localise.Gettext.html b/Bonfire.Common.Localise.Gettext.html index ce58d6f6d64..29f3c6821b8 100644 --- a/Bonfire.Common.Localise.Gettext.html +++ b/Bonfire.Common.Localise.Gettext.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Localise.html b/Bonfire.Common.Localise.html index 86ed6d45888..17df0bc93cb 100644 --- a/Bonfire.Common.Localise.html +++ b/Bonfire.Common.Localise.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Media.html b/Bonfire.Common.Media.html index 2f3aecd0dc9..1442d239c0d 100644 --- a/Bonfire.Common.Media.html +++ b/Bonfire.Common.Media.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Modularity.DeclareHelpers.html b/Bonfire.Common.Modularity.DeclareHelpers.html index 08c658825a2..faa0b277175 100644 --- a/Bonfire.Common.Modularity.DeclareHelpers.html +++ b/Bonfire.Common.Modularity.DeclareHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Module.Override.html b/Bonfire.Common.Module.Override.html index 05a7ff738f9..a84eb8f831d 100644 --- a/Bonfire.Common.Module.Override.html +++ b/Bonfire.Common.Module.Override.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Needles.Pointers.Queries.html b/Bonfire.Common.Needles.Pointers.Queries.html index 6bf4401d7e6..d68179b6fc4 100644 --- a/Bonfire.Common.Needles.Pointers.Queries.html +++ b/Bonfire.Common.Needles.Pointers.Queries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Needles.Preload.html b/Bonfire.Common.Needles.Preload.html index fa434e5b3b2..ed4e8640a78 100644 --- a/Bonfire.Common.Needles.Preload.html +++ b/Bonfire.Common.Needles.Preload.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Needles.Tables.Queries.html b/Bonfire.Common.Needles.Tables.Queries.html index efee1ac3fec..3b6069f31a9 100644 --- a/Bonfire.Common.Needles.Tables.Queries.html +++ b/Bonfire.Common.Needles.Tables.Queries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Needles.Tables.html b/Bonfire.Common.Needles.Tables.html index 9bafab04e97..13d1f5400f2 100644 --- a/Bonfire.Common.Needles.Tables.html +++ b/Bonfire.Common.Needles.Tables.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Needles.html b/Bonfire.Common.Needles.html index 4d10cf5bf78..177d74aae7a 100644 --- a/Bonfire.Common.Needles.html +++ b/Bonfire.Common.Needles.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.PubSub.Event.html b/Bonfire.Common.PubSub.Event.html index d6b164483f5..05b48c33460 100644 --- a/Bonfire.Common.PubSub.Event.html +++ b/Bonfire.Common.PubSub.Event.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.PubSub.html b/Bonfire.Common.PubSub.html index 5b8c697af17..cfafde41468 100644 --- a/Bonfire.Common.PubSub.html +++ b/Bonfire.Common.PubSub.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.QueryModule.html b/Bonfire.Common.QueryModule.html index 1097ba5a9e4..dc35d40bb3a 100644 --- a/Bonfire.Common.QueryModule.html +++ b/Bonfire.Common.QueryModule.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Repo.Delete.html b/Bonfire.Common.Repo.Delete.html index e6a4c772788..a7a29aa073e 100644 --- a/Bonfire.Common.Repo.Delete.html +++ b/Bonfire.Common.Repo.Delete.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Repo.Preload.html b/Bonfire.Common.Repo.Preload.html index bbdad01c279..6736789438f 100644 --- a/Bonfire.Common.Repo.Preload.html +++ b/Bonfire.Common.Repo.Preload.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Repo.Utils.html b/Bonfire.Common.Repo.Utils.html index 0b7975b7a92..d8496e9c600 100644 --- a/Bonfire.Common.Repo.Utils.html +++ b/Bonfire.Common.Repo.Utils.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Repo.html b/Bonfire.Common.Repo.html index d78fd24b904..578d055346a 100644 --- a/Bonfire.Common.Repo.html +++ b/Bonfire.Common.Repo.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.RepoTemplate.html b/Bonfire.Common.RepoTemplate.html index af7b1b7ddc0..8795650a4cc 100644 --- a/Bonfire.Common.RepoTemplate.html +++ b/Bonfire.Common.RepoTemplate.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.RuntimeConfig.html b/Bonfire.Common.RuntimeConfig.html index 464a9913de3..9c48734062c 100644 --- a/Bonfire.Common.RuntimeConfig.html +++ b/Bonfire.Common.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.SchemaModule.html b/Bonfire.Common.SchemaModule.html index 73299a1423e..1d66de62919 100644 --- a/Bonfire.Common.SchemaModule.html +++ b/Bonfire.Common.SchemaModule.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Settings.LiveHandler.html b/Bonfire.Common.Settings.LiveHandler.html index 327ebd9fdf0..26b3fa0547a 100644 --- a/Bonfire.Common.Settings.LiveHandler.html +++ b/Bonfire.Common.Settings.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Settings.LoadInstanceConfig.html b/Bonfire.Common.Settings.LoadInstanceConfig.html index 702067deb21..d0fb816e1bf 100644 --- a/Bonfire.Common.Settings.LoadInstanceConfig.html +++ b/Bonfire.Common.Settings.LoadInstanceConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Settings.html b/Bonfire.Common.Settings.html index 2ed33302b74..3b01c539d9a 100644 --- a/Bonfire.Common.Settings.html +++ b/Bonfire.Common.Settings.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Simulation.html b/Bonfire.Common.Simulation.html index 7deaea7814c..8a263caca9e 100644 --- a/Bonfire.Common.Simulation.html +++ b/Bonfire.Common.Simulation.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.StartupTimer.html b/Bonfire.Common.StartupTimer.html index 63820e252a8..67fcee7bbb3 100644 --- a/Bonfire.Common.StartupTimer.html +++ b/Bonfire.Common.StartupTimer.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Test.Interactive.Helpers.html b/Bonfire.Common.Test.Interactive.Helpers.html index a2ed4779231..88ffcfb1121 100644 --- a/Bonfire.Common.Test.Interactive.Helpers.html +++ b/Bonfire.Common.Test.Interactive.Helpers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Test.Interactive.Observer.html b/Bonfire.Common.Test.Interactive.Observer.html index ccd9688a03b..9ff52be76a7 100644 --- a/Bonfire.Common.Test.Interactive.Observer.html +++ b/Bonfire.Common.Test.Interactive.Observer.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Test.Interactive.html b/Bonfire.Common.Test.Interactive.html index ef847cafb13..3ae074e8e68 100644 --- a/Bonfire.Common.Test.Interactive.html +++ b/Bonfire.Common.Test.Interactive.html @@ -13,7 +13,7 @@ - + @@ -141,11 +141,11 @@

fcwatch | mix test --stale --listen-on-stdin to watch for code changes and run stale tests, but with more control and without the starting time penalty.

Note that watching requires fswatch on your system. -Eg on Mac run brew install fswatch.

To use it, in your project's .iex file add:

unless GenServer.whereis(Bonfire.Common.Test.Interactive) do
-  {:ok, pid} = Bonfire.Common.Test.Interactive.start_link()
+Eg on Mac run brew install fswatch.

To use it, in your project's .iex file add:

unless GenServer.whereis(Bonfire.Common.Test.Interactive) do
+  {:ok, pid} = Bonfire.Common.Test.Interactive.start_link()
   # Process will not exit when the iex goes out
-  Process.unlink(pid)
-end
+  Process.unlink(pid)
+end
 import Bonfire.Common.Test.Interactive.Helpers

Then to call iex and run tests just do:

MIX_ENV=test iex -S mix

The Bonfire.Common.Test.Interactive.Helpers allows to call f and s and a to run failed, stale and all tests respectively. You can call w to watch tests and uw to unwatch. diff --git a/Bonfire.Common.TestInstanceRepo.html b/Bonfire.Common.TestInstanceRepo.html index f34eaeae822..e56b7b070f2 100644 --- a/Bonfire.Common.TestInstanceRepo.html +++ b/Bonfire.Common.TestInstanceRepo.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Text.html b/Bonfire.Common.Text.html index 54154688cca..0cb13dd623e 100644 --- a/Bonfire.Common.Text.html +++ b/Bonfire.Common.Text.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.TextExtended.html b/Bonfire.Common.TextExtended.html index dca5209dce9..09781b1cdaa 100644 --- a/Bonfire.Common.TextExtended.html +++ b/Bonfire.Common.TextExtended.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Types.html b/Bonfire.Common.Types.html index c2806bbb9ba..2dd34cccdb9 100644 --- a/Bonfire.Common.Types.html +++ b/Bonfire.Common.Types.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.URIs.html b/Bonfire.Common.URIs.html index 6676b219dfa..f3b6ccd2b61 100644 --- a/Bonfire.Common.URIs.html +++ b/Bonfire.Common.URIs.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.Utils.html b/Bonfire.Common.Utils.html index 76100cc7fb2..a07e6d0c507 100644 --- a/Bonfire.Common.Utils.html +++ b/Bonfire.Common.Utils.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Common.html b/Bonfire.Common.html index a650ea49d23..25b30ffb152 100644 --- a/Bonfire.Common.html +++ b/Bonfire.Common.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.AccessControl.Acl.html b/Bonfire.Data.AccessControl.Acl.html index e9fbf713c24..a59b23561c8 100644 --- a/Bonfire.Data.AccessControl.Acl.html +++ b/Bonfire.Data.AccessControl.Acl.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.AccessControl.Circle.html b/Bonfire.Data.AccessControl.Circle.html index 4ec7639d7ec..6201d7c59aa 100644 --- a/Bonfire.Data.AccessControl.Circle.html +++ b/Bonfire.Data.AccessControl.Circle.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.AccessControl.Controlled.html b/Bonfire.Data.AccessControl.Controlled.html index c8ba063333d..2198ab1651e 100644 --- a/Bonfire.Data.AccessControl.Controlled.html +++ b/Bonfire.Data.AccessControl.Controlled.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.AccessControl.Encircle.html b/Bonfire.Data.AccessControl.Encircle.html index 5e4b5573d7f..cc20eaaa3e2 100644 --- a/Bonfire.Data.AccessControl.Encircle.html +++ b/Bonfire.Data.AccessControl.Encircle.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.AccessControl.Grant.html b/Bonfire.Data.AccessControl.Grant.html index 99963e5c0f8..edd35a298e2 100644 --- a/Bonfire.Data.AccessControl.Grant.html +++ b/Bonfire.Data.AccessControl.Grant.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.AccessControl.InstanceAdmin.html b/Bonfire.Data.AccessControl.InstanceAdmin.html index d9bf041f2a5..2a30589185b 100644 --- a/Bonfire.Data.AccessControl.InstanceAdmin.html +++ b/Bonfire.Data.AccessControl.InstanceAdmin.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.AccessControl.Stereotyped.html b/Bonfire.Data.AccessControl.Stereotyped.html index daa85ad7720..c80385b290c 100644 --- a/Bonfire.Data.AccessControl.Stereotyped.html +++ b/Bonfire.Data.AccessControl.Stereotyped.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.AccessControl.Verb.html b/Bonfire.Data.AccessControl.Verb.html index 4146a4787df..a93f1384f94 100644 --- a/Bonfire.Data.AccessControl.Verb.html +++ b/Bonfire.Data.AccessControl.Verb.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.ActivityPub.Actor.Migration.html b/Bonfire.Data.ActivityPub.Actor.Migration.html index 751a5c6a11f..a992fd09834 100644 --- a/Bonfire.Data.ActivityPub.Actor.Migration.html +++ b/Bonfire.Data.ActivityPub.Actor.Migration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.ActivityPub.Actor.html b/Bonfire.Data.ActivityPub.Actor.html index 7ce2120da21..b7baf98f732 100644 --- a/Bonfire.Data.ActivityPub.Actor.html +++ b/Bonfire.Data.ActivityPub.Actor.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.ActivityPub.Peer.html b/Bonfire.Data.ActivityPub.Peer.html index 492b3b8a499..712a2207d61 100644 --- a/Bonfire.Data.ActivityPub.Peer.html +++ b/Bonfire.Data.ActivityPub.Peer.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.ActivityPub.Peered.html b/Bonfire.Data.ActivityPub.Peered.html index d1d6355cbad..24ca1d9e09f 100644 --- a/Bonfire.Data.ActivityPub.Peered.html +++ b/Bonfire.Data.ActivityPub.Peered.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Assort.Ranked.Migration.html b/Bonfire.Data.Assort.Ranked.Migration.html index 5a55a3cb788..9f0a67fc424 100644 --- a/Bonfire.Data.Assort.Ranked.Migration.html +++ b/Bonfire.Data.Assort.Ranked.Migration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Assort.Ranked.html b/Bonfire.Data.Assort.Ranked.html index 62955a968e0..35d524786da 100644 --- a/Bonfire.Data.Assort.Ranked.html +++ b/Bonfire.Data.Assort.Ranked.html @@ -13,7 +13,7 @@ - + @@ -137,15 +137,15 @@

-

A reusable table to link child or related items and also rank sibling items.

Usage (for global ranking, otherwise you should specify scope):

{:ok, first} = Bonfire.Data.Assort.Ranked.changeset(%{item_id: "01FGTH48ZZD08ADBHQ260KYJHW"}) |> repo().insert
-second = Bonfire.Data.Assort.Ranked.changeset(%{item_id: "01FGTH0N3YPBS5MNNAEAEVV54J"}) |> repo().insert
+

A reusable table to link child or related items and also rank sibling items.

Usage (for global ranking, otherwise you should specify scope):

{:ok, first} = Bonfire.Data.Assort.Ranked.changeset(%{item_id: "01FGTH48ZZD08ADBHQ260KYJHW"}) |> repo().insert
+second = Bonfire.Data.Assort.Ranked.changeset(%{item_id: "01FGTH0N3YPBS5MNNAEAEVV54J"}) |> repo().insert
 
 import Ecto.Query
-Bonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all
+Bonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all
 
-first |> Bonfire.Data.Assort.Ranked.changeset(%{rank_set: :last}) |> repo().update
+first |> Bonfire.Data.Assort.Ranked.changeset(%{rank_set: :last}) |> repo().update
 
-Bonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all
+
Bonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all
diff --git a/Bonfire.Data.Edges.Edge.html b/Bonfire.Data.Edges.Edge.html index cf6ee7c27c7..15634faf455 100644 --- a/Bonfire.Data.Edges.Edge.html +++ b/Bonfire.Data.Edges.Edge.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Edges.EdgeTotal.html b/Bonfire.Data.Edges.EdgeTotal.html index 2d3e34dd855..5dc117e0079 100644 --- a/Bonfire.Data.Edges.EdgeTotal.html +++ b/Bonfire.Data.Edges.EdgeTotal.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Account.html b/Bonfire.Data.Identity.Account.html index b7d06884b80..77a9de7fead 100644 --- a/Bonfire.Data.Identity.Account.html +++ b/Bonfire.Data.Identity.Account.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Accounted.html b/Bonfire.Data.Identity.Accounted.html index a43a675799b..ad16a6c14e8 100644 --- a/Bonfire.Data.Identity.Accounted.html +++ b/Bonfire.Data.Identity.Accounted.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Alias.html b/Bonfire.Data.Identity.Alias.html index 2396de2a058..87565b59820 100644 --- a/Bonfire.Data.Identity.Alias.html +++ b/Bonfire.Data.Identity.Alias.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.AuthSecondFactor.html b/Bonfire.Data.Identity.AuthSecondFactor.html index 57f6daa04cb..93b23813a39 100644 --- a/Bonfire.Data.Identity.AuthSecondFactor.html +++ b/Bonfire.Data.Identity.AuthSecondFactor.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.CareClosure.html b/Bonfire.Data.Identity.CareClosure.html index 0c47cb1e4ab..61476c5abd1 100644 --- a/Bonfire.Data.Identity.CareClosure.html +++ b/Bonfire.Data.Identity.CareClosure.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Caretaker.html b/Bonfire.Data.Identity.Caretaker.html index 2ff4dab6423..a829d46f4cc 100644 --- a/Bonfire.Data.Identity.Caretaker.html +++ b/Bonfire.Data.Identity.Caretaker.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Character.html b/Bonfire.Data.Identity.Character.html index ad9e4578797..b7e8410aa80 100644 --- a/Bonfire.Data.Identity.Character.html +++ b/Bonfire.Data.Identity.Character.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Credential.Migration.html b/Bonfire.Data.Identity.Credential.Migration.html index 482b8af5b5d..16d69999767 100644 --- a/Bonfire.Data.Identity.Credential.Migration.html +++ b/Bonfire.Data.Identity.Credential.Migration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Credential.html b/Bonfire.Data.Identity.Credential.html index 18c7202ea51..28900876b94 100644 --- a/Bonfire.Data.Identity.Credential.html +++ b/Bonfire.Data.Identity.Credential.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Email.html b/Bonfire.Data.Identity.Email.html index acc5bc7d258..e40335cfddb 100644 --- a/Bonfire.Data.Identity.Email.html +++ b/Bonfire.Data.Identity.Email.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.ExtraInfo.html b/Bonfire.Data.Identity.ExtraInfo.html index 3655fc83fe9..50762cac54a 100644 --- a/Bonfire.Data.Identity.ExtraInfo.html +++ b/Bonfire.Data.Identity.ExtraInfo.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Named.html b/Bonfire.Data.Identity.Named.html index ecb3036e468..c7ad590fe29 100644 --- a/Bonfire.Data.Identity.Named.html +++ b/Bonfire.Data.Identity.Named.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Self.html b/Bonfire.Data.Identity.Self.html index 2d18aa7e4d0..95ab8beea0c 100644 --- a/Bonfire.Data.Identity.Self.html +++ b/Bonfire.Data.Identity.Self.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.Settings.html b/Bonfire.Data.Identity.Settings.html index b4cbed9f221..7984c519cf2 100644 --- a/Bonfire.Data.Identity.Settings.html +++ b/Bonfire.Data.Identity.Settings.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Identity.User.html b/Bonfire.Data.Identity.User.html index f5b5413d6fd..bcf1ed68b2a 100644 --- a/Bonfire.Data.Identity.User.html +++ b/Bonfire.Data.Identity.User.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.SharedUser.html b/Bonfire.Data.SharedUser.html index ff0a14a34d6..ff08f232f8f 100644 --- a/Bonfire.Data.SharedUser.html +++ b/Bonfire.Data.SharedUser.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.APActivity.html b/Bonfire.Data.Social.APActivity.html index 2693d713f2e..b47ff6bf0e7 100644 --- a/Bonfire.Data.Social.APActivity.html +++ b/Bonfire.Data.Social.APActivity.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Activity.html b/Bonfire.Data.Social.Activity.html index e1dc2bba486..92fc7dbf875 100644 --- a/Bonfire.Data.Social.Activity.html +++ b/Bonfire.Data.Social.Activity.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Bookmark.html b/Bonfire.Data.Social.Bookmark.html index a7e3c6c1a70..8ea73e83052 100644 --- a/Bonfire.Data.Social.Bookmark.html +++ b/Bonfire.Data.Social.Bookmark.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Boost.html b/Bonfire.Data.Social.Boost.html index 04c20980d2f..5d70693cdf7 100644 --- a/Bonfire.Data.Social.Boost.html +++ b/Bonfire.Data.Social.Boost.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Created.html b/Bonfire.Data.Social.Created.html index 6781af60a7c..3358fe0f893 100644 --- a/Bonfire.Data.Social.Created.html +++ b/Bonfire.Data.Social.Created.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Feed.html b/Bonfire.Data.Social.Feed.html index e1c1e07f52e..83c23efd98d 100644 --- a/Bonfire.Data.Social.Feed.html +++ b/Bonfire.Data.Social.Feed.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.FeedPublish.html b/Bonfire.Data.Social.FeedPublish.html index 560da56f8af..b6a41131db1 100644 --- a/Bonfire.Data.Social.FeedPublish.html +++ b/Bonfire.Data.Social.FeedPublish.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Flag.html b/Bonfire.Data.Social.Flag.html index cbfbb7efe51..5ab25548b0f 100644 --- a/Bonfire.Data.Social.Flag.html +++ b/Bonfire.Data.Social.Flag.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Follow.html b/Bonfire.Data.Social.Follow.html index c9bb9c5b952..6a7426681dd 100644 --- a/Bonfire.Data.Social.Follow.html +++ b/Bonfire.Data.Social.Follow.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Inbox.html b/Bonfire.Data.Social.Inbox.html index 54363234566..85f03c135fa 100644 --- a/Bonfire.Data.Social.Inbox.html +++ b/Bonfire.Data.Social.Inbox.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Like.html b/Bonfire.Data.Social.Like.html index dca8505f5be..a916d7a5a61 100644 --- a/Bonfire.Data.Social.Like.html +++ b/Bonfire.Data.Social.Like.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Message.html b/Bonfire.Data.Social.Message.html index 27365b9838d..36f183f8fde 100644 --- a/Bonfire.Data.Social.Message.html +++ b/Bonfire.Data.Social.Message.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Pin.html b/Bonfire.Data.Social.Pin.html index 1b40c813fa5..dd4a1b0ff9c 100644 --- a/Bonfire.Data.Social.Pin.html +++ b/Bonfire.Data.Social.Pin.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Post.html b/Bonfire.Data.Social.Post.html index 323f3a60f3a..81c81330332 100644 --- a/Bonfire.Data.Social.Post.html +++ b/Bonfire.Data.Social.Post.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.PostContent.html b/Bonfire.Data.Social.PostContent.html index 5a6f9c38217..89af2a97b17 100644 --- a/Bonfire.Data.Social.PostContent.html +++ b/Bonfire.Data.Social.PostContent.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Profile.html b/Bonfire.Data.Social.Profile.html index 3cacb18df49..55a2fc09e5e 100644 --- a/Bonfire.Data.Social.Profile.html +++ b/Bonfire.Data.Social.Profile.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Replied.html b/Bonfire.Data.Social.Replied.html index edbcf0a773b..5909c20e454 100644 --- a/Bonfire.Data.Social.Replied.html +++ b/Bonfire.Data.Social.Replied.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Request.html b/Bonfire.Data.Social.Request.html index 868c744d497..a8adb845494 100644 --- a/Bonfire.Data.Social.Request.html +++ b/Bonfire.Data.Social.Request.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Seen.html b/Bonfire.Data.Social.Seen.html index a6f89bef109..83a8869cff4 100644 --- a/Bonfire.Data.Social.Seen.html +++ b/Bonfire.Data.Social.Seen.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Data.Social.Sensitive.html b/Bonfire.Data.Social.Sensitive.html index be2f9a9a49b..9f5fb412d7d 100644 --- a/Bonfire.Data.Social.Sensitive.html +++ b/Bonfire.Data.Social.Sensitive.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Ecto.Acts.Begin.html b/Bonfire.Ecto.Acts.Begin.html index 399691dd9d1..ba9428b7e70 100644 --- a/Bonfire.Ecto.Acts.Begin.html +++ b/Bonfire.Ecto.Acts.Begin.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Ecto.Acts.Commit.html b/Bonfire.Ecto.Acts.Commit.html index 655505bebe8..21d3e3268dc 100644 --- a/Bonfire.Ecto.Acts.Commit.html +++ b/Bonfire.Ecto.Acts.Commit.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Ecto.Acts.Delete.html b/Bonfire.Ecto.Acts.Delete.html index 30c050eb08a..d46384fac9a 100644 --- a/Bonfire.Ecto.Acts.Delete.html +++ b/Bonfire.Ecto.Acts.Delete.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Ecto.Acts.Work.html b/Bonfire.Ecto.Acts.Work.html index 35dce776669..c9593db70b9 100644 --- a/Bonfire.Ecto.Acts.Work.html +++ b/Bonfire.Ecto.Acts.Work.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Ecto.html b/Bonfire.Ecto.html index 8056306cfe0..4bd735a44fe 100644 --- a/Bonfire.Ecto.html +++ b/Bonfire.Ecto.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Epics.Act.html b/Bonfire.Epics.Act.html index 703aa80804a..d2d71ed8405 100644 --- a/Bonfire.Epics.Act.html +++ b/Bonfire.Epics.Act.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Epics.Debug.html b/Bonfire.Epics.Debug.html index 84ad03214db..13418093302 100644 --- a/Bonfire.Epics.Debug.html +++ b/Bonfire.Epics.Debug.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Epics.Epic.html b/Bonfire.Epics.Epic.html index 47fe802198b..bffcb424674 100644 --- a/Bonfire.Epics.Epic.html +++ b/Bonfire.Epics.Epic.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Epics.Error.html b/Bonfire.Epics.Error.html index 6541c26f4ff..818173f8c09 100644 --- a/Bonfire.Epics.Error.html +++ b/Bonfire.Epics.Error.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Epics.Test.html b/Bonfire.Epics.Test.html index 08d5df46765..ab75fe5fe26 100644 --- a/Bonfire.Epics.Test.html +++ b/Bonfire.Epics.Test.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Epics.html b/Bonfire.Epics.html index ce530b1b947..bcc799af30c 100644 --- a/Bonfire.Epics.html +++ b/Bonfire.Epics.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.Adapter.html b/Bonfire.Federate.ActivityPub.Adapter.html index cce2642b36a..144a9458d8b 100644 --- a/Bonfire.Federate.ActivityPub.Adapter.html +++ b/Bonfire.Federate.ActivityPub.Adapter.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.AdapterUtils.html b/Bonfire.Federate.ActivityPub.AdapterUtils.html index 75c6f940682..5c81e003a22 100644 --- a/Bonfire.Federate.ActivityPub.AdapterUtils.html +++ b/Bonfire.Federate.ActivityPub.AdapterUtils.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.BoundariesMRF.html b/Bonfire.Federate.ActivityPub.BoundariesMRF.html index efbc230e7a1..0ed5519bf0c 100644 --- a/Bonfire.Federate.ActivityPub.BoundariesMRF.html +++ b/Bonfire.Federate.ActivityPub.BoundariesMRF.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.FederationModules.html b/Bonfire.Federate.ActivityPub.FederationModules.html index 00d5c52c3a2..b9a5ebb3d60 100644 --- a/Bonfire.Federate.ActivityPub.FederationModules.html +++ b/Bonfire.Federate.ActivityPub.FederationModules.html @@ -13,7 +13,7 @@ - + @@ -139,12 +139,12 @@

A automatically-generated global list of federation modules which can queried by activity and/or object type.

To add a module to this list, you should declare @behaviour Bonfire.Federate.ActivityPub.FederationModules in it and define a federation_module/0 function which returns a list of object and/or activity types which that module handles.

Example:

@behaviour Bonfire.Federate.ActivityPub.FederationModules
 def federation_module,
-  do: [
+  do: [
     "Announce",
-    {"Create", "Announce"},
-    {"Undo", "Announce"},
-    {"Delete", "Announce"}
-  ]

You should also then implement these two functions:

  • for outgoing federation: ap_publish_activity(subject_struct, verb, object_struct)
  • for incoming federation: ap_receive_activity(subject_struct, activity_json, object_json)
+ {"Create", "Announce"}, + {"Undo", "Announce"}, + {"Delete", "Announce"} + ]

You should also then implement these two functions:

  • for outgoing federation: ap_publish_activity(subject_struct, verb, object_struct)
  • for incoming federation: ap_receive_activity(subject_struct, activity_json, object_json)
diff --git a/Bonfire.Federate.ActivityPub.Incoming.html b/Bonfire.Federate.ActivityPub.Incoming.html index 1fa75f579e2..a4690cd545e 100644 --- a/Bonfire.Federate.ActivityPub.Incoming.html +++ b/Bonfire.Federate.ActivityPub.Incoming.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.Instances.html b/Bonfire.Federate.ActivityPub.Instances.html index 40e8b97ac87..3bad620d21b 100644 --- a/Bonfire.Federate.ActivityPub.Instances.html +++ b/Bonfire.Federate.ActivityPub.Instances.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.NodeinfoAdapter.html b/Bonfire.Federate.ActivityPub.NodeinfoAdapter.html index 79b1ccb6187..f4e789ae2cf 100644 --- a/Bonfire.Federate.ActivityPub.NodeinfoAdapter.html +++ b/Bonfire.Federate.ActivityPub.NodeinfoAdapter.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.Outgoing.html b/Bonfire.Federate.ActivityPub.Outgoing.html index b0e0d41a855..b69aa8ceea0 100644 --- a/Bonfire.Federate.ActivityPub.Outgoing.html +++ b/Bonfire.Federate.ActivityPub.Outgoing.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.Peered.html b/Bonfire.Federate.ActivityPub.Peered.html index 65b3a390750..2f46abe16fe 100644 --- a/Bonfire.Federate.ActivityPub.Peered.html +++ b/Bonfire.Federate.ActivityPub.Peered.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.RuntimeConfig.html b/Bonfire.Federate.ActivityPub.RuntimeConfig.html index 2b21a80df98..7b94dca46d8 100644 --- a/Bonfire.Federate.ActivityPub.RuntimeConfig.html +++ b/Bonfire.Federate.ActivityPub.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.Simulate.html b/Bonfire.Federate.ActivityPub.Simulate.html index c90cd118c63..3dc307bef8d 100644 --- a/Bonfire.Federate.ActivityPub.Simulate.html +++ b/Bonfire.Federate.ActivityPub.Simulate.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Federate.ActivityPub.html b/Bonfire.Federate.ActivityPub.html index 5b4597c7a34..1229179f0ee 100644 --- a/Bonfire.Federate.ActivityPub.html +++ b/Bonfire.Federate.ActivityPub.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Acts.AttachMedia.html b/Bonfire.Files.Acts.AttachMedia.html index 01ac4299398..18289932324 100644 --- a/Bonfire.Files.Acts.AttachMedia.html +++ b/Bonfire.Files.Acts.AttachMedia.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Acts.URLPreviews.html b/Bonfire.Files.Acts.URLPreviews.html index d83a002eff4..4d823f820c6 100644 --- a/Bonfire.Files.Acts.URLPreviews.html +++ b/Bonfire.Files.Acts.URLPreviews.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.BannerUploader.html b/Bonfire.Files.BannerUploader.html index 04021b37bc4..b3cfc28c1ab 100644 --- a/Bonfire.Files.BannerUploader.html +++ b/Bonfire.Files.BannerUploader.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Blurred.html b/Bonfire.Files.Blurred.html index f49eb938842..bd0f6e74af4 100644 --- a/Bonfire.Files.Blurred.html +++ b/Bonfire.Files.Blurred.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.CapsuleIntegration.Attacher.html b/Bonfire.Files.CapsuleIntegration.Attacher.html index 9b85406c17f..ea69e0c6b94 100644 --- a/Bonfire.Files.CapsuleIntegration.Attacher.html +++ b/Bonfire.Files.CapsuleIntegration.Attacher.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Definition.html b/Bonfire.Files.Definition.html index e87ee57964b..37cc8111cfb 100644 --- a/Bonfire.Files.Definition.html +++ b/Bonfire.Files.Definition.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.DocumentUploader.html b/Bonfire.Files.DocumentUploader.html index eda4203b1cf..d919d8d449f 100644 --- a/Bonfire.Files.DocumentUploader.html +++ b/Bonfire.Files.DocumentUploader.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.FaviconStore.html b/Bonfire.Files.FaviconStore.html index a0e4e3f9cd3..d8bc4fade30 100644 --- a/Bonfire.Files.FaviconStore.html +++ b/Bonfire.Files.FaviconStore.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.FileDenied.html b/Bonfire.Files.FileDenied.html index 81634a31262..a051930ec3b 100644 --- a/Bonfire.Files.FileDenied.html +++ b/Bonfire.Files.FileDenied.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.IconUploader.html b/Bonfire.Files.IconUploader.html index 3d1b7b9fe4f..62e9a9a6a21 100644 --- a/Bonfire.Files.IconUploader.html +++ b/Bonfire.Files.IconUploader.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Image.Edit.html b/Bonfire.Files.Image.Edit.html index 9ab29a307bd..c8d4a195a53 100644 --- a/Bonfire.Files.Image.Edit.html +++ b/Bonfire.Files.Image.Edit.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.ImageUploader.html b/Bonfire.Files.ImageUploader.html index 5b37b0c7d6e..f89fb809224 100644 --- a/Bonfire.Files.ImageUploader.html +++ b/Bonfire.Files.ImageUploader.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.LiveHandler.html b/Bonfire.Files.LiveHandler.html index 56b9fc76486..7270536bba5 100644 --- a/Bonfire.Files.LiveHandler.html +++ b/Bonfire.Files.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Media.Queries.html b/Bonfire.Files.Media.Queries.html index a094a8fbab5..3262a6b7dad 100644 --- a/Bonfire.Files.Media.Queries.html +++ b/Bonfire.Files.Media.Queries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Media.html b/Bonfire.Files.Media.html index 414e31d78b3..ff597836f68 100644 --- a/Bonfire.Files.Media.html +++ b/Bonfire.Files.Media.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Prepare.html b/Bonfire.Files.Prepare.html index 9e57266ed40..83f6bf30494 100644 --- a/Bonfire.Files.Prepare.html +++ b/Bonfire.Files.Prepare.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.ResponsiveImage.html b/Bonfire.Files.ResponsiveImage.html index b910e4142e4..83063972ea5 100644 --- a/Bonfire.Files.ResponsiveImage.html +++ b/Bonfire.Files.ResponsiveImage.html @@ -13,7 +13,7 @@ - + @@ -141,12 +141,12 @@

~H(<img src={compile_src("input.jpg", 300)} />) or -~H(<img srcset={compile_srcset("input.jpg", [300, 600, 900])} src={...} sizes="50vw" />) +~H(<img srcset={compile_srcset("input.jpg", [300, 600, 900])} src={...} sizes="50vw" />) or for paths only known at runtime: ~H(<img src={src(my_image, 300)} />) or -~H(<img srcset={srcset(my_image, [300, 600, 900])} src={...} sizes="50vw" />)

+
~H(<img srcset={srcset(my_image, [300, 600, 900])} src={...} sizes="50vw" />)
diff --git a/Bonfire.Files.Routes.html b/Bonfire.Files.Routes.html index 5991d9b4d01..2fc7975d599 100644 --- a/Bonfire.Files.Routes.html +++ b/Bonfire.Files.Routes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.RuntimeConfig.html b/Bonfire.Files.RuntimeConfig.html index b663d9c810c..e1562152722 100644 --- a/Bonfire.Files.RuntimeConfig.html +++ b/Bonfire.Files.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Simulation.html b/Bonfire.Files.Simulation.html index c8fea2bbbdd..7b61dca86e2 100644 --- a/Bonfire.Files.Simulation.html +++ b/Bonfire.Files.Simulation.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.Versions.html b/Bonfire.Files.Versions.html index 12bfa1c7bb1..281dc9d7b61 100644 --- a/Bonfire.Files.Versions.html +++ b/Bonfire.Files.Versions.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Files.html b/Bonfire.Files.html index cd782a69795..9bb0eb276b6 100644 --- a/Bonfire.Files.html +++ b/Bonfire.Files.html @@ -13,7 +13,7 @@ - + @@ -141,10 +141,10 @@

your own - a Bonfire.Files.Definition is an extension of Waffle.Definition, however the allowed_media_types/0 and max_file_size/0 callback are added, with which you need to define what media types are accepted for these types of uploads. -(You can also return :all to accept all media types).

To use the uploader:

iex> {:ok, media} = Bonfire.Files.upload(MyUploader, context, %{path: "./150.png"})
+(You can also return :all to accept all media types).

To use the uploader:

iex> {:ok, media} = Bonfire.Files.upload(MyUploader, context, %{path: "./150.png"})
 iex> media.media_type
 "image/png"
-iex> Bonfire.Files.remote_url(MyUploader, media)
+iex> Bonfire.Files.remote_url(MyUploader, media)
 "/uploads/my/01F3AY6JV30G06BY4DR9BTW5EH"
diff --git a/Bonfire.Invite.Links.Fake.html b/Bonfire.Invite.Links.Fake.html index e997c70cfff..6d3553710ee 100644 --- a/Bonfire.Invite.Links.Fake.html +++ b/Bonfire.Invite.Links.Fake.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Invite.Links.Integration.html b/Bonfire.Invite.Links.Integration.html index 033d951085a..ff4c6c5a5cb 100644 --- a/Bonfire.Invite.Links.Integration.html +++ b/Bonfire.Invite.Links.Integration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Invite.Links.LiveHandler.html b/Bonfire.Invite.Links.LiveHandler.html index 4fa15fae256..e843f1fcfad 100644 --- a/Bonfire.Invite.Links.LiveHandler.html +++ b/Bonfire.Invite.Links.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Invite.Links.Web.Routes.html b/Bonfire.Invite.Links.Web.Routes.html index 11ef5d26db5..e38de532d5c 100644 --- a/Bonfire.Invite.Links.Web.Routes.html +++ b/Bonfire.Invite.Links.Web.Routes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Invite.Links.html b/Bonfire.Invite.Links.html index 9b9e967b31f..028037a31ee 100644 --- a/Bonfire.Invite.Links.html +++ b/Bonfire.Invite.Links.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.InviteLink.html b/Bonfire.InviteLink.html index a3ac3a015f1..aadd813c601 100644 --- a/Bonfire.InviteLink.html +++ b/Bonfire.InviteLink.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Localise.html b/Bonfire.Localise.html index da6d39fae00..07261d588f3 100644 --- a/Bonfire.Localise.html +++ b/Bonfire.Localise.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Logging.html b/Bonfire.Logging.html index ca2cae35dfe..d40595c9705 100644 --- a/Bonfire.Logging.html +++ b/Bonfire.Logging.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Mailer.Checker.html b/Bonfire.Mailer.Checker.html index 6a16dbab345..856402d99c7 100644 --- a/Bonfire.Mailer.Checker.html +++ b/Bonfire.Mailer.Checker.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Mailer.RuntimeConfig.html b/Bonfire.Mailer.RuntimeConfig.html index d7f48b3ea26..77c0e323791 100644 --- a/Bonfire.Mailer.RuntimeConfig.html +++ b/Bonfire.Mailer.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Mailer.html b/Bonfire.Mailer.html index 655e89ad9e2..625392237b2 100644 --- a/Bonfire.Mailer.html +++ b/Bonfire.Mailer.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Accounts.ChangeEmailFields.html b/Bonfire.Me.Accounts.ChangeEmailFields.html index ae11e81323c..ba7a8b22357 100644 --- a/Bonfire.Me.Accounts.ChangeEmailFields.html +++ b/Bonfire.Me.Accounts.ChangeEmailFields.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Accounts.ChangePasswordFields.html b/Bonfire.Me.Accounts.ChangePasswordFields.html index b7eccc3ebb9..b791a0719d9 100644 --- a/Bonfire.Me.Accounts.ChangePasswordFields.html +++ b/Bonfire.Me.Accounts.ChangePasswordFields.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Accounts.ConfirmEmailFields.html b/Bonfire.Me.Accounts.ConfirmEmailFields.html index c3104cbd6d3..dd58ddc767a 100644 --- a/Bonfire.Me.Accounts.ConfirmEmailFields.html +++ b/Bonfire.Me.Accounts.ConfirmEmailFields.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Accounts.ForgotPasswordFields.html b/Bonfire.Me.Accounts.ForgotPasswordFields.html index e3c35798be2..bb07fc06b0d 100644 --- a/Bonfire.Me.Accounts.ForgotPasswordFields.html +++ b/Bonfire.Me.Accounts.ForgotPasswordFields.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Accounts.LoginFields.html b/Bonfire.Me.Accounts.LoginFields.html index e993800e0d1..9d39ebf1d2d 100644 --- a/Bonfire.Me.Accounts.LoginFields.html +++ b/Bonfire.Me.Accounts.LoginFields.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Accounts.Queries.html b/Bonfire.Me.Accounts.Queries.html index 2336346fa50..a270fd7edb6 100644 --- a/Bonfire.Me.Accounts.Queries.html +++ b/Bonfire.Me.Accounts.Queries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Accounts.SecondFactors.html b/Bonfire.Me.Accounts.SecondFactors.html index 832077c9fcb..b08c088915f 100644 --- a/Bonfire.Me.Accounts.SecondFactors.html +++ b/Bonfire.Me.Accounts.SecondFactors.html @@ -13,7 +13,7 @@ - + @@ -301,8 +301,8 @@

changeset(totp \\ %AuthSecondFactor{}, attr Examples

-
iex> changeset(%AuthSecondFactor{secret: <<...>>}, code: "123456")
-%Ecto.Changeset{data: %AuthSecondFactor{}}
+
iex> changeset(%AuthSecondFactor{secret: <<...>>}, code: "123456")
+%Ecto.Changeset{data: %AuthSecondFactor{}}
diff --git a/Bonfire.Me.Accounts.html b/Bonfire.Me.Accounts.html index 292105aa017..4e26b6d60ae 100644 --- a/Bonfire.Me.Accounts.html +++ b/Bonfire.Me.Accounts.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Acts.Caretaker.html b/Bonfire.Me.Acts.Caretaker.html index d756c2236eb..3a23bcd2f03 100644 --- a/Bonfire.Me.Acts.Caretaker.html +++ b/Bonfire.Me.Acts.Caretaker.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Acts.Creator.html b/Bonfire.Me.Acts.Creator.html index 43c037ec9b4..b94141198c2 100644 --- a/Bonfire.Me.Acts.Creator.html +++ b/Bonfire.Me.Acts.Creator.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Characters.html b/Bonfire.Me.Characters.html index 6d6d0a38181..8ce6b4d881a 100644 --- a/Bonfire.Me.Characters.html +++ b/Bonfire.Me.Characters.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.DeleteWorker.html b/Bonfire.Me.DeleteWorker.html index dbcb6cfc873..c3103fed0f9 100644 --- a/Bonfire.Me.DeleteWorker.html +++ b/Bonfire.Me.DeleteWorker.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Fake.Helpers.html b/Bonfire.Me.Fake.Helpers.html index 0e36e2611ee..efe67452616 100644 --- a/Bonfire.Me.Fake.Helpers.html +++ b/Bonfire.Me.Fake.Helpers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Fake.html b/Bonfire.Me.Fake.html index 3ef9f49ad65..2fc492a1a39 100644 --- a/Bonfire.Me.Fake.html +++ b/Bonfire.Me.Fake.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Integration.html b/Bonfire.Me.Integration.html index 2fd8234b2f7..02856256a75 100644 --- a/Bonfire.Me.Integration.html +++ b/Bonfire.Me.Integration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Mails.EmailView.html b/Bonfire.Me.Mails.EmailView.html index e15ae772a2f..2426747ab74 100644 --- a/Bonfire.Me.Mails.EmailView.html +++ b/Bonfire.Me.Mails.EmailView.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Mails.html b/Bonfire.Me.Mails.html index 0a6c4367a1f..9b745ac0eab 100644 --- a/Bonfire.Me.Mails.html +++ b/Bonfire.Me.Mails.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Profiles.LiveHandler.html b/Bonfire.Me.Profiles.LiveHandler.html index d62f9f6fdb7..c9d79a6daaa 100644 --- a/Bonfire.Me.Profiles.LiveHandler.html +++ b/Bonfire.Me.Profiles.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Profiles.html b/Bonfire.Me.Profiles.html index e1a8e884ff4..c0713438fee 100644 --- a/Bonfire.Me.Profiles.html +++ b/Bonfire.Me.Profiles.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.RuntimeConfig.html b/Bonfire.Me.RuntimeConfig.html index f2f06250e5d..b611239a1e2 100644 --- a/Bonfire.Me.RuntimeConfig.html +++ b/Bonfire.Me.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.SharedUsers.html b/Bonfire.Me.SharedUsers.html index ffe068d0ec2..65c4b6ce120 100644 --- a/Bonfire.Me.SharedUsers.html +++ b/Bonfire.Me.SharedUsers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Users.LiveHandler.html b/Bonfire.Me.Users.LiveHandler.html index 12ab8d16b6d..a9a4099b699 100644 --- a/Bonfire.Me.Users.LiveHandler.html +++ b/Bonfire.Me.Users.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Users.Queries.html b/Bonfire.Me.Users.Queries.html index 6dc4a102dea..762a88a2157 100644 --- a/Bonfire.Me.Users.Queries.html +++ b/Bonfire.Me.Users.Queries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Me.Users.html b/Bonfire.Me.Users.html index dc7e644a3f0..928a4815875 100644 --- a/Bonfire.Me.Users.html +++ b/Bonfire.Me.Users.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Messages.Fake.html b/Bonfire.Messages.Fake.html index 118dfe1add9..e1273957264 100644 --- a/Bonfire.Messages.Fake.html +++ b/Bonfire.Messages.Fake.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Messages.Integration.html b/Bonfire.Messages.Integration.html index 4abb20ee85c..a5531401e41 100644 --- a/Bonfire.Messages.Integration.html +++ b/Bonfire.Messages.Integration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Messages.LiveHandler.html b/Bonfire.Messages.LiveHandler.html new file mode 100644 index 00000000000..113c39afaae --- /dev/null +++ b/Bonfire.Messages.LiveHandler.html @@ -0,0 +1,509 @@ + + + + + + + + + + Bonfire.Messages.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.Messages.LiveHandler + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+ + +
+ + +
+

+ + + + Functions +

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

handle_event(binary, attrs, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

handle_params(attrs, _, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ + + + + +
+ + + Link to this function + +

list_threads(current_user, user \\ nil, opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

live_more(context, opts, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

send_message(params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this macro + +

sigil_p(route, extra)

+ + + + View Source + + + + (macro) + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

thread_meta(thread_id, activity, object, opts)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

thread_meta(key, thread_id, activity, object, opts)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

thread_participants(thread_id, activity, object, opts)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ + + + + +
+ + + Link to this function + +

threads_widget(current_user, user \\ nil, opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.Messages.html b/Bonfire.Messages.html index 746adc81733..38b66c52d37 100644 --- a/Bonfire.Messages.html +++ b/Bonfire.Messages.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Posts.Acts.Posts.Publish.html b/Bonfire.Posts.Acts.Posts.Publish.html index 97d8bdf6960..808bc377223 100644 --- a/Bonfire.Posts.Acts.Posts.Publish.html +++ b/Bonfire.Posts.Acts.Posts.Publish.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Posts.Fake.html b/Bonfire.Posts.Fake.html index 4f9e7c34463..e11d4f60668 100644 --- a/Bonfire.Posts.Fake.html +++ b/Bonfire.Posts.Fake.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Posts.Integration.html b/Bonfire.Posts.Integration.html index 77597fb8319..17beab04a92 100644 --- a/Bonfire.Posts.Integration.html +++ b/Bonfire.Posts.Integration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Posts.LiveHandler.html b/Bonfire.Posts.LiveHandler.html new file mode 100644 index 00000000000..20e22d13301 --- /dev/null +++ b/Bonfire.Posts.LiveHandler.html @@ -0,0 +1,323 @@ + + + + + + + + + + Bonfire.Posts.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.Posts.LiveHandler + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+ + +
+ + +
+

+ + + + Functions +

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

handle_event(binary, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

post_changeset(attrs \\ %{}, creator)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this macro + +

sigil_p(route, extra)

+ + + + View Source + + + + (macro) + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

write_feedback(text, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.Posts.html b/Bonfire.Posts.html index 8ce7f05e2a2..82ed500cc0c 100644 --- a/Bonfire.Posts.html +++ b/Bonfire.Posts.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.RuntimeConfig.html b/Bonfire.RuntimeConfig.html index 6a738537d89..24bf93b1cb2 100644 --- a/Bonfire.RuntimeConfig.html +++ b/Bonfire.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.Acts.Queue.html b/Bonfire.Search.Acts.Queue.html index 45984929e65..bb71ef1f3ff 100644 --- a/Bonfire.Search.Acts.Queue.html +++ b/Bonfire.Search.Acts.Queue.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.Fuzzy.html b/Bonfire.Search.Fuzzy.html index 40a06213e36..7eb4f01563e 100644 --- a/Bonfire.Search.Fuzzy.html +++ b/Bonfire.Search.Fuzzy.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.HTTP.html b/Bonfire.Search.HTTP.html index 55b6f8e3508..c49d743be5a 100644 --- a/Bonfire.Search.HTTP.html +++ b/Bonfire.Search.HTTP.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.Indexer.html b/Bonfire.Search.Indexer.html index b907ce35d30..28c990e96a6 100644 --- a/Bonfire.Search.Indexer.html +++ b/Bonfire.Search.Indexer.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.LiveHandler.html b/Bonfire.Search.LiveHandler.html index f7207fa776c..72ae44f6c26 100644 --- a/Bonfire.Search.LiveHandler.html +++ b/Bonfire.Search.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.Meili.html b/Bonfire.Search.Meili.html index e1281b8a902..53161a3367b 100644 --- a/Bonfire.Search.Meili.html +++ b/Bonfire.Search.Meili.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.RuntimeConfig.html b/Bonfire.Search.RuntimeConfig.html index b07afc2ef17..c20d620d98e 100644 --- a/Bonfire.Search.RuntimeConfig.html +++ b/Bonfire.Search.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.Stopwords.html b/Bonfire.Search.Stopwords.html index c6fa147c0a5..a218abbcd94 100644 --- a/Bonfire.Search.Stopwords.html +++ b/Bonfire.Search.Stopwords.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.Web.Routes.html b/Bonfire.Search.Web.Routes.html index 6b8407369d9..4cda61f9a2d 100644 --- a/Bonfire.Search.Web.Routes.html +++ b/Bonfire.Search.Web.Routes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Search.html b/Bonfire.Search.html index c86cbf7d4d7..a8e1e5d36fa 100644 --- a/Bonfire.Search.html +++ b/Bonfire.Search.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Seeder.html b/Bonfire.Seeder.html index d0cb0980a0c..a879680a34a 100644 --- a/Bonfire.Seeder.html +++ b/Bonfire.Seeder.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.APActivities.html b/Bonfire.Social.APActivities.html index d127340e82b..484dc552c95 100644 --- a/Bonfire.Social.APActivities.html +++ b/Bonfire.Social.APActivities.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Activities.html b/Bonfire.Social.Activities.html index cd41207f67e..495d48a2cef 100644 --- a/Bonfire.Social.Activities.html +++ b/Bonfire.Social.Activities.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Acts.Activity.UnderObject.html b/Bonfire.Social.Acts.Activity.UnderObject.html index 4e168ad77e5..4390da02fb6 100644 --- a/Bonfire.Social.Acts.Activity.UnderObject.html +++ b/Bonfire.Social.Acts.Activity.UnderObject.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Acts.Activity.html b/Bonfire.Social.Acts.Activity.html index 1123fafb391..d448f55c69f 100644 --- a/Bonfire.Social.Acts.Activity.html +++ b/Bonfire.Social.Acts.Activity.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Acts.Federate.html b/Bonfire.Social.Acts.Federate.html index 3c7cc048a3f..e4bd7a4ffcc 100644 --- a/Bonfire.Social.Acts.Federate.html +++ b/Bonfire.Social.Acts.Federate.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Acts.Feeds.html b/Bonfire.Social.Acts.Feeds.html index 6d4adc4361c..1a9e391c2a8 100644 --- a/Bonfire.Social.Acts.Feeds.html +++ b/Bonfire.Social.Acts.Feeds.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Acts.LivePush.html b/Bonfire.Social.Acts.LivePush.html index 2dc858f12fc..ab7845ac7d0 100644 --- a/Bonfire.Social.Acts.LivePush.html +++ b/Bonfire.Social.Acts.LivePush.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Acts.Objects.Delete.html b/Bonfire.Social.Acts.Objects.Delete.html index 4ea5f9e9479..ac20db71291 100644 --- a/Bonfire.Social.Acts.Objects.Delete.html +++ b/Bonfire.Social.Acts.Objects.Delete.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Acts.PostContents.html b/Bonfire.Social.Acts.PostContents.html index 9b3e0524c73..ae84ba4c6e2 100644 --- a/Bonfire.Social.Acts.PostContents.html +++ b/Bonfire.Social.Acts.PostContents.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Acts.Sensitivity.html b/Bonfire.Social.Acts.Sensitivity.html index 91cef27fdc7..44a676ee7df 100644 --- a/Bonfire.Social.Acts.Sensitivity.html +++ b/Bonfire.Social.Acts.Sensitivity.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Acts.Threaded.html b/Bonfire.Social.Acts.Threaded.html index b4bec11cff9..2db92461d14 100644 --- a/Bonfire.Social.Acts.Threaded.html +++ b/Bonfire.Social.Acts.Threaded.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Bookmarks.LiveHandler.html b/Bonfire.Social.Bookmarks.LiveHandler.html new file mode 100644 index 00000000000..555f43135ca --- /dev/null +++ b/Bonfire.Social.Bookmarks.LiveHandler.html @@ -0,0 +1,385 @@ + + + + + + + + + + Bonfire.Social.Bookmarks.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.Social.Bookmarks.LiveHandler + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+ + +
+ + +
+

+ + + + Functions +

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

bookmarker_count(arg1)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

do_bookmark(object, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

handle_event(binary, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this macro + +

sigil_p(route, extra)

+ + + + View Source + + + + (macro) + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

update_many(assigns_sockets, opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

update_many_opts(opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.Social.Bookmarks.html b/Bonfire.Social.Bookmarks.html index 03fd79adc15..18a15776abb 100644 --- a/Bonfire.Social.Bookmarks.html +++ b/Bonfire.Social.Bookmarks.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Boosts.LiveHandler.html b/Bonfire.Social.Boosts.LiveHandler.html new file mode 100644 index 00000000000..df1f8389b53 --- /dev/null +++ b/Bonfire.Social.Boosts.LiveHandler.html @@ -0,0 +1,355 @@ + + + + + + + + + + Bonfire.Social.Boosts.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.Social.Boosts.LiveHandler + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+ + +
+ + +
+

+ + + + Functions +

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

do_boost(object, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

handle_event(binary, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this macro + +

sigil_p(route, extra)

+ + + + View Source + + + + (macro) + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

update_many(assigns_sockets, opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

update_many_opts(opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.Social.Boosts.html b/Bonfire.Social.Boosts.html index e3ad856410a..bbb9a07f218 100644 --- a/Bonfire.Social.Boosts.html +++ b/Bonfire.Social.Boosts.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Edges.html b/Bonfire.Social.Edges.html index c1ba876d8e9..fd682bf9220 100644 --- a/Bonfire.Social.Edges.html +++ b/Bonfire.Social.Edges.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Fake.html b/Bonfire.Social.Fake.html index 4171b46e066..23e6fcbf56b 100644 --- a/Bonfire.Social.Fake.html +++ b/Bonfire.Social.Fake.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.FeedActivities.html b/Bonfire.Social.FeedActivities.html index e5e8dab92b0..dc7d9b44a9d 100644 --- a/Bonfire.Social.FeedActivities.html +++ b/Bonfire.Social.FeedActivities.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Feeds.LiveHandler.html b/Bonfire.Social.Feeds.LiveHandler.html index fc49b71f2d0..1ecbb500d2b 100644 --- a/Bonfire.Social.Feeds.LiveHandler.html +++ b/Bonfire.Social.Feeds.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Feeds.html b/Bonfire.Social.Feeds.html index e84a45d4594..ef2282ec2e4 100644 --- a/Bonfire.Social.Feeds.html +++ b/Bonfire.Social.Feeds.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Flags.LiveHandler.html b/Bonfire.Social.Flags.LiveHandler.html new file mode 100644 index 00000000000..44745b90f1d --- /dev/null +++ b/Bonfire.Social.Flags.LiveHandler.html @@ -0,0 +1,261 @@ + + + + + + + + + + Bonfire.Social.Flags.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.Social.Flags.LiveHandler + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

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

+ + + + Functions +

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

handle_event(binary, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this macro + +

sigil_p(route, extra)

+ + + + View Source + + + + (macro) + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.Social.Flags.html b/Bonfire.Social.Flags.html index 9f2a6201fb1..dfedd115c8d 100644 --- a/Bonfire.Social.Flags.html +++ b/Bonfire.Social.Flags.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Graph.Aliases.LiveHandler.html b/Bonfire.Social.Graph.Aliases.LiveHandler.html new file mode 100644 index 00000000000..d67915d6099 --- /dev/null +++ b/Bonfire.Social.Graph.Aliases.LiveHandler.html @@ -0,0 +1,261 @@ + + + + + + + + + + Bonfire.Social.Graph.Aliases.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.Social.Graph.Aliases.LiveHandler + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

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

+ + + + Functions +

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

handle_event(binary, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this macro + +

sigil_p(route, extra)

+ + + + View Source + + + + (macro) + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.Social.Graph.Aliases.html b/Bonfire.Social.Graph.Aliases.html index 0f111de8650..86822524b16 100644 --- a/Bonfire.Social.Graph.Aliases.html +++ b/Bonfire.Social.Graph.Aliases.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Graph.Fake.html b/Bonfire.Social.Graph.Fake.html index 2c951e1ad63..e37bef5774d 100644 --- a/Bonfire.Social.Graph.Fake.html +++ b/Bonfire.Social.Graph.Fake.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Graph.Follows.LiveHandler.html b/Bonfire.Social.Graph.Follows.LiveHandler.html new file mode 100644 index 00000000000..54d124b84b7 --- /dev/null +++ b/Bonfire.Social.Graph.Follows.LiveHandler.html @@ -0,0 +1,325 @@ + + + + + + + + + + Bonfire.Social.Graph.Follows.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.Social.Graph.Follows.LiveHandler + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+ + +
+ + +
+

+ + + + Functions +

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

handle_event(binary, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this macro + +

sigil_p(route, extra)

+ + + + View Source + + + + (macro) + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

update_many(assigns_sockets, opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

update_many_opts(opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.Social.Graph.Follows.html b/Bonfire.Social.Graph.Follows.html index d8b71c81c55..f236007ab6e 100644 --- a/Bonfire.Social.Graph.Follows.html +++ b/Bonfire.Social.Graph.Follows.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Graph.Import.html b/Bonfire.Social.Graph.Import.html index 69257a43ddb..2f7e7763b14 100644 --- a/Bonfire.Social.Graph.Import.html +++ b/Bonfire.Social.Graph.Import.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Graph.Integration.html b/Bonfire.Social.Graph.Integration.html index ed7583cfbe1..9c39f0d5931 100644 --- a/Bonfire.Social.Graph.Integration.html +++ b/Bonfire.Social.Graph.Integration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Graph.Requests.html b/Bonfire.Social.Graph.Requests.html index c40581ccf4c..1ac059e3a1a 100644 --- a/Bonfire.Social.Graph.Requests.html +++ b/Bonfire.Social.Graph.Requests.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Graph.html b/Bonfire.Social.Graph.html index 01cf268ce65..58b7964d57e 100644 --- a/Bonfire.Social.Graph.html +++ b/Bonfire.Social.Graph.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Integration.html b/Bonfire.Social.Integration.html index c9d3bb93f0e..3404cbb59be 100644 --- a/Bonfire.Social.Integration.html +++ b/Bonfire.Social.Integration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Likes.LiveHandler.html b/Bonfire.Social.Likes.LiveHandler.html new file mode 100644 index 00000000000..3e0d1aabe01 --- /dev/null +++ b/Bonfire.Social.Likes.LiveHandler.html @@ -0,0 +1,385 @@ + + + + + + + + + + Bonfire.Social.Likes.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.Social.Likes.LiveHandler + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+ + +
+ + +
+

+ + + + Functions +

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

do_like(object, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

handle_event(binary, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ + + +
+ + +
+
+
+ +
+ + + Link to this macro + +

sigil_p(route, extra)

+ + + + View Source + + + + (macro) + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

update_many(assigns_sockets, opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+
+ + + +
+ + + Link to this function + +

update_many_opts(opts \\ [])

+ + + + View Source + + + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.Social.Likes.html b/Bonfire.Social.Likes.html index 527f074c8fc..98d1be16c72 100644 --- a/Bonfire.Social.Likes.html +++ b/Bonfire.Social.Likes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.LivePush.html b/Bonfire.Social.LivePush.html index 5df6660cef7..19771c99a11 100644 --- a/Bonfire.Social.LivePush.html +++ b/Bonfire.Social.LivePush.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Objects.LiveHandler.html b/Bonfire.Social.Objects.LiveHandler.html index 9dc51616dd6..11612f0854e 100644 --- a/Bonfire.Social.Objects.LiveHandler.html +++ b/Bonfire.Social.Objects.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Objects.html b/Bonfire.Social.Objects.html index 4b5bd874db8..e7950f9dd2e 100644 --- a/Bonfire.Social.Objects.html +++ b/Bonfire.Social.Objects.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Pins.LiveHandler.html b/Bonfire.Social.Pins.LiveHandler.html new file mode 100644 index 00000000000..0ddf92cf961 --- /dev/null +++ b/Bonfire.Social.Pins.LiveHandler.html @@ -0,0 +1,291 @@ + + + + + + + + + + Bonfire.Social.Pins.LiveHandler — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.Social.Pins.LiveHandler + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+ + +
+ + +
+

+ + + + Functions +

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

do_pin(object, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this function + +

handle_event(binary, params, socket)

+ + + + View Source + + + +
+ +
+ + +
+
+
+ +
+ + + Link to this macro + +

sigil_p(route, extra)

+ + + + View Source + + + + (macro) + +
+ +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.Social.Pins.html b/Bonfire.Social.Pins.html index 48a6780f740..fb424b70177 100644 --- a/Bonfire.Social.Pins.html +++ b/Bonfire.Social.Pins.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.PostContents.html b/Bonfire.Social.PostContents.html index 959e62e6e25..8f2d27cc73b 100644 --- a/Bonfire.Social.PostContents.html +++ b/Bonfire.Social.PostContents.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Seen.html b/Bonfire.Social.Seen.html index 2ac3eb4a12b..b60f89b8a99 100644 --- a/Bonfire.Social.Seen.html +++ b/Bonfire.Social.Seen.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Tags.html b/Bonfire.Social.Tags.html index 1e8f72615c7..d396e88ca09 100644 --- a/Bonfire.Social.Tags.html +++ b/Bonfire.Social.Tags.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Threads.LiveHandler.html b/Bonfire.Social.Threads.LiveHandler.html index a82807f04cf..211e11b8d78 100644 --- a/Bonfire.Social.Threads.LiveHandler.html +++ b/Bonfire.Social.Threads.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Social.Threads.html b/Bonfire.Social.Threads.html index 71d0b01a627..9a3d0627273 100644 --- a/Bonfire.Social.Threads.html +++ b/Bonfire.Social.Threads.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.System.OS.Monitor.html b/Bonfire.System.OS.Monitor.html index 4006024447e..e3629b92168 100644 --- a/Bonfire.System.OS.Monitor.html +++ b/Bonfire.System.OS.Monitor.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.Autocomplete.html b/Bonfire.Tag.Autocomplete.html index f9fb7ea1aca..b1c438f3d21 100644 --- a/Bonfire.Tag.Autocomplete.html +++ b/Bonfire.Tag.Autocomplete.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.Hashtag.html b/Bonfire.Tag.Hashtag.html index d82d4151b6d..230427b1d70 100644 --- a/Bonfire.Tag.Hashtag.html +++ b/Bonfire.Tag.Hashtag.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.Queries.html b/Bonfire.Tag.Queries.html index 52aa9eb905b..f945d65291a 100644 --- a/Bonfire.Tag.Queries.html +++ b/Bonfire.Tag.Queries.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.Simulate.html b/Bonfire.Tag.Simulate.html index 3d45dba858e..9e985aa91e0 100644 --- a/Bonfire.Tag.Simulate.html +++ b/Bonfire.Tag.Simulate.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.Tagged.html b/Bonfire.Tag.Tagged.html index 4c7257cfdcb..0e248e47bb7 100644 --- a/Bonfire.Tag.Tagged.html +++ b/Bonfire.Tag.Tagged.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.Tags.html b/Bonfire.Tag.Tags.html index 9af4babe8a7..83e3bed706a 100644 --- a/Bonfire.Tag.Tags.html +++ b/Bonfire.Tag.Tags.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.TextContent.Formatter.html b/Bonfire.Tag.TextContent.Formatter.html index 9cf57c8bfdb..2efee532f8d 100644 --- a/Bonfire.Tag.TextContent.Formatter.html +++ b/Bonfire.Tag.TextContent.Formatter.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.TextContent.Process.html b/Bonfire.Tag.TextContent.Process.html index e9038d9de97..e4971a166bc 100644 --- a/Bonfire.Tag.TextContent.Process.html +++ b/Bonfire.Tag.TextContent.Process.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.Web.Routes.html b/Bonfire.Tag.Web.Routes.html index 8a25bfa9bf6..db456044636 100644 --- a/Bonfire.Tag.Web.Routes.html +++ b/Bonfire.Tag.Web.Routes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tag.html b/Bonfire.Tag.html index 66e0d54f8ac..b09d1706978 100644 --- a/Bonfire.Tag.html +++ b/Bonfire.Tag.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tags.Acts.AutoBoost.html b/Bonfire.Tags.Acts.AutoBoost.html index bcf2811d931..78338ab225e 100644 --- a/Bonfire.Tags.Acts.AutoBoost.html +++ b/Bonfire.Tags.Acts.AutoBoost.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Tags.Acts.Tag.html b/Bonfire.Tags.Acts.Tag.html index 35891ece7d2..265f2a75569 100644 --- a/Bonfire.Tags.Acts.Tag.html +++ b/Bonfire.Tags.Acts.Tag.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Telemetry.Storage.html b/Bonfire.Telemetry.Storage.html index b5161cc847d..783d95c7836 100644 --- a/Bonfire.Telemetry.Storage.html +++ b/Bonfire.Telemetry.Storage.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.ComponentID.html b/Bonfire.UI.Common.ComponentID.html index 9c228a4a172..a421e756f4d 100644 --- a/Bonfire.UI.Common.ComponentID.html +++ b/Bonfire.UI.Common.ComponentID.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.EndpointTemplate.html b/Bonfire.UI.Common.EndpointTemplate.html index 900c77ba663..717e8330743 100644 --- a/Bonfire.UI.Common.EndpointTemplate.html +++ b/Bonfire.UI.Common.EndpointTemplate.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.ErrorHelpers.html b/Bonfire.UI.Common.ErrorHelpers.html index 0643bea2f82..54f635a8e60 100644 --- a/Bonfire.UI.Common.ErrorHelpers.html +++ b/Bonfire.UI.Common.ErrorHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.ErrorReportingPlug.html b/Bonfire.UI.Common.ErrorReportingPlug.html index 06cc067b1a4..22fc83b281f 100644 --- a/Bonfire.UI.Common.ErrorReportingPlug.html +++ b/Bonfire.UI.Common.ErrorReportingPlug.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.LiveHandlers.html b/Bonfire.UI.Common.LiveHandlers.html index b421cc846c6..8a8b6e7576f 100644 --- a/Bonfire.UI.Common.LiveHandlers.html +++ b/Bonfire.UI.Common.LiveHandlers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html b/Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html index 8b2324cfe70..47226c92d80 100644 --- a/Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html +++ b/Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.LivePlugs.Csrf.html b/Bonfire.UI.Common.LivePlugs.Csrf.html index fb173e023f1..f3333f9e8f3 100644 --- a/Bonfire.UI.Common.LivePlugs.Csrf.html +++ b/Bonfire.UI.Common.LivePlugs.Csrf.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.LivePlugs.Helpers.html b/Bonfire.UI.Common.LivePlugs.Helpers.html index 79cc1ff2ea2..26c51a373c7 100644 --- a/Bonfire.UI.Common.LivePlugs.Helpers.html +++ b/Bonfire.UI.Common.LivePlugs.Helpers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.LivePlugs.Locale.html b/Bonfire.UI.Common.LivePlugs.Locale.html index 43fa2fa0be7..adaa2d6fb0e 100644 --- a/Bonfire.UI.Common.LivePlugs.Locale.html +++ b/Bonfire.UI.Common.LivePlugs.Locale.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.LivePlugs.StaticChanged.html b/Bonfire.UI.Common.LivePlugs.StaticChanged.html index ebc31163aca..a1877ca9f3b 100644 --- a/Bonfire.UI.Common.LivePlugs.StaticChanged.html +++ b/Bonfire.UI.Common.LivePlugs.StaticChanged.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.LivePlugs.html b/Bonfire.UI.Common.LivePlugs.html index d26b1290492..b035aaa6bb9 100644 --- a/Bonfire.UI.Common.LivePlugs.html +++ b/Bonfire.UI.Common.LivePlugs.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.MaybeStaticGeneratorPlug.html b/Bonfire.UI.Common.MaybeStaticGeneratorPlug.html index 87788fce7a6..1d2c60b67b3 100644 --- a/Bonfire.UI.Common.MaybeStaticGeneratorPlug.html +++ b/Bonfire.UI.Common.MaybeStaticGeneratorPlug.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.MultiTenancyPlug.html b/Bonfire.UI.Common.MultiTenancyPlug.html index edb1c266f09..550a72bf784 100644 --- a/Bonfire.UI.Common.MultiTenancyPlug.html +++ b/Bonfire.UI.Common.MultiTenancyPlug.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.MultiselectLive.LiveHandler.html b/Bonfire.UI.Common.MultiselectLive.LiveHandler.html index d9602dd2cc8..b5a3851f7ae 100644 --- a/Bonfire.UI.Common.MultiselectLive.LiveHandler.html +++ b/Bonfire.UI.Common.MultiselectLive.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.NavModule.html b/Bonfire.UI.Common.NavModule.html index 5d7e4f3f88b..f3f541603d2 100644 --- a/Bonfire.UI.Common.NavModule.html +++ b/Bonfire.UI.Common.NavModule.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.Notifications.html b/Bonfire.UI.Common.Notifications.html index 9a860567d90..6721c49ff5f 100644 --- a/Bonfire.UI.Common.Notifications.html +++ b/Bonfire.UI.Common.Notifications.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.PlugProtect.html b/Bonfire.UI.Common.PlugProtect.html index ca56e432cd6..0c753637143 100644 --- a/Bonfire.UI.Common.PlugProtect.html +++ b/Bonfire.UI.Common.PlugProtect.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.Plugs.ActivityPub.html b/Bonfire.UI.Common.Plugs.ActivityPub.html index 31d4a00c0d2..f4ffa50928a 100644 --- a/Bonfire.UI.Common.Plugs.ActivityPub.html +++ b/Bonfire.UI.Common.Plugs.ActivityPub.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.Presence.html b/Bonfire.UI.Common.Presence.html index 2d7cfc7d4c3..9cca3d65a5b 100644 --- a/Bonfire.UI.Common.Presence.html +++ b/Bonfire.UI.Common.Presence.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.PreviewContentLive.html b/Bonfire.UI.Common.PreviewContentLive.html index c55ac983f44..b35acaa8fce 100644 --- a/Bonfire.UI.Common.PreviewContentLive.html +++ b/Bonfire.UI.Common.PreviewContentLive.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.ReusableModalLive.html b/Bonfire.UI.Common.ReusableModalLive.html index f781d144b6f..ce4111350ee 100644 --- a/Bonfire.UI.Common.ReusableModalLive.html +++ b/Bonfire.UI.Common.ReusableModalLive.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.Routes.html b/Bonfire.UI.Common.Routes.html index ee0acd8d930..c8cdae7d99e 100644 --- a/Bonfire.UI.Common.Routes.html +++ b/Bonfire.UI.Common.Routes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.SEO.html b/Bonfire.UI.Common.SEO.html index 8f8035763a5..c27ecc659a2 100644 --- a/Bonfire.UI.Common.SEO.html +++ b/Bonfire.UI.Common.SEO.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.SettingsModule.html b/Bonfire.UI.Common.SettingsModule.html index 7d397e79472..5ecb499ce8a 100644 --- a/Bonfire.UI.Common.SettingsModule.html +++ b/Bonfire.UI.Common.SettingsModule.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.SmartInput.LiveHandler.html b/Bonfire.UI.Common.SmartInput.LiveHandler.html index c0ad9b9bb09..15917595812 100644 --- a/Bonfire.UI.Common.SmartInput.LiveHandler.html +++ b/Bonfire.UI.Common.SmartInput.LiveHandler.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.SmartInputModule.html b/Bonfire.UI.Common.SmartInputModule.html index 49fe60020e7..bebeae51e13 100644 --- a/Bonfire.UI.Common.SmartInputModule.html +++ b/Bonfire.UI.Common.SmartInputModule.html @@ -13,7 +13,7 @@ - + @@ -138,9 +138,9 @@

Find a smart input module via the object type(s) it can create, or vice versa. Backed by a global cache of known smart input modules.

To add a module to this list, you should declare @behaviour Bonfire.UI.Common.SmartInputModule in it and define a smart_input_module/0 function which returns a list of object types that it can create.

Example:

@behaviour Bonfire.UI.Common.SmartInputModule
-def smart_input_module, do: [:page, Bonfire.Pages.Page]

You can then open the smart input composer / object creator using that declared type, for example:

<Bonfire.UI.Common.SmartInputButtonLive
-  create_object_type={:page}
-  prompt={l("New page")}
+def smart_input_module, do: [:page, Bonfire.Pages.Page]

You can then open the smart input composer / object creator using that declared type, for example:

<Bonfire.UI.Common.SmartInputButtonLive
+  create_object_type={:page}
+  prompt={l("New page")}
   icon="mdi:pencil"
 />
diff --git a/Bonfire.UI.Common.StaticGenerator.html b/Bonfire.UI.Common.StaticGenerator.html index db4d0187f73..4cb3f7c356e 100644 --- a/Bonfire.UI.Common.StaticGenerator.html +++ b/Bonfire.UI.Common.StaticGenerator.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.StaticGeneratorPlug.html b/Bonfire.UI.Common.StaticGeneratorPlug.html index a4dde621053..e93597cb7bd 100644 --- a/Bonfire.UI.Common.StaticGeneratorPlug.html +++ b/Bonfire.UI.Common.StaticGeneratorPlug.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.Testing.Helpers.html b/Bonfire.UI.Common.Testing.Helpers.html index 0e33e707ac7..08cfa263fb4 100644 --- a/Bonfire.UI.Common.Testing.Helpers.html +++ b/Bonfire.UI.Common.Testing.Helpers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.WidgetModule.html b/Bonfire.UI.Common.WidgetModule.html index b09f2a6eceb..07c582c9aeb 100644 --- a/Bonfire.UI.Common.WidgetModule.html +++ b/Bonfire.UI.Common.WidgetModule.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Common.html b/Bonfire.UI.Common.html index 1a3ebc7f1cd..2e1ec595bfd 100644 --- a/Bonfire.UI.Common.html +++ b/Bonfire.UI.Common.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.Integration.html b/Bonfire.UI.Me.Integration.html index 8dc61362856..ea15779ff7f 100644 --- a/Bonfire.UI.Me.Integration.html +++ b/Bonfire.UI.Me.Integration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.LivePlugs.AccountRequired.html b/Bonfire.UI.Me.LivePlugs.AccountRequired.html index 54d89f0401c..f00d22cf34e 100644 --- a/Bonfire.UI.Me.LivePlugs.AccountRequired.html +++ b/Bonfire.UI.Me.LivePlugs.AccountRequired.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.LivePlugs.AdminRequired.html b/Bonfire.UI.Me.LivePlugs.AdminRequired.html index 1c8ea408bcb..76c9df61112 100644 --- a/Bonfire.UI.Me.LivePlugs.AdminRequired.html +++ b/Bonfire.UI.Me.LivePlugs.AdminRequired.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html b/Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html index dbc6b5bb47e..2a983c045e2 100644 --- a/Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html +++ b/Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html b/Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html index 406594d21dd..81145299c8c 100644 --- a/Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html +++ b/Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html b/Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html index ff4657a69aa..7bc1f87e408 100644 --- a/Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html +++ b/Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html b/Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html index 523d878e601..09c7367a217 100644 --- a/Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html +++ b/Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.LivePlugs.UserRequired.html b/Bonfire.UI.Me.LivePlugs.UserRequired.html index 524c330857a..62f707f446a 100644 --- a/Bonfire.UI.Me.LivePlugs.UserRequired.html +++ b/Bonfire.UI.Me.LivePlugs.UserRequired.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.Plugs.AccountRequired.html b/Bonfire.UI.Me.Plugs.AccountRequired.html index 2b921e94b33..c8862e54cce 100644 --- a/Bonfire.UI.Me.Plugs.AccountRequired.html +++ b/Bonfire.UI.Me.Plugs.AccountRequired.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.Plugs.AdminRequired.html b/Bonfire.UI.Me.Plugs.AdminRequired.html index 70b5eac887f..3770d2eef61 100644 --- a/Bonfire.UI.Me.Plugs.AdminRequired.html +++ b/Bonfire.UI.Me.Plugs.AdminRequired.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.Plugs.GuestOnly.html b/Bonfire.UI.Me.Plugs.GuestOnly.html index 8e984f14665..1eb9dd509a0 100644 --- a/Bonfire.UI.Me.Plugs.GuestOnly.html +++ b/Bonfire.UI.Me.Plugs.GuestOnly.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.Plugs.LoadCurrentAccount.html b/Bonfire.UI.Me.Plugs.LoadCurrentAccount.html index 7e35758546c..1db02e239c8 100644 --- a/Bonfire.UI.Me.Plugs.LoadCurrentAccount.html +++ b/Bonfire.UI.Me.Plugs.LoadCurrentAccount.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html b/Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html index 9bd77758848..72037bba86e 100644 --- a/Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html +++ b/Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.Plugs.LoadCurrentUser.html b/Bonfire.UI.Me.Plugs.LoadCurrentUser.html index dba320b47cf..99fe7c39001 100644 --- a/Bonfire.UI.Me.Plugs.LoadCurrentUser.html +++ b/Bonfire.UI.Me.Plugs.LoadCurrentUser.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.Plugs.UserRequired.html b/Bonfire.UI.Me.Plugs.UserRequired.html index d3fa0133816..8d08640b9e1 100644 --- a/Bonfire.UI.Me.Plugs.UserRequired.html +++ b/Bonfire.UI.Me.Plugs.UserRequired.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.Routes.html b/Bonfire.UI.Me.Routes.html index 0921ef12777..0ec56714dfa 100644 --- a/Bonfire.UI.Me.Routes.html +++ b/Bonfire.UI.Me.Routes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Me.RuntimeConfig.html b/Bonfire.UI.Me.RuntimeConfig.html index ae94f3b6241..c7892d632c1 100644 --- a/Bonfire.UI.Me.RuntimeConfig.html +++ b/Bonfire.UI.Me.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Messages.Routes.html b/Bonfire.UI.Messages.Routes.html new file mode 100644 index 00000000000..1af5f336410 --- /dev/null +++ b/Bonfire.UI.Messages.Routes.html @@ -0,0 +1,229 @@ + + + + + + + + + + Bonfire.UI.Messages.Routes — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.UI.Messages.Routes + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

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

+ + + + Functions +

+
+
+ + + +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.UI.Messages.RuntimeConfig.html b/Bonfire.UI.Messages.RuntimeConfig.html new file mode 100644 index 00000000000..6123003da31 --- /dev/null +++ b/Bonfire.UI.Messages.RuntimeConfig.html @@ -0,0 +1,263 @@ + + + + + + + + + + Bonfire.UI.Messages.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.UI.Messages.RuntimeConfig + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

+ +
+
+ config() + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+ +
+ +
+ + +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+ +
+ +
+ +
+ + +
+

+ + + + Functions +

+
+
+ + + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+
+
+
+ + + +
+ +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.UI.Moderation.RuntimeConfig.html b/Bonfire.UI.Moderation.RuntimeConfig.html new file mode 100644 index 00000000000..77ebec20ec6 --- /dev/null +++ b/Bonfire.UI.Moderation.RuntimeConfig.html @@ -0,0 +1,263 @@ + + + + + + + + + + Bonfire.UI.Moderation.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.UI.Moderation.RuntimeConfig + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

+ +
+
+ config() + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+ +
+ +
+ + +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+ +
+ +
+ +
+ + +
+

+ + + + Functions +

+
+
+ + + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+
+
+
+ + + +
+ +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.UI.Posts.Routes.html b/Bonfire.UI.Posts.Routes.html new file mode 100644 index 00000000000..64c81bff9f0 --- /dev/null +++ b/Bonfire.UI.Posts.Routes.html @@ -0,0 +1,229 @@ + + + + + + + + + + Bonfire.UI.Posts.Routes — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.UI.Posts.Routes + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

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

+ + + + Functions +

+
+
+ + + +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.UI.Posts.RuntimeConfig.html b/Bonfire.UI.Posts.RuntimeConfig.html new file mode 100644 index 00000000000..b186b121439 --- /dev/null +++ b/Bonfire.UI.Posts.RuntimeConfig.html @@ -0,0 +1,263 @@ + + + + + + + + + + Bonfire.UI.Posts.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.UI.Posts.RuntimeConfig + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

+ +
+
+ config() + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+ +
+ +
+ + +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+ +
+ +
+ +
+ + +
+

+ + + + Functions +

+
+
+ + + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+
+
+
+ + + +
+ +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.UI.Reactions.Routes.html b/Bonfire.UI.Reactions.Routes.html new file mode 100644 index 00000000000..e5bd048c7c5 --- /dev/null +++ b/Bonfire.UI.Reactions.Routes.html @@ -0,0 +1,229 @@ + + + + + + + + + + Bonfire.UI.Reactions.Routes — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.UI.Reactions.Routes + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

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

+ + + + Functions +

+
+
+ + + +
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.UI.Reactions.RuntimeConfig.html b/Bonfire.UI.Reactions.RuntimeConfig.html new file mode 100644 index 00000000000..7d629296c94 --- /dev/null +++ b/Bonfire.UI.Reactions.RuntimeConfig.html @@ -0,0 +1,263 @@ + + + + + + + + + + Bonfire.UI.Reactions.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.UI.Reactions.RuntimeConfig + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

+ +
+
+ config() + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+ +
+ +
+ + +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+ +
+ +
+ +
+ + +
+

+ + + + Functions +

+
+
+ + + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+
+
+
+ + + +
+ +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.UI.Social.Benchmark.html b/Bonfire.UI.Social.Benchmark.html index f7c245f8b49..b4385c8775b 100644 --- a/Bonfire.UI.Social.Benchmark.html +++ b/Bonfire.UI.Social.Benchmark.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Social.Graph.RuntimeConfig.html b/Bonfire.UI.Social.Graph.RuntimeConfig.html new file mode 100644 index 00000000000..2cdf2df354f --- /dev/null +++ b/Bonfire.UI.Social.Graph.RuntimeConfig.html @@ -0,0 +1,263 @@ + + + + + + + + + + Bonfire.UI.Social.Graph.RuntimeConfig — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +

+ + + + + + View Source + + + Bonfire.UI.Social.Graph.RuntimeConfig + (bonfire_umbrella v0.9.8-cooperation-beta.24) + +

+ + + +
+

+ + + + Summary +

+
+

+ Functions +

+ +
+
+ config() + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+ +
+ +
+ + +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+ +
+ +
+ +
+ + +
+

+ + + + Functions +

+
+
+ + + +
+ +

NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the Bonfire.Common.Config.LoadExtensionsConfig.load_configs() line

+
+
+
+ + + +
+ +

Callback implementation for Bonfire.Common.ConfigModule.config_module/0.

+
+
+ +
+
+ + +
+
+
+
+ + + + diff --git a/Bonfire.UI.Social.Integration.html b/Bonfire.UI.Social.Integration.html index 2daeba31d47..d7683df88bb 100644 --- a/Bonfire.UI.Social.Integration.html +++ b/Bonfire.UI.Social.Integration.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Social.Routes.html b/Bonfire.UI.Social.Routes.html index 6fa20aff359..25b17f42365 100644 --- a/Bonfire.UI.Social.Routes.html +++ b/Bonfire.UI.Social.Routes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.UI.Social.RuntimeConfig.html b/Bonfire.UI.Social.RuntimeConfig.html index 6f1cc3c7499..969a90cb6ab 100644 --- a/Bonfire.UI.Social.RuntimeConfig.html +++ b/Bonfire.UI.Social.RuntimeConfig.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Web.Endpoint.html b/Bonfire.Web.Endpoint.html index aeb4096321f..e791888285d 100644 --- a/Bonfire.Web.Endpoint.html +++ b/Bonfire.Web.Endpoint.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Web.FakeRemoteEndpoint.html b/Bonfire.Web.FakeRemoteEndpoint.html index f8b5ed7c3bc..3121c3e4f61 100644 --- a/Bonfire.Web.FakeRemoteEndpoint.html +++ b/Bonfire.Web.FakeRemoteEndpoint.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Web.Router.Reverse.html b/Bonfire.Web.Router.Reverse.html index 55cc7ea2582..cd895b297ad 100644 --- a/Bonfire.Web.Router.Reverse.html +++ b/Bonfire.Web.Router.Reverse.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Web.Router.html b/Bonfire.Web.Router.html index 63e8fa38282..bdb23f2bdc7 100644 --- a/Bonfire.Web.Router.html +++ b/Bonfire.Web.Router.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Web.Routes.html b/Bonfire.Web.Routes.html index 9681b8dcf40..ba7c3471f1c 100644 --- a/Bonfire.Web.Routes.html +++ b/Bonfire.Web.Routes.html @@ -13,7 +13,7 @@ - + diff --git a/Bonfire.Web.Telemetry.html b/Bonfire.Web.Telemetry.html index a9f2aec5978..47fdcfa5e96 100644 --- a/Bonfire.Web.Telemetry.html +++ b/Bonfire.Web.Telemetry.html @@ -13,7 +13,7 @@ - + diff --git a/ConsoleHelpers.html b/ConsoleHelpers.html index d9f66bc04e2..480839515d5 100644 --- a/ConsoleHelpers.html +++ b/ConsoleHelpers.html @@ -13,7 +13,7 @@ - + diff --git a/DaisyTheme.html b/DaisyTheme.html index 74e06c67b74..1e77410c83b 100644 --- a/DaisyTheme.html +++ b/DaisyTheme.html @@ -13,7 +13,7 @@ - + diff --git a/DummyAdapter.html b/DummyAdapter.html index a10d2f1a665..e13f2488bb9 100644 --- a/DummyAdapter.html +++ b/DummyAdapter.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.AutoMigrator.html b/EctoSparkles.AutoMigrator.html index f91556c9c78..ce1fb5aeffa 100644 --- a/EctoSparkles.AutoMigrator.html +++ b/EctoSparkles.AutoMigrator.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.Changesets.Errors.html b/EctoSparkles.Changesets.Errors.html index 02e451c6f13..39f4016ce98 100644 --- a/EctoSparkles.Changesets.Errors.html +++ b/EctoSparkles.Changesets.Errors.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.Changesets.html b/EctoSparkles.Changesets.html index 74f3d0e1eb1..e691806c7cc 100644 --- a/EctoSparkles.Changesets.html +++ b/EctoSparkles.Changesets.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.DataMigration.Config.html b/EctoSparkles.DataMigration.Config.html index 3be6c27bab9..e51c4a99f83 100644 --- a/EctoSparkles.DataMigration.Config.html +++ b/EctoSparkles.DataMigration.Config.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.DataMigration.Runner.html b/EctoSparkles.DataMigration.Runner.html index c9a1fed56b0..6595e7d38d6 100644 --- a/EctoSparkles.DataMigration.Runner.html +++ b/EctoSparkles.DataMigration.Runner.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.DataMigration.html b/EctoSparkles.DataMigration.html index 97fa639d636..f11631b01a4 100644 --- a/EctoSparkles.DataMigration.html +++ b/EctoSparkles.DataMigration.html @@ -13,7 +13,7 @@ - + @@ -137,36 +137,36 @@

-

A behaviour implemented by our data migrations (generally backfills).

Based on A microframework for backfill migrations in Elixir's Ecto, in turn based on David Bernheisel's template for deterministic backfills.

A data migration using this behaviour may look like this (which you can put simply put in Ecto migrations, eg. priv/repo/migrations/priv/repo/migrations/20231019004944_data_onboarding_step.exs):

defmodule MyApp.Repo.Migrations.BackfillOnboardingStep do
+

A behaviour implemented by our data migrations (generally backfills).

Based on A microframework for backfill migrations in Elixir's Ecto, in turn based on David Bernheisel's template for deterministic backfills.

A data migration using this behaviour may look like this (which you can put simply put in Ecto migrations, eg. priv/repo/migrations/priv/repo/migrations/20231019004944_data_onboarding_step.exs):

defmodule MyApp.Repo.Migrations.BackfillOnboardingStep do
   alias EctoSparkles.DataMigration
   use DataMigration
   
   @impl DataMigration
-  def base_query do
+  def base_query do
     # NOTE: This works in cases where:
     # 1. The data can be queried with a condition that not longer applies after the migration ran, so you can repeatedly query the data and update the data until the query result is empty. For example, if a column is currently null and will be updated to not be null, then you can query for the null records and pick up where you left off.
     # 2. The migration is written in such a way that it can be ran several times on the same data without causing data loss or duplication (or crashing).
 
-    from(u in "users", # Notice how we do not use Ecto schemas here.
-      where: is_nil(u.onboarding_step),
-      select: %{id: u.id}
-    )
-  end
+    from(u in "users", # Notice how we do not use Ecto schemas here.
+      where: is_nil(u.onboarding_step),
+      select: %{id: u.id}
+    )
+  end
 
   @impl DataMigration
-  def config do
-    %DataMigration.Config{batch_size: 100, throttle_ms: 1_000, repo: MyApp.Repo}
-  end
+  def config do
+    %DataMigration.Config{batch_size: 100, throttle_ms: 1_000, repo: MyApp.Repo}
+  end
 
   @impl DataMigration
-  def migrate(results) do
-    Enum.each(results, fn %{id: user_id} ->
+  def migrate(results) do
+    Enum.each(results, fn %{id: user_id} ->
       # hooks into a context module, which is more likely to be kept up to date as the app evolves, to avoid having to update old migrations
       user_id
-      |> MyApp.Users.set_onboarding_step!()
-    end)
-  end
-end
+
|> MyApp.Users.set_onboarding_step!() + end) + end +end
diff --git a/EctoSparkles.ErlangTermBinary.html b/EctoSparkles.ErlangTermBinary.html index c10190695f9..eaa4409161c 100644 --- a/EctoSparkles.ErlangTermBinary.html +++ b/EctoSparkles.ErlangTermBinary.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.Log.html b/EctoSparkles.Log.html index 309ad85a757..6f2aec998a5 100644 --- a/EctoSparkles.Log.html +++ b/EctoSparkles.Log.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.Migrator.html b/EctoSparkles.Migrator.html index 1cf606d520c..99f57bcd252 100644 --- a/EctoSparkles.Migrator.html +++ b/EctoSparkles.Migrator.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.NPlus1Detector.html b/EctoSparkles.NPlus1Detector.html index 76ef02d2aba..38450205a08 100644 --- a/EctoSparkles.NPlus1Detector.html +++ b/EctoSparkles.NPlus1Detector.html @@ -13,7 +13,7 @@ - + diff --git a/EctoSparkles.SanitiseStrings.html b/EctoSparkles.SanitiseStrings.html index 8d9a590dc8e..3ad31eb4f62 100644 --- a/EctoSparkles.SanitiseStrings.html +++ b/EctoSparkles.SanitiseStrings.html @@ -13,7 +13,7 @@ - + @@ -269,26 +269,26 @@

strip_all_tags(changeset, opts \\ [])

Examples

-
iex> attrs = %{string_field: "<script>Bad</script>"}
+
iex> attrs = %{string_field: "<script>Bad</script>"}
 iex> result_changeset =
 ...>   attrs
-...>   |> FakeEctoSchema.changeset()
-...>   |> EctoSparkles.SanitiseStrings.strip_all_tags()
+...>   |> FakeEctoSchema.changeset()
+...>   |> EctoSparkles.SanitiseStrings.strip_all_tags()
 iex> result_changeset.changes
-%{string_field: "Bad"}

Fields can be exempted from sanitization via the :except option.

iex> attrs = %{string_field: "<script>Bad</script>"}
+%{string_field: "Bad"}

Fields can be exempted from sanitization via the :except option.

iex> attrs = %{string_field: "<script>Bad</script>"}
 iex> result_changeset =
 ...>   attrs
-...>   |> FakeEctoSchema.changeset()
-...>   |> EctoSparkles.SanitiseStrings.strip_all_tags(except: [:string_field])
+...>   |> FakeEctoSchema.changeset()
+...>   |> EctoSparkles.SanitiseStrings.strip_all_tags(except: [:string_field])
 iex> result_changeset.changes
-%{string_field: "<script>Bad</script>"}

+%{string_field: "<script>Bad</script>"}

You can also specify a specific scrubber (by passing a function as reference):

-

ies> attrs

...>   |> FakeEctoSchema.changeset()
-...>   |> EctoSparkles.SanitiseStrings.sanitise_strings(scrubber: HtmlSanitizeEx.Scrubber.html5/1)
+

ies> attrs

...>   |> FakeEctoSchema.changeset()
+...>   |> EctoSparkles.SanitiseStrings.sanitise_strings(scrubber: HtmlSanitizeEx.Scrubber.html5/1)
diff --git a/EctoSparkles.html b/EctoSparkles.html index 4453c636085..9c3d059b572 100644 --- a/EctoSparkles.html +++ b/EctoSparkles.html @@ -13,7 +13,7 @@ - + @@ -137,14 +137,14 @@

-

query_filter brings convenience and shortens the boilterplate of ecto queries

Common filters available include:

  • preload - Preloads fields onto the query results
  • start_date - Query for items inserted after this date
  • end_date - Query for items inserted before this date
  • before - Get items with IDs before this value
  • after - Get items with IDs after this value
  • ids - Get items with a list of ids
  • first - Gets the first n items
  • last - Gets the last n items
  • limit - Gets the first n items
  • offset - Offsets limit by n items
  • search - Warning: This requires schemas using this to have a &by_search(query, val) function

You are also able to filter on any natural field of a model, as well as use

  • gte/gt
  • lte/lt
  • like/ilike
  • is_nil/not(is_nil)
query_filter(User, %{name: %{ilike: "steve"}})
-query_filter(User, %{name: %{ilike: "steve"}}, :last_name, :asc)
-query_filter(User, %{name: %{age: %{gte: 18, lte: 30}}})
-query_filter(User, %{name: %{is_banned: %{!=: nil}}})
-query_filter(User, %{name: %{is_banned: %{==: nil}}})
-
-my_query = query_filter(User, %{name: "Billy"})
-query_filter(my_query, %{last_name: "Joe"})
+

query_filter brings convenience and shortens the boilterplate of ecto queries

Common filters available include:

  • preload - Preloads fields onto the query results
  • start_date - Query for items inserted after this date
  • end_date - Query for items inserted before this date
  • before - Get items with IDs before this value
  • after - Get items with IDs after this value
  • ids - Get items with a list of ids
  • first - Gets the first n items
  • last - Gets the last n items
  • limit - Gets the first n items
  • offset - Offsets limit by n items
  • search - Warning: This requires schemas using this to have a &by_search(query, val) function

You are also able to filter on any natural field of a model, as well as use

  • gte/gt
  • lte/lt
  • like/ilike
  • is_nil/not(is_nil)
query_filter(User, %{name: %{ilike: "steve"}})
+query_filter(User, %{name: %{ilike: "steve"}}, :last_name, :asc)
+query_filter(User, %{name: %{age: %{gte: 18, lte: 30}}})
+query_filter(User, %{name: %{is_banned: %{!=: nil}}})
+query_filter(User, %{name: %{is_banned: %{==: nil}}})
+
+my_query = query_filter(User, %{name: "Billy"})
+query_filter(my_query, %{last_name: "Joe"})
@@ -241,11 +241,11 @@

join_preload(query, associations)

import Ecto.Query
 Invoice
-|> join(:left, [i], assoc(i, :customer), as: :customer)
-|> join(:left, [i, c], assoc(c, :account), as: :account)
-|> join(:left, [i], assoc(i, :lines), as: :lines)
-|> preload([lines: v, customers: c, account: a], lines: v, customer: {c, [a: account]})
-|> Repo.all()

+|> join(:left, [i], assoc(i, :customer), as: :customer) +|> join(:left, [i, c], assoc(c, :account), as: :account) +|> join(:left, [i], assoc(i, :lines), as: :lines) +|> preload([lines: v, customers: c, account: a], lines: v, customer: {c, [a: account]}) +|> Repo.all()

@@ -253,9 +253,9 @@

join_preload(query, associations)

import EctoSparkles
 Invoice
-|> join_preload([:customer, :account])
-|> join_preload([:lines])
-|> Repo.all()
+
|> join_preload([:customer, :account]) +|> join_preload([:lines]) +|> Repo.all()
@@ -281,13 +281,13 @@

proload(query, qual \\ :left, associations)
-

AKA join_preload++. It's more powerful, but it does it with more (and different!) syntax.

e.g.

proload(query, activity: [
+

AKA join_preload++. It's more powerful, but it does it with more (and different!) syntax.

e.g.

proload(query, activity: [
   :verb, :boost_count, :like_count, :replied,
   # relations under object will have their aliases prefixed with object_, i.e.
   # :object_message, :object_post, :object_post_content
   # the original names will still be used for the associations.
-  object: {"object_", [:message, :post, :post_content]}
-])
+
object: {"object_", [:message, :post, :post_content]} +])

diff --git a/Exto.html b/Exto.html index e6e8ce45c3d..f0550e086d1 100644 --- a/Exto.html +++ b/Exto.html @@ -13,7 +13,7 @@ - + @@ -199,35 +199,35 @@

flex_schema(otp_app)

Adds additional associations dynamically from app config.

Reads config for the given OTP application, under the name of the current module. Each key maps to an Ecto.Schema function:

  • belongs_to
  • field
  • has_many
  • has_one
  • many_to_many

Each of these keys should map to a keyword list where the key is the -name of the field or association and the value is one of:

  • A type
  • A tuple of type and options (keyword list)

Example Schema:

defmodule My.Schema do
+name of the field or association and the value is one of:

  • A type
  • A tuple of type and options (keyword list)

Example Schema:

defmodule My.Schema do
   use Ecto.Schema
-  import Exto, only: [flex_schema: 1]
+  import Exto, only: [flex_schema: 1]
 
-  schema "my_table" do
+  schema "my_table" do
     field :name, :string # just normal schema things
-    flex_schema(:my_app) # boom! give me the stuff
-  end
-end

Example configuration:

config :my_app, My.Schema,
-  belongs_to: [
+    flex_schema(:my_app) # boom! give me the stuff
+  end
+end

Example configuration:

config :my_app, My.Schema,
+  belongs_to: [
     foo: Foo,                   # belongs_to :foo, Foo
-    bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer
-  ],
-  field: [
+    bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer
+  ],
+  field: [
     foo: :string,                # field :foo, :string
-    bar: {:integer, default: 4}, # field :foo, :integer, default: 4
-  ],
-  has_one: [
+    bar: {:integer, default: 4}, # field :foo, :integer, default: 4
+  ],
+  has_one: [
     foo: Foo,                             # has_one :foo, Foo
-    bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id
-  ]
-  has_many: [
+    bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id
+  ]
+  has_many: [
     foo: Foo,                             # has_many :foo, Foo
-    bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id
-  ]
-  many_to_many: [
+    bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id
+  ]
+  many_to_many: [
     foo: Foo,                         # many_to_many :foo, Foo
-    bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar
-  ]

This one won't work very well because we define foo and bar 5 + bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar + ]

This one won't work very well because we define foo and bar 5 times each, but I think you get the point.

Reading of configuration is done during compile time. The relations will be baked in during compilation, thus:

  • Do not expect this to work in runtime config.
  • You will need to rebuild all dependencies which use this macro when you change their configuration.
diff --git a/Import2Alias.CallerTracer.html b/Import2Alias.CallerTracer.html index 2240faa37c9..1752f5f203f 100644 --- a/Import2Alias.CallerTracer.html +++ b/Import2Alias.CallerTracer.html @@ -13,7 +13,7 @@ - + diff --git a/Import2Alias.Server.html b/Import2Alias.Server.html index 3702da45561..2886d102171 100644 --- a/Import2Alias.Server.html +++ b/Import2Alias.Server.html @@ -13,7 +13,7 @@ - + diff --git a/Import2Alias.html b/Import2Alias.html index fcae61902a6..26649cf2245 100644 --- a/Import2Alias.html +++ b/Import2Alias.html @@ -13,7 +13,7 @@ - + diff --git a/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html b/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html index 6460f5b93ea..b5f4d46fa78 100644 --- a/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html +++ b/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html @@ -13,7 +13,7 @@ - + diff --git a/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html b/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html index 4e04e140102..f4c90d2014a 100644 --- a/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html +++ b/LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.Bonfire.Account.New.html b/Mix.Tasks.Bonfire.Account.New.html index 2b16c242a76..73209f4f32b 100644 --- a/Mix.Tasks.Bonfire.Account.New.html +++ b/Mix.Tasks.Bonfire.Account.New.html @@ -13,7 +13,7 @@ - + @@ -143,7 +143,7 @@

Usage

-
mix bonfire.account.new [email@address]

You will be prompted for a password and an email if it was not provided.

+
mix bonfire.account.new [email@address]

You will be prompted for a password and an email if it was not provided.

diff --git a/Mix.Tasks.Bonfire.Deps.Compile.html b/Mix.Tasks.Bonfire.Deps.Compile.html index 677d4a8d898..853eb4898cb 100644 --- a/Mix.Tasks.Bonfire.Deps.Compile.html +++ b/Mix.Tasks.Bonfire.Deps.Compile.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.Bonfire.Localise.Extract.html b/Mix.Tasks.Bonfire.Localise.Extract.html index 1a1ccb61926..63de322b25b 100644 --- a/Mix.Tasks.Bonfire.Localise.Extract.html +++ b/Mix.Tasks.Bonfire.Localise.Extract.html @@ -13,7 +13,7 @@ - + @@ -137,7 +137,7 @@

-

Extracts translations by recompiling the Elixir source code.

mix gettext.extract [OPTIONS]

Translations are extracted into POT (Portable Object Template) files (with a +

Extracts translations by recompiling the Elixir source code.

mix gettext.extract [OPTIONS]

Translations are extracted into POT (Portable Object Template) files (with a .pot extension). The location of these files is determined by the :otp_app and :priv options given by Gettext modules when they call use Gettext. One POT file is generated for each translation domain.

It is possible to give the --merge option to perform merging diff --git a/Mix.Tasks.Bonfire.Release.html b/Mix.Tasks.Bonfire.Release.html index 8ed8ad4747c..1ba0f48e3c8 100644 --- a/Mix.Tasks.Bonfire.Release.html +++ b/Mix.Tasks.Bonfire.Release.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.Bonfire.Secrets.html b/Mix.Tasks.Bonfire.Secrets.html index 55aa6a49a89..aad77cd0e60 100644 --- a/Mix.Tasks.Bonfire.Secrets.html +++ b/Mix.Tasks.Bonfire.Secrets.html @@ -13,7 +13,7 @@ - + @@ -137,7 +137,7 @@

-

Generates secrets and prints to the terminal.

mix bonfire.secrets [length]

By default, it generates keys 64 characters long. +

Generates secrets and prints to the terminal.

mix bonfire.secrets [length]

By default, it generates keys 64 characters long. The minimum value for length is 32.

diff --git a/Mix.Tasks.Bonfire.User.Admin.Promote.html b/Mix.Tasks.Bonfire.User.Admin.Promote.html index 25371a20e50..f55e31cde0a 100644 --- a/Mix.Tasks.Bonfire.User.Admin.Promote.html +++ b/Mix.Tasks.Bonfire.User.Admin.Promote.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.Docs.Deps.html b/Mix.Tasks.Docs.Deps.html index e395c161bb0..3543b06d5b1 100644 --- a/Mix.Tasks.Docs.Deps.html +++ b/Mix.Tasks.Docs.Deps.html @@ -13,7 +13,7 @@ - + diff --git a/Mix.Tasks.Import2alias.html b/Mix.Tasks.Import2alias.html index 049feffa3de..e73381cb907 100644 --- a/Mix.Tasks.Import2alias.html +++ b/Mix.Tasks.Import2alias.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Changesets.html b/Needle.Changesets.html index b07354e908e..d2bc393d695 100644 --- a/Needle.Changesets.html +++ b/Needle.Changesets.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Form.html b/Needle.Form.html index 016063c867c..0c6d3eb094d 100644 --- a/Needle.Form.html +++ b/Needle.Form.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Migration.html b/Needle.Migration.html index da5b922509f..a1d9231000f 100644 --- a/Needle.Migration.html +++ b/Needle.Migration.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Mixin.html b/Needle.Mixin.html index 792865bdcc6..7b207400b17 100644 --- a/Needle.Mixin.html +++ b/Needle.Mixin.html @@ -13,7 +13,7 @@ - + @@ -151,16 +151,16 @@

Declaring a mixin table type

-
defmodule My.Mixin do
+
defmodule My.Mixin do
 
   use Needle.Mixin,
     otp_app: :my_app,
     source: "postgres_table_name"
 
-  mixin_schema do
+  mixin_schema do
     field :is_awesome, :boolean
-  end
-end
+
end +end
diff --git a/Needle.NotFound.html b/Needle.NotFound.html index 8e0af48a5e6..5079aebab85 100644 --- a/Needle.NotFound.html +++ b/Needle.NotFound.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Pointable.html b/Needle.Pointable.html index 1b3165a97bc..f583bdc0c35 100644 --- a/Needle.Pointable.html +++ b/Needle.Pointable.html @@ -13,7 +13,7 @@ - + @@ -148,9 +148,9 @@

source: "my_table", # default name of table in database table_id: "01EBTVSZJ6X02J01R1XWWPWGZW" # unique ULID to identify table -pointable_schema do +pointable_schema do # ... fields go here, if any -end

+end

diff --git a/Needle.Pointer.html b/Needle.Pointer.html index ded36a1145a..77b85343ecc 100644 --- a/Needle.Pointer.html +++ b/Needle.Pointer.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Pointers.html b/Needle.Pointers.html index e4e77ce12a4..6f4c4257794 100644 --- a/Needle.Pointers.html +++ b/Needle.Pointers.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Random.html b/Needle.Random.html index ef3d662e3e3..4195b852116 100644 --- a/Needle.Random.html +++ b/Needle.Random.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Table.html b/Needle.Table.html index c7737f0b82f..a30e5f791a4 100644 --- a/Needle.Table.html +++ b/Needle.Table.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Tables.html b/Needle.Tables.html index 2f25e2098dd..fc43e874f3d 100644 --- a/Needle.Tables.html +++ b/Needle.Tables.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.ULID.Migration.html b/Needle.ULID.Migration.html index ae07ffeace5..4479a3dd055 100644 --- a/Needle.ULID.Migration.html +++ b/Needle.ULID.Migration.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.ULID.html b/Needle.ULID.html index 63e41573a28..61a7472fb9a 100644 --- a/Needle.ULID.html +++ b/Needle.ULID.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Unpointable.html b/Needle.Unpointable.html index cbc6b99b175..1350722fc84 100644 --- a/Needle.Unpointable.html +++ b/Needle.Unpointable.html @@ -13,7 +13,7 @@ - + diff --git a/Needle.Virtual.html b/Needle.Virtual.html index a5daf1d5ca4..db01f5da81d 100644 --- a/Needle.Virtual.html +++ b/Needle.Virtual.html @@ -13,7 +13,7 @@ - + @@ -151,9 +151,9 @@

source: "my_table", # default name of view in database table_id: "01EBTVSZJ6X02J01R1XWWPWGZW" # valid ULID to identify virtual -virtual_schema do +virtual_schema do # ... `has_one`, `has_many`, or *virtual* fields ONLY go here. -end

+end

diff --git a/Paginator.Page.html b/Paginator.Page.html index 7c8e380897b..ba77ddfdb0b 100644 --- a/Paginator.Page.html +++ b/Paginator.Page.html @@ -13,7 +13,7 @@ - + diff --git a/Paginator.PageInfo.html b/Paginator.PageInfo.html index 1308a7605a9..bc1b5e45987 100644 --- a/Paginator.PageInfo.html +++ b/Paginator.PageInfo.html @@ -13,7 +13,7 @@ - + diff --git a/Paginator.html b/Paginator.html index c75a1585fd0..262609ff994 100644 --- a/Paginator.html +++ b/Paginator.html @@ -13,7 +13,7 @@ - + @@ -144,10 +144,10 @@

Usage

-
defmodule MyApp.Repo do
+
defmodule MyApp.Repo do
   use Ecto.Repo, otp_app: :my_app
   use Paginator
-end

+end

@@ -160,29 +160,29 @@

Example

-
defmodule MyApp.Repo do
+
defmodule MyApp.Repo do
   use Ecto.Repo, otp_app: :my_app
   use Paginator,
     limit: 10,                           # sets the default limit to 10
     maximum_limit: 100,                  # sets the maximum limit to 100
     include_total_count: true,           # include total count by default
     total_count_primary_key_field: :uuid # sets the total_count_primary_key_field to uuid for calculate total_count
-end

Note that these values can be still be overriden when paginate/3 is called.

+end

Note that these values can be still be overriden when paginate/3 is called.

Use without macros

If you wish to avoid use of macros or you wish to use a different name for -the pagination function you can define your own function like so:

defmodule MyApp.Repo do
+the pagination function you can define your own function like so:

defmodule MyApp.Repo do
   use Ecto.Repo, otp_app: :my_app
 
-  def my_paginate_function(queryable, opts \ [], repo_opts \ []) do
-    defaults = [limit: 10] # Default options of your choice here
-    opts = Keyword.merge(defaults, opts)
-    Paginator.paginate(queryable, opts, __MODULE__, repo_opts)
-  end
-end
+
def my_paginate_function(queryable, opts \ [], repo_opts \ []) do + defaults = [limit: 10] # Default options of your choice here + opts = Keyword.merge(defaults, opts) + Paginator.paginate(queryable, opts, __MODULE__, repo_opts) + end +end
@@ -317,36 +317,36 @@

paginate(queryable, opts, repo_opts)

Simple example -
query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id], select: p)
+
query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id], select: p)
 
-Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)

+Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)

Example with using custom sort directions per field

-
query = from(p in Post, order_by: [asc: p.inserted_at, desc: p.id], select: p)
+
query = from(p in Post, order_by: [asc: p.inserted_at, desc: p.id], select: p)
 
-Repo.paginate(query, cursor_fields: [inserted_at: :asc, id: :desc], limit: 50)

+Repo.paginate(query, cursor_fields: [inserted_at: :asc, id: :desc], limit: 50)

Example with sorting on columns in joined tables

-
from(
+
from(
   p in Post,
   as: :posts,
-  join: a in assoc(p, :author),
+  join: a in assoc(p, :author),
   as: :author,
-  preload: [author: a],
+  preload: [author: a],
   select: p,
-  order_by: [
-    {:asc, a.name},
-    {:asc, p.id}
-  ]
-)
+  order_by: [
+    {:asc, a.name},
+    {:asc, p.id}
+  ]
+)
 
-Repo.paginate(query, cursor_fields: [{{:author, :name}, :asc}, id: :asc], limit: 50)

When sorting on columns in joined tables it is necessary to use named bindings. In +Repo.paginate(query, cursor_fields: [{{:author, :name}, :asc}, id: :asc], limit: 50)

When sorting on columns in joined tables it is necessary to use named bindings. In this case we name it author. In the cursor_fields we refer to this named binding and its column name.

To build the cursor Paginator uses the returned Ecto.Schema. When using a joined column the returned Ecto.Schema won't have the value of the joined column @@ -361,32 +361,32 @@

paginate(queryable, opts, repo_opts)

Example -
from(
+
from(
   p in Post,
   as: :posts,
-  join: a in assoc(p, :author),
+  join: a in assoc(p, :author),
   as: :author,
-  join: c in assoc(a, :company),
+  join: c in assoc(a, :company),
   as: :company,
-  preload: [author: a],
+  preload: [author: a],
   select: p,
-  order_by: [
-    {:asc, a.name},
-    {:asc, p.id}
-  ]
-)
-
-Repo.paginate(query,
-  cursor_fields: [{{:company, :name}, :asc}, id: :asc],
-  fetch_cursor_value_fun: fn
-    post, {{:company, name}, _} ->
+  order_by: [
+    {:asc, a.name},
+    {:asc, p.id}
+  ]
+)
+
+Repo.paginate(query,
+  cursor_fields: [{{:company, :name}, :asc}, id: :asc],
+  fetch_cursor_value_fun: fn
+    post, {{:company, name}, _} ->
       post.author.company.name
 
     post, field ->
-      Paginator.default_fetch_cursor_value(post, field)
-  end,
+      Paginator.default_fetch_cursor_value(post, field)
+  end,
   limit: 50
-)
+
)
@@ -441,10 +441,10 @@

cursor_for_record(record, cursor_fields, fe Example

-
iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1}, [:id])
+
iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1}, [:id])
 "g3QAAAABZAACaWRhAQ=="
 
-iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1, name: "Alice"}, [id: :asc, name: :desc])
+iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1, name: "Alice"}, [id: :asc, name: :desc])
 "g3QAAAACZAACaWRhAWQABG5hbWVtAAAABUFsaWNl"
@@ -483,10 +483,10 @@

default_fetch_cursor_value(schema, field) Example

-
iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1}, :id)
+
iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1}, :id)
 1
 
-iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1, address: %Paginator.Address{city: "London"}}, {:address, :city})
+iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1, address: %Paginator.Address{city: "London"}}, {:address, :city})
 "London"
diff --git a/Releaser.Git.html b/Releaser.Git.html index f32ea5ff6b7..fdf0e2c9f17 100644 --- a/Releaser.Git.html +++ b/Releaser.Git.html @@ -13,7 +13,7 @@ - + diff --git a/Releaser.Publish.html b/Releaser.Publish.html index 54129e21653..f8c13b43b04 100644 --- a/Releaser.Publish.html +++ b/Releaser.Publish.html @@ -13,7 +13,7 @@ - + diff --git a/Releaser.Tests.html b/Releaser.Tests.html index e506334bc8c..b75b9517158 100644 --- a/Releaser.Tests.html +++ b/Releaser.Tests.html @@ -13,7 +13,7 @@ - + diff --git a/Releaser.VersionUtils.html b/Releaser.VersionUtils.html index fc63b4fe014..bf7d2ba5e36 100644 --- a/Releaser.VersionUtils.html +++ b/Releaser.VersionUtils.html @@ -13,7 +13,7 @@ - + diff --git a/UserAuthLiveMount.html b/UserAuthLiveMount.html index ddc67161433..29b022026be 100644 --- a/UserAuthLiveMount.html +++ b/UserAuthLiveMount.html @@ -13,7 +13,7 @@ - + diff --git a/Voodoo.html b/Voodoo.html index 2d86537384c..5e6fb1a1ba9 100644 --- a/Voodoo.html +++ b/Voodoo.html @@ -13,7 +13,7 @@ - + @@ -206,14 +206,14 @@

def_reverse_router(name, opts)

Generates a reverse router function with the given name based upon a compiled(!) phoenix router module.

Must be used outside of the router module, or else the router won't -be compiled yet and we won't be able to look up the routes.

Generated function wraps the existing phoenix helpers.

defmodule MyAppWeb.Router do
+be compiled yet and we won't be able to look up the routes.

Generated function wraps the existing phoenix helpers.

defmodule MyAppWeb.Router do
   use MyAppWeb, :router
   # ...
-end
-defmodule MyAppWeb.Router.Reverse do
-  import Voodoo, only: [def_reverse_router: 2]
+end
+defmodule MyAppWeb.Router.Reverse do
+  import Voodoo, only: [def_reverse_router: 2]
   def_reverse_router :path, for: MyAppWeb.Router
-end
+
end
diff --git a/Zest.Faking.html b/Zest.Faking.html index ac36b3817a2..07d96153942 100644 --- a/Zest.Faking.html +++ b/Zest.Faking.html @@ -13,7 +13,7 @@ - + diff --git a/Zest.html b/Zest.html index 29683b8d879..195d3586627 100644 --- a/Zest.html +++ b/Zest.html @@ -13,7 +13,7 @@ - + diff --git a/api-reference.html b/api-reference.html index 68652ab0295..8bc09dac57c 100644 --- a/api-reference.html +++ b/api-reference.html @@ -13,7 +13,7 @@ - + @@ -2510,6 +2510,13 @@

+ +
@@ -2540,6 +2547,13 @@

+
+
@@ -2721,6 +2735,13 @@

+
+
@@ -2728,6 +2749,13 @@

+
+
@@ -2770,6 +2798,13 @@

+
+
@@ -2784,6 +2819,13 @@

+
+
@@ -2798,6 +2840,13 @@

+
+
@@ -2833,6 +2882,13 @@

+
+
@@ -2861,6 +2917,13 @@

+
+
@@ -3360,6 +3423,55 @@

+
+ + + + + + +
@@ -3367,6 +3479,13 @@

+
+
diff --git a/architecture.html b/architecture.html index 3ac17af0d39..970a1b46f34 100644 --- a/architecture.html +++ b/architecture.html @@ -13,7 +13,7 @@ - + @@ -164,9 +164,9 @@

Code Structure

-

The code is broadly composed namespaces such as these, many of which are packaged as "extensions" which live in separate git repositories, which are included in the app by way of mix dependencies:

  • Bonfire.* - Core application logic (very little code).
  • Bonfire.*.* - Bonfire extensions (eg Bonfire.Posts) containing mostly context modules, APIs, and routes
  • Bonfire.Data.* - Extensions containing database schemas and migrations
  • Bonfire.UI.* - UI component extensions
  • Bonfire.*.*.LiveHandler - Backend logic to handle events in the frontend
  • Bonfire.Editor.* (pluggable text editors, eg. CKEditor for WYSIWYG markdown input)
  • Bonfire.GraphQL.* - Optional GraphQL API
  • Bonfire.Federate.* - Optional Federation hooks
  • ActivityPub - ActivityPub S2S models, logic and various helper modules
  • ActivityPub.Web - ActivityPub S2S REST endpoints, activity ingestion and push federation facilities
  • ValueFlows.* - economic extensions implementing the ValueFlows vocabulary

Contexts are were we put any core logic. A context often is circumscribed to providing logic for a particular object type (e. g. Bonfire.Posts implements Bonfire.Data.Social.Post).

All Bonfire objects use an ULID as their primary key. We use the Needle library (with extra logic in Bonfire.Common.Needles) to reference any object by its primary key without knowing what type it is beforehand. This is very useful as it allows for example following or liking many different types of objects (as opposed to say only a user or a post) and this approach allows us to store the context of the like/follow by only storing its primary key (see Bonfire.Data.Social.Follow) for an example.

Context modules usually have one/2, many/2, and many_paginated/1 functions for fetching objects, which in turn call a query/2 function. These take a keyword list as filters (and an optional opts argument) allowing objects to be fetched by arbitrary criteria.

Examples:

Users.one(username: "bob") # Fetching by username
-Posts.many_paginated(by: "01E9TQP93S8XFSV2ZATX1FQ528") # List a page of posts by its author
-EconomicResources.many(deleted: true) # List any deleted resources

Context modules also have functions for creating, updating and deleting objects, as well as hooks for federating or indexing in the search engine.

Here is an incomplete sample of some of current extensions and modules:

Additional extensions, libraries, and modules

  • Bonfire.Common and Bonfire.Common.Utils (stuff that gets used everywhere)
  • Bonfire.Application (OTP application)
  • Bonfire.Me.Characters (a shared abstraction over users, organisations, categories, and other objects that need to have feeds and behave as an actor in ActivityPub land)
  • Bonfire.Federate.ActivityPub and ActivityPub (ActivityPub integration)
  • Bonfire.Search (local search indexing and search API, powered by Meili)
  • Bonfire.Mailer, Bonfire.Me.Mails, and Bamboo (for rendering and sending emails)
  • Bonfire.Files, Waffle, TreeMagic and TwinkleStar (for managing uploaded content)
  • Bonfire.GraphQL (GraphQL API abstractions)
  • Queery and Bonfire.Repo.Query (Helpers for making queries on the database)
  • Bonfire.Repo (Ecto repository)
  • Exto (to extend DB schemas in config, especially useful for adding associations)
  • AbsintheClient (for querying the API from within the server)

+

The code is broadly composed namespaces such as these, many of which are packaged as "extensions" which live in separate git repositories, which are included in the app by way of mix dependencies:

  • Bonfire.* - Core application logic (very little code).
  • Bonfire.*.* - Bonfire extensions (eg Bonfire.Posts) containing mostly context modules, APIs, and routes
  • Bonfire.Data.* - Extensions containing database schemas and migrations
  • Bonfire.UI.* - UI component extensions
  • Bonfire.*.*.LiveHandler - Backend logic to handle events in the frontend
  • Bonfire.Editor.* (pluggable text editors, eg. CKEditor for WYSIWYG markdown input)
  • Bonfire.GraphQL.* - Optional GraphQL API
  • Bonfire.Federate.* - Optional Federation hooks
  • ActivityPub - ActivityPub S2S models, logic and various helper modules
  • ActivityPub.Web - ActivityPub S2S REST endpoints, activity ingestion and push federation facilities
  • ValueFlows.* - economic extensions implementing the ValueFlows vocabulary

Contexts are were we put any core logic. A context often is circumscribed to providing logic for a particular object type (e. g. Bonfire.Posts implements Bonfire.Data.Social.Post).

All Bonfire objects use an ULID as their primary key. We use the Needle library (with extra logic in Bonfire.Common.Needles) to reference any object by its primary key without knowing what type it is beforehand. This is very useful as it allows for example following or liking many different types of objects (as opposed to say only a user or a post) and this approach allows us to store the context of the like/follow by only storing its primary key (see Bonfire.Data.Social.Follow) for an example.

Context modules usually have one/2, many/2, and many_paginated/1 functions for fetching objects, which in turn call a query/2 function. These take a keyword list as filters (and an optional opts argument) allowing objects to be fetched by arbitrary criteria.

Examples:

Users.one(username: "bob") # Fetching by username
+Posts.many_paginated(by: "01E9TQP93S8XFSV2ZATX1FQ528") # List a page of posts by its author
+EconomicResources.many(deleted: true) # List any deleted resources

Context modules also have functions for creating, updating and deleting objects, as well as hooks for federating or indexing in the search engine.

Here is an incomplete sample of some of current extensions and modules:

Additional extensions, libraries, and modules

  • Bonfire.Common and Bonfire.Common.Utils (stuff that gets used everywhere)
  • Bonfire.Application (OTP application)
  • Bonfire.Me.Characters (a shared abstraction over users, organisations, categories, and other objects that need to have feeds and behave as an actor in ActivityPub land)
  • Bonfire.Federate.ActivityPub and ActivityPub (ActivityPub integration)
  • Bonfire.Search (local search indexing and search API, powered by Meili)
  • Bonfire.Mailer, Bonfire.Me.Mails, and Bamboo (for rendering and sending emails)
  • Bonfire.Files, Waffle, TreeMagic and TwinkleStar (for managing uploaded content)
  • Bonfire.GraphQL (GraphQL API abstractions)
  • Queery and Bonfire.Repo.Query (Helpers for making queries on the database)
  • Bonfire.Repo (Ecto repository)
  • Exto (to extend DB schemas in config, especially useful for adding associations)
  • AbsintheClient (for querying the API from within the server)

@@ -184,7 +184,7 @@

Naming guidelines

-
  • Module names mostly begin with Bonfire. unless they belong to a more generic library (eg Needle or ValueFlows)
  • Everything within an extension begins with the context name and a . (eg Bonfire.Social.Migrations)
  • Database schemas should be named in the singular (eg Bonfire.Data.Social.Post)
  • Context modules are named in plural where possible (eg Bonfire.Posts)
  • Other modules within a context begins with the context name and a . (eg Bonfire.Posts.LiveHandler)
  • Modules use UpperCamelCase while functions use snake_case
  • Acronyms in module names should be all uppercase (eg Bonfire.Social.APActivities)

+
  • Module names mostly begin with Bonfire. unless they belong to a more generic library (eg Needle or ValueFlows)
  • Everything within an extension begins with the context name and a . (eg Bonfire.Social.Migrations)
  • Database schemas should be named in the singular (eg Bonfire.Data.Social.Post)
  • Context modules are named in plural where possible (eg Bonfire.Posts)
  • Other modules within a context begins with the context name and a . (eg Bonfire.Posts.LiveHandler)
  • Modules use UpperCamelCase while functions use snake_case
  • Acronyms in module names should be all uppercase (eg Bonfire.Social.APActivities)

diff --git a/bonfire-flavoured-elixir.html b/bonfire-flavoured-elixir.html index 0d4db208186..d4171b6b442 100644 --- a/bonfire-flavoured-elixir.html +++ b/bonfire-flavoured-elixir.html @@ -13,7 +13,7 @@ - + @@ -141,33 +141,33 @@

Arrows

The Elixir |> ("pipe") operator is one of the things that seems to get people excited about elixir. Probably in part because you then don't have to keep coming up with function names. Unfortunately it's kind of limiting. -The moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.

Not any more! By simply inserting ... where you would like the value to be inserted, Arrows will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. Arrows was inspired by an existing library. Here is part of the test suite in lieu of examples:

defmodule ArrowsTest do
+The moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.

Not any more! By simply inserting ... where you would like the value to be inserted, Arrows will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. Arrows was inspired by an existing library. Here is part of the test suite in lieu of examples:

defmodule ArrowsTest do
   use ExUnit.Case
   use Arrows
 
-  def double(x), do: x * 2
-  def double_fst(x, _), do: x * 2
-  def double_snd(_, x), do: x * 2
-  def add_snd_thd(_, x, y), do: x + y
-
-  test "|>" do
-    assert 4 == (2 |> double)
-    assert 4 == (2 |> double())
-    assert 4 == (2 |> double(...))
-    assert 8 == (2 |> double(double(...)))
-    assert 4 == (2 |> double_fst(1))
-    assert 4 == (2 |> double_fst(..., 1))
-    assert 8 == (2 |> double_fst(double(...), 1))
-    assert 4 == (2 |> double_snd(1, ...))
-    assert 8 == (2 |> double_snd(1, double(...)))
-    assert 3 == (2 |> add_snd_thd(1, ..., 1))
-    assert 4 == (2 |> add_snd_thd(1, ..., ...))
-    assert 6 == (2 |> add_snd_thd(1, ..., double(...)))
-    for x <- [:yes, 2, nil, false] do
-      assert {:ok, x} == (x |> {:ok, ...})
-    end
-  end
-end

A few little extra features you might notice here:

  • You can move the parameter into a subexpression, as in 2 |> double_fst(double(...), 1) where double will be called before the parameter is passed to double_fst.
  • You can use ... multiple times, substituting it in multiple places.
  • The right hand side need not even be a function call, you can use any expression with ....

+ def double(x), do: x * 2 + def double_fst(x, _), do: x * 2 + def double_snd(_, x), do: x * 2 + def add_snd_thd(_, x, y), do: x + y + + test "|>" do + assert 4 == (2 |> double) + assert 4 == (2 |> double()) + assert 4 == (2 |> double(...)) + assert 8 == (2 |> double(double(...))) + assert 4 == (2 |> double_fst(1)) + assert 4 == (2 |> double_fst(..., 1)) + assert 8 == (2 |> double_fst(double(...), 1)) + assert 4 == (2 |> double_snd(1, ...)) + assert 8 == (2 |> double_snd(1, double(...))) + assert 3 == (2 |> add_snd_thd(1, ..., 1)) + assert 4 == (2 |> add_snd_thd(1, ..., ...)) + assert 6 == (2 |> add_snd_thd(1, ..., double(...))) + for x <- [:yes, 2, nil, false] do + assert {:ok, x} == (x |> {:ok, ...}) + end + end +end

A few little extra features you might notice here:

  • You can move the parameter into a subexpression, as in 2 |> double_fst(double(...), 1) where double will be called before the parameter is passed to double_fst.
  • You can use ... multiple times, substituting it in multiple places.
  • The right hand side need not even be a function call, you can use any expression with ....

@@ -181,14 +181,14 @@

Untangle provides replacements for the macros in Elixir's Logger module and the IO.inspect function to output code location information. The first argument will be inspected and the second (where provided) will be used as a label:

iex(1)> import Untangle
 Untangle
-iex(2)> debug(:no, "the answer is") # log at debug
-11:19:09.915 [debug] [iex:2] the answer is: :no
+iex(2)> debug(:no, "the answer is") # log at debug
+11:19:09.915 [debug] [iex:2] the answer is: :no
 :no
-iex(3)> dump(%{a: :map}, "it") # inspect something on stdout
-[iex:3] it: %{a: :map}
-%{a: :map}

When used in a code file, the location information becomes slightly more useful, e.g.:

[lib/test_untangle.ex:15@Test.Untangle.example/2] Here's an empty list: []

You may also notice from the iex output that it returns its first argument. This makes it ideal for -inserting into a pipeline for debugging purposes:

do_something()
-|> debug("output of do_something/0")

When you are done debugging something, the location of the debug statement is already in the output so you know where to remove it or comment it out! Bliss!

You will find the codebase uses this a lot, though the debugs are frequently commented out. Just uncomment the ones that would help you with a particular debugging task and you're off.

+iex(3)> dump(%{a: :map}, "it") # inspect something on stdout +[iex:3] it: %{a: :map} +%{a: :map}

When used in a code file, the location information becomes slightly more useful, e.g.:

[lib/test_untangle.ex:15@Test.Untangle.example/2] Here's an empty list: []

You may also notice from the iex output that it returns its first argument. This makes it ideal for +inserting into a pipeline for debugging purposes:

do_something()
+|> debug("output of do_something/0")

When you are done debugging something, the location of the debug statement is already in the output so you know where to remove it or comment it out! Bliss!

You will find the codebase uses this a lot, though the debugs are frequently commented out. Just uncomment the ones that would help you with a particular debugging task and you're off.

diff --git a/bonfire_umbrella.epub b/bonfire_umbrella.epub index 019685ca7f71e2bfffc62215bc0049c1a19ba0da..238edc3d32b3c37eb63aa899cc0d9b9ed53559a4 100644 GIT binary patch delta 346955 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ⅇm$X8 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
  • Dqi-5guKWP3>9?F~` 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 z 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]ewF$)Cj$goPg5;mHc{tb4SpBH_Zr!S~ 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
    {t#?rX-;1#f(S zU(~|bmnYw7+m7~`-d|e}&%uw{Wbcd8JNr}FRy zlXTqE?oQFxTa%ywL@7s4 z*~Kjuxuxez&oLUjg3C&TM{$o)joG^o0tDM7g8SmMN-IKCWdyHfZoPT54Ac^56vXY8 z?Mywi$Cf~JWDtk2*}Q2&>u57;?6aCh#iO>c3zax14hkrg9F;0d+fgb+FW+kyiy@od zt$nSh(jfr&zo^%>R-2p*ViY8F#!tUa&qEdsW!ixiVHqLfmq-9|$bY<+66s-=9(bmH(cwf? zlM|V^nP>nNl8U_>Kja5tZ)C=3<-nwI$5`h=#z+-fQl&Hfiqd~+_%Ky6Vrt@rb(~qs zLV>WkXW8H!yrbAD_gpffjuGe`C0s)MnVOwW846$%%+a@916ubb1TOkW0q7^wdH$XG z-{xrA3-G_NW+ys0NMw_o4+_#*#IUg3TH22rFxUY=UNlF{leh8O82u&V!XXXG_#h)^ zxvEpqT;xxb-PsF$(cNsC~qzpncBvU|IHKHUsGa}2RzwJAx(woN;FJbBvR zm-6a@06^hI^C)6Dv7;=m{;}k|T7{fLD2G~H`zjFp!1wCjnzqd^W z>~weJonC@$YY%ZFWHvp3*6(khx4v~uf6TrLC|5Ax?)26H?0mu27GS3Uu+qhDvv8;Z zv3eTwD}O=6MsVB~j$k$Tf0%RyNJ(Z*d+09eOrf3Rt8v*>jn<;JGa8-siw=-@zc`Np9*_}VhTED+ns{m;1oLx* zGf&N^Pk*3qQ(2d;RBo6QCZll=o{lj11?$jFZH~X@5Kvig7XO(uJU67La9t-=nfI+s z^6=o8!8%OdMbzUpSu2dWiMCy`T?yTt>pw}9O{taZK}wim3<%eSy-AWNzhanw2o)F1 z-`JyFZb2yl@Y2*L=X9I-`8f~OxzoGye1k6dHVPqiCp9kyqBl^4QiMK38LvX{HVc9k zz;+T!uA3+E=%F!Eij&+|M9%A|eS^sdrX(oyNl;UlCj;?JsaS`{t_$Ekl7nO{?0E2s z(JUg0vW6HdN)cz>{S%fn@7Y?dI~E#tQSYqFYeGH&v+gv-ZE(Y7&-+2lt~M#P*C}6$ z6lyXxs?iGN$#S!2RY@KQ{w9^fg^b%-uOb=3Sx%$^cauLc41teNI%W{Dyh z>mHjyB?%4epJXh0;}tXO^hBfH>1L3V|D93SP*QYs&2hs&;sG=H`3~@g`81~tsvL31 z_TP$tz|0WK8oU6^*Lo5mzf77(-_cHn&(jrS+#n4j0W2Tn?9fpWmX=$ryru?pE50QW zTMk;grxt^FTXL{5ZRenk>R}e=s2`T(rk!9=YXRm)DGp&Xc3hc1GfAbhlK_@nXDAaS zczVivaCn2RwAe#uF=OM|cJSAENF1#WD1FZ0u2a& z>HD;1mbs}A8_oT5?(+ix$H`2ug*;Uv0r^vgaDla0d7*~ z=j26dySHMXF5j~xv$L%4vuht0Q}_RKmS1b${RqK7jKd!xxY-g|CK9z6ur0d2YCP2H z`b*ovV09p$Z1Ye!0Y{3AX%pmk5uj%&*Hl6|kxU};rglpF`H$yo*XIsi&$!aS z57B7Vb2J=N$=L}|kXKNoct9H$J53RZt$w+F^h0zdd&`za;lU>!ac2`XWKhEqEQH_1cQz~3X(&^OT=2V)4c6j^&eJvq)) z_4bh|(V@0Wi}}GVR6HF+RDebOEH{Jw#=fFav=%MD`xnkZPg^O{oOBUM0R)8Lc==){ z>2-a0UXIaTMj^2%-mB_oWndJd-U%uJO4Jiy>s?#ihIX(;U&|st4MVX#sBeMIg4`uA zGqCn@^eX|v+BYf7w~s7{Mp6xVi=;%jwkhCD?2Fz}Zbgw%Pv90Z441s657YLrPVe!t zmpiTla#o~<|3QiN*^qR9@+m_(kfGNqLoY-q9SfE7SsdqUd-(Vv7v;gN0kV~DwWCJu z`P_8oLbQ#Jr_yP25&W1Bs%o%H>#L29qrkvkNv#R*g7MGjWQb@NA`R0nn6xDhEhLLL7G0AOei-bcmbAL zq-Q#Uk5AHV^mewsu)zVdhjOUH>1JT);6&13^@&eQI3Kl4BF?S-Ol&37-5bB~kLNG7 zx|+Xqawp0aP(51!@tIBsaI?*_Zs)kD3Q|F^Ti4W(vPgOC$s*p5O?K)K#!7DbK_@u- z0HIJ{tPb^1+-uNkMd8zUbLc``z8@11j8SfXW+aiJeTx|%mVu*nBP)_KvUDPBgKnAdRqRjm99q1mPEZI*c&kebqlqpAnRttJn*PktQbOd z35bzSM@N~L(PLvCxI*&OoW$2ks6Jl30&TMu^oNhPsrk%Lq!&Yi57%Rpwq(N=>j~99^ zbAf@#lpHkf@z0k*Ef*4fLCXW6uIMcmosb6y+@rUXeYmp415vn(I8QCJ8GU`1*8aI= zcM~9V>sl(JaHHGgNbOv4;HxR-3!0*whIv5;FvAz@sMU6Q>&lv(GaUFi-g9!o+0`|) z#i`KGzAsm}@{Q`+eEd>P^ZAPk-R!%S;ofo#_9zyBX&Q)m;#RolA8LD~dknD+RPfC1 ziKmDmnnte=FRoH+H0_RjD#lLYT$w7JRGn+j=zKL^GgJb{3HZ6nTdZ0;m9%OpT!jwg zVW6g|HJQ`ZI9w_tg4ZV8L;bI@V&!$#*8Wr@$))PvuL>7&jOs*u1}S=IHS$wo zJt`}CIvUcc>IZcH#mrcU+-0UnC$p0!LL-A2@ceR*qiIBB#d;YS{yBVkw2e~``Z`!^ z&@nBQBQXmJP`5mZnIL_sEOqH0PV8)ItPUeGkD zm{CK=CU=glrY^ScX9??vug_ZS#_(LT{l@c#TvF5k>`%evLDHL*b&vbYFd>Kfv&o*I z6kMT}Fv-U1Usepk!KAoEJa?w~D-KZTh%6J2_FFwBv4D&NJ%)*6X51-m@A`E&ZS8K{ zxPKuO7-U61WY6dF+r3EW$j!|`*+thuD)aRED zpFe2=n3(i?D(MRlGowvq&tEwRx^CRJ96av*Z;N(kQF#Mj%C_=Bq-wO60`P(fVoT+G zbG``Zp|05Y45Vsf6ZvXTj6Cb>mQ<_uTWr?Xi2{AGvkc{W&Fj8vB0a=F;sdPTwf1Y; zFmj$3TVbd$N9*d1+_d*q*8=6sP`2v`1g^{gwnI;yvKlh`HH=` z_01Y~!*2w`>1fKkYD~QrZ#}=79x=XzQW+59*c-RUA5I%(rwztY2p%*AA^BO@Ft%mM zv;ZXf4v8y%us{s0=>5Q;r`TzA z!dlnsYs3U){)0iQC072xpznCXl1(>K4>@f(45wspAGYT_=v~P@a(Mw?muq>siOa`Y ztm*pI!({52=?;y|jPDSM!OKO*q=s`FDs$b2 z{f225sz6xmrD&Ts9vRj9V4Ro8Gg{99X6rW|aUW(kxHL0G~c@B>0!r*-&%1M_L z+-F0%6CywpVzyAcdJ5#O9TKmO+_#0~z0mY=L|U8>wP}TyjDRjpk7Lty%a#XgEj_Zy z&*mM|y(}KUa!~P~4_D+3h)UR7$;D$%5MUY?L7PoeXOOhFhpTmE-9toa|L?NFge=e7 z6`oUP$)W*wgv>&&=A;dx1~s#Ga?5qp)9vCD)^Ia?^`I@xY1-n>#peMtTM1>(nPb*z zDomr%G9z{Paz=S(^!k&XC?iyD1e2LEdQW?dGFqBU%J1oo!0zOdNF8`X5L-9(3(9VcvQ>UCA}kjjv)`*FLNbOkg^is zr9RPrlcbHad-C4Ot)e1<#E3hMD2J6MDUj{hyE&=6Lpy_QXZpvPupb_G;a?qDcYlA5 zq!S%oSqQ3|531B&6FLxu6To?TJ(xmYH4mHOEIfJ)iFr-hf$*UuW-4^}vK-|NINSDg z2%E>`Vvm3`&s>4B2`be&yDUf8CdkGJcgF)`wKZf$blY*Y zI3=w;Mg^ILS%vwIU2j~h1}K<#C;u|CFU|&*KE~%roI3M&%mn&bC}0FKHE4~lgSdi} zL>~%4hS)+5)u5PHo@x51rG{vflW!+C+i&FPIrc_qPI3D{_JpT&+qN2F!KkTD|90yJ zG0#H(sT-lxX3YNY9%N=i4!hknA=Wlge-8{wu3U$I4+2#_i1T?n(9}Q`+Rs>NW`2LV zxlPAl;^`DpHgNv94-m36FlcQ(o7UwH(LBsi*FI#|qp9Nn*<9z>YU^&c2oG=ht=P_R zVfOUa3 z36^^XH|L6h4})o)IgxMoM7O`YCIVtdl!_MW_c5t!OPKM%I$(w0WWOQrwm^%ib1oIv zW5k9^cH%|5i@~`b(0wT0^7W6I#YATu zsSmqJq@IA8yTt|&i~zmUx6F2W_d8rQopauG8(;BGyZKDcjgg-7A7)B9IKMU^o^(4& zvTa?Oers`}D*$#UpO-jKl7!@tJ&OnXJO9q|JMwe0`7Gt&->bA;IJPMe_X3U@-hctH zH3|MB+KYi}#HzZ;!n3HZ{1aa?cYhUXhWw3zqjhiSbtE>)Wr^iYkG&A?CQN^AHy0 zX;ihV(0W#bfp>vV8M=`HOacKLovB%v=lM!x`VgMT4 z_W+Qc#s1KOWe*rSoma4Nq(9TjS`*Ee^ns?N{nMa*2M@NpFg=$#@r+&9TxSNH9kEG8 zOjN&D&-&lx8PB>hI0Pj(2p6fC_|GTTGFTFC7q(Q>MMRF^qI(@Da(2d7VSKyXIp1{x z)=Qu@n}QY(j6^Qqzk-o?I<3&QQ2>I^-*r%44jh39GKp?Yb>b^83Yu4s&h2Tx5ZBGW z2^(Xk$oL}cq0gKAG`_+AN14l*v|IX(7W(W9GZ_UVf@)+=Uc%0hFRfON0vk-t?gkk( zOkjgJ1QpjXjNqb)L3mmE%Mr@&&*aFVHO^} z;_fKW@Hy+FflFS+AVjF9jam_5_CBW}{kF1fowI700^<%+4Yc}RyuS9eN3XqTVm9A8;XY+-jv2Iol2DAg=;nSn0=heZNM zG*znB9!ebR)Gh`i6!4unaN?4A;L5qGR6rlaKqj}v1L3!hbFR@zV?Gfp}(UQcVE4FGB zg6Vh&6}uvCqVdGIS#C7g%Mj92&+)-oykqEC};zN4^C zQp}U5S7ekEx8kET#m9+h_0E*E%Djy)eSKzO{(fwV;j0=bWsgf8>~$`<97UpF zefE%W{>HaQ&W)ma*(#z&VS1=O98f=n9Md$1|j;anc}9(~fjBuhH@Av@Bx->bc_ z7*Y9&2e{}dgI{aH&2Wd88|mjuM%D9_DRv!EIVMq$zf_wd#;6tWbye`2rLtRu&YfR3 z2}FL4b12hwioKuVOcMdx8M>5OqHz@Y{?xOeH9BTx^1nCTF5UIE){@y>gZ~V+Z|<){ zW=@Syc(&#^qw~zaLHId~fprO_7MjEp`G6ArX3A9vuj9)9?PisaARv^SzLLoP0+K~; ze{ZB&c-fW5SGsfP4Dt;Vou9nM7R5%yf);Rc^T6u)_!TyPmGccS@D!JAD(t`e^6_Qm z!Oq^KU{JVvL}d^b7N@MT-wAB4{<6~;GUNwr@7_`_7UlYtQtsGfIhSeCezA`E=}BLM#~shpYkXb zUAI>MTm4VAKDL3or zg#yx#025IV4(AMlwv$j}jZ&-N0}|CVL9S_sxuUpIC?g339IzDlIHTE$rf?Vpj{?6p z*3KXV809X-E>TlLlgThtms!Kw$V6cEwai&l2g07y`5^(w!eKO}O0n6=G0zl;X#Po= z9j`Zp$eAr6Xd(fLYnwuBh^fgkZc;{&+71+z9I?_XUrot4Th2p4F59pjsF90a&R&jza8Ww`6lTk1!J+%bR>@)OZElgR;4x{w;clWMid4b>SF^s&m_U1Yx2+&tQZGMW08FcwMGm;0hh+3Q7)!8!<7mFSNn8s(3?V#h69 zFjdna;#p-y)eFicI7+Nx_+wG8@ePs*->I;zaa6MpL&bO0t7qRx$KJIQy5oz=X~Apj zQ7Hfug;L{9ugEzOe1;$CG9knB*s(WyvCerX3!w&mez=Y{(vblH7!Dw?zhqcYKG@4h zQ#sOEhW6FYnkuqQ88_n9990w+4qLJ#Y%OaHohW<#r|z{AWS%DVMNzbj>jOg?yYnVm zCejDdn1{_VJP*P>PlCh_O;z8I@|iD-@J0bB0&PN$(_}ZidUc+QpoJ@m~kgg zz$%qTUZQ;6I4Kxgl#V&?1ItfW^&RP*W_P&(2CUZfB9#Y8USNwA#70`j*O?);p{)_j zAtyx9>)CI!w@0fe!@g@w)C_^>cbVXx6c8jCVN-~*yTOjsX<8r$%%h~R0gK*opuhkb zOAIRB#zpfe++R`R?k7C_?sB@y5}Do1psq;_<%{w~DPryP>i7S0pxCJW-1Ik1dl6+r zmcQx;yO#<{OQo3t%+GShl zq+Ga!NE>K4qDHlKr7c!nrnsfCSN;Ifx^d|Oy{7ouUG4{ij$NXHswaBmhnRd}G4;=F zD=yL-ws}iiOeYO~H;KKYGGPz~9{jlj{BmLON99w3r7CV_(KUbnp03B z%Ot=^UT&O#dtN&87k?)+oW>{Htf$&*(;_v)Vp%h=GG}vUW6wlu@R+a=VBG#jrV{+| zQRKWQGfzbP;va~0*(w>28<*lKq2EVzpkms6~|xKt0O~hSW+r1 zx$Mw%1~wmm=mW*@13a4}%dU?UwiYH8O)#k&lW~mEwmcmk-w3N~5iiAfx;=e|Gyy+E zP4Fwz>0z?8Tt7rQVDq#oKSVZwxAG@c^KX;$VV>Iq`)GYh6h356dJhjnyeR4y03DDT za3>wO3Y2z9)rBM+s(#G zn*hv^1BHaFtJmjVb=Z$CXT8OCpX9~?Po{)2s=xgrt!GDlyD4mYb|w&z`|EpSv=|Mn zF+In^t%|Htj&nDV-z=xz8%W@#s2{g$V&vvsj=vU&*ak0vD>@u zn&Y}k{`yzDWyfAVWm(0z>NNC4aTvPl((E@hf95qybV%D@xX@jcQ^?On5|Z^nFZ+XVbXI31V4>Q~Ct|2(lTm zu=|s!okHVCu`BsQ9S}|k*t6LmtJz#i)ns$e8HlTHJ1kX>Ehr?`PFtMlelHa`@jpR8 z2|=!$+iW|T<}Oce)C-~Apl2^rF+bvv5g~}t^?}Sjp&>G_)WZUhvF#Nxq8?C=B@0{r zj@3Z_QcPrm4!PZq+CkBWSyu7K4^*&ZT#KzYf_|J$)+tc`F<)qcbjQ{^RtbO`luv+Y zZ{PuWLvF<6WMXm0*N}+rNzRn8^`J#ML{;~J)a|=g5=Ln8Hpam!!`ovZ!nfofC%WiZ zDSTQF=~o2fgq;9d@D!U!>dB;3+%;Nn`l=xD7Nw0g!4^qHwp9@^YWbPmb^-o=!tsk- zc{_T$3E&=jTJ|L|4_>m|o;#o{Sa=kdDI+ej8ZE_Xo%lqfXqQjTImM2W83>e!7hGEi zMu(mF6ipK$En_NI;HF>F(#0~Yb}7H{p;!ij&nqGIQjP#STC*o!Xi$a|sd$;4;-TdGeG%Le#x&Ko$z<>6 zrb0*qAL;mSXZkgLNW9x@Be4vQn zWcic_S-xtDTZfyP@tMCnCM*&=V)2Y*(25yHHP7>8N$iBugjoXML|DgHDS0l437{BJ zv-97A-N&p$j$I2~lOB(a9>+H5=f=c$KA&>zM`EFJz&=qN83vvfOC-D?;KyQ{o zP~PMPi_o%X71_`%@5QX#b#dZ6V@;=5V-_AiZ^P3?F|mLc%TBg*E!;+Y0ur&$n~SKM z0$lu!Dx1*}^k19_BqT~1+)mHkwK2VnN)NPtWmZlBug$~CcR2EhGmN;+F}~9YDbU$t zD*=EDMbo0z%g~;B+{;S`IuqqW8Xz~J$Ej5KeLYQC#`n<1%kj#oF_G9MA;DH`T1dY? zH6(3z-Kr`PHZ|?_*ia>CFn|!kVX0KFgHF4U53+s7&Wz~IyJY7+>!S+Um8?l+)n!+$ z+)7B~AC&=5is@@e>d`8)hhu^KuXH=+9XuvA{&ZhAV%K-SgQw3?z~Sd8ebdf&b9CUkcM3-JMoQBxy`R|JQOZ>Ct{~^m=wOz+2n~bO8cTGD4 z6uhEHlFoX1%sA^w#C_j?JT_&0`#yt^aY+yDto_&wX^+kpq?>2N|FanyIATC?js-Qx*>@6S3w} zlvj&0HJL~oYRgO%msLdiz%oBl5jnDX83zDNWYB&Rqni|t1;_YF347U=4Elm_!X6;g z$^Y5tRYyc@4f~JwkPLR8s8`C+e_lgzDNiUgeJ`mxrAibjSJQHlh4m6l=8}enRC(oA zlLf%*;&NGCUSB7|#fDUUBP zD3#*gx)UhhK|O^-KvFIoQq;NN3&5wkAO|ZOF53w*Lu|BL&58UkaY;jXHw+XH4IOq~ zP^%+B@5EiQS-uWYjzYb2YSU6DBr*X>XR)H;?r=3`(3f&CZ~#7Y-IJ-=ez`&PeLYBk zG#a-<1@UCKPK{!~s%E9nTJ;k((Tu=Rw9`+w+Iqgvk$CHPjIpcAyb~Cp25{&SDUixC z{;GGOqsq7`&pioYs2XD=FStLhcTx+3p~7I@sC67U&OQ-ZIL=-1s@c9lMYNP`2WbNJ z?YI$Qcldj8sVAps)h;m4&_^g8%DIgCe0q3Gh0?J}75(*bZVcP|1h!YX>(;O1C;>O+ zz=_yb29(atH6>Lzva)YE4iNkImIy7hB62d|A~Kh~t=PL$IxY&6s3?>c>MfXSi0Qa? z!&zTJhbK;4icUL9ls#Z#<`X?FVd3WD6)uDO%iARL*4T8#(H(IGetnb$$x5_%KJauH zt6BU`CsKzgJ;p4$v>__9G)Zd~ai+twl;SN;QnIIs?yO~09&f;3572~-7A9<|#@klm zt}mq_z7I(nBKDElJSY05B~R8SHm`Kfsh}FJrmf7mKb=r8{e9!O8r-xJOpa7GX4FPz zsP1GT&z^$NZAN`u;%+*b3uMI@QW;aTK2X_`xbEtAOayXxkBaegVbvsqv%YBb3=h^- z)A$Z3OJwC(RqAr?0ut-nPO~z@5c76ydN%Xj(EFUjTa0i7$c9W&|2kJ<3hh*$4Usk; zq01{Xj$j+&mDxmAJ%kob|Inky9g{+&91iwrLHybSw=t((tY7_UfjrghA& zIiSv`AxPFMi~a0j6h?!SnTg;);P5Gq?xNjor}9<%k+3M?35byb9_lF0nz0@T+#pRv7o^Ig3ZbF$6Yu^6 z*vV|-@xy$x16;rp(A(G)d}-Y0yracP9^6Rn5UE?AwGQ!LE-u5Rs1B*Ty!}O-Y3mQ& zgv!9BWq)05UhAD`9XhQd2HoHe4XM#RM`U9@{W-Y2Ao0>IX*V_` zzAATN?V$A^Ti!ZLpO>jT209PXSL>`~xsD}1Aco&>23X@f$|;Xnw-HmW9FnNgs)F4V zkw?pgUu7_}tN39?CVuG&=(@`uP8N)kcIYr+_1w%+ ze=Z(8z#8;8{aNPjjr=TmYf%*5{(a!oDSXED!O-y*IRhR(hzlrO_-Qm+1)G{TLss?s z@@K2XjI{yhpFUH}t-otEG_8NKP508(Tql4VyPRg~I?ahsEoz{$WEwMYCM(9sN2g7{ zb+mkR*YlaF+%#>6qim#(L~4>tH7&ar_!6ld09-aU_Kc&gU!6dqR!OB6S}h|oS-4W^ zV;-)2PG|ATnECcub-b9#zY$579XXPSHzzw|jHUUpz>Z~h)uPreA-rtT#u!ca_`W(|)Od!Zk2Q)2>@QTPsnPCbYZ?H9rdr9fM z0nCh!d`)2wImninEXM?TDOZ9@X_dkWYv9`wUZE+!tWt}Bm!mob3q%JChudeC=C*PP zWspDby41I0)HR=D8Fhht6jmdUW;}H73grD zwBli};lpB?JUv7Z#Sgahm($6nTueU7OgAEopF`|B=GuB6pkbEl9k{OwV|ltnp_rcb zjArBbAoqQK`uwm)d+sTC-&-%#Zd>d7{7NLQ%l+Hq`?cUXk9)oMYq}r$?B#Z_mX-f% zutcAk||0>aq@qB(;fA5cWZk20;i^T{(RJgcVE6ov@4$Cv7N~|1m+DHK%PO&3{ZIc*@ zuIlDYse$Y4{8brz9cYRgzvdf*hJ14MJ)2cKia}%gOJ2|K+z;xJNGgZCNtTpBUt9g( zG0!|oc5r5j^t^nWRLC{HJM$6j%?j-M(C?wz~v#Zw>cj6ud1p^vqHDHK)8iISVlE%!&uW4UrO8iUe%N=-8*YPHXj#gJ zWU)glQ1A$Y5Le9gYmnZ!b$BQx@>x;efV`=@vcs(3oEim-7e^=YRzHL-_K< z3F@7-xJv5YQWF3~#?cV@YI?=U9v3)BI_CNr4LXOhKp@V?8a&P1 z_1mkvG=k;o??FF6V!BPK+Up{9P4f_3`Y)Gz9;dIhgYp)_akyeqrT|S9;CJIkr%97# z|1g^-sq9)~--B5i&+&$d-sIkb?Q)E+JM$VdP4~h}{!*tr@fCb~!#6(cj=BzP(yt~_ux{xzlMMoyA%(071hkR@e6=4$l zCx`xd&)pn*IC^ew2e`(g$!B(OOGuADNG1z-7u6cKZ=R3+H2}Axkz8*@hIfG7-LLd4 zm&(7|(Xv{gkvT<)GajbZ>v!%22#b5*u$~mY&nY&75mq`MOqp%kAuI@r>A(|=XoFBVoywm z5x;C1@h)0FQUMm;PtCmVr;F=+0%(afHZ2rv+GJWWIta8kkPG_0Mn(U2Pp3+A))_X_ z^>n8Eyu93=9zI;M6J*tQ`SI49lYNsCWGDIT9syWDE^R77Rv{-}?b(RIe&;IYp*zLZ zPJAwbIoGZnPJv^;oGo*EhOLGChN47Joz(fZ-lKU=7yxO+1k1a1ho`&$V_5!xqW)9J z17`IFDK!#+Qqj1jH#%eM?atp8x~oTWVX&HATEi8J#grnNXuscMm&8AaIvlO)))n|Q zn8vxkVxPOX-?}M-g3;G0mslo?58!~~>BNUW zwy%IHVb?n0M_^0!*bP_ely$m=-_Z8#d(9pj?4;1FOLMhtJ7kyOe^AH+>RCwx#el{pUJ zUIe^P2{cawV!&R>wD~c<1QWcbvj=KA@D{Knc~(RBJs%a@$-@WMK<3Le&YX=VnaH#) zm_H2^=Pnk@%+PrrOj+k@%@_MBKMBp)1IH39^{`q6^J>kkRdHJl1jqFuaNFD)7V_<@nt)d>NzH5=(8+C@(Exf2z!tyP+!t-G(;C%OLIRKyR4 z1^B2t>i!4+ScMuHpgKVxf4fn&4vj_B)yJl^OQD7{bkzKMc*pQb~p%H3{h8$ZEl&Wc} z{y`UxYo{9!-~*83THnJ>wd;7fY>_-sp;T6b^lwSHmYfGTUKoU+(o-0UWk7Le1$TpBj{>08fu|7p zA8^MSegM^}wL~x+c91;wJ};0#xOa*e)S;u!leJBU&n=!~!5=S&)j!55mkeP|TuX1Ombb#2)@OE_-?trs^R!ScbBO zRoi^()pC;$5#jiSv8V2Em0$!ov6)k|v~jkB((KEYn>AcRG=R-_t9Z$OiN)k6tMEEK zgVlf^jG7lJ(k2Dg;jYwN7dgB8299R_tear=eN*DB`BVZsh6Pj56&fR4yWNdN{}iH-hok%7l&q0xdm z{xcIUtzv~haSCd%D?_|s8Lwax0p%;t$)?WW)TH=FPSF-#8GYa9Fv3b11MK9#LN`Qt zTM`8CI#y<-W3 zO=xY04neon*k56=Q1fDHS+i+8Abm))v6fg!SB!jMb0SMKCY;UQB|DY13D-)pCY10y9MZhD$X*J7^V<4VaA%;W0Sj^(Nj}YdwuU zyDzH^q4#bkx48&l_XHACm~QBFo%39?jZ8rEU&Zoa!QBLY-5u?v>;j~^jGB7uF6e0~ zaebn$1_!^&;sDq5w9+k}?%uoEd~pavy5G6o96Y|Z=S9BpT}kieyCyH}0@nqb{`KDP z{+;i7L&ouT$8P39FI1j?`FCu;HdwxRx@IPU+|@CAC09KSzv((>CY8D>U}uZ(KYHkW z>R`F+V0B}T%Z?*@Sn}%}=T>6Gp9)q}`77~z$XkMHU5H?BzEz#yex_bOjnk?0`Tr^f!VCO z@^Z8By^X<8_+|tE3*103jN+LiTD6*{+RgD(%kZZAlM|?nzW98Z{=cJXT)Bw9@wlHA zvXd%1Z!M-WZArc;eOhqlfQaS z)+LBmcsIU?$fXiVe3Rx<6e+6vf!sM!2-KAnQoZE=R`hNXNrhLHrJd&fu>MB^P3z|^ z1T_uT(nm&%_Wm-x5a4oST?@pI6Z5AYjIuMQ0D;wG-Dop-?bv>ItcZ5ma92*uYf6r} zJ?C08NH#Xf_pHNH#N@qN|Av`9F#pl2he1|}N4W)0#Lln538&&$ zO*|<;B}r3*ZRvPKPbf;R^#>HRmaDAVR)AS8QBH}4lUr#bTE~d@>?tolUq*f&%3yDTA* zV@b57M!~F-+UgLd!4HF|62qU@4F{%)JU;*RVAA*CmyN|on~Bf#Mi0PxR04Puxd)HD zybcg$MqZnSjgQbrLR%vVgGdU0IDX2eB#Uni4PoMO_ZW+`IsKHPG}X*NZ47r5wD+NV z)0%KZvHX><6%;p08Y8n!nbL~D_e;rw-;d#;Lj$qWe}hC&zKs1J2YS5I5!;gxZFS6j zofQOIF{N|8G802$M-?Dll6%Rc&gcQ5rASRMRUr+^sk30vyJM(|MR&DXgtdxL9p)s$ z6FFo$OGS?cZriqvIjYCv=5Sa0vKJ4A@MN0zxJ;ScPUd)buch_CYVjrGV=$j^5G?&ercqCv(FU=<2_E2;ez8`;7 z8lgX?PxAh-{%{DD4=!C3eCq4%K>jaKW4$ydJ&byO&&Wfb#F*+4oZC?(MvczR#+d7f z)jFh@`g?Mm8qqI&pjulb1iMSjuvRx-K63-rLiRCC^;K*Ck`6&@lUkp7pO4EdFdj+* zb^XlYZ*YJIcrRdsWxD2w8Gd_%{i!C1WE#0F33VF$e3;q-Zwvv+w(cFQL+dr-vBX|O zm+ot+wSKXp&=tf=TTS@v5Zut{^&K{o!@xyJ$xg3>V#aC${+eRaKKvvJcJ%$-yDFXf zms6NkM=80v#67t=Lc%2q_h<`T6zWB=ixs*vm#ct!;+ehF3+cnqyd3T}t{$~wfkpPlzJYccJ(_ULKO%pCe6bG0C zN_BR&+vfhjH@-K!0=G zXjAs1Y%&ilu8|M)cXqrwID5Yqc>7xGYwmRYqlU^BtQq0rzTDa21)iFQe+!&Sk#CCQ z+Ao^W&=jH4)EVvv(6xQQbPou&OF{Wdg!Uxp;* zOeB(=V=*QF$5R<89oZ0=?&xMhL<`j_i~`mVk%~rTQEtLIOsXm&vX(txa+D&cOqyPS z{*T?zoHcU_E42bBM9m;oAqBA6Z?tvi*2q(~HHJ2~T6cmuQ!3(rpCFEGKBK@-81W_p zx<4fl+f@4xldiaqwqFR5IgbArUJgh(TZ!{Y^}PMW&ChY(eMoL*M{8M_>Y(^vCo}Po z%ik9sCkkwstN@?CM!9J4#=HGa6v^^iP^iaBOpcZa3y+}GcpBLV+%$ld@Y#$QX1#cz z%2H6AI;fAJe$=;N<^7?^R@t5Ajmu%RBWWR7VxOo%7=%?bEpz&!neru7rs;>y9*_1s z3Bk1~FS?z~;v}q(!^Z^AYK(tu=eYItD!>#KDszB^17`^fbsTP%kor0QYz`+wLrOP> zoU54o9aiGsk-!wm$h?4*9vM1gbRe+bzaFUdu3JBK)P=3jT_q>tS0>6}y1)=D*PF};ysR|azZP3#p zskUXSxppXqTonZ?7H6_dVsFUYcZJ|OoZcFqxy#XKQGydDAa4N`jc@`H!<}XUhU!UC zPEL=it~m+f29(c0%dRbr_^ffOhzwOWo1;dlV*MtKTJ{|-F#~3ipP_xJ!%(jz;ZqjQ z>fBQj&g@%A-N7Nv-FZ z6&zp|ja%||<5~blv{`I`QAbTIb}ZrM*@Q#7py{W27Sj{cj84vUZnWO&yqFw~H2?3a z268sWDQc;lnU=*FrVrH?fLhIredsmqfl;bRRsY3u%D7$JE>36a^SF7*gU`YIY4YgB zG}u%-3c{p#t?J}5@mi6qM)?6^$aTV-T=;RaU!MH(rV^m@DJEt?!~?-Hn(2C-liCIk z*_=^I6GY`GhC-!)u%07pylY{I>YmR2+R!L!qY(?nUm2(C5bnN}+4jA0vA3hs*4%vK zzEar_agFhozW2Jn2SX+&oTd+;+NF!HA99t`XYF}St+CBt8ND&oajI6V|4CmA%PdP( z^SFG`aSter1-eW#)+ed*SDG>72b+TeNfhG;TOvIyToS<%@mgBAQu8b8+eM__{ecdD zv~|CoVb$?{q!sLt!h<}<>J}7z0-ZB|KY!Q1>i;tRT6N9%e*8ZER?GkY=*0T}`*c2+ z5u)Ww_)9c4u}c0|RdJQ~)Qak<4iZcYEJMU*&O|#;h1~r4W)fWcxp(LBr3&@+Vs8-? zWqn;n#U1Zbs&FtACcKI<4oT^Hgka*k$LM>f&6FY11NI-~AwHX~^&jQ+U(57dy4vO@ zQx&kHg8Su(BAlTjSkbpO7I-?#w7i8_N~eUy7;J<`GmlMVI>_%}nr_jU*#>TDc>+iR zloYC9rrPMQy$!-OJJOa6B(0L?s!W+bqxXU(aP8B_D3eUQ_VI1ld_*COe2$4^SxGQ= z$UX$M0E9V;A*Ez(y^e2&kXn;cR!1LO!Wv2!<}8v>eK*at5saB^#83IGCdCXK+8&Dk z*d7&YG{U!q*({1JCmQIqV~SSwLuXdwV*E_itv(a1wE_nfYx-AEf;)MEEMW&`ee_g}rC>ss ziCqwWF4%4kID;@OWE4J%370vfm&U#s985SV4>|ef=A_!c7=5^jD-<QdFQuoNB17)I_s9pu>Kw2g;$CCgnulg_%?d20G+@68#@B)%vG$ z&Fb?^Xt!G)o4K3tO#h~~daJbz2T)Api8=_GKMf^5*z&EgGLdujG~ys-iF)v}&W>^J zmT6N1CYpHBg^72-bA!xewnI&3wDVqzY1`n%jB1;(HhFD$^+a8j>wAj2I!RhTpl)2p zdp_<_&y`Eal`G&nQItfC^0|0Ats(Y|b?OJ;-A~&N z!y!byJB@4{3TS_$wVOKNJkYd#0N@U;4Ow1B3fr8Nd!lea(``ZPpTeu|XbNr3d%{c{ z+0!`X%4Q6yC8>dIKXRLdK(lk4LZ=EIjSd}^j&mE!Cez#Os`jNu(}|l8Yw%_zH1jLt zx2;7|ah96}$kc-aAa8;L(37Y1i{D($*{6*eHrDd1MY^ORv5;KOcGie40n7KoEx%BD zDR4FGD#1G#41e@$470Pd5M}1(d?r)Zx+`W3N{{~h%wCP`}9n8%FP!*!@D2C7>L00#-%MFYb3-!yxMi7jwv498RB)k~Njvr+7z*-P5~FM#<=!o5K<_&;c*Atgd=N^+7xmV)5Pcqa!}2%@aU z_^G|b^x#Y*wpAq8XjJYRPYQC_(6rCVnQdW+|Ly0dlK2n>mj+< zoaJxzdm*WL0!d9$jqLO%N*{;;k!~aEWv6%rWMsMsH2g|QFy&zq>N!@AL%?Da`?Z7! z!?|%)cF+?omt#i)$#=WDe#KNPvg4X%V)13`Ewa&3XbmC1ugCYq+y7(8L>2Kb3j)X-l`WLHCrdc zF9ci{D*<%(x$pEiz32TKL;EiZ`ls0umqj}^XT_8)aNL$k%85uiaaF-)XKL|#oC{-I1_8OF@w>P(|b$?1#}mhrE%GDZ04jxREFdVeyTJV@O0P;vrYo6Ft$+s zeW$-=$DfIz_S=EAAs?_!0xmT7(-w`+)v^o zol9aUF2|a|o{(^O85UyJTL$QQ$z$Wxl+)JC0m|VRYH)pcJrWYw`RX)fH=N!0tiP2F zbXE=nl6DT~{ODiHsS-hZ@2y~|?)5nX0obY8agM+WghG@%<)!OqKER-6P}m5!Sn9%@ z+@!x+ullJab^$tO2DAF3ISSK4s|Z{H@kX?S1jczljO9!quioBu%JlC$gSvSmdXUTU zRB4=~x&M4SYikQLlOqLfoOXbF`GvHPzBjM`t;NW&Vkrqp|JJ-@F2H}ce9vG|5*R`d zHx7N)U&d+S3OS}bP(uGl)ynH`i)!ci<;FWW>sp;cUO;658};R&%dAPz+xcQ!MM+O1 za$`&XdlbRisYChO>o@A1kV@O4#vEF6ns@^uIRM_(nCyOvPN@K}^$V_3JZPX_^vJP= zF*f^B*uget*EtZ;`hZ*Tl^a4&<7kMlHIa#eW5YBKH~F8NLESSodY^w{+sR1j_-gp5 zTlrW89G;UgiR$A$Qt3NI$2JY@I z08$N_MF!G2>j`+TM0t}H9d%i8eslfhR-vSJ+M3+pLo0gj(y8CFCGPdR^wQ;*JeR9` z&W6BKSJd)q(7^3pm^wq(*sgH(j;g!e?$Ki@3I9u;O<(He`)7S8`q+-U$$Q-WBL4c- zrSd2hw_g0e0T%E7W5WTyFEpg>e+;L+@9Ib}3e9U0k=vMO)EnaNn7j|o z@J}iN`D9weLJ3-lQrXkTeb@1YKiTP;HQPBh3xozzCo_&+o*&XQY%y%*T=#KBX`pyP z4a;MI}=G)=P@N10mSCYVC`H@h<~^_x!yE423HFrqDn0|jYBD< zSp(YI7%TY>YStQW3}QQU(5@ui==p)PQ%ZrAaO1?1MBV$O9$#D@0PGEg&HkkPIWq3~ zMe-A9O2WjO!9}XhoXAOKm#$U59|+x097gI&F&ow%vjcikm(&$6*V+j0vq&s?mXw zx+!}+a)llUtHgr!>96vq!_t^bGR)O2*P`HqL`u}N9aoJ4K<}%a<>)yji(c?(&W=O^ zI6aM6Y~*6;#gOP}+~|T>v`lLqu<~DNCH3-(^qLqVrTpTYO!e~P$lnf_v;AS|i6com zeIcUhmgh;HXCvP1@w)?mz|mxG%0^1%A!!LumU~)_f68f3e|J;`xqa{C=^nIyY>xPY zMZMScT_zgF0RFVXTAw6Lh8-Dlh8aECQB=UiNLvra0BLiNpYQD{QPi$ApmEag{8s*Y zSANo|Z8factYYn#N;hELeaxT-&1!O`)lnI-7RMGUEiMa}VLqK{c7<(-r_NC>5u_>@ zb^!I{PEwLt?q28{FE$Imy^E3kZ|hEk&AFTA%@7Pb;9>2|K4KEmLojQ~PSOzJ0-;M& zx-R1Y`p|ziR^@9iVwXoA59Y9(!cO>MzM{MTT*bzEE`jOy?JlOF`%vVSv>Uwm+JN(P zJhM5+6%ya{!lSIH%@PiGQzp};@_z{~9@IeODcqJIICK*BUy8Z&Xn&|?>4vN_%7U;= zO%P52)>N0_uvrF1v6-W`Lfbr=iJLsFhW6g?k(~%nKXBU%Mw~vz$a9{PL>-nQyh&UO z9wZTP7)MxcG4;77rl2QE)@i!1-pran(N{$s55&vuNr$j~_o>Ip5ohWBAm{yQ3qA}c z9{)$d>Y2Ia4xV5PTniaIxA6xUUb7ddZ{S^kd4JfyutD}Q8M@o|3($a$5l3-pbU7`( zWtWs1N9WnS%!yvhgBHtYercQPqg#BuP6PtyN1wjhFXlTDW+2^sRA(UmEkxrk`ZBTQw|r+ID3kQbgAP zcWpk0Y)VnJCfhNBryV?!n=vF^=YU!kwscdr`l}h8N1eFMCh@474c%8S5}p?qM#`_p zSd`^wfZ>kFL@w2nM{{L1YhLQ-yFgtcoL8ijj0sWkz>BH_##2Ma=)p=Plcqu2LC%cb zgnhW%2Z1iylZvey_JLg8j3vD!J)vXTUK=7JAdFvI_SfltWz@x|UFEDE58%~|$M4?D z#;!7tz(Wpe;kg?9zs1V;_oeEz+|X~h-e;;x2^qqM*a5X>yU73|IlPXd>hX>6VtUt! zx_A$god^n|?esMwT&?8@(8-dR&Dk%T^{@ETtvGaHyd-g<9!1ESkXVP2T+}?~p$$m@ zu<1^!kBpp``KMqTH^+6WJhZQC01|Y}-ppkjLDvOaZ=dT2vk;#v1{({^srZ>h49c*7feIV^R z{(kAY)qrV*`$(H*Yr2pj4nst>;V4oSj1u9h4%3^m!641f{`HnG7oBZ$(Oa z0kbLh{sTy32Cc|%;2I*>S|T&4!XEV@-|=V-Y=<;NLKcTN@+FPK%j#pR6J)P;H=4-m zh#C%eRyt03vRcc6X|OmP>)5Yf)&d&Rpo8Qrgj?4AdZ1qs5W%i2`F$W~!~G%rzK0<% z^x?V>D2<$HM^&Ho97PCeh)ddfettK{Yg9M?VA64F%AdjiZwSovOx=SO9ta3YIITVn z0xd0G2p&DnAPW^NZM6dt1=8jRRdQFNnRe6hL)T#wjbcNLkj*_GbLJy3yV<)r8W`6H z@CaATXe{BR^IK#x);{&9oOk~UO&TXne*hsGGc>oiXUN9Eo`rhEK0fe`b3k0q)B5wJ zf$E!xIYh?IGA_QN)V93?FIw9Tg$6-2AZfx1i9L@sLX{eM;#)UI@*NR2=%lPXE%DH_ zM*^UhbRcY$x!KbgPFDoq)g%rQu7I1~N>k;q)kTtd^>Lbafe-hk!Dx91iJKSGK zt3`XifESEg{tU7@o^%xI@MP~&ky%~i#l?lpG-!eo z7-JmpU@ZwnwfZ;yToM244nddt0|<9YB%GKZxZS4-_5`sm%?!0`kt?^^4_wqB9d@fH z?TFV3(Ry;bVAy?82`~*iIaIYDD`tYaw_uDZnSF+Q52|ti+^_=uvJvv*WG6&i^;L9c zpT#`^ee*1Mlo4ky(0Z@9SW%?yc(hT7+Ez6!bDC0T<4(mj+@7HIavrtu2c*K+S?rj? z58W$h9QUq0$I_j`7AsdOr1W=tS(eaLEdT!)cEmpnJE8@x5pu->O5XwO-`Yi4)Qs+- z99A{Cg4+~rCBG&wXktt&6$G(kE99aKk)mj688q@x{~wy(DX_A(Yub%%+qP}nNyoO) zF;;Bbwr$(!*hwepbZn#ddfxBf=ks{XagVyHN)Yv4K@+~BsgG}%6n%tcBsC%yNnFd2 z!X%dkHxY0)a-@XFsKNEp1irAFMQh?6cVCdIum}vN^C~*c805@5q$hUOs1nWAk9dG8 z#1>#2zPNSwv|Ht~TctIHuI7ezN@90Kqjw5YG3L)Of3i*=9>zmJf=4X+XZ<*nxcK?G z7Eev7jxLjERfJC`#-6NwnodZB)b#(y(gCI}m)4%&MH}?q^JWin(XFIk+&7+!Z58?X z^(yxx5SZV8UrJFKZF8hEq|28L$v+a+qSA)#NMU=*bQI3U3b>Dx(c*MT{#uvzg5{u} z+8VplF@$}VlIf|zI5*>EV$1yZhhSj*pbqhKqcA7hjf_w=z4j+RS?zesm>~;$8#dre zlbds`bljv-!x&`5VEdo{cJ1{Fhp zO9KmlO=e%8n$+)?i9MGGoo;2&bReuIDng(9AgC0ml5C{->e^oj0{F1&{V~6Mg|`rg%V}t_lkw0!utd6g6h@&98_*?Hn&V8Vo_i9z z1G&Mu`XTDe2o>%2nk0ddE8kCeQh!K= zXtFRN@?HPeQ!k6!3l#^2O~j)3fzE7;5K3wIxPO@A*wb>+0r31%`Y=e*xR%`RXsXt5 z2eofp8>nl`_7GNbj_(wbb2fbZ8VFldhV=w+({yC#;qr}qYe$p4DAHfG@$dE#`}94V z5qo`_k`w&C1m;ab{?i*$spyMSAhcIH>UL)4KH1Cs>2OQlXh_aK7^gUtE5D4(HItwPc*hn#LPky(;^W_yLn?UQ`N-x4 z@Y?d2oL4T~4KhzE6T@M#^!QK_q;naG<}Tq^EEvoPzN(K??Xdbabjr=W>P_i7gZ9am z4sqLRXH*YqE)gQhYsSZInXK@CT`NdX@VuX1egOe$v`1w?u;@Rt49)nG5QAd8kdmrj zxNZ2wh@Np=996$^im!5WoV7iF_qaLo_&j4BJjW{P#%`yc6RYstVOaQHwiIoEAHsbP5Aa?)$409O9g?os zSrK=1w1%q(n8S)cw7qLdD`%GJ8z2AX(g+YiG8iEBic?TJd0zz$x7i8%Wu1DfTyq$l zx)f?d@P>j>maV9KHjX*>UZ-3?EF`e^dA0Wuo-MZW z4~L9*G7D_id2knj_mLV?NqrzvDuz6PyOMfC?N9PnzoQAAipr=IVe>6|+*tuX z>Re%9L$wuSo2CT%b0x}*DU?EyHh&+!6%M6O$U&`?L~x+95Tbj7KN#g26n0cEvf2$A zNUo~_=vY7*ew8BGdY~`jCpylpjIV?1Cr5(B2;{BdR+}c!^+Pm_@uakD=o`{8i$mA0 zTT(LGk{*;cCcZDs56Ho`!FiPl(du<73=5De+(NF8GP!BZ6P0tJBU7*3^3XuLq%Q3+ zUfrdH)TH&}oq4v0ict&26YBn&P!+WF&!x5o@a#~nY_t7KlUY^4gz?{`ntk7bW3nH# z=o6?K&lW|NA#VAV+s&s*EA9QL*M*NOkr&D;afFi&G1XaKGI^spDZW<%MQIO*A&-*r z_vCF8U%~>+j4IspZ7FS*^iIrmVo~J`cZne)C682#m@vaBC})`&MEYirfUw8h1RuHz zpn%)}V<_@eJDJ&9ewH5{S(fen?SR&TbgJQRx>ch~N!nATMJY(%+h%X#@+dF(V^@}h zA>!6B(wf2xqA`JhCJt({*{P&dU^~?p;&(koo|bSI`Qm9q8)OhZIi^H?V=nF z?j&3!7fp^LZgxxAnLCsoTXl^L^zL#HAa@hUe1|e!*b@-*IqVFHQO%k6PmTt;Ad;l< zH5jwK7(|Gun5-^K4Fy$W8q{5s&Ag5l?MYTlKX94rdVU3HytjlKW0QFkgmXIPaXmSt zbH6nY(U`$9H|NxT;y(K1*pNy%98GptGn(8G-eRnTVGVbSIVH_|5L7R;W?%#ZxZWT> zSXC-}Ln-EP?oDCwxO5B~`eR%WUPzBw1o&VRWWANu;BNJ+;d!4)CzwiIruVYc&Q>h; z2~dI%DW!TWU6oF13)!FJ=jk+eb46y_Ii1R=NyRQ8yAWyEEo&$Zk)^il(`G#|(xNEQ4ch176Kk5o^Gp?c+quFY|| zUQoMoN^1rK1-ZRzp{IF_~$@ZHUhHpxn~IyKr6f{rkw> zKUOvDHoDwa;cRj9TF9ioGd)g_%$14b1YSuC;#RiD_JjycTwf~4;~p-=#R^6L9fU`q z{|h;F^%d*?c>msb>N9h>gWkGQ-$Kp96y07d%GM2VWk_7I5<0y1Tikwk%jpAp!Ki1feRy5q+LvOf&qhzn!) zgI*gFM*)}zcxfK&Lr`=z%dlm+ig9Ji0%Lu)Wh$OT2MkVrA7to0t55I`3J~EopahuB zW<07PPsE>4C)QOl-S^JeZDrjk85e4%tw zyP;#OFh3oZ-s{R|!&ODXb>H{39336TUGhZe}P8pHKs zvniI{#+ysI9_J!>7T_KrdjW8B&;8_B7wc1qk zHPA$FEgY?Lh1jw-UaO~agKfL;fEB*Q=0Kt;HwU)7TQ+IwJ##X=!PJmAkB52BILdFX zMK#e?nN3syyyY|32%lz1e-%D9b0nZDzB>lT6y? zKaL`@0Y94#wnhU?Yo)s&t!285X8^p-{hs)7jlQqqm;rY%UI6oJ}LD&v^M+Xx<&N$S+}urQ!7QNkKEriJm-~so?1km{dr9 z>60lB7*M#V2XSLst*XaYDkfX_@Mro6kjuK|z4+*zehC+)5aY+!o5B3i(G-R53xK`o)p@nJrIoIla|51}2 z0MOk&pG#MCpxsytZQ1-yiyjs)j-PkVLX!DeiIbFSnF(7(n#pC4;GTt7vqbLW zB1>RR$Ha;;-SI@}ts)Vo;N4)pI8Y%;^Ju8RrZu`IqwxM~?|&x$k_l;P+tFp4LZ}R) zL4s0LCXOb0ZhCrXh8P%%btZ8GQU$Uxm-H;zRLrqvAY^8%)})1idgpCP7$EtLp;eiT zjNd-ip24-7EY(g{sc2V&#c-Plg=$iA{CDiA26)kM3M7m^XW=|8wL(gm1}_lq_RB_r zkPXEEe-zCO@|zhh$yO;w#8YE}Obo??+0kraHJM6sI@ZS@lXzF>!JQmtp>5qiSVq|n z6NTacVjK4`S*ppj+5~UP0G|%adx8~^2G2hpheB%tYO{67t_3P%e@V<_!N7_t(ac!k zv-qh>uXC6xt-0{D@r2*&_-wGYq?5SeTUZ0OayO3;=eEcM>coDTLztPDkYZoGWu7b0 zxn(7LyTM$2KtIsTcbgS0VUcEfDsCrLB)Q}GsH2v zrC<;wV^>qgCa6gxm6uU&tB#BH?Rhf|3raRc3?z-j3d;y&e97ZPBhhqy}$7&NF|wGx(h&=rLRQ1xT?GofZW91e%&4 zS@54gUam4Un#1K)fUas5Ygm4`3Dk_lI3LYDO8P@4H5~zT%8wxvuUKK|tf{vYc2efi zURT}@CU>64ZPG49hi6VXYEJ1v|0KUcGDaJ?0_$^?C(wMRKs@wA8$Lo_(y!arh$n)DEaHgeeF28_ZPAl0D@*)^Pa0eWnhkMCPQTU=6h|B_CB zVyx&laHOBxh@;C@yQ|gdbE4sqU0J*o39llH>ckR^GIV)dzyt*1Em zBG${4w1DMLZ!HeGmM9Qmz0UD;~qYvej1_z%TOK=^Y+&}A_ z0>MElT*4OH6E@OIS~WEHxVB|HmwP0Z15LIh3o&46`kN6yUq_~-P5lp@D|c{Q8Ej=}+hC_g=X`r2Qv zDL&eT0O!%RNxR#&Q)jrTkf7_?pWPc~t?_=OcQ|o|c+0JWpSA~HMl~41rj35t+1!!C z*$((I8wo!6d1-^;0u8={MN_xa`nZJhsb8E2MjLo z$3JeZxvN_Sh@Qvw2fUqLWB~3SAWYeC2~pt7Xoato^!kKc?GsYt2Jj~qFRXioC&u@~ z%}Vab2d+bmQX}PKz8BInb`0?< zy`v@SuA}#c0in7Zg>q;u*GDw>w|+SV#y4k(f#>K`q~I-$o9B0*ud7jEOBP zBn$oA!shq3oc|SEFSJ|bNsVxHKj5h>%winG8X4;G8`^9?VfUtg*U9rrffnU(g^WR7w#gE-8o1i#slx2803gCAOKDm-Sty8~vETX>I$}w=`GMQ#y#`p=>nf}pPmK~Po zw*-rpjm2ekOxy}1C%a08%&$F%VjL0GWrAx#AlKY3>TQOBUJ?yuhD(#75as;Gw<@?W zY~_cM5Yzu*9e?@7_<|bL>HdRX{3GyMU2<@pgN+z<_gi{Ey#cY~#x$#eK-R@8B)tQM za{T6Z-bZ`nKJnWeoQH`Oi8a^*N;)-Gd-My*A+v|n7)=TJt5`;qPqPhCiw2y~7ZR@z z1elE+-U6g8y&w#)iZL4{T+U3@r7tS}ky8Mk{%HizVf2O0OF;#d99V?PnQB~*HvJ~{ zzEy@rNzMf&3Wz3fTk<-XFc>cGSI_yoCmB(#njXlqRaIL2pGR5=fkSMQcc>W8(7}m1 z-AsjWe$>DbEUwX3zR9mIg$KB_^RohZ7ypS$1jut=hL+qY{7f9`SCuz9&7J$c z&X|36qSsu=$$a8zm}+^2LiScY<0ru$Y@oOrO^XXqpD#{kF_n~!z7>&htSDWZFIYyl zIsc>MNqyXh!yu#UYgHDKj<~cp?Qvev?9={eLradQgD@A9ubNH;`XcOo>ZT`CVs*A7 zVv~iq9K^L^?h~}VbtE{ud9UC*7d2e${YPWAH7Po5wMpx$NkN5_f-Iy`EL^mz!&*e5 z-ToLbQ7=Oz5N}xf2yC25l(Av?9xtI( zIhPOPfdAV>EG2a$f3!iDm*B1dUYUNh0+bX0|767}{$spp9bolKKZr(1c}ex()1*FT zN<*0MePW8W-kBN>nh&&&T=e{<03iyhuKVL2>@B8;g|~s(!uQpSvb!EFU9Y2mUeyX| zySJy5oTbeK)LXOf+x6$=7qeAHo*Ok!RS(6ml_Mi+XUuj4r<3&wxU3*K>FOPcDS0~J z<)AN1HWU5lI*#oP9C87DEk!n%*BXV0!Y?Z4qAD?r%;GWRxZqiPav|s6W*2-_ilXqK z{7x+#O#?Vul`^hMt4g7D7V^IX>ye9RP2W;~#Vyh0{3)1~$4 zV*nBy1?>eM>l>DxJSw}$j~rcT7s0In{Obbz37=WQzaS7q#n767bj}hx{uVA+C8ExQ z<8RNbGeg7s^}f457f(adfiZcO`!W7j`!U2VH!qa}aSQ#K#s8KzU+(qh`?+0b2T?{{ zW)3&3_9+{C=KC{*E%*PeUv3NZk5}xoxionG*yPR&$gz6N)LRJX{eu5r%U{O(2{JM) z20zj-%J#tG-3+up$Xqag3KX(uau(JzRQ@0ngGy#N|3M}J7y=8^dA(mQWETY8gB$du zbuO~dz4F&7)I5n(ZCU!?N0BWcUX$n=VU8SN5L3w3bq&&gz+<8Uot@(LohIcNk%>V> z@nv|fxN1nkZ#eHkb2w)gsnLq`{7BgyG5Pe12B?3fFCABzxuK#p7;(hkfzxap{Iqdt znbT!{v`!oVGQWqY}p|H*8P{TP-yJpUpatLFfqDCVbq@pKmEoU zqytmcw4e0p^bxQ_%iaWGXs=Ms><1WD$c^h&p#pr%M6;?Nz_F-TIX?X!Ma@S)Rg_y^$ZyXMgo3L)a6WyV z4z)F#M$0tYmmZ8q-(q`2DRA8OivT0y%vM8E3vj8CF`=xR8NDDl_S{yUUW^rY&JXaX zj^ST;l{O-iYMwf$`|q`?1R^3B1x`!94(3MnlS@7bg!rB6DX5D&63c+ZBkPlOp*P3f zzwe0&E~)Q{Bi|Q@h?j?lmOXxK>gAFx8v#EtTgXC#**)%ppzL@N(s`kg$PCzXWGsMe z%r`0ewsQ?%FuAa&U@-Sb<|gCMh0+Pd)5`RKHOL+IZON#wxyBEPWVdRM;Tj<53GPYX zK!2XMn$x?BaP!;%ffwS}_9Udmw)sGxwM$^8+rP(Tvw-(ecsa3qVOP@OMV5#3B!D|r zj&SwodBLIQJ=!y0aIhny@07Fm>r1Jg8Q_`qyWR0o5p~b6fA6Co(7oK~`~J)1<#D3% zW1rZ==+<}nh0w!y-*uxe$rAxVR9K3@@T0Nk_htQv;|=f|VLT5#&xR+L4vMR%jLUOm zVu&84-L4Ge3uF!fCBm{?k?2_IRORsgVOczcIdsggDs+VEtqP^U>MithhzZW%cv}cT z@w8$D4o>Cq;5JZ%(7w-f*stf`8Gs99G63u%y}QlN^PdU)6Hf16DSP-YY3K|@-Q#ll zN(bJCn@163WVb1DUge--FsY?s?lP5C2VI#bc6VBGF_Gh`ypw^5?6k1RrzP^F(o*&N zkO(Ajp;Z_U*`kEdk2&9dmn_BW7sI=m#s_lOY=0+c(vR;~yba5)=M|*h(tt6Gv4C8@ z(_3hppq~nu-Lqc(@nUq7WheTw58jTyNf>B7%b3;4p#q38^hrm!{9q`QM#y3jSM zX|XevA6)LxJkwjwLe27I!K{Iv2NOkxFfJ|cMtfGolb$nPF*43+jQ4lUuX%|`T--v> zU?Vlz-WM`ih?jXqcFo%Y$zL&(lz{n6qRk=b2mk@nSEo9U!`MdCS{2^wcj!3}zHgDt zXH(jRYjK5`VO29|A&%sCW>iyw@wC6xgb@A8yUA#&wB^DAzr59wiZiyJCy6XhB{_q^ z`xUob`Cl<}HVS#Cx}F(^JxwNU#j$Zu^PE##{f=UrRg*O{US5CWin6m^9so+wFEkH` z(={)81ua_GRfivYh@_tDn|6(jP(eou;E%*}pI~TP=A+>`rflqiy&QK__87qx^5rVU zpY`j!cYFa#fiGb!%xkc|_0Zk~g#1H36*inwJUkKr$7EAa2OssccAxm{RTjRIU;ol( zgM5~ESF^Z^d2n^^adnSU)sN-^$Xc6ZD$ee#oYiM5`2N)&ohd%Szl zDafXAyaP3vT#4#I8MEa=;d5>>Bp9_3-~OQoQ9!^-Oqfrxr;4y~exQL3p9m)V%|!m9 z=q5D7`JI(#hU0m`1&%!n9qpYFDAuMAJtmbKMANomOqgcGK>*a zwA_N7mou>73OwEjvlXrw3^o8QnXWRMZpzI#8eB^&X~dG{ zl|s8M0Sn#GzQaY!fLXhp8IxYQ@OZ!2<7Gp$;~3C3yPqpgMW$th=X_nQUE`i{ymf4P z6BzFBq`X{cA+9Tjeg(K2cT8$B-}82dD>90;!@J~WZm^(26tU*-Q}2r;d#}DI*(Xnl zKS#&VGIJd#p;q0)Rl%tXRoQ+v*M>alH3*|j@%~9cP@c51N0&tpOlzX|fxi}*Ci1Qm ztJUGj3a~n#f+Fx}CF~474!CUNAs*T5L3^IqBa>fm z4_JD1RV3-i+`saI-I!9on!5PLcUE*wA;c5M3XJdJlRaDA7QktGGUO9yYdNGH&?lEo zI*#I(eQvSZCl|-k4;ycK&4NHswq&4xwZAjq@`;)e8kJvHPZe&~@WMD|J_S_#0%B1Q z-JYM~14m-Ed;sfSex8r}qOT6@7au=*pMB(-rBgbj!7p}*>B*z30gHz$XQ z5(l`xA)Gdqa94;D2}on4gIO6on|15PAP9nVySi$jYXKe#S$%}pFgcTVp+^ODcd5%M zw4*O$Nyt4ZKJb<_x8)^*ej=~^{*B6fPd7uMR=$mg`wys=6+U&}cG7N1KX|7|DnoCH zX@`~DF%Js>0Uby2uD>i%zu$?Ohd=l+55Fd`4!{1z+yVfo-`M{<;qB-wsR4xz|5JJm zb(~DV5EpD?s{Jj72mi8C)@Bydm3&8vsy(V*B4qj9=8)_qgqRrn z2`Nwe&+DZ=Y3b(Xf4u1LS62z^A8(TDKX_zA>fa+_K z8n$|T5PrnKHsh)gvf3v8L^62;JOjRoy5%)M&hk;rL;6P^`lY{3F$s?jG^j}PSyvpZ zq(8w$TJvfqZIKz7QNiEewE+edSY&*Kx^-reu`vs2-EhfMCN_2;Rf}#LKGp(P(}NTM zU2pMBu`Go+I&yG811$xjQ&CJ2a-mCsDW(QZkPJ`#4@n5Vr5YMhysxL&Gr|UU0KSwd zdbQeYj&2(Pj2+%_To0;$X1J$WFzJYIyXN7h{HPPWaOrZdJtFp&ab7&To9?ggJx{81G+-+`q;>oW+z z`Ch6xR_6C-L7F+ZAQAjGbXg%Q2^%!QcGk8>5U#)DS5gh0O$6q!hq{X8?nSRV zgLR7;Z=Q%U3`CKwQih#>9%8$lx2vLxr)2ntG;wQk8xH&&UT3uzEja$-DWOOF?y7-^ zThn6z6v7A)mu%Jh!}*T8Y$7!qY{S_lr8-aq$Y8EnkL|~hl#i4JzXxRPT2jIic&!d< zb3&rGu&77%(Bt2Pg5Rjd2-K&0S)Ad1?|W{nfa5WrZT3XEeXv!RY5vu=0{eC2&-UvD zbJvhJk`Zv%7--%aNeDUzdKdVoUK-*ztPU*JGz>UHzItNKwR8qHP@6XJ3t1df&(`wac=@C9%57Xtp} zu#A7*J$%xT(Rz1#Xn7B8fq9Gi)N11DISl@fTjQ<4`}z9I0SHubMvx&koITnz&fFSfVSm-(R_OiOs8S7+)wy}9T(-@ zW0nI!j|O#ufNhUQ;Xcu-Cnj*Mm}kIdXFk(*=lmzkBlG|1DB8P9M^YI5rvTb=DTAO; z2N)C7%~85V+a5Hvn&wBY><#MY$h%m6_HdGE-zx*7vV>np1)-rE;Sd!u-F>9v`Mjt6 z`+ldhxp(i`azVE@Yc9S<*x;m^My>4v1?Sc{jfuDhS4$VGICUJj z>@ycDI9qz?gi!QgRKxAJR~?bcP>WCu98cE?8rjGN03mv!tIX;OqxchD(%ognrv0~0Nt!lqr^u=2Hu1%sS;izCXyj$SIpPS#8p`d&X z9GD>(WA5>FFTz1UkBi*(NDKV}Vq&od=F!445g$m#$m{l+mn<{nW$du7?ah|O?&5$t zf)Ekp9`p}|JSr-a>PX`lMt;OPTk(_*kiO7j76W|a6E=~6ur{*EF~;W3mH!Q$7h9Q5 z58l@?EWL_&^3mz*JvD)>mF8TRIKdJ1^1?J zsk6yDi_7>@9CpZd5I6eOw)}pa-xJz!o}(v|akS`6R^;3r^BkQ4gK6L?S1|x-(=6sN zMfmebFkmSHHG4e3%2}StqS`N$wMWK*idb(OrzoB+|ByG`&N}~rL)mf2v7QopOr!F= z3a_joZdf-hs=mN$0F;fHqaFtZC!uACTcmt6rAZ?+8D$?<4JG0HDo1TTce zXIvka4EyKdhqvI5%qU*PPf^LtUnoM$i%|-*b+*dN z6Z3GWPcZeC=lH2+?eQpyOS@~+H1{H|AlqP$18)3rJkd*IgS-^}+~k1iIUKumY0#&% z-(I%nZog>QOLcK7j+alEOSgG>0%o&vd81uXC=?qnMkI@*#+m;>Q*~}Sdr^wYYjI61 zDwowzV_5VY2gjQFAlirpw!o^(j|G^>BcUh5Arg>RkjInYDC~v(8G+B~N=YgCa;(_C z>hD0dtw(D%lU6qDSaJeHP3SiAbx!A3&ZGb0(1y)&^0pfDIL$rXHc0C49OBhsTYq)7 zE$$u4!a+b-N5HO2&DLzSK>eKqQ?#95i=f=6Hlh##tR?l>=|MDY4cx}#G z&>#-p{WX30?si*l;`-sty1=k5E2+j%9B_o|?b9|C`?>X#6Yd1?7n1IC!|Q0#-j5RV zkKNtf<@z&!z-45dhD@49gVQH{+*icMzY{M{uT3OGM8tms2-b&eg^#S%Qh9;Erp%K9 zR@8LlYq!Qq(U6iAl1Jj^H%f|Mt*H%H*&T`togXs}&1P&!9v)K#HQayP7@N*8c_KEi z-bxBgM|UcQH<``=Pl=7b0<)K#J#*V6>pPT*=mtFas&jt)02^;sMYs}VoMC@tU{Ykl zPJ;=j#mFs(SJ$Fvy2Z3=~#Dhw(!fzdT_ zUjXx*MGx^sN$F%vU6WM*-}hPATK_QT%KxtsJ2(M=BJuY%P$bq~0!ugNl?~~PZ>-(z z_=%J4h|`S(#khp^pGI8Wl;b_%Ppz7~PeJWUhzt$|(ZoP>b8@(QcRl+_TJp_;LMjRh zTqt$_YsolaM>UoTcWnPdUXAj{?Gch4kE|t>CmuFgq9Qp3B@TGbSm=4vOy+UYrpeO- zFkQb+UJ_aKq;1nf{0x=AL1c}l$kNwMT8qN#bd<0xf=NvoWy*>JGyeUYm*RFhJBMp% zCZu?m>NluP{fo8bTye9M(HzO(lDy0U@2{4n{wWks?vDSd4`u^`G`Gb!%Q-oop{^($ z<>8PYhH6<@ZUU7UR(nsrq9u9tyV%+$ZW`AAx!f|aut_9AQ<8sX7pBq=5Bdo};rq#1E>yg8(g2c@>d+sI zuL$-qDp!(%2`bXVPHsS29HmW*Q0(lL%Vf~``8Q)?_THji&VSch`KJFXc1&shJS|W! zGD3G0dO7@Tc3jR&JKRgw*}uQBTZIsW{@tEmu;_ns)F}n>nR!A$inFdVtEh|@4CL*$iEyW4~@jAu!^I=7Dqs;8u7&e=~ z%hVi$vF@l@kQ7Uso`6X(6*5V~ApR{!;&Kh?vkh2@%Xr8F6Pnh z+0l(S))SS!@y{eQHDl=t%xWTqP z$wsR1cE&tPoR#0=?E@;X4up0Ue+qSe3%{zyw=9gl|c`2KZomWz`Q&(rk*nxr<#)V&{K2M4#6`Xg2{v-v)k zsN_WPy3|fdtCvpSu8HP4gUvn~2cPQu!!NuLMamf2T(b616dHBPFwG=T0ms}M-LpDF zM=me`^SW_#V5@j8oVij#wkWFyCTc~12!1UI;!!p9A{Ovd66NHCX_5;BHE$6F<9DtM zxviUussR&M`Z5PpeD#%|DRxW+zPx@~GZz&4CI=P%48=d?P9)YtxoFyTB$*!spiJIv z!48bx9wpcuyHIc=s=^``QoI~AQ+#daw9q%$g}AWta|bHtyy^a;O3!#F5zvPfNtq(; z3rEaY&XfQ=@x1wn$ihSg=jlhYS@%Um(ukQ2%xlTt*Ejbmwij#lm>n+Zrw071`cmC4 zwN5gaISBbosu;N42H7m!JK=leGIud$=z?@S>DW14Euf`Lp_E#|%vgG=&miZ%NQpVP zpBd%j&_oc}g#z_2mjn0nzJfQ$kB^JX`|k6M6$5~83ofpI?W*(9U=jH^9a;xPE_X^h zW^5&(okhh6xp<@RDn|VvO?!UBK z#Ey{T-5#wDAts(@LiIX*ewhKBx<`y?Q`r&dq=wH}ch8QVisIg)Y4wWRO zNpBfZPj#@ctVJ>uShE~`DiXfH)ON?(S+U#L#ikbkh%JfP{=;LB`uMnlj6m-PyoS%sGk@t(l!)r zPoj!;2>`TiXNlGA8xhJd9zx`w)(Nf5hD)rdc$S){cQf#L@+ogAFU)Tt6AQWm4;iO< z$nLfgpDI#;!d1a)ApfaV)~m!b712Hr;cV9^^4znjV5mwTTQpQs@BG9TwmJY18RZJ= z`ag;e&{Gej00vX zPQ-We^DN0l70W@&G&QW15CL)wrRY1q?m;t1PZqH`g49jDlV5IRGh74YjM2nwF9AcZ zvI_~@l;4~?reB&%0m!2gr1 zc6#g=oUMv5m>3f&;dq+C^XC|yb<0Us^2vI11sp0r<1}Z9Ma>vH%+A~Ni^kgK2q!LCm6foYKLS~$FgRvP zRlL2t34LsCsrE}@DJO|Xa5!I$hjA`zrp;szo45drOKX>9eSH#i#Wds4J4|xm2Uo+b zk#97JOpZy$>5iBhWTyTTzZRFxNxbDjqpL)5dfLVdqRuhK;We@mbs}BiK&y>0J+&xV zGJtdeiL79Zo(0ULx}wViw|O=cUQ;iqW@#>4|4q8ubZ;XH4}wB0y1qtlwMuwWU&uZ# zvJW6vN5hx*UK0h&`v3v%=QJKkgpR@#;xIwlAf`69QqUxFd1=!8#hGNbPgjExJTKPQ z7UTN2&QxI-SBWQ*p;8OojIUJ~B4RB*PVw$aFhYTVwR!n&=EougYw%G6o9{` zv#!|6pLs|IbRR?@3ZUUv6K!OVJ`!fE(PgJz5+RNMA-lAQW4}%#S_p>C|>J0!mTQ#vkFCA?P)|0G9Gawd<9IDYgIBH7JCGn<9Wvz+LApdk0&?$_q2U| z6xjxM#!w7qM-%KBQ%zp&`sA7r1X$A5gyP^U{uDMK&CCv1dS}osp1A%kMl&mw3D&z4B)_#|XK0jwVM<^g)k_x8gjL)UILZcAXb{&y1m0 z*_Hn>aQ*SLtvOkC^Kg^(T8Mo!ZKZ$h&c0>%r1W{4;2FeiV@rS9m|AyO2tW*t_yFZG z>L`*r5@&nx*zRbJ5WmrCoS=Y0GPfA!<{D?PM6CG`;sEl8k5-pflLPdU;>Y8FNqg0m zR*4SaQ+`jHzOlWn&&#}zZMlwlk)3((Zyw(1`_lVj7;LhPgD$DMNxHSTBuux-Z95&t zC2z=f&<=n*{(~!~=Yyf%8xY<2>+=Hvqn+v*kj)sYmJAygre^&Y#2p4l!TxDkKhqvZ z;`9G_0v$cz4*?_K1(@Vm>kQ=V^J2DFR8Pw!RY*n}Avf(rK1ez}?p? z{vC(a)ru>;KR&;IV8g9hk_qJ7`Gr3RL(QHE2K~u`rCIOoaVpR%SipL=zGXHO%HWiG#dk z8kv~N*jO!D9NO89T>+S_!~nO&ZstKGjPymQORTA=RK@%}UMmn@ZH@}T(1hi6XF7nQ zjn`11#5>6_gh9aqoYN$U+duj1#!MottEUg2Fl6xtX(Bp9-lV78xp<>`+S>40YM%rL zwt=x{8AD>R3ng%Dhi)HicADYXH)7DIO`-1-t7D#uGapw8AKObny5OpE>noT)9pFK! z&wrW>M+8LEKA`hGDw3$nezM4gN|*Cv=Vj~Sx&HYbEI=Ux06UjSUS;^FIEC1K+yx^$ z=a8aLs8avaB%WOa7)TH-KE(T}-!du0-J7OS@t+^(W8Fq8O?)tON^>?`?Hc^l zU0Hkbxv3~O={e%Ib+nKWcNgUOvDr;Oqb%uvRuO>pDM@0JDS=bQGczbEgKgSbrznjl zeM+v`teG5B-RuBWG%lVu6WmY|t{+QjN+5`0L;X_>pbK8!sKPPo8&m!Mr$Y|Q5{!WE zyugBTH*8o0hoplprbq#X9TBYv6`Lh~m7uke>Dp06eiuw?tx8v_sj5u!*3nRoIB@Kf zA5~J4ac2F9&Qj+YPquJUgEtMmMj zx4$6>zt=%4g zYJr|IA!_Q13R$FIhH;K{u|14#ZVE8{vZt_ma#XophDI+4xtz*A;OS_<1dDhF#jR4;Vht zih6$(RSoMq@HM(GcbnbEY&P_mNV6&JZ>l0vO;~I8j)uRnv;^w*P$7D0hUl&c8ecC? zh$D8D8dh&-My|K#{~RH)a*e!Z%rlY11FkBt$}u=%`*R)~hSw6?(2C{k*$`#Raks#Q zji)wuKYPhra=kZj>6NMTr9Z$Ev4xMcDZT-KNfT0!7PIL2@1>6r!-{o&{eQep&QEWw zMk(2g3GdmhXtnSry^rV^1siw4eU$HYj=G=OPdMAxhR@{308SsIHOYmyw>R_>vQy)n zCAUsG9|e~kDUdpjL+dEmt-kR%U@>y({htiQ+IQ%TcmxzIRHa{?@$F26(Wa1K9D1sS zj9?jU2q?gEQGPRO5`Uv3nZz!n)zb0%*tw0YI!%k^vM2 zk4kb;_ftEddhx%SmE-KMu&!(Yc8fV@JBB{C1a3>ULPRGNwFu!sMk)YJJA zP8#{)+$jA2TaBG=;aQV2adZfPt8pWQl(p6rUHVK{lz64-N}LWx5RYf<^rDD=!JNcT zIV<(mF$CHfeBodShV5u?@DWs$*f-a+!>D|sjUe_ODWbDl{}XN`eCWjy0HHQwVKeo z#-aX<60JBegrD3>39uLZ?+imsuwc4k=`7<)T|EX5g1{U~^WWxl23?XAdA&AWc+~2Y zJUTJeI%xuMZ58<-Z1BHq`+_HUW|E^|=7I&7`(P~!y9U3P61E8t5D+CBI<2x}y&V0& zRrZuA5E}Pr++uicBF~tF5}FQfmJLE}!DR~ipQcW#1GwoBWMofx!DikW7 zx&l02jwMroDC;!NJsl?RAcHK(8`~S~VK0?-22cYzOl7jOX$Rpj-?^QpU`0*6Yh|UJ zu)xQJ#R2V^p2Ym^)g=%6BSOd?ZFstE)r&&M+o46FWU<36YMx5on6tlvlFwJWI2Lig zj5fcX9dfJq<@@)pP~Z#upm?ukYu)JeS9TN4{+OK<@u%0|CowULHTOsLYvV*quq~FB z6Ck=6qYXJ)S+AF7F*kgYv?v#wZhVjE z|Ds*F$F8PUQ7i(W_leE&%)d%WU;6{Gqs|4sbZqkYQ`KZe>u7+Bo97{1Jfp{uH zS(t4QAOx;`@fAW?L;cZOgY_UMwhR{a3Ftyxabl4KMAJRRuGZnP|9@1SV|ZOn6t){X zIk9cqNn_i#ZR5mFW81c^h7B9rR@10Sn&dluKmS_SK6}nw^JCB6Gi%oK-1k&?Y%gWh zPF&U<_?VVyk*?znm2VkDAa61B-^U;CJ>rtMyWx8^TV1v>>0)USMjg@{@q)=d8#KPO zXX857(v@G{*~r8wQ+m~SF6Wk2{fNlD9Kq^SUZ42_&$kr@bO)FhMxQb4@SnlTa}t>x4KECYh``)o8%kG!l~jBc$2Oy?I)nhLF}T1GOg zTkcaUCiI5S;aaXu$Qa^On$hw=A(8LgFKk`r1BqoRpe zynBSFVUy+Uro&>sT2VF0xQ_ewSRPdmrR=WSQtJBEYTI)*diK}11x~N434T5%(smoI zFLRB*|2eCDF6lV@OQ?M08;Ml@OSWTFDEuSPFfg(hZ$q~ZvJ^5R>hkG@(W;VX^q>KV zfJ%`do=Oz>Z!5=4j8vGB#1?BDECIZ7>M+XF{2(9i1A3Nlv<-3)g{Hs{&s1)|LKvN@ z+|XToA~9Kg=xEDtNj_zYxzK<1`*grJ$lAcNOugs-3ro2H!BQe$S;mD*Zwh9sD&deA z;;{ReDUrn9==ks=&fz}VB!Sv?zpbrjYGpEoRVE%Ug=c+_lBwxB89@0HW(YS85z$h- z21b6Bwkn~#lTrX4Pqxgswb*y#J8xUV5+K@B%S?jAmBfHF zs|kFFT$Y6@#KDBBlq zd~{^nMMS%B*Wu@7N^dem94kI?nKC1-0(;eN&eXA<7Qj1wLE>`@uJld)hrGUR z3$WXb)$RTE-&|OCvwil$6x$f8mpgFBzItJ|WqJO4gPU)qon`YK1y1=k0J?(Qwm5=_xY81g6>2FvI7UB2^$S-UIn~sUq@q^&>xSvWtKEC4INa5BtIon zjhvx4boztg&=cKtg>6y4N3fY_lga8((1t_#rAKPLUDYvX6k-At!H_d((q8oQih6T@O zG#h|i>AF13CTkfuA)hH9roKCdeM0w=!{)^leE2DKQ8uUgz$yDa_B8dajt35FJ+_W`7V&hE`{y*s z-vlT~&?Pus`4XMAiJ%wtdaC)|R0ik$OQ%Duv|7u&C=t1Ao*sPfQ3xUU9W4q&N3e22 zq4MyrtqnaZ+!(z?t`h%LJY06&tz?cq#{@=k3QAAu0OCJgWfq9(>-Y*K#>pR5QNKWb zuSplbm@DS?5uO2uZ987oZe39&!j#aZa%3)Dk;u;me93ifK-oa`Xf~&+Gli zSfbo6Z+df1q%nUBmjy)Quzzts`k;+%4cSuRR3}y%wI;T}zrn}KG{1pwNANLvv@-}w z6}>4*V0k2|YYZ^gu0x!;xsi<`_5}h5Q{%{?Jy<@zKb#AHd_`#sbEPmr&1JvR@c{5WT zr(j<3v+6kAS#vvq;Rs#fN;rn6IR$1_@Wx#)@5$tC&{6khldgodZOgKa+iL)L@%r7B zUQKh#RmrJ-pr)n8NfXl6{<_v8s^8Viv^7PX@p;CnY2J!^bpksMH7jpr{c^kdJ3ag7 zH0_$9*w9m~YGWVBqof}aN<#sesGkj)sLl_mJwHEe^Nmh-Q`V`XP5Yj-b~3%hU}f@- zePt2|{CvD69$1}z{gbvVeJTfxKWj1BZt%6r;QSddhBqlhF#!|)@uG%acZIKb8K~Xe zP;0Gd*go*lYjF*BV#+x=3QN2W@2A{FjO%uzHgTk#}M zrTku$7{JU7vn4w<=Y4;EU97-25Xu03=Ne?RZ!yV}x1Us=owe{Xl}iF-Ohm2{9m%ZV zpC)t?JglI)hv-jk-?O*uN;8QG7UKMI1m*_dlC#5eE;fTJKz!4P?q@`Pa>HF{&@ zkikudL13j>f6AML)Jp&v1Zh|eA$dtbxVe-X_-l1U-!HeAL30w>k-Q_k7MNVEQ-9i~ z<@PQ9lskP^0*0nrAW|U`rbYKv?gjigSb4}o;2-c)b6SExl}ZJnDexLy0vZY`ITIvA z5UV+|8u&dveCrp*QEhpAXKBPeyzlt$&hIyk%U7v1#YZQSs{24}&HxQO4O`zf%kB_` zP1+@VJ|EtuSMaQkbV*Zf%{#LtYdCSZk06{r@DzRhK!U~}iuwA5fieNU-&Qz#j_EMC z?R*uxskc2Vwyy~4G0GPmuMaG_-yIj~!FJ0z^|p@5`ImUD%HiHDuDK>xFWYt4z0h(_ zEesDLV(_ga+CusN%r!k`D=mEaywrU6SO8$wDY&=}kX-sf4;Pea*!PP&9s>V=&$@Fg z%SR8iFJH1PGE~q}Xfw130r)Tr;7O@GKYnKT5CZ%N+_;a*9!!;^*g_W9tR&Y-r)P z3MqkwvG$=IfzI4!gi=dNYg#r96SA_%!MkAUWd>?Ca&ca7HW5h}L)kKTPRXy6=c(|Y z+eTLWw+V_sxVUk)#v;u^ zMuX+Pg4ygDQUqFya<|5pgjIYG7sqA5yEAfuINQz3BrznwG83{QPpc^82-ACM}o;byhQ(7x@!EmgHJRiN7r8bv5RD04yyBPmiV{0y| zMKg5%^47LwH)&wRtEFXPpiM8UpeYeNYHw)W7_gxKsw_I?CTU-`iq_WN&;h5Gc)Ai+ zcS=*15wB4CzBh-k?9+npHLz1cKr)9f!W?)?ijz}lugO20L@<9vGBnrS~tgO0kR6VzINfIno7D_9usg;&bd{j4-VL}R};V= zR8;WUNVC7ZT%7QbNLC`{x0dT}UTi23_5{>UK~rirGB(x=U_<50j?uFRz~ctiHwGS*#?~oo@%uY);Vf$4;grK z2Ig*4#XxoB_bGdEmr_-=tJIhsuyp*EK(4d3!%llV1Ac=WA4;Ma?i!uVPhIQhO)6FWDS=t3V@$j-v zpq>4N8`u~=i|oRdoPjh3RAv)7?M0KRdB84Q{`*vhf;%&^AJ( zMJH!(kEHMG)mLo(&dKo9grnsf#M01N=6kU%e~8SEJ3uk~yNhaW`_DyvwgbZ>$80Rn zwVxpFi4RZ1hv2yN&9&c&+~XdCgwL`Cj|wtz8K~q79mW(aM?24Zz3p{%$iUc?VS^95^qU$ahhKE;&ssPe>Y>cbTUDVp*!Nd(@^ z<5Ja3AfZb=zK_7h()d37&(v-D2a5uu>71ls#%6jLX6&c6Md%g0U_TaY{4<0ss_(gd z_`pUQZC6i^<=S?3cZ8!!jLV^2Eztq<*_6z9oK$06h%LXs@16`!iMOIgyHmo0fVxjO@AD&O#NxyRL%^ zB$JOxy|+%$fz?N%S=KeaMj@^$JaC-CdH6EODp^ZoBv zm%zEpufrebk#EfJ!2ea$y6Fh=_zrm10?;W_2vdwI=CoIl7wTceei7-g-T+DvgLtSM z?VUx^ptUc)#7976w@!1}R<gDh zUxK%6DjSye0g5B_OEoDwYM!JF138e)z`f6i2khLJS(Ms)j{LZg5s?G@Slg{rQKr_|^FrWKtCe&vtJ56>q#mhq`}SYOX%-Q1e>=`J| zEbs?Sl_Flwv!+DFdGt%e_g0~&Llb0UgwnN4^@2Yixmi3pzD4qXt1#Hh2QiJYR1GdJ zMj^4$Y5&q@s0kIx|H)MdU|Qh#pUFsug1m-(i+@M*Unt;tvLW(Uq(5hjMVQRXMJw+d zAndD-Y=PK^OHC5^jw9VLR}p1Y-=W5MtNhJ1L>d$WykcZyx>;neXCpzH6XLv(DvvT*tQM|~!Bg?f7gXuC2 ze_jO2Go7yuuMYm?8S0tRgkofK2phmf8Owz-%K?7RMkSjwResZLM+lJ+9*xl_%^-92 zyjxxP^=FMRNk9DpY~yOlEvaIRJq@o)Iz2+&44&^+5hsiu1ZB>1IWvo z;~QwCD_i_TL3us%KX^4lhGby9SRNFSrtm1~r>o9k+r7@&eO-!-puu8?K;U9wI`* zZ-&GJL|r4Frn;|cL;BVHb8-$|4R5Bmh=IV0-yheTCC35oYCHE#4>(l=3*jY1*tY%t zm>Hr>-!tGFP!f)@#{T@3qMF%c=80W8Cy8nhRBRcxZ#pDZ@nCysw|6&$aCEvA&6Ya5 zc3>Q6Xacr+a`pHcw-_rhIZr6eJ0#Bo8wE2llUn!$5jmpIF%kKcW>a3e%P^#vW~hM* z<*=G9T=8%%qF_=b6OKbrRmOge2_`mD+RO_6+KQqSN2O@XAM^NxK9PY+diVeIw{LN` z*I^bLsNGP9x$?mnX1#z*NPU7v?;{6Z9|7A zyq1JVA*7x4{fyL%`*aI1uG?**Z#?*j4p23H#6E{X6;<5SJ4;@?H6gatB(>T%hr-HEQVW!) zc|BZtExIm|i0rl5Y;3zG+V$M%zuJSzlMM2Ek-{R`9Z11H?dHvtY4UIa2E?|Q+QAD3 z!1#vU3Zu{!MAh4qo3mZi<^xY$fp;8Uf~}q#->wYLIS%})a|x?*`;)uMGy|)oJ=^*6 zr%b7*z%i~FV*dsJb&h_ZFvk8oxk(F0x~gLEEMfq#qbsS}{(@%YLohd!0#@1E`&%#A z`z&F-fs|dJAjHDvzr+LR_1g%qdG>Dsjd}hB@Cc*n<^ITGw;Gf8mwZ|JR|v_yljjrKD$G{~ACEu;GHb^6P=3Kw z#b7U9il?q}djC5uCa!u=!66g0>#d8mCqY_X7dr*#)SLPMDwJe)Er)Art0NGTzreQX zcq~U(bSE7uObY|jOSXzkhhtlWT)JnX*NM13ev8gz5#H@DGJ+yjgBz-wh*NO3LaAiC z1vy8@jbFlVPz@foO;zS^$pAfiuf2MMHtuw zs#RYI9!e6`mIZLeEF1+)O~cqlc`e<;bmAe$;Zne+XK#SrhHBLDP|q@>0?C8&e8xVT z#XuT?;)dcx*4B8P8+it_UujOTs#Ol?0;{D+2D%fiYdO`t=_vr}haz)ob!BizQwlN= z#Nq25-j5BE3xKIAf9MG1nOrZW#21E0GXXa!{>| zy`SHTr6G_NNFVBom&naZ@`)v$9dJsJ^kjdZ*h63oMI<4^5NH@-aFDg7+=PDidd8j_P(5HehXt zGb(-UbgD>MC0%;91t-M!y}Bl9Ohi6?-y?vOFMo=0Va%b6QU)_IT@m}&)C=`&vG=iSw2Gr3c&31PS`HTdVd6r z92JJhnP&SoHF&V?o%g4*J`$#;?e*_Zigw6?6kQmwZIvbS^y|hjfM3c>mwkBdCK8{dZy_aGZtv?ko%pTrsU%f1cme@nw z*S}SSCFC}LQxX3gjUjQf`OOO^^dr)7;PYOozsrBe2|gkhQ^!@BYr4gjoG_%c4t6Hs z%^sp`En%_F`jyH ztf<D1^Vq1`C(x=sv+Eh$w{69{cLJ3GxlZ900w(M%5LZHdzq+PPHltSZW6`$URd$^~j9R>Nm@J zkRj}7SygnG8@v zg2t-Rcr;Pb(8} zf8`Ka&VzEokY(#pM>MlDkJs8n>h%f89owOw{gu3~)8wWercyjwdBr-UAKx?W>h07|uc>iF+=*Ylr!30X zmS{ywNQtG9it(O2_m>TOdH(zq;mL`sc*RDmRzb_ZeR-L`I3?tBa0^s@Ng#-^u3*5 zzcg5l(=6l0`kLK`rsE#k9+c^xmaynEU=5iv16+xazkT~QT(*9gr9d9>;(vg8Q}kLD zc~xKmWF_-q-QE*R@wenfdV3F5KAMURGR{TI6;F4~MU7XA2Sf$pgh$W z5ib$-B2L2rZ-|V1Rl2y4T`=NC1i*peb7~>&?%>o$!B`v2Y1t~n!l>aGGc+S;HY&+i z#WqDIJt8D4)fK_Gxt`k+T;vyQ$sjplsGV+regUB^-(5vIH^BF z4eJud+`=uPyaJsWzH=%t2%I4c(CXkdK>A=MA4?!QB1aDGi2M?>HZW`w9CrgEpyakw zNjcmy3bw^>%TFNc#j*n9#;YEmtH?#+N z5EGBuxHCK8!nS{8b6G9LLIV{L?gnG?ZPJlpQLXm{)Ft%V0l zu%E5h&#;(HpS{bLa{!ES$qwFMqv_pHC_zXdCW)jsszGFww~^41zV~->Vvd_dN(DEsrCGC(2^XFgVlw@?36 z^#0qMu*iC)I`6b@`|gPnGlGiErnAFKqlMH$-ae|WQZ@jIDSQ^Wh!%)i^g4z~ZJnfA zm=5VpOVdaaa7R>X2hSUw$ziSPT@>}VhYnqEzeyp*(?SEeGWR=%Y%HXLlfHv7CLF+g zd8b^uGTeDc7(*S_0vMNzxFr^(7{smb=9D}PGhF504l%+!b*_`MsmCWuXEf3%7HZ)3 zU66USmbG0yMyjEz7YW0tQLVKxSm?Uuo#<9*+oBDtM1WOs!9%_Y3tB$-c0VqGS#GGk zZCfZ}|GrW@3Pi&0DlQLa%o(Z=2)?AchD(IJ+UIh_!%Wgx2>VIIwfz=1i?Ar+;SfY* z?Yn|U_+7q5UVos)@_p<+<&BQJk+X9$aChM#+1Z2iC|v9UPQR3By{GF6QV>6U>!|fS zOTdbw6c}VBUt^i9c`hC24rWt5m2BCzO7nCtt$$Oz3;dd4Lh|Rm z{VTVqZHByD^}w**+{V_^75-MO(@nd6Oli;o6gfJ5-Dce9(g^Zjveh=4_25tDG99AV@k2d#P*)^=_mpRUa&3`umAN@3z~}+ zunEHxA^8JR2Sj-CS~!icd1=xKQSdyMx?8}3zt{ld_Yodp=6HEp(OBM$KKQKfl#TQv zD@r)-osf^cZj(GP)T6N{Q5@w=Vxme1tJIsWnR<9kar$6|G}daa?m3fvaTzLREtxT{ zm0;JeB`_b`Ps_N#4RzC5rq=*#ls`QL&PTz<*HQuUa)_b!xz0NvepyjhLG}0IieSUg zaWHY@ueKE?*6Xq?J-gC4b^HTs^w^r0z$i1qFeQXMB42lmJa%HVL0zrNN1gD}b&?@o zjjBP*DmVXitT$>yj_3RP)?@*R+8W28SsA$Q?A)*`go6n4_U2dD^5~0~wWkHtN(p3H zdnbRK`?M%{-hfHXgW(AJ!E5~qJ+ACV9UL3C?Vz1A{m*p-v^ULEa9U)+8Nc<9nLtCA zcBtG;YQMybz8)^RQn!H-PRr@cYWuF}VC7EI&+iG3j;2`bja*5VK_~kt5V-TV132l* zESm(7`vn!o%(M%edc0ru@eX|a3S$^Yfk%~#`I7iujs-Wq+!-;{n2jLxSI(p~EWohQ zuVuj5*tcQzSr>){Y+o(~H6E|FelhcnUOWYy(mNh4CoR4z!^e9}-d&@erhA;DzH(Y3 zT&jdW&8%}w)R55Nm9K0Cv*8P22OxyCdXH4c_@?CH}_q-G8V@* zs+wEmdxgeSI;+(~8C+Oe8U9Sk@we^wdRm0_mtT;YBj}xk`MD`D6nEu-ZEArw)W|A5 zmp#31ei71BZ=*^z+;Jear(;Z1iasBGbA8>&8O2Gi^cZm-RA;{jE|HY_70w*rZWcQ| zZFW~$am9}*hy!uX?zclfM{?_vS8LjMxGQ97XP7#D8xg283$K5STn ztptN)?7QpHh)9*?@%?w%#r#Q0B$?iNTSGsmUq&Nr1bPe2Tz*_kBh^Y!g3Qmo{%F03 z)Lc@D?R+Yx5vQ73NDeFPZgbP~H?aurebNF|1)cAR`^Z9s3 zveIZ~a+}#}5B7kP=C91>K0D%bkt2I|O}N?kE6y+-hbn|ybV#PxDm4KBjj%d=1FnaN z0FeBSLuc6_#Fop`LCY}{``kws{+rpYcU%>>1fHMXRa#5oj-2IFarvW~2m3PF0O$7X zPyz7czkSJ)&i^4-(&OD{MaAkYy&7 zXrm2$f(;4Qm!|#M?_De>3TZ}F4f(o4O=}zZQF|v0@QnCE4R0yVV8+KGI*57p55t*V z(j&27(fg#US4lWMh7~IuO_EDOWRjDm_f=$b6O-3-qJ1MT3@ww;`%mrVq3*u^VgMda z_ne?AR)yW#F!b)0L>*n=wa5fhmnuSei8g4qp?`}~A3?04S>L(sM<-g6k)ig#uiLvI zwD1aIC!!N*61p-!Y@}`9w8Q7w7h^OH@>dMoD>k%Ra~M?4X{ul);5451;d-fMdx28w zRnnGrZG&h;t`6r?nptLmc}l`Dc>sQlRFt5nrfZ^7{17AdP8y4H33rYEQWZub!X}Sv zk>WcedMOt8wM`AG@ zWyUN>vl}BeTq%ASf{R#2H7`N0BNCsR!wZWLvmG|ZYLf8{4a)pzxWWxJ>#z%5wKKQu zSy9^#x;N5GZs{u%ak4R!0yScdC_tE=C52WqC{x6PEuWAkP%e|el{HmXc-Z8SIyibk zmH@5H)#v67y*kRufoMI5Kh~HzNmaBgF&0SKg1BTfw-1k1 zE4*Jh9~8Lwn-W=10ojp=D>*AMD`NjROG%ZlWLWE&m$kf4+~T|jHJ!tCCP9%$kyn!s z4JLA1!PNfZ)qblbW~u9Uky(aNnl4e##C>nWnH2p7^1=(R_~m}?uBXS6qy5>3P=nP7 zEMGJV1<&2iE53mR?hA0t6caV}1;*P1&kS2IQ%h(gzn@}36`H7Lh3rT~$bb0@S8c;A zpO$A8;k|`m1D9}@9@Fpn2jl3VEo@)6IeIAe9{$$EtB#O|kiTA*zc+)< zyS7QP{#m+Ew^SL1eE9ra@`tOIYf~l$u8AyPES1AW__z$$I%4~! zkOjI<6+_H424r8e1}2X+X22hYpTEe;NX_fGtk+KH41QoPulF%8mZWHe6H$H3j1y6Z zscRW(Id{KMfFS~6qkpFC#YhRH_2WprAMSO&UW)z-A^#!p1`8qGRsPP7`-}60+Bv}) z(m#6jm!$xcs$dQnD3@%53ZY8&LBe%KWXx5+!xkO#^s89`*ddF5ipbT%Kb4f^u&GO)V z^7-RZTXB(UTm`U#%-ZO8#hN$AzX$&bb4`GoBaChR$&=O#L0%~+Iml6T%)XcM{zYZo zfgu}(kAx+(s%x|TDws7#4$Z4PT(%Y5tVJKDpDd&VGEGV@6d(p|b{)CXo^5S$xAba9 zPmnc4fN~1Fxt4BcY7rCs;S#F!$Eci*)WkLMup*9x2wcj>21)#JG>_K&t5CG3j( z2=lofpo9PH^T_Xt!yQDf;W&19n5!aQ%M{WP9WmTBo5=KmLCuc+E&f27;lM zV0PZfg10~xVoC|c%_ysQ!Q4*P?x)QoRIy;8k-{#oAd$#JN!!A_Z5T4)nXV8ukVyEU zZ?alnWGMj+1(ApZE$S(!R=a!BUe}x~+a!IJhuSUIPq2p-Olg5*oSafzE_VklT}Rd3 z)MevL5hmtDygF7YBMI&Y^`mDat!3^426k-7rB}0YCk1Jt-7bt5r&h(TqwoFYctUW| zr8%Tj-Fv>k;YU!`1-Q>$4GVTN(2y?o2Vi1*xz^{fBtwJz^hHXM2*V`VwLLtObLfV< z{g)&=af}CK9(tMkUXfjzOB4=cH|@+I#=H!6-Qs!xA>rHdg3B+yYRJCv7zW#}@JcDe zI9B*s9Meh7p2^=KTg$IERO>eeb!?cesza&{Yy?<^|7rDBjd4y_gHeI-(?>C}&2O57 zZ>UQ=JR*W~oX^_I0VjH$N7RNKoN#^9Ssq32TvqM1k~N&)R&LPfU-;tm0Z-Ze6ZFdL zGVsZCy$rD8sR9H?7faoP`p)geA>wL=>A4c@ViD@ek8J3DN@}WAS!NgWYKlu|x<*mj zYxSa9-vgp{czn{D{g8mHdS~lfqxJatcPr^DPdlbR*t#v56vBJoHP?v36wp|#{yz5; z8h|q4527di_e{ie20j!JIQsGp5#+zb`GgBJAJo;hfEqi1u4D0Wo=<(~ZkK%_%8cP0P54+i372m%j zdU2RJ$?+4!1xVVPwe@W58y~c(;~ef37pupkgzO0SZN3y}@j#wMKuMcH{SX zOfbegMlz17MD;6<3E-{@v*MNPEX5jFGD~#p$I2Kih;%N{jzc15r#J~#z(?Ip)?MdO$Vq~_J{Az3p`dIOK`;(LB z=Y_zf+wS*#^xi%v%BM!X0$$9P)Y-j@bUMlKg}3LvTgY8qnSk9BQ?vL!69<+K8Nv=Z z5w}PfMdj$kmnAslzCe5&4(vCP;@4vsCR3nj7)#(HCUx@bHBmD?IEO zt4>rT!P!OO@RA4ft14#5eH&kp;U~xgUJ*z|n|3S>YE&ByUM_0JxpcdYDWkInauUSe3$3&nEX!e!c-!#@|2VNVNqFb5&IwA4IZ&|CPa5^FOqhrk12S6A)ya zm3{o5+JvxaiKyXz2l(U3>Au}pP zYD1dS5AhhP*h7HTaeFor$2e<^vU0P z>1+j)Ea;`3s55aNdv_A%GYP{3pQWeSq2*`aqSp8(-}VV~ucgMLHfKSk4V z4h+d;l3j`tI+`UyR^$<7jMmIqZ;idpw?yyxtHi!iftvI_kLj2xoQyh}xwh<==9-&$ zNU#jo*KzYH718n`Lgnq)d%_OE2#rUB#cjxAA&zuvz~Bj4q)9x12U$`^XGZ=`v*Q_* zt9zC|lMXKHvlo_;t zHf(~xGV}*hP>BpTdx7l$mjA4m{w>3%OJA&M!Xw=mtupY{XF83HnW0bnjfj!J&xbSb zHMgb#-+?ytgfo#RqQk|RKl7K|7q+XKFUqU=T$(F2S+w_)#ZBGaS>u7Sm%fp2IiExd zI2?Zx+o_g+^KWE-yDnI`DF2!97W4Gqi6I%N;$gvYg9RgCSIawHvrPkz2Tax4&c-5* zDn3$>o3uPSK(jv_ezZKsQV!;QKk3lne=&X$qUsP zGl+-TxYeOz{?2-^0az(BUJA-`Yc>pdN$>M;CB3n#iE4%w&Th?j@yjEEpM1#XQ${3 zPwQ;JQX73T?J`&%V!+qYV04!&Gp!RYxEofUsC{iqidI`?BgOV#hsMl!XfKpq>@}XtM*%DY_g=$MQZ9R9E`t&INtyKDv*z83hM$+}5UETAR@X&K>n zj!4Va`!%PvwXsyONDd<&o^JGLBPUgzjgQk#8>dGxAD83tYrpFuSC3%nd-u`X7bpdJQ3761wnmgdk?!*>!^f;ArlE`Eme3QNG{d} zP2Tu876@=AYNIz&ZxUvfMPFmG7!GKC>qbS$Gkkc88Q8-(>P>*2yRZ$J$4h2rN4V*R zdfS(xM?>Dy8Xp_QZ^Bbp+rR7ORtis0?tR=jk$vA;D}{kq4w_A|Pp@Vv1Q_}YOGi>z zwBeZx%Oa*h{Zv?2JGkUgC|<4qv!I+8$qE4C#A$)uC?@GaA6ex?)q+kR{<+hiZmlSuIO+&xTc`!eA^F7=D;3Nm*xZ;2odF$?0&?hmWq>lOgYXQ030-@B2~q0vP%@=l;2E z$%Rtfgda85FOo{z4>gkB~*-{ z#M$TkI+A)ISqxK#05|u&h^!Uti%QimyoUY z)>*qNtw9GV7rF3*k6m7FKdGMe`Z)>$+IC#{6|1ByRMvai-f{eC=MhX7Au4Z$Y37rr zPzw-fMfRI5F+7vW9!T7|)pLcZTC0*%Yp^kI?;ZwpkIP@fk5T8D3X*^G-u_*En4B|<8Ii>zNpL} z)oU8~?DW>#%CGb$cl46}{zjwXK(c*RIpt?IKBkzrwfqG}v_pX6FC#!06exOF0Op`UQNkXu25Q_v`rV;ubg{gpQXvo7-8Ql(r8~`F1++cK_twyEP@oR=@E}#}z&>PrS z$tzb1iyT)bw0Yt7gl%1FrprESsK-RhTW5Zwpe>v5_`0 zD_6R!?q+=qcj>DQ6`P|@`ci$l9`e#Kb_aniJ1+Vd&y-gZexIPfUo1J8dCnw;F4qVj zY7)6gKZ_ixZiO`vEBBu`!d6)faKAvXAC42-X(^nehEe~~qltp?48uRq-4V?&%m)Yq zUmKMC`tCp0ErbRsTU%&zl~n6Hu)S6V3tsOwrdyv5JIJe_Oz5oww>GIJ50MOesqse+ zCw7@DO|37M3(7cdS=s>(l6@DRIlZ4gvZzMjuW!rp#lX zPQB&$@(4-tcI-jxSM)fbli714cuhYfvVD+ey{Cx)1##)1LG{pmvX+Hd25Kkc(@&k0Ye%G{1vv@Munv*lPTot8Rl#H$dfIoX40Y{%6Vm73%I5igEw_w8-SCwPZ-Az%_5^!%F?qN8VwJpwR0bV~rq zl%R+EdIEp}^B+uDMb44p8t%&%E1`@9PDK0;x_JORJg5cd24LmibV1w&SR;U<#|41< z-*lEHd9M?mVoX(Rm(c>Xu7guzgS5kWB+36)tBdOU?|;~4sKltCPF<=%oyxkS>izq% z+#i+rU!$=gQ~?Ose>7!3EGEwk_%Kvfpvpf*I>^zToSy@C|AV$Gogfxr*Su2JBY7gD&y7rcH`~Un?g0W6WH7Pa-HEt!3~uF zgZ?I_35D&8cQlrYt)L=Q%~?B{!^6XjBnA(_VTcSeN9<)<3OFLAjba)!I}#l`aXu7Mm?%19~Btn!fcUsE(*6FprhMq@k% zVQtMS@MKvNVUjqnnhv(MVMP_-4m7gW0RrnKnij5h7R@prNu@WQb<0Vi+m}T?3N4lb zXxv4rW^hgVI+lH=gFZ&O#?@C%Fb7$=`N0|ph zgT5@b20U4l_6n+soHxd1gNbmha0b_|Cz(PSm!9qa(bMGS0_4nV;d+)wE-*e8KIWu$S z%-mU)mTN8K+KH@nbak(0(gddUcAnXz+E>|+WxW_)-94Okj>xd&;+K^{-;4ty3|gzC)+aHDWFTIZ7#yC(?=zy zNTaxQzU3=zU7c(K!!KjBpo}oyE?JV#+hViZ0SbD#*Ur-}m>lRGV=;Wh?}ho2#G}}e zR2V!G?>T+&gs{=UzB3LL+@+N=NzdOT#wA?m4^Ss?qi2{dl&4DW^?%wZ>|jmXtN6?y z;Z^Wfc2L=IV*ZMh15Ae2Z^x8=_I(*_c>QH_bL#PD{?sG$yp%;h-4YBlz7L+yiW!A8 zjblc2SbNuQHev`qZ*rOt)K~2;V9tMeQT!wsP5iF;)T6fqboVnGHw@i-h%tVocR$d} zZ8i$^gj&&C-jv@w6P6aN`i6NyQ>^!D=n8&wl-G)8$=Ul#vD7sF zb9WOpj^M}$w-|oNSVit9q26uZ^KFCGe<_OasoTrW-_D;K#Ff7Adf253)Tp~FDScmj z>Y9~(;ob!ui!xS0rElFc9#eiYt6R0oJ(;QEw@+byY5)G&AaugR^2j=AdV35T$h&za zk4Xp62}=3I1~-_jip5!6kL7I2I)d>N>+8OEXXEBKZ)Y7{T5!YaVY=TM+&s<)%Jn%%x81cD~sd>w_Zf}2zpFN~_49_fqhdG37O>xqp*Gv0M7;q24XU(Yn0U0LXkOt=)lq^L$ESI@YU z5cN*)Tdk)p**nV%Zkf!*QkR5`!y~lv7BP>XzvR%ke=AAqUhH{}$DcIqUwvBSxV&cO zI#tTubg}cnz3F*+o|$*639UU$twOO{53kkEuw~J~}Ud@FvM|TBCvy(slsCmt<%=Xia z3Wi!^OCd&^_mfrY+#BZ?^}Q=h>qgwR@y8tkjkmNoN?U$3Jr7fS@9VvGNTr|F6xCuI zy&QLhY_9RMe|T-d!&b+JAK;zdfjPgBixbYG%Yj0f!M7SZ-Xv||yIpPJ8=!K&BjYbV z=}pZ*S<5pl6YV^?CVK1ik&^8Gxb!FYj;E<%w5n`RpznoK-wNAqY725mut)ouKJKVj zGY%3gKh_r6JfEceQBY8Xv$Ow){cO*-2qx78yyh*7-R~$1r>cuWt8yL9+WzB5UeG;T z3zk?m+Oi6hzAp4QUBceNEce}Lv`kI;3JZTjnE#WX*sHrA?Hsd;6zF5u>OVha(j{+} zOrzzX0c(RvA*~9$0Hs}~JqbTQU!%PRXM~rVXq(|B(5{_U2VQu}?$cfeOCfZ*7A!E1 z4`>%)qFNtqCA>bq?x(GR%NYZ-1@Kd7gf<#}Ry?6Kf)}8*XS7G)@}Vi(bohCHmR1pd zZqCzwho7Hc(?akwb&1vsHtNd{+7`HceT()zoUZ2L(=~wAtyzzrjvCfy!%P>DzokI;6Sk{Hi4FtHi5SzZ!*cBAbQy?VOF9dfZ^xdl9j3QB z(`CbDBM-X6a5>S3t`_E#44^B6pQFLpXJ8ne8(e-GftAaOr3*X&%Dd@wDzF_Y7wH&C zkTiP6&qEx_2VCX6*$WJg7LcvtR>N%!NoR1oS74bBYQaVJ}5W*Ozar@22ce9VwzvcBi)HO1$ z8j|vH>Ak2ZqBZ|4LEw)mjOgz9W{TRlmRX(Nn6X3dPTCL`OdFCgEcyZ%`F(xxoTV6z z5*v+DIw>>H?Y^h_3DQg|T&72Q+eP)s+Rlgz&}@*@6|aFUL1>eeLg`8Rb&Bd6=`}~R zJo1&z!B-JE50sp~G4tu}^rxdQ`tXZum6EkFKO}PB5e&-;`#%iBjG5YSv_AA~^y!S_ zEZHqR8{Q;nd54ZU=XTF>F!(d*Ot-kIo`l9x`q>AMa8;o)967SAiGC(_P%#hkYO z@(TXL!y+TIsb_goFQ2eXITfT48R`Cn+v}|%t-8|70pF_A5Bf7O_)ia9IUQMON_eOs zaqZ2bY%_YRa)dPPXT$L*pW5h&Qi}H{OVkzx2ev)9(aT2C@5qniy>q(mV8YTL`f&L5 z3)zhtE~7HR^AxNhWtn&sL+34JN$$|yC!>D&qU27KN_O|jrYPZ&6Yc0%jp7?+?5mH3 z3TjXTudHtrZS+1n$h(4hB%%F1MXSE%Yqv@Ix4T3KnPtNm6uam?jdg!~#&g)|rjCle zW~cv}^MFqw&F0qG)aQEU8~IvKgecy5svJJZ6d;}DY`tlP*D3sk{dB|a$AO0rvyJo% zKAf6tcCdoBG&T~f$5U6kjv>G#oxzP zHj46J6upS4aXJ+E()U}z?uu#7{fvOPrg@$mqnX$|$q|Q+8-v#MvESHJZl!hJ?Ei_q zNoVH>|GiW&>0OvZ^)c~}8at+s&e~4K6LF-dQF`5mt_XX5nC9ip5jA*A@agwfotn5q zrr)5GkAkKXogIJHi0Y5*=LRj(e4;hVMA3beS#Cc>cMRIItNEk_)S71td@l87e%5Q; zZJKLiZ;UQ6sy3P%Z`Da@y&q$AG4>%H!StIK-`=lA&h02KU$A$qL=MJ-WPl|98U_X2I8^!!psR zADZLzY!4O5WQ}#dR@&Z`Ris}}p%e2X<@<%FPIDubDw!u&+k=vvJDINGuD$z8aVlLM zQ8@nM7PsESGNG`w;DCVOyOU(P%7!V_6E|ZipJ#?pJU!3Eq*;9&BT;o>Mw{Tyv*U%? z4({SsO+s0w8zrGf={QQ!3=T=BNJ@;aq){f^z0D$XnBlN~zl5odU+o)huOR+O<*R{| zul3(sPoAw0mhpIPmSNX>#{DvL16g_Ftmv=>w+CKiaZRB?(b1I0ca{^Xjq_QtOt>a2YaOuU0am}f5%{a_?ICNHc1fO#c&x+8xw zp5c9pn?$yoq>j1S)1}l@?d$xPD4KSDm@^ILy-t54kiz&zASY5$X?~HXFKIi~TlE21 zRW+pDpl}(Qa<*)mcTKat>uZeJE;Zah8^{Ses?@VivQF}1Of^+&@z|R2jHJl(T}SR- z@P75#B~kJvrC!Bi-&j})g)!!S?TPZ(g05py*FxPi!5_*lIDBYlI_jxnm5^^fXRQxY zeo9y3^EDQ?sCMGfECtdH{bdn3oomsna_Kv%D|!KsmLN}`dNoU}*lOUEGx=GDX&xf;CUIBWlX+VF&VfUhU5kc%L!BbVue6?NzZac)*L1PsWRHO}TVJ1CDMqZtMGpKl z(2`?hv)tG9feA0^6L=jHw#(|C8%BoLY&-Q<(A}}RSD@ZAk9t34M8&QvGHsW%d^#hT znK{&A8~*fR=u0_eTNYI{#n|?*CYNtsT5f4_CH{4?vtej*de{fbkSI;lbT%D}h`H4r zWio%?(#nqJS2Q25_I9b58z&v+kxdP1!-A9LEQL^Dv(WYJs;jT$;3MLD|J!H&)Dc`>R)n6%{w`- z>o%90f0_mA&c9uK+IhZV*Gad!u9@O0Rcma=%|reX9XIP|6F3*VoOpXY**9NqYS^g95+YO7=f}ysa);Eog4BZ)S-! zHSBAXe3m0cq&IEw<;G0CUZwGr7vsMMJ`M6aQlAUEzGd-NPVn$}&1>n~BaJ(1vpj;U z%PlX;C-ti$&9<>i^!^vIr6}$BF&ggnnQIwm82j-3Z@(wjAA|bbG>t;FwR!J?$vgc! zS`V4LAHy7dpHxd#Muff_S~Pq8=-w0A^Vw`>Hy_&iek5hR!**dP?*;G2^VY-aCrEA< zl3ZK6-}`j?a}oWNi=62Cwad?wE(E&=2cGu_e;|0~^nLk8;>peEC6m~X$1x*^X>Fn? z!R-J=s*7Xpb&D1X8GWv5g_om;%s5>xE({3UJ@I_Qs+>Xi;I--7CGj%zERo`c9wnVl zw{dAT=gE7GJPWUA`Fc#c`hTi!C!N>sUt%>mkt6f?0V;F!yJ+cZgVy-JF|Np7FK!e^g+<&uET=d_Ybn0h>_g{fkN%bQ)z>2uqfW@s^DKL!S+a$;tRb0u~` zOaWa5QZ~ZY4;T{dsGe?}7PT@sFrTlVMH;!#pCx2slj6?XcTvoP%%k*b)I>6VjZlD- zy55&$V|+y(p0|mFFS9`jbNcV^J9s6oK~i3da<_(cqy^2H2l24ZUlATxH>2B1OtL zZOFG65l3QANug@(bXHVxFY&eA{Ewp|mwA%{E#5Rh$$E##50#voW0!S!qxNjOB*N#H zAmzxgu#u{_t7qrMVSyZ{<4zrz;W#U=pkpjdf*$2uOL{}+?+9P;Y%u>mR&6B9DrenN zzq|!q86eQY_-ni4VHVT!U!-0=H_#<0O?|%a%%zbdVVBAnk`7%uHf%I5K6UR<0Pj*> zO^qebmG?cLcIvs}?h}||&J`RsnS9kn5Pn|5vMA=u`N{0v-p75nX=*N&Y!YB}%qti0 z?~+$^P*rrK;>mgjXmJ*udXO7@6rCuhdFE?QAMHS6)G=#A9jBo|tT!u|EKz_-h0y@ritD48=_Qu<-7XF77TYIHs^tTvd;WyEkDuQ)inXI$}$_#8U-t);13{b8Zo&7%e% zIiH-`nRW=^?ZC_jk4?q?SW+V14I{CCXLp-GB6=Z+!%I73C3mFm(~{pz^NZ-JoJ(w@ zy?1t-%ffur8~C5!{4vWWEA7Q1cjL}OUvGx-;9Hfphi&fBcIUJ_nD6F%}9;E&WKt!P%ysA=!so9XMwG1FZZDA}{Qm5qf3b5Po+QKQp25ZN&JgKuI_Fc2UDrq-lo^>PiTuJ-b8As$Lyf zKdG?7UBDWK={B%et zPCWL4*+KoGSecXHcd;#KeN&lxWLd_`9s*w1`JTLeg_+)$ z?3q9|!v>}3_^?Swma)lILmC|}OxxxTwQz1d%Xk$9iHdEfN9~jDfxhrcYLS!an2I{t z9GkQ9^9yust5Y-J&4yp`%{#%*8}Yc!A9U#QfZ6(~C7G=5uCc(^%#$Lb`BC7`l}T>n zwCMF!A}iGRC!O~UJaQBFtYnNhIFEkrD-Vy8YiU>EQtW#0_{tHD-=oflyyJKZJPes$ z_dV|zxv~i^L}xrf6{+tu&}5nr7h-M+koFgGUvu0#mIiG{u`D(FUsH2T-0*s`{ause zqm|iN61s`Sr{w{o&ko6B zuFSlM+@#94aZ`=?<(hwkgxRjGW+H_$eYES{3)dPcZ6m^SuO`?o@^#(ja_dbR$euUg2AW#IPEoM2^iIfhMk?Bm^lvHnQXwWq|dR9{d{>%WM()HEI;^mhHZ zWm1Z7^i9^r;DDD$o6V`39%nUIvB(~u@f|MD*yxJd==363T zJ*s4vg3T18#lzRL`o_DXyC~n%>OK$Ty&I|bYtr9#BVK)iT9Ky$@7Sc$+1NC#K96HD zx1}5uK@yz>l4v)~v2D)Z8oIpbQyCsLkEG~JyO^9OMN6kZ7Ht{446^9_e76dV6mXnU z_&zyL6V9TCZ?}DyqfsrEFhkp`B$qrboG0_K=tJGSqNO*1a^tyOqyxSOSxh#rU6WS$ zDEC48Id?bN&zz@auKR>0_wz?-J>rmeUA`N`f;LTKvB3<{4yhQ1)sqn&r=A_UFIc13 zt{=r;bv!#Y+Py#C&8L$0IjuD1LgVCk-&Vk5$sbpPyhgY!#1q5s2#eJGE^5#V6+8B} z;lhGaPt#HMPw}1{_N`Ng@5tYBj68Pfb@7|p6jFL~CzBf|g<}2bnZhF;yIfre?T+b~ z9ca2-YqN1I38O=$@YRA~4AcCbi2tI{7rQvE@9vt77ZijFLhUQ8i(-aIcaNwvYN7R* zJT7>aX@nnaUYBEg_tt77aydMVipc5*1;y@6jl@{1P1~KIt;ne+4}2?1k=tiCs<+1= zG1&sy=aygVNUa}^R=9_E_6PTiGyYFUna@;pUA8AU#g-LRGMnq6Ue@ioti>)#*K^u3?{6e7d?ZF=rW zQ0QDpeBvM`Ojl#4e%``6j<3eUaA|a9N%>p@pInxT0y@rTjZ5}W?cg6^n%}VzPUm`xiFx7qH0H%w%8A9> z)Y{f3JQh_9-o5g~ca?7wl}18ZvaM;#T8^9PwZ0B(bn1WjKCfAj(Nas<`*wL|$gXQt zsx3GNZI`Plr<*n~A_^;3kCVY*f7ovCcZ|UD&JgN_8cdrz-l0876f4qtS7W-PQAgA0 zAtRH4yMgGrC*SU`nN_+E<^|Tw$n`nVox!N6Z2v4_i@b2|v(^*iY~ibhj#1rw($6Ni zjGRcz`kbvXHeP;ta(iC+Yj-nKLQY_v#Q=p>FHxfjxg>jI#(Wfyx7E8d>apT2 zzYF?V20wYWy_7SX5A0YTqM*L6quG0+%UMgSMUT=VRrYmci~QDyPSH=&UIP|c%pF(8 zFj|QZw5)3F#q92ljH+k}RK#_^VqP~g9mH2rVYvYbYp(DKf7nndiEv#x9C7+$SUJJ6 z+6AYM!ideOYlbSNJ3*d*y(L`!vrHPE)01iksPAD{bhWaq~T~ zzotoZzTjw@tNbfFsW+Rc2A@O5nvXl(i07?ks}kbUmZnS*;UWg#S;)TQDuvIV?{ko# zLU=6Rt2L;3_looQAaCi`1f4#AWs6Yd6^~z%#LaKgm}C+Q=LH}18^pY=@VLa>!1fQN3domcw2 z?Z{9wCg~iB@3n#Va`cI|rHt#A74~lq2l`vQ^)HQ+oSb3XM`r#-gZ@wmMqtN!OXmJZIlpAkLw%htD1}7`hm}Xjkl!7<>BGD z2l7s92KO-q{4q-tcXJh^FNt&&*2ocv*Bbq#(k~)CKH<;w{-8Zu-m{?Uj?Y);YSzKe z{HXngzax0^(_Eq^vC`u0!K=Lw+3^^tdPiJkmo$EonoM4Qz&?L-E&Fti^m{ov>B@4~ z44T%{jYm^#=xZ<19lv=b8EOinv(!76`@qmc*vT+t3KMWcfp{pITN+(m1r6kp0;IrTRqN^xc%csU+;+Jn0 zz9d&l!TS(~Nkwfw*a?pK*_m>OE=A(I53RnE&MSB8#Gmd{4|%Uj>*R6hDL)N9Ewjj; zdeOT1#wZ(pOz#QTk=n_3L+&n$KTf z9uIgKdGgBqA_hIEHpFHZ8_fwF7PnVsq^+BjXGyw7m?SHDy(oVA`q~!(wT209v5~3y z+FkaqO|QN<@BO{gdD9tva8tK_Qhb?=zt{wyC!1j9dKz?$>nM0_?qKB`ooF-Jwz{em zAGI?dxSgxO&tt&DWOh|}>SL7W{esPR4G)tZdsa$=@ z9v#Q8F>?Do=TLC^P@(+9&g$a^Rpm9MN8aUELZ=6rl2Kgp#f&le+h z?@@i90tQo;+gxZjWP`V0dgZ|!4~y~Vn`SagwyNTKm%gFInP>$H9I57yNj3Fl*DHJB z`R6AOzO#p3(N2ZNJ+|ZSH#v5cR0U-+*Nqaoobp6*u0%@hE)U&$A$Y?=xb#)^H;*+f z8~G94nxO}I{bR+~zWd~?g}52EFwTd+CDlP&{5GT5()Tns9_P+%c_^N#asDk@J&u#+lDj9fvCX7J zk1}o9*mN%?OB>x`XW)c1(*>RG6MS9y zAva_PF_h9pWmL^=Yikt}F#;S;y}4egpN&&5D19y?oXyS>eWo_C7|^d=0i9rP^y?P? z`PugUQg7U=%EzfpJfjAE*;YgyRa4hvPTbA5`Kp$Prj#Z7`7Tbxx!)&$#F~Jy*=x*5 zLTguS##xIu%#f>6IC+LrPx)NBLPNk-<(#WdrzGZ03&*s=^xd9BirOP{TUQN@@3l2! zG}PvyvmA`uj}A)e_USnPcpUUITX4`VU#U~2V7qOMSNoNS3xaM*FyD*e?w|nGB^tX1j5RcNarfzS&dXGg2YlwB>&LNdHFu8$6zp@BWbsdhyPx zc#ixz8b8KZ)O77$I}ut9FJ;~oc>L%%*Cdalx!(={dQ~7J{|GfXpfVTT zTAXrIuC4p|ia&+J{jF}MIVQE0wx->?(z68*I+%Wv2VN3v_+|@DMYRw6sXq5?Iy~dm zlsCRp@!-p%YxN9Ev6^1>RAc9JzM)1o1XBSKYdbnxM{3!0`s4*9NcIrxFFs4{hqu%VKChD&KVVbU+SFVLi@*Ccf&hfjK zek&}6TRSQr7+E0`>ObMp;9v;(IX#`i)%`<@zjo+TwS$dYbc>2>#gQ1 zVco5mBPwY@W-lAN1JG{uvAvY;#ZiSA`?jEly>69O{xxJq_~sto3y2Q{V_ zuXEC%R!;Bx2?-DCK=jM^9-EqtlfY>JKo4W7q8(wV{6Wo~|@TZ6CN zlx)#8z}I!mcj)B7bz10lJGjDIOoko-|L;qV?g0-;3bY(}oTNZ&fJYStS`9qjQlQnr zLx2*kj$H2@N)J0&$BIIA_Cu#A(URQojn|H=S2oxvQK+fIC=@kV68?ND@p2`g2b5?I zpkN+6@MjdE-;`)hL`ZMr!FgQ{6e<}kBIrL7;8}^6r<$9k!T_cDqbU(i)WfR+K|rsh z-oKnw4p1x=ng`+HbnamcCPkqP#8D_<-~Oi(ug(YRq(Tb=BbKOu5jG*YM^ABzn;GHZ z(-Y7GK2j9ih{`gxxkm6~4Lmj|6g=qud@AwW!XUE)XbGg2jWh9OpNLSXm!P>ke^|h? z67N_lRB~X?A$jjUj2-}RXFLkUj>Cn?gt?e=voeSwa%wasa*=7>?DHp2h>IG{fd8;Q zx1){=DxlbF`*555&NSFqUFQF{Ro=}|0ySC~vFh+#zElhN8Ch8c6p9b0zUccf7aE$S z-g7(sj-lKPF$$GPgF;E*u!asox9QNV_+j3;Ig4m0n-&d^lPzlCvcjhblzVo78hVts zXIe$d=avDWDI91L#nJR*3SlP=^L9RU()C0rbh#AGh#1;+={Z#=kkJ4#f;ci{i--&{ zkO>M5fu4w?=@E(Y2)0jfEuKI^3`c_E{l0{MpgV-eie^D1*j8$j;W~_fgb0oV=NckG z2MRSIZIe6Ly*m5BTWP^~X6xv#_5^JYVp`qs(YAq(S|P ztDmL-W@7wr^!n%swKJndk)UPDnwKmKtucdU?D{~&ENCg9Rh|XZ6cPqmv!JCxF%>R$ zCqdOLXc16+0v9LFLZ4aCqHysv9vV8xiYCX`D1ww&(Sk_r!DsT`CV-hvnTSGxaJ>Ji z#B->J;#tw$2$#8DBi?5azmmS9P;dAirLdv- zKnt$J#e3?|V>V>yt-!_5BM><|f*xcC#bk5HgdK4P1}?^0L#6C!exwamHmN$>VCiFb z`*%uhIzg}4(K3i#3(ozAwFL1|C?R|l1CCwtA^4D~2|goa#IZNP%igoTBw|6K-rJ&3 z%s9NY1yDE#S`gS=$^pz+x&w7^AT64Oi|0C_Ee^B*VwJdjzlRK1;eG(iaQ)xb18H!g zxq%K>P9Vhb7>egai-BS-T(ld42077^ptuE!1ldmsp|V;+HY6$`4Y3=(G`;}Zu>)c= z?xJ}886kA9o{$5I=R(HtgFA$1sGJK7jNVD8mJ2N?0e5CZM(cJE5TwaN{o@G6SwfVl zj+WUmNi$bZ?*J%Rac{XH{UTqr4Ep~y=ul1^f86^CC2*sG>%f1IW|u6?o_Yml-Vpfe z5^nl1zXP)hBW;*pL~Tcbu+{~70+(wOj|dvzMhhWq^m0)JjzHNq`M>qvAR~gBUlU?i zc;G8F9^fl&Dk8{iiI7?1-<%|**MN`#=otliaF?3_W+LeMIw3D)!oN3ueN=Y+NI(dZ z*F&Me5ZM1z;&HMQL89LYSs_YZ#Jw!Mpu3KXKnlFbfN+M3$`Vi<@1FJMmUjccfllfK zRkH2tfoH-qDI#c*oQNGNNJTWQ0Z{@11%$`|@$;eSkZ(ZQnj~33YJ6x$f_ha1Lqj7> zMC3?T1KOOx2P*W|hRXTSB8aYUUqXY*;Ns2+sFNQVmdl_>P!UK3)fo`+K@tLp1|tMC(Un1P#<9wHy!zt&h5d5H+Dd;l07{5~nD) z45lVOP=MP3pYoxr!pJZg0;2d-#n6f{S_1f5I*JGliHm?as#p#wh@cN4ZElY0lZgOH zc#aU5r#P1QR6yw>Ximgl6W;L8vjE<-{I@!qS|TX;DG@#NQUpzl@MhL$rOyM6??h23 zVH}OT9ecd$5D^2UD7rTfO2`CeB7rkFKt2qt*#A`G>GkgkM2R9%tVk3%gJ@unI4X)} z1?^gfi5g>jL{2d@17b$VHzLa+;2mEu5O6z!;MpE8cRlFMII%r5bUTTu+kgp@pzCpS zFvht(f%{@;E>PpV7^soq!+*pBkVX#?B_sjTIRGn(1Nhm;zu>%w0A0JhSJ8EkFh;P2 zLFEC<`1V^1&sL$&h!7WKIzU7O&HV`!(21@iM}UKPfOWvB`=3fYub+s3*q`aGCIPD6 z*xIX_<~b1^GzZ)ajLLzL6cjOZTLPJRFW@p0J~6~SOT+|$uL#3TYzG1HI4Lotd~h$a z#LKMDRfDQ)Kzf54&sNEZp&ze_c>gB^n%PH{Ipcw_28JhY2%n%LhBzhB%+T^dG}!S% zzv1cvsSzT)Dj72g$uf_AXZt{%6n#1JDSNr|f?!@w(KYC#qnxH7bQBh2o@;^|eF_Oq)%u zeE{z9HJHYuyH6v5gr(6O$OKw*Fq8ZRl)D1u()+66-aKXSA3u@aDc2w`=(hb{HuQSA zz#jh9)pQW9amRd{$$wH1MjFkA)WUb^?t8ciR-l%HIJNAWBmATm@V?DEFaW}Ar(BU%?R(Cy zPA+F1NSOmEko@g`D)D~1BT~dBCqqJ9J@e|w82@vFh~9hN_rN$YU>xq`R`y1uNU>5U zvG##3F9IEm@9Bqt(6BU`7tlV#wEQ3}jaLTE254$BfOhy4mKG#~76P<zlusUT80WL^l# z0bo7jFM!5`m>P;O04!5`P2g5(i>u`tk4fd%U2k(Fc&rV&@e zG**aA0S$jkoJ|4HzI9`19&yBUkVDztEE*I`Iw}JO+&TY$2i>#BSpHfC#Cs#K4vR@F zZ3F`TVFalyP%fbe0LR&VfB}kD+}mD8sqmhwg|ZdFzD#ie%fO+8CWi(U_x6}lAH-~u zL89300S=6ChKuylK0o$cX^PCVcnqv9GfF6wI1VexH!Leg32{KV60nEoHv=0zM%PM=3h&{MzlLDk<#9;Bk4c&y|SbkMi zWIQ{n0v)!}SlZx6;Q0N{+i-vV!wt+f60m$K;`pTfFqU6(9V{0wPawvyr~yS`O8Wp2 z^ywQh?SCgkwSLnZgFsscNQc1b>Hen@Ph15nRQ7|I6XFKF3tTz{YctZo0`a@V>PSy~f`MA2zW^x>B$>TUPJ)IUH9%tLZTc6Q zp|KZj9J_+(wSmR+AlfMG+Y3jV_ZENgFKHk#j$9K|lW4sU5JH=@BnOZL16heardwUtGe{CUlT|cMYb6L0B5EF5+AjT|nC|!qNh4yCaA`Xgz8WG;`D&7Q*BtFQ4jIbG)yb%!P02-ktipm z4`>39urx8)ER?Arao3}|wp$Ty`En;3T^$D_rXp zA~=Y{PxWh`p9P5z2tSqWz1#$_`Sk+52maarRN~41hWX)hwBU9epKcOD4~_z#8W^IP z5FN`c(bK|U7%GDeG;W+8qDEK=jlF$OLNxYBaC0>Teo>>x>hOC=LW>+CAc_p^8EL~n zQll#OZyxNzg5}RPLK8#d$Mzcgu|LaU9Rvar$A9MjIIb*IRKD=s!b(HBrTZg+-w?z0mAH$(#x zp6Ofym9iiEx7X->vHU@zq=Znm2^x)f+$K&#_9EcFWcRQBrPF`$zcfLH%Wv4mzQlci z9xBY-3x9G^;7jlzatna&!+mGQn}_8eRwX5e(%tv?e~TUHtOTbi3P%4Ls#^f_9|SJ> zd=ykCT!9rAG~G*D0{FvSwt!0(!K}i~(?8xsSP8WP!E2+-21q)hZVGhB+`;OAtVpSm z$b+;!vaLZ$227PyFja6DoWNFupA;za^>;nx`)7pYz{=J-vC78G&_vLXDKeawV1Tpx zFM!mQlomPY2kp=>1L(27zfe_oQaUKZ42hD3Fq-ygAH|-%ewob={sjC<1pJ9R;t~e- zS&1NDZ_)#hx;dgK*pCzqIh%v!x^eg~mQp`bia+7D%pBA;{p2rn+8oV_ctaqly7U96 zknn#h9Deo}zmx^iU?U5lXnPVDAcL|188rANjGE43QQ2rx8f2W{733WQbdPl`-6#k6 z03JWcsmdYG_v^->dK=IoxW}o1-$^00OQdX2_A#WHC9sl>pU`D15cl@O&&(-;khee{ z-XwzKkNr<29@`GWnpX_W*jsKDEWv7Z1VsjY?jU7^0xXdgH4P?u67CVZERhkv02Ad% z$?~j_qppKiplC+D$0Jt<`WVjckQUr>a>#~<(>geq=H0I!4ql4rJps-;q*PEO`j5bb zx4e&$frCw}M`Eu|^Po7~$bU5Wzo5aTiRa z;v<6=tdYq?Z3D`}LS&Gn4O$Q}IBcc#*fUT+3kZ_9E<1h*VPk+Q4bU72?>(OG9wNZY z2;vYfZz#C22vjma8c%^Y;4^4209>Deq1bMNCMRfD+Jj%(pcxTWnZ@0dw?I$Pft3z7 zq{XW3@rv4_`GFQwTVQgyCK(iHyLUXC<|?i12jud=l)#-8PYe(?=0D-I0G3TM+as30 z`OmgB7#TZ822tA~j#0A%=?^ho)hmCKL;F zk&-d}$?l~<&5}21H`9fCeoYc%A;|2<7Ki0X_HE zJj^PK%=HNr4_goD&8Hwy#T}{)*;qrx`9V!^XCnNZyW_hSfIkPU6u7Sem@i`aC56eb z!5x@fe;im=0qp}s(0ws7Do9lW9vXR$05mDZg6=Y8bWmFZGGxqQp!y0H=sZkD^XKTX z90u5KV1eJ7;B;`(5y@e{z`)YYeSjWXj@>iZN|k^l6Krgsx&G@}uoNI2{n-UfN{rK< z+d>HA@Ar_RPy^u51b0o@x&IeGhb8E~c_+l)k4~U=ipPJUVveAdlDY`0=?qY>;lI!r zKmpDvgn_oPzknHcGFE8K84=rtQT~a2lpIoUL0%vpcLBhe7yAG;RN{iHZ=EneII|Ck zgE}}|0qw*~NW~So>S7*6_IDcY^bSgPMIQ!yZGexUdYKHWjU(fOe!C(jP`Cl2@fsOq zo5O@9A%!Kq~?RSKu;4h?Lo(mi)ajiG-1+=bE*y zz#tu95N<^3CfO56a7QyDZ=qKDq?DmDP{Q{hgQR_db@3(O?c3hr(!4t`hl?HyC|)Bw z0Np4>Tp@W909_1NV7dm_S!{y<2{7=11q(EtL~|jtBqAvPwhORG8Cb-PGxzRrU|EN5 zlTkuqmS{@k!bM!&&y;Ks%>4NO&6v#~DPOR-`80q7*8mTs%4iQzrH~+2&n*um7!ANQ z2N5i7*8_=MOrC(YB(+Z?hDiJV8+i2n%swhYy~WEV+aiMn_hc!iDtD* za}-3W0&qhMSi1kI#Ou_?@*8-e*%1%iv8hP?4Pu0j=fBZs)Bwv`CU|`4t3oQKtr?0SWK%xZ(&vE z0n~5KM~;SKeL=$Im<7|=pjbX~TF4=L&vPlK7Jl6aI>0TYtJ zrrQ@S0M&_+A3#nofbwt{a0WYX7-;iDvJuTgpu$x@P@xIfe!~ElKN1QR`~mZe3M?(g zA4$<5m_~UGOPldWP7!xt8bK|VCZR!24VeWXo^T8RfZHuBa9$gjQ4av5Q$w_8EzW~X zeI4Y;;P7w%Q;C<PqzW|dP-%hDB3$W)D8_ zvIA%s?%JZI^p_B4_}(u4q$r0bA>fBE_u*z;XI1z4L8u5vEJ_OpwU27-1EkRB31IIi z7M+DrdTlI96M^PORptyP9 z+tCQ5(%A^0w)*IvY$OteB_n}%KSEy;!TjlZ1sp*A4h(j9Tq5gJ)WEhHF=*8(&??;U zB@dDVAY=A{oB>j^K=jW5UHD11Sp5JXg_xrDUNQQVK%caLo=u>KZ$Es%q4c=}mVa%H zoCbNBgLr?gu8Xw`@K=MC1lOB(&M-eG6ukkA-Fx{n83ihKJb?u;KS1Py-~R)rNJRrc z&=U*zM+P&>o8gIAf7J6t@|`VEdy8ETsupbb*0_8WQD0 zELmj1VOc$cWuajOEO4d^s{9cPG_$1b1B8$|Ck6K9HsZ=qA4UFP;7S$XN|`^kfoCON zYX%e?ht@#2E>|RehllS8&_TG3iw3XU;*iFXU|_dggoU`EIB^PM=#wx7>7RECE->nl zk3~x{NC0YvX*)%*Z4A%~23dco;sH&+Y@bFB8O5XN5F<2?hB=54fny!8C&BIY)GN@F zcr+hW9>15ZlR27>(SqPQ1`<)+gPR}V#ale`rhp~^)MQ-?7a5__1T-}iuL0~mo`Cqx z8%F2r_fhz^XctU#YS^byF*0z0r@yFYNkqKX60Bv4N0_HbA`U{;uP5};-k`dH68K9g)`{)5ED;a6^ z4H!@y+Xt{mR+@LteP{#q-vajHrc8z7`>f#P{|xd@Fvphy4R&bQPbFT-3kqm4hmsL_ zXNoL!{ga_*v%t>SE&AVdx^`-hclHdL3E}NIBEHoEs%-?X;c(aS$WME`qA5rO&`bfQ z2YiQIQjpDm7F=Yaf~0dmzTKCych`z=?D&mRa4JI(_^&z)H-XVHX^?^!e_61^#|ZD&9^XF>EPbK1vwkxs@NHPtu)oCbei0k@OmJoi~?p&MJE zTPQ{L)~DLoZ6aSV0XVr)s6&5z2%eRAhkXAMa@hs30N!>ZH61CEV287_C{PpbEME)6 z3eBb>%R&wbB^o+#4y-06Ah(7cbB}~_fA4ej9B5``>RvVMl>70v3?qOMmfCi%{+#Z@8oZZHEi7XkOZ0$2gr@`USruJq<4C2;($- z>@t@1qZ}|EK4Af)n<5?PSiFh_b`&Y;{^Zs!Fpye}1?oL1iJ+o%BvRjmf!y(ZfM)OD zH19l2pW37Q15NNtRm83Na|%`SV8(HRH$1p;tL59i9wI3FJQ5UZU_~=KSYRF$fSEfm z&5Hucxd>dXUP(y;DP^?vSsbwL7+$9SDUlp(b%`hbcbR!G# zc?%50sO|$qP{|WY*1f|Yh&3CaeA-ylEE|chUNCLh2&QpE)C-_9YQY8y_~jl92$*33 znsrLjyqvuSp!t=;Q(fS5B`}V0!|96SK0Ez?xA*Vuq7|P3{x*=z;m((Yll%OnQ2i$5 zU-QK+4q_4qpFmpH6UNSu-1{(EqiH*wW_aS4I@-F+1Kr z+pShvEWhLexK4aN7tM-X(?6rd_oD}@&jr^(@QwEw=%AfkG$qoE_7%{++buCa)R$G{v1O%Pu&m~a?w5tM=55!oQ4?w~)u7X;~%E&Qa zR^HTn7550E42+1#8yo>g(pI@b#X?-lHOV5=l&f_$m*JA^-tRp4`TyTp z3)Y(b?X&;$?{m&R`|PvN9QPa_pX@4~W=MxFrDY!_Y4`AO8ti6z_#!S`mtw|VXfn1G zRU>!6A6>nv99AkWXU=AixD^R*dOmA`X=7dILWOoxpB zF0o_=bHf?lC>K9FA1|S#1a1 z`XXno-YNQWckHfrX5+m||DnxDd}1AE4a^f2AhFvo7QhJ^(X3^?yq&WS9%(Z6_2tig zb4EwPsP9SF^0ytK{88joo~XsM_ToB!wAnKYwDAc1kRW5-yx1g>srjNOeZ73Zxigr| zMpgE$vccX%Pv};3XvfI~r=pf2+E&ky-I4J>YW$>C@X)8b;Fu? zp@dAcFLCW=(;==}vgwV-WFX{UJWOjS0DatXneI!TDi8t5kIxNxe;P*PK*V51$l~c} zyxKzfky}=Pgt(Fd_JBqzXhoY0(DN;37ig2u%e4L^&BbQamniU;P7b(SVmNy~%6Kjc zjg|AEHmy107tVUmC4AN$^y(+{%SCgwtXq97WIgQ-Gw=^}z#Tibhen|zfk^j+s_FMD z6D-_ezEUWKGAFq2x*e@^bZ?U2#SJ_X%U^?(%pyn`JzXGMikR21C7XUMtTBE1pZgICPEHZ7-d00WKpU!%0E48?f-krx^YcS=i$e=f{)(2N zM_1IWM{ZD78(B~$@l_YSm?;3R(i^&{siM2K!tYktcT9kdMf!BonhVqIK}fNjij-!cHu(}s3*%?7Y6@c)^Wq?|^m6Yb3BGUp%d6g8!G&knd zbk99hGX|PgM>(!0Dfq+ME#}_1{n%`pr~W60&S>a`!u+HMQOFV7AaT; z-?f;Ctwz*yvFrBcd_T-)m@d^F+`UXu==oYHg1uMn-38m%!l|0S9w~LIR@$_Z^EcEo zGuv8=x+OR`?Pj>up9Iv288jhoW_v93;=sBc!$AHN>(bs=@Z0NHbS0+_g1+1&1A}^3 ztgRII0 zOk_3crnEQPDJ_yrtrxC^bjKO+G{)Qv#B$Zy))5yd>vTNkcs)usU!-405<>%9s*h~| zZP|~MHk=$hAiT;>-{|JoQR%q|w??aUbn-G~4JThVuq2b>xOCXP~^h(42ZeP4JOO(n_n1v^GjS9f)1sgAV=UaGhp6 zKaK43US3}kd5Cq@#6wb;eyjizyvRTeKZZw(khzPZa;KEL#o)l7yAVYcijMJEe1`!rgUu5(c=_%MJJ0j&ELfE_vk zkWGP10c^SfEmCFC7NdY&BDF_h=X(xIe4B5j$Ntu9s3^^aS5LeY`o0!9fA90b$ z+9qj${$&B=H8DluS6#w%tI6pmX*hfLSdyHXgLii0PrdfAuff(-pfn~pJ=GVD2HT>K P(VsqqnIH$Atk3@e>gE+Y delta 318896 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�LBz26~Bwb|Yc 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≧1|1Op+dDkz17X=a9#69x1JDXO}s_>x(vwK1@eEvl42%~EtH}y43GfQFjLEX zFf;0ukj8F@bP^9a*@zlTHi@o%yb_ck(5d{|*DJg+Hhtquxq9{$klxBN$l2J~(k0#* z{ROYmm8+&j&DYc0dde=HJZ9Fx|GQC({B7@sTkC~y*?^bfueKbs26pE=*N+JUlifrO zx5v@w@p3N{D|UQBs_%jbgct*uc~~f1OyPmfA{=#K|I3CeMuAzTDNLd5SHhI`MA6O- zj~jdTp>EG3t~mADxzN0sxu>$yJ%8lTjdXuQRZE_NHHMj?AR$5V$l!dmqPVPJ4_wu| znjN#THcyQ}4_3L$L`N-H%@bX!NEy}sB1SI0L2Izq9~ACv!?Q(*=3g$rrCAdA97RXQ zN?Cp?6sCQd^yAyN^W#@vZw#()6&o`NbwsT`cM=baxuBJl>XaL@*ksBKSySfgcM66; ztKvHjV~9qjE<4b;pRs7jowbaQapMMvM(qic6B}aZeHnj;8PGZkF((>@6It}=ES{9? zS_4D)FiWJxRajQFs}?1IjKP2YjuwcpR?!dHDJ9nzBMTarVrIO~F$iC64Z?nm%kO&) z>6DrJn3~oTC1ER*S&^F}ru{IJn-I{eyGfWfufM9aFiXft8&4&BXeEExO6ci*R5_?PaJqD$bTfV}6!$#GjVZlL=>_d($*}=O{Lx7l|{`rrOq7KUx zK0%$59|OtxZBrDCH|UXtwOp9yH6924wcA4klFhN)rq9ze)r>5#LEm=X z)@)FX;d}#>^NCZAxG4%^0DNFUF+Y-UFLq6$0{Gk_oyG=1;D|0Jummp`{HYDmPxfbs zV9~fT4!la9v9##fc^7zFwBakob;xuO?OWqFaQt}9XM&C&{|B6Aj#9KbJcnHiY0Y=t zR)W2c`_1u;iJ@i1{|g%$;Kh^q_Zj1Z@L$?@A_iatuG#N#BKtjQ)SS!0Rfr93lGc*c zTkcJ8{=kG;&Fy|H$}Nl=i4ueT?$3R^B2w_3p)Z2!HvISy3Cd(kVZ(~4cUXK{iXkG} zL^;VwSFCf4)l;=;&YyjAA6a&9mv6qCUq)#EZqeCdnOY)iFN!#*qq9>mZBZ6}-P0yd zyT8x@1LELbL(mrk4Q3`aMldMOuaA?e1HWuti|7l# zQ@+;(mqG9NSl^b9dK+grH-_OmcD+IkX(Kr}bx$+b_<~#4M^2NVe6&B>>^1p#)57zb zGOz^#maaP+_I44uw$ZPG?J9I1V(rE$VXO!n#^CZtQzSbCMGuKb_8}HU$ADPsX_F{3UBc2biQ^$)yRb08 zD91up_q5t%3%!Xrtk3dkMQSYUUQsVg-N9?Y4uQ?;tCT{PDJn;s^px|5$#QGOU`7MR z&Shj6On?0O8birR#J~oha?V*QXen#80QVm;_}tX59ZGe~)}Xw&mIpHPiCHK2 z>96erEkbB^pzZq6Tp4g=!cZMT+#9bo{a14*RO#BdYn`UwWDI3_cs#ad1zSf3)2rk` zJO7N8zwBPzI}0i@Qh#0IOR4JnM%7)J@Y|pt)SuYm2Enl7m+@h`M_qi&J?)SK9m$qQ zOyS?D7qBhow;hV>2Q*r=Buwlh?eduuB|}A9&u$f$z2c}Hi~+2S-eLiE#z8C#z;jH> zgP<4L9YuBe^Sm)9>nMz4?9+$t7s;txuDBV&oc5vcM2SX^kc+JBi%U&4lHRrD!~vEV zFr<>Rui8k$OVTJ?@t=IyzSESzrrJKtIYm`!li26>b~Sy8IZocHNe}RYq_VFp`)+h! zc0F4L7y=!cRxDcFLX)tf-xDs&cT)m8?qg10M8X_<^$rzJqTKFmzqlPNI`{^O4YH*z zNJ>8IYC3jMFkAc537hWxd(OVBKM?*e6stPb5%j@8QsSflyx$;Py@saH+u;y|Sb9{v5o>K1qd=70GB7Ln9NCey~!{z$$glq02h z`^|>-!-rApEbO{sD?TH zuDsw@8U}!50&TX7S;a4|uMw+*CXfNT()x9XX-lk*6s>CF)6}fGIdLf z6^#ii7)bnYYTzHaeV!mOHxC&O!+;-aDK5NNtZIDv6#+gYo8PZbKntx zt{ov)k@7*j>rM6{r@bTz83OsuiHzpxH(g~em9oXS;~6;<#I45mHyEwzVQk_3*t6cl zy8v{jm^=w{)-(JqwG&-0n~Y@D77=4G=Kbr|q@oUKHZE1&cRcvAI`eW;Its-j9j$0g z1y`!W#%w(F@?2?Cz_(8xDKaT=#moUKP_F^VyBvc5i#S$x0skK!l@_BdjgRF-*Km_? zm`V>dx4rKGSYk%4;oW=$3KeIxHxZ02i>T-kf&>eg>7MOctkjh&OU6H4`okkQ*1q!- zQ+lD&TthQi8w>HZ>q(M+% zy4+y5hYVHy^-Pn(uq)S?>3E}?8);?uj^W|jE*pH1*w30$kR(h2;=*#(pxU$lWsp8^ zDWL`vKe69cx`_$sre~sk*ulQ6rUc-#`eMi9DJO9$6*##aRn!Kc9aL142l>Yhv7f(& zSljd{a93^%-D@0;Y^_a(#LF^@>wt2?y|gt8!W933FO(0ozOm{v%RT_zx6aO*!6`vo zMtqwW$5bVZLUF=nog=Kuu*baSS9I>_%?j7z8w-9jjxhWh&Q&zaaE!$)@&3F4?vu1< z|HkceF|q-2TUNc#!5i%V1>dBp&ZFP=REi5a2nY)ZNV9|-p!NGcCdDWO4J~CJ0f601 z_Y?5Hs~H_l0PcTREABdgfdAK)J%ARbUP}4W1JD51oWFVO-)ATB`2J#OpjIzKm(UCCbHaMJGxa3zq2LaSAWD^PShFVeCi`sM^quQ)m9smp8uI0Bj=D2pov zCVx+$f=YtL%x3q$Sg&j+fqNB`eJAWm^LoQYnBer_O8+jR$qTk@zhmwKU)K8opZ(Vj zLMPxCem~2wu`65{h4Xpr>f2kVlGKGbHnUV9W!xY9eM9PS)iUYd8W4N1FGC>NK1)5s+^|QzGm_jaN zI(}Pp@KElB3Fzx`eR=+{);*x!&8selo3GY^>+JN}c6Yd@!4zZ=TO_P0h<()HA$?=qxmxShEq-FRwc0x((_uj3; zPc|}WsW>__OM!v36k50oo9Gb!kgQvC znrwX8mgA!dS>Qh!56-Pp4O`>O3`L~!luvP>mYWrY)u}HXw!h}d5-O`Ua{4mlFfk^~&l+H)2~X;ZQ$AE)Cl(6Xun2mDDL1FA9w;jJA`aX1 z?^Z%mi#w1*j6s&0k0G?X-Wxg$v1Vgu-Vl*^6(K^F2HU%2HcpJGmQH1o!P(`b!QZ*?)yy?q2Vs*MosekNG*L zJ53Krx-fe?p8KMc&!H*}yEB zJ7MV_B6*uglV|wEtFS51%%g=2?4EeD^c}hu9EdI@*62LjXC7gVOf)ZIWwy^97x&Ag(Tvw>5)AXxBUN1UDdE?3 zukM7!c$dWR9+9wq&Ja8+%0fs{=J`HFCT9Pn*1s9_(+JHY5lSIUq-Q4;QxZfWUNw zC7#(oTwL9*%lfL1Jzm$%iOx^F zMgQBp)m7J8sd(`NLRd+wOAEGa-bYp0CSj-nSReCu0~JDR}oEvbi* z{J1_c`ezZ-sm@wBE7P1_^e9@k09#OBeUN@Z%$z-xoEVGdGZ1pg-^KY=^AvC*%xc$F zpGYFgE)lX1ItB2VKsZmAEWutQInbp)_ba2c&vFET$tAyPmbPYSOn%PW)_pBD<;lt= zgb#K|aY!z`<_`e!c)RKN4qo4D!2KbJ)re-*V^nEO4!E5US-_~$9L%lpFjP>c$@MU| zj=dlal31jydT#ATy)t)1Y?ln%_*8E9sfp@Ib7tx#E3vvcxy2%o8p&DnIdGj%vtfPo-fs z;#r?C-gV+v8+1gOoUms*)jLHoZ#!p{{ri33KalT`dACI<+bltk7rJh%uaiZ;!DQUZ zRXa^yE7Qtu<0YPL$8{qafsMQTwZWK;8Y;u|BK9 z4%Fa=PjwE6alx56=(tR7SitMU(cXNr|CjE}J448_3sZ*ZTws- zxa3FdId&3Jc+FJuh%Dj8i;bg5d9|YDIK={Ra4Z(^xXgsDNss6+?mU;ITJXhqnnvh4 z5aZ$%$BYtjPV^hnRQddseIC+;6UTS#>CgAPlnGM+77+IZybz#A?+dyPMgh23aYa$o z>$+@yU7#8q*UZGE8~JeiHiXQP;;AjckCOQ7n*_gr2#+GZy6-kiQa$%)+pSeOss3fs&Mb_&SytPvz5enV!S0GvBd~g`%z*Hp6c7!K_wlzfM&Rvk-o&4!-2*+zw*dRu zbr)yF?21j<4_@1<$Vja>b&R5)KMXcotgSz)=%pPnC!WzrGGrQ!R7h$#RUbEw)O{?P zth5XmXK~M0E}hamf^*c-XZ=Jc3ge%&jk@@Bt!z1olsh)zqI9(8N6|zdPKR&DtxIrc z+<-Qte>5BrGhMtbGI`LvOYneFPc;fA_J~^c|JYt3INzaFEE#yN6DHGMf=)<}U^iz$ z5slmDVhgn^c+Nd14dke^u;M3+at$UhY{>RvKfj45_^iqGU`zZ^amVP`e~kwe5A|ij z*>ONr55dP}5xyG#h(!cvJR$&RLY@#VH}PI9rlx0zx?8>!`S4{4JdP3^(N%g!O-)oj z0nP8`00i*=wTNI}J0@6QK|tsjKtM?U=O2_Z6^e!m9M{ru*lR-lRxeL2>pmINmdW%v zg{E5OZXX;$2>&DQE$A;Hjo$YQGj<3os8Gl>QI%Sfa0j`%Ae1aeczsJa|tn9mA4692Ww zHD|@m9tss;sc)epJr*H<4yNH{yp@`vC%bOg%XuE!(1e!8V3E7F50?4Z^cSMWV0Ygo zFR|E6bZ-Aijb!|7#NP5?=ucu?Zj1Eb$4+7bd`B4<$xqC4LF?D{3Bb$oTBT<#Qv-Ul9s}32Z|TYII)~rdU@cW0o9DvXR|f37~xit%ATvXj*inwaH-en13dW(%sYiT z$gi2JRfapQc_53UC!YL0SfPgKiX)lB+)?!Ciluq$i^jzDOS1}kR&Tt^7iEJElO`V% z$czFjv-jaoEULS(BmpCcAhf>u1r^HW=mC7Y^uNBohLi{jo4GzD&_!f~d^#%Fxj^v6 zj^6AWxW09E6l%fgxqkh2-iz8=-+;mv>}KL>dG33uJ~k>{vP*c(ocYe5nCm%{^e>8w zYh^2=0DE(F(NY+SCick zn5^N^ZLBAAedw{OyYQqqZ?rT?BvfN5k1{cmcFsJ>A*wg1&Y*&XzDveaG`fb?*sgzM zODAVuJHQm&%aDIp4h5G$2JPmfkS_zuU~c5>_|xsEn{}oo{C_Ltm+B{pX&7Y+Tq*}4 zU$6DZhZb-LxV88X#p3%zq)4>D_X}rha}j~l+>@{vIN6aV{@%I1y#}?C>vIVlJ&VKF z#Lvc&Di-zk7$t82i$2h<5AR0{Ll@E6C_h0s5`v{fG4@GmSWo+;5@ly#qW|tMQv8quTF}&x;6lC_ z%N4@YivM<5*o>{WvL;5`MNz(sYl8DB>clfLI1gF+<3jUsH#^S+-m|%Lc{8&!IWoyf zJRFYo*?v!ga-(jx_1>>XTVklEl&Q_IOw| zP&@Gk1JmeYHqnA)%Wo-yR7h&Q6&ASK03s~!E7g|%+9a7)8s z66}ySIAc5>Z|LDtDxzv8{Qy~q7H4KGvA~VSGU8~^SC?9EQs~ah(NKe5( za@=z1oI{h8ATBmUfxlbDqb`e6AGKdwU@rGfSNjN*fa;t=WiU17V(3%7Y>nH-wE@%d zK^46f3xorMvnI|@1RFDxaLHu${ay^uco}f)uEg}w|^>3gM)FEF+Nq*p07}$YL}0~i@G3t3*m0K zUDt_1`TVVMvq*#VIq@2w7tD0YburF@VyV5TMfn|l=D6Hzw=_g7C)SfNNq4lUT<*P? zm5BXR3tRalp^Up9eADf|P?qK1LB~}Co65{ii?LcP=IA*D9DgIdt;sIUU%d0K!z)S^ z!v7bD!xz)R?t4`}y{lT+#$j9LK*6Bdllv$G`S4?`7mEHpa-b>z zd8fz{vJ<2CE-Pg7b=iLX3J+HU+^-9sH`!xCH*gMz_&2O9+t}TiLcPG!*qR%fMwJat zSL{@0W1+M=a5o;oG-)SRry=x??}xgP<9M|N@JUs;;Roi$^Sd+lB2&%q*AKFJE}u2ej-|38^5|0A1DaXwf~V#i*DgK997nQ;3Fq%ja|o)^8z1E@emld9x*o^nrL{JLcT(?q(1pjO8ZT04rt{c`y<@B-JT+zMhvMWEYwBI(}rxD!JEQFugX6;bh14U%&d7S+tf? zr)06!B}co*>oj9-e%ZjFrQLFk?HkU&9`ANaR}LwG&HyazM%meZ=0|qyHNzm5LFNeG zaB)-Vr2U4^l$!6iz`+(Qot?AspJQI<@Tw>Lx`DEX>!hs8-kTi$SVhwum-ykBn;B#S zkTt54ntlcrNlAR<7DLafyfR746c6woNun9G9JE_u0;v3*l?`1l#dL7v*h&@s?tg`* z5Y@6DZ20#V)?nY*Mx4$0R|Ut@pq&p_9PQl9LP-t85;UqAfs`q8hq8)}JfsR$Z zlZvZE6;^5z)^g@iDnwd&WxQrZCl!7JVAj}M)D>)1Ng|tCqlGM|nP1>t>|B?)OyY@@ zLrbrLAtJ+#Kwg2?%uP?nB$ie0=i5&<+k_d4`Q;b4FszW|m5&TsdH0`I^)#L*O+&@D zPndJ0wKMn>Q@eX}4NQ+#M8g9yCbiD703Y<6zD}st)HD2(A=n!{7TbUZOIuT;yVC6i^=v{D>N_Ardpls<2WJf5kt!YHG*4*&xR4+wjX1>1qH%H4}{pbDl-~a4O-qf zv$~4a@gwA|_%UH`Kk9q&8SYliMV$0t7t*#&F2J`9qTXcY3MBPj8b6r?nvQ~PL$a|x z@cVvs{UP{#WOC>FEB6{Gg`B$st2ct53~fup!fzO+z6t$`*S4%)HlW0<7#664rsm51 zIh`^8)Y8O2CgOnvi6EcCTRqpqkGL!aCG`KFYiRa&11KPV-=9qc0Z{%MLD~uf*r0t! z*$etm2+7cyYe;Iru{h6^v#r(Y5*lr z@haxK_I0jlk`!8&SEFqw!kAoWx8hBciyu+QpWxo`zS$M`7PTSOZqRY&*o+B|(EM7% zz5DXQYR|V1b@4aVkLf76C{g@MKV6jo!#>CObp+=3eZsQFs9Inh9KVI4pPfUs%#1m{j_W7HQG?1!8J)&P(LWx7gHZUA6oIl~>MY*uiR zBIY(DPGb)Kc+u~+OYP`S31|RN0FqOR8vuvEoLno6LuZQI^=X#YNIH|mavab{S_+<= zVgqK&4<(ZdQu!#z`?xxI0)~4iGG;wIVb#ik>yWB2>C&WyhYDouk-x;dp%#b)P+1Z& zhf$%>;`KQOSlth-nHbt{Ui|EF7p8qkKLvQs019EKc^}xyHgv*$%v|6Lp>}j@Jo#q8 z`-{s;q$%+Gn4Wbd$$TW(HPYV9k))7-y?+(#qwG4VmLN61=cR~?y#jV`4ip02+J9w18t+%Ug~Z4=@oIA9B| zDCg!!-cqpf;0D{}cf$j=@BLY_HPNku@lfCW)9T zFWD;auu|#NmY|{rE0aTI*7MmEeXB>^VL!he(t0Hm!3)0U0RcxR2I1Dw+s;C&w8M}t zb=GtZj$B_dXqg?o_dI>}E4{$U6t!jm32Y1%R<#gO7U8FRN}bg)gKqn zbLS#tGQg21h$jcWS2#R*vGsZ^ajfp#^?QU8o4)z{lp!xK5Eh_EgQEMM#Kd5ObH)2Y z&jyj~i6V1lI8o_#rOUL!=cn(~7M%s{eu^R6KlkRW79d_&SJK_f&CytWg8rF=Z8Cth z!zdJqJZ5Sr#lPkTr-8TOm%~{?;D<;CB9i`?7`p&@D*fD9R-Ti+AZ5%7peaVoku|Np5&&1>1YthJzgW*Y=5 z^9r<+sVHZTHB?pN3@NKjyx5Vqd!#8yg2lxKv%%DWTWWoMWz*_+} z9cld;Sidz)J|l%Q_1!%E_q8^4)xME%`Q1HNzp^ZEQdhK4w;o6!it~CGrNWD<`m})Z zc>;yo2Dnyu}wrZ33}KhK)^y01Z{P$NyUd?386vS$*E9xO<>2@4xDczrt1A5|DqeKFdsbC z{W+HU6S@0--vdSKDPk)3m#8wLohQZ^esw&>Ttxr=bdu1{!Hh9uL2E+hfp;&JrU>n7 zp{Ui^EvPfx*nMITR2;W``+!WhJAHUV`luE_HFvO=kaL2=ZmH0RB+3w}kFF1h$tt}} zj`bcV4UC00?~$^?;UPs@k%DeoNYR&sO4dw^P~y)RP1~orv2~fu_GC2bV4mc1%wM`i zgD+4;mnciS^Pw;9kgDM8iVVKS=-j^?CeY8Ru>Eb@cwZeEK*USe=sY6G>b__ z1?7S>B$Cx^tH13$$vdkR$TnAPuBoMq(6K8luipBm4Vcs!FvPf1PXYi9ds#Ps;NPLW zkAIJ@F~`bTu1Cae!I_j_VDJV6rzwFN5vR_SI-cfX@78bP=#5kz6Fe}5eZ1W;eK74I zVHNljJiU?nvp>rP@)GLlZV)x(0bO|BojrtFI(dAjHZG1o?`ni_xAY<Ce(+>P?L9dUByd2G`v#lSC zKX|m4Pn&C0RTK|uFhm{AlTXB`SdC5TjH3FVAHR;3I6t>)b zk^J$V96r4iW)We3PyBRlQ#0|~*vG(+Y4?@VS(!<2dOFNB9Zhnz(k2N>K5NW}HzDDe z*cOuDTaybV?S};Ju(D*JqmmDo5+k={?tLUHb_5Lpwdyx?>|*o8$xFJ)4Kc?~(0{17 zyWtdX)Ffc3tGW_f^%$m^^Oks<)~%-m<7wmV@4U1Y-m%3!#yU^&K2IFJj~EFqFk74i z{R-%R2EQSy1H^)%3b%rA5|^-m65cjLoFXismagq5r|1Cv7_m-EE z*dHg%zE@VGR1E)0$c-!)o%?!}XG&eki_NO(-XQ(S+48{PpG-4=wF#((hg<*t=fQd5 z^2M;6Kxl#URjJW~hdqIRb8b zTXQ9>3d{Qf8A;QW@p?><)1ao(`=|`OC>LkQ5E1cp5M7TbLC{kGq^iC-V?eR%KYSm3 zp>smK^~jZx>i*th5{&P~(_G3;MeW!>j0v zOlx-KvMup@86+AevhJ=Ud!Aa~>huy&vA1R$(}$$8(+1u!)|3luE*qd_9@ano!f0b>qXky$H#vad zohnz-OnPN2t1Vtz?M;;ncQwTPjT%*}%b^U#t<@dP3gPdQXSCp>Sgz8SNK0>K(tx+M zs^)cMfuLFA-6BxXF+|~G4(&6^fU#$VL1|!VIjzBUYnmt;Ax(6Q|Jt|?yhlEK{L|*?ht-*G(J$(PKcZrG1gk$UP5j!315?|<@8KveP=Q?nFk8VJ z1bEGYpZaSuR7B=`2d~DD_nhbdkhVI0`$a?kGVIc`SLQm;K4&L|@6*t+kk`5zEP?ZpiM_?b(M_^gba!4S`*u;!@nP zlE9dl@A{jbs%e6UA)o+56^9T$Z zY|SjyWg`Qc8DB=J_~5W2Ml2gTZqW(!a6>#c-s#gg`dH4juTS>-K#w|Fya7=GC0Das zP$2YhrUiu*{-x)Ek-b&yD}=7ID6eSreqncGDV-h%$&evOwi5et`O9$$^1#$hQF5QQ z3_`1!HpA_5ZR)jdtkGt#bRjkbeBL}&A}%A`+om0{ydcEV^v`Nn6n^UhU%xs~%+-u` zuij)Tg+JzSmUR2~65t8pll<0}*=3VPhm_)6vG#JZrCF2>d0QLD5&pfZyB`E&IfF#r-~qCRhX~u7p)?$=kp#}UP+pO znHlW26`zcn7n-M3BSusN1altneFyOi4OZu7onBGj4ntD`LqvvCJ47_@ggJ=~_nd=V zwvc25%@`ZX8TVwarGPz2#QPV$>@vNM8iYa?wDk#w(SuC`fFoSOC-V9K1ExS(zp|(A z-n@C!@o?IFPIy_HDh{TetO;5I?X9Wt!?TR$CmiO%H40VQvvqTU|6|M?xMMQg3V$-t zuIIU+`c7mHB3RZ{^%^nn9{v_typ9L|pqk8izNw}xlz*yO)&7BtlZ{=0JFgeM<3ArO z{)%Nq-tDS)0}BiKf=R`PD-6hGyLIkRNHqE=kN_%RmlhEEzsmw7>}>y;M_A#%&MH-v z{ykK|TqMa}4LG73wn|r%xb;*R%YRs`2B&okg8Vrx62~&nS)%i1HeJhfw=|e3z2ao9 zs*j!DFf>?gmA}jWp*g7apgn!{V4(JNhpZBMm$%o~7dIc-zb=NKNB>@hMa5T-U?^3~ zq_NYthrf<$Hhk(5n4eghC8~pT{|z}IW03Qjpba731B3oExYP1zF1~>*&n09U0@x&AM=l>Mi{=NU(-O&G4Yx@JYR>T2e3xBTd!IslD*S&KRh>FNZF=ZAx)oI5W>PL$=O^iDFew zr53x){rB5}`{4`yf#1Fy_7jzg;bFhh_`MoVGEuUnsx>>L4=l;KF-IL)=CTx>VX^$6 zjJ@E6h)Q`Egn!vW)p^QtrEXa+Zw0fNU{jUnY9Y(n0J@=>)VDQ4yfggF67p`=gxMz+bpNaXTP z>UUnV-;u@?5^VU>r&`&AVAcQSAoxo`5#?NJRTiSO%w#TV2!Q3XgmZ-~Wlw6KOr!(y>i zC8D3zBSuFHN<-VXsCmGgE?(|D|s zTVYS7UW?7ScA`kXooQh{*rsa%+M@71`BT62-16f_8PIh)6ln9bqFZn&kC%=wbiwKCV zc}_?(k@tR$JOB46R|%)0H<9!73Yc2OAhWg_^!v0W&mcCSQf{KK(*)sTgP#U6JV``l z8GkwR+%PM2VHhu6g?fM?W>W_{DxUJWWg<6XkqK0Z45Z=VTx;hW#U-h=w9AMmV2o5u zd7a}-qCiQl+=bxZTfBlAS^2st?;V^t$C_yE`l|H#tV{W+79p1@w>;*=0f28^v8vWY z3C2li6faK%E0*uv*MA^`4#JKosLGLM&3{T-vKhBNQmJyEyh5)iL}bB%Xaa?5zOqzK zrwC1Hb7C4HayHdM&?YSkH5cCNii2#_)amuXYqQ?Eh*!iXN>gib8V*N+_|G=hX^7r$ zr{lS;pFO6Z) zGDF~X554Tx2|-LYpR{!Ay`sYabl%Hknu_wMLv_}HbJAJqbN7d-c-aVAac4WjOJ|jx z_zH4X5Bs!jxO>>o-r)CY7?`nARDZ0TO>>TBNf47|lGmxAMJLGu6YqW?aB=Nhs;6Rr z)mVW7TXV3qk!!MbK0M6j5StDV3$E1=?LRs~MC@7=qJM~iNC%$= zyA5afm^*VkA?jpAd#=Vo1esb8sr&CfViZFk2_%B(U!>7vV+vC4;<%baqFS#BYzFIf zJji%eEe+3k%A1DO!%`n)SFRzYYDXamUCOv0e41h9%OGIANyrgmgz;v8E+pmy ze_FS4(BSzQDyK;mojYAA<9|7|;w9!BiFU$}nP86@#TG~~ssqJRm#Lusw_+`)rlElL z!~<`dAOu3c@`j_kzrMYByH6;p?^*PIJ7FtR~=X zLz`sfapR~itgw}md(%ebl?LZMk@~shv2!)N8fY~59TMf0P*$6j_J8&-tDmC&<{Z8H z&;-`S;8%Z^Zyew)4e$WpriI7x){@B$1W6Jx# zoAO?}DUT+Z-hL0Mf8ubrMd16*bYmD}`>e;V>#{Y>y>`RgyCn;KqPwaWLP?H3i)d1( zb(}da-eJzO7fcerLFSojhkRLUGcR2vy{Yp}ZG7 z$z&;BM(hm7B8Z>>VOVGl+{jSuC_78V$!n_$v}Sh~4ztkkvIKab`#G2V)d5feftO9z z0XTnWhBIK{Y&;pWL{d2&tO0=k+Xv3}eWm>cm3Ev`(X$Ve$<-L8wjbW)7;!L874GA> zeoHztk-B@gXh}Ivr)LUUxz{{>@4uMI@{T6s6Y8EsLm!4-OoBcOktRVsh#%fU8@@7G<99YH#4_nJ$%$DhkNMgWt= zifjMmIG2Lvb(+)io|VM%g1FE>)a44dI!rNJ-$Sje-*B9nZJx3GG=DO492V) z$ogHyhP@CG?&0(msiD?I8>S*9{1QDNu5)RnFfX5CU%}puQ*Z9OLZ|kjA!C2BRtsl} z$eH+mgQ%Z&Sla&8fi*o+xCwHJF$w5NCAAf>3QkiAjZcN^V>s?q=8mGCWKEIg`{w=y zTwTTuvfRTA&q1{%YInXG&MEHej6TWQLItfG7TrTjfPvMj1_c0^ipceePH6NnLdWI{$Z{?J8j1VfH(`J-Y z;mHlX7FqIl6Qae^$H%Y|)J0QLjL9w|nONYD^nPz`y7iW^rFl6Cf{tm`qP*9eJ;EGc zzVu{@0VK0@DHa;-J`v5iU9WnYv(W?l!mHi7d2GJkp%@oR-*yRcp22@N9t`fk^}((n zPT<Z{Wm|oef9QldvD(KUUi0_A5iA;wcQa{ zGB*|e`YoQ6{wA^QlQDmtA*PRQpNeT``0Djf(cS~WiXIX|pWYsi;b5zX>k6PFa#2S>7fw+@BC1(ZwTYxShOzU4+ihiK(xR8 z7XSeN|D}+@3WG2VhVOlf62@-g#NilfE_;TZrE7}{uIbv!=3#&DK4tEv2U!jY3Hko; zhs#cQUxER&j$T9Mb*LIGly*hztuRvY(QZ7(4+DCP5I(XC)iQo{=k=}DY5vJt+7e3>PO8|9QK71<+cJ833=jfE919+ivaueY_PNcD)>UbIRYN&y+Ljm;gTlS)&;wdCNg z)x=*_v`3QdN^gz0R(sJ|M2mK_Dju%Z8(k*hXDBpX^3f84bSvGSb}dAsDQk?lx=cpT z#Zt8^GGi3NmMjbWelX`-;dR?Jl*5ugcecktYf8a&W4Bv2r0W)clv(h5tG9K4H8-?i zSz07%sxxf>1!}hHkWkBlo~%-o*vgY@WglwmhSkwV_U6HHvA|AlM)|p;gYwZPTWX}R zQDJA@^+K%o92bWQS#YA4p-*1iI@#5fGD%TpPQ8<1q3A0?2##oTBI#Tv>nYXkL6@Pt)S+J;mm|uKq`de-znVdY`zh3%d2dmjMxC)NB1G@zPh_3|l3ZF}kpgSP#U8JY}Ip?-8U47L%shkhM z+JwP1uyfLXM261cBR~z!=0hW5VFI5z>4Gk)2OJ&oHX{C7k>FNV)YRyJ*i>LCseymL zMDU$}A=?b_-_`gU9uiusP2Y@LUXDSDD+h&rtvfn0?36M?&pA6MXPqwufBuA!E%^WG z*WoLD&c`$Ur4{uck34sTHG{OZERk1)7*bH{r^dd2PumJIeGu?z7r$WEB+itv{kEpF zHbFcUP)-ndlkuRS&{itJ}(!KJVHB8EK0b_+QTCcST>9 zgtS_d(1Y%OyT6>;-YAz5dz~f1sfR~S^Y2+Z6Vhp!)w+UM@LSg_BAuGg zg#Gm4JE9bEBN5=)>T1;C&>=GR@w-=O5Tpf&E4G157WHGMl;5J%PXPh5C)%1YAi+v+ zG!lo}&DkXJ=SX>rV9*Iv1Si9~1+4b#ytHk9K~5=%9Kfhk*h1G{D@* zH}1@u9spFF=jZu1#k+S`mnnBnpY-nNq-eB^t%VRX%_C|s+!`XRD2z@S@-})wO5-6T z2W6?%Kw}*+=ZH#g*u@|LAK?m^0z;8MMj?nSdq;aj(16H*@>(zj*G;35j24*=N>^%s zkE|T){|&Gf2Y_r>wuRt|tCvQBXaWrI)3Q&XJt34}+D3-nF;DT zQ0NmT@Hu|I5LS6Bbhkjf_Y- zHMV|WI+L?Tg^+00h(Cs9i z=48m8O{GDR7}J*g4~rG>I~fWufT(#&TUr%ojRTS8xrP9k$I29bxC(5kg~*|QQjoM9 zVG1q90aPP+q6|DqA*{yB$Q8(c+E5;l( zb<4yR|1=GqRQYRFN+fk;EYP%nqQN_5Zlt|5awtv>@Jh849h4*(3~8!u3CfPpi~2O0 z@4DY|J}BoP4`J>gt(6E4u{EW6mRV~25#WA=#BApPte{H7 zWJusJG65IRT|=5mDCZMoeWn;kH4|D8HsmKLM#y|d6G|pC*6Y5M;*s{-(=E%Jc68(J&v|#RHF05yN1S)@ugbg5IU9@J&#;# zF>O6#qMtm79rpgjafyI`>NH0)DkQ)iPMM6_f7ZP`6y3wQZ)47k)a`C-Dup(RX;&V` z`?Cqz0ehEy6P};WH`6yw+C}#7YGo$YVm9|8i9e=0FHk%CVO1nNKJ~ocabAYYM0`QC zz*6D@Vz}`Z;wr)!lRaJ-moa&s+~HxCBVgTg+=s@=Es&q&Ut=i;r+P?V+wb+)?vA>2S#m!HzEA zV~66~Y$AWPY&J)KmyR#!$}2^Y+j(tyl(P>~2s!*=EPzoUWd`4vu@7_cCSEE=j}mcf z`s(=lhHg%YL~iI^!P(J`HNF2?V8Sb-Y@!XmZwVFW2Mi%zGrSi%+RlhaZXi3M68!Dt*yteYQyfy!0Fg`M0lMkei4@43Or z(pk{v!x%U%8@l*4$!m-zGzKuIv0+YhohJ?&jSPP4+cn+)P6Ei|+t_C-r*D9Ssf~Wz z2ACu#mJb^v!=u16h~c4< z$x}`{y-kaM`TQ4})?eWSIoneKE&DxuFSNPF=%@nvBn2d?tN1Lf=_*1>-Bd6zGGc5=`%7s%j+c2l{l%SXTahBs+t{ zTT0FO;SIr$1lN3Z>nFuLxkuxJq?i_RtZ*>6V;9qZtHQn$@m1?A&UFnObulv*(U_v( zbwyNQ)7q*(FwUa|yV**d`rVYX;iYI!Z%^|#{Qf0>9X0ziqONC*y4e;Cwaci(eEszC zv!`D^J%9RDb`JgQC#1zUz$XM6ep7UE*M9*30RR8&SZ#0HMiTz+U$JF?o&!kKTWTk+ z!$aDC*l2(z4bHkNio-!zkt1@eRC8S;1Zm$K-A8d=e{66DAq=Q$=4rh?Y`}>cu^U>5)#6JK0A-P%~VlR zQkE7rEuiFw*tCuqSuxCwuB)NQUPh-U(-$YtP9`Vc45v|&=|f|N#;gR$?BF~qUiO8# zFLC|KtTRI8f0*sIE=z7Ue^v9ZVQGc?%SK=7lslmhol^I=|2~}rs?V{bgVjy;)QwVq zodN!-4F0Z?S5{=eRz{cXoZf6T3MGYtD5)(pBIqMK=d3WWdKneYRrYK&D&Qv5sg0|0 zr2GaLjpNgJJZi6lxNxP6l1}yeYojrZCrl{ofM-mvZoLyyr$@7RGKnXn3;aL6@-ywW z8(YWP7jl)cluPNo?2_A`nO?AEJZvoLPrAbCWT$iv@uJ zGa@hC-?4Hk%F(<4#!X(ApqwSKzD%)>aH1rfc}2BM&ZX#%%5KeinKS0_%Ae-%89rk) zYUx(G;JN_Cq~;mLDcj&Hk+PIFR9+k3Rs#lc9(x68Z48>s;KqTn_>O7gH69y(_)z0c z%buQ($f7>0w%fF2RIM^FazocUzLcT?(niy))`p;rqo%Df%kDPri?nUtfdpaYHYNd7g(@( z(Xap?!7v`S_5Gwvq9AjJ7>@OSb{2~5DW4|OMj!oW%R-+(Zk$MKs`;&s4hgO{Ox5KQv-5@2&YZYu2}+SGgztuHZPuuNv2_anwXV_1 z&Y?_FT~-=P2U}3k>Sb%d^@}gi0g)ErJl2BaD2%psR-?$aEtP6nmx^K5(0i5MXEMIm zLQ%2ZJsX>opARbxz66eDYXwYW4I1Y6VdGI#>rzt1eFV8-OKKkRp@wY?Unxu_FDq=K zR_HLMSne5HVT7xCDTOV6$Uh7U?);MCy+XTe7%6^8tRIHL|rCg&TwU^t8icI z=(C-bAz*}6=$u2AF42we0w|7OW2?tk9u&uyXxIB-@xwsv?D@0jr{nSTA=l3OlZ%dF`<#yrvg!}7= zGVmA}oML)QFz*BDn=P^MTjJq`NTZLI@6@CPLK5$#S-57w!2F;@5 zS!M}G1Fr9^S%GMOjmMuITR%RUlLiA8SDqz}#3Ar=s!bNG?-KJwq|4T0fe!j%A_&a} zJ69f^Km+I5G5s$x@)@mdb}L~^ZgEe$0&mY-=;-MljLZOUB!W2%fNAJ975r92d57@t z2QFW4FJ?alm^Y`3Kf{^D%zIdgbWJAmp-1#so4?V!TLgc9KhNHWOR-J@{}5TrtC>g7 z#Mf})AT~pKScTr$h6BYg5>yJ+PEmkmjlMUpsVM*XBmTuQDY=W;FGNFhjfMRy;nW-y zAYlQI{CrQMESOR#E(dH`rTSb+BiVb3!^{urDyp`#ico4d`taJKM)vk@u8+aKeKyawP>o5I22o2PP)}D1A zoy;#UE?!@a-_3uxxElX!ay7nuJO0P~)#Pf&wZm{A^0o|akPBhazi|P=V*EmvVrVTj zc&Ux!(uPw=0|6vk8SwP7Arn$KhnB5sMPq`}hiKP-_b_TI2Z)gwL14QVl23AY13FUx zj?S+bm5D*@YrmlAp76`6;7f2+DqoNbQ1P``iwZKqV{P&geHwj-oOd>T^1adN8bh7^ z%`U>DC}}-o;TctUyrbW9%Bg2T7_R9F+Q+2HUr-eco)j3~&;Pr)X9!iGAzn@KHdDKex}vrlx2%GPtKC!v(Bu<+Grayzr~ zLVM@iB&!5hXlxUoPOKxJ5G1HzuuYbi@$CT|f3JH!B4o^blf~?!Az!uSIXs+Cv*SY)lE-Xs+bREGf;vV4F3R^cs`r-@8)7i7x95t@>V~w!T;TpCoo3$ zf8gTV75?W?3_jNfaR92J0tfD+P=F{=J#3;+gz|P!0`LwRcAa#uuTT20xaU85eTYbB zcTfL}-90aU%_d>ngF(JB~7w+f2n|^b=GccR@7ehVHgZrJX@?Kk|n7){`Wgl zk`s55TV*NM0sG?ElJ0o-+;eY=AW24zc^-%)h$m8>4veBAK6RhO}5OcWMJKXcsu8e=|T&zQzC@e=0zWhYry3jsP`+>GCv+TB^~rHi?67 z67wJ)9)<_U-*+hpJN-Nf;y+pfwxU|xN8g`q#Nyi?(e?*>hn|5`w z(dJJU?~~6g-h)Ikz&}dkXL?9nj$LzY3#@0sMk|(WE=4~D%Ft;%8xxF@RKxsv@a^9o zPvte}e#XVpKZ(!s`j+PYdOr^c)tvTI&KQX2fz<^zh0_7|st45nx$BsP8ymz|)lrr8 z2tj&?pK5ahwE{u*5yNwpe}S=t3Py5?UlN(;QV_dVK;)dr*?aUVB(FfjW0WHd=3H>+ zr@KANWU|D{sNz!(je}_u6}p5%5ymskSBu}nD4!gFU=H`aYzLZjn@qoXIoVf1}JLhITl;YW{}f2-&c`CpjM&Q#sJ z3RK5DELqgVcO<;DYD$&r(%sq&b?TnYO4z3kwyE*3Kcu;S0Ge|4AokYjei#j3{2X2W zIG$WxT%27EqnG3HXoMG{T|>$J9KfMRCynvHxA_f_PkjdNo-}tblxCc^?IoX=a3i(= z<3BqdkEd59acYtjfAUT(dS|*G>`K?RkfAv#HB%`%rL4~cXmP%C$3$$~fb6Qv88(+1 z_(DvVuzs+tZ%)V(*!u(uM61I4l<7O_wpzA|Ut3~Q+(Q`2q+F5@1-HKa@r-I>C3dzP z`;@rT-+BaY5>OT!CADM)WUISzfgKvE8t;#~?e(d($~+qke^R(%GBKgb2g29&!7w}t zhlA}RAEq|Xg1Axp$L*lNUv_UQ6p)fs#s`ILjTTYgyodLP$$g zVG(Ye5y+fFf5r^q0)v9t7?O$e6o(c`a=;Oy6m2wb2JZcnnOa$!hLTSE0t9IEY)uqs zw8;V^Ge{@~k8n#gm?E?8Ob?)gvNR)XK4()XDi9I6*5`66*7bucsh8wEt~;n*0HMwo zSQ93_k)=5f`$WSAwGABQyyk(w#TxyqTr5oC9i)i9f5af?J*R&QQiK}4_E39tJ>d~5OG+mkNQn8(B6bpO4hp*%+v|sFIbU1ZzXrfQa4xjJe{Bgoz`wv z!L=U}Oj?(%2AQ-(yojeSaqB?|BRa&GWMnESdu;K{V=T1 z2w}5zb-24;nnUJV<{M*rB`2gtnkp$gKR@e8RE|lA_F^(F(cH?{+K4i=)iUE{or#~j z&NK*oxrOHK=CHr5G_KxA1W5M?-o}t&CIE6`e|v%PQ7gIVz})C_)ddir_Xr8&^Eqxg zB7seTDugHA?WTlEj8|K4b3Jkk#D-KenmD{?Yac&T5)^-xkJTyVgMOD*Ta0swTx%`` z9S0Mss)%CvzdZe_bN$yZ!$I=eJAt6C=-Twkf;fYeUL*MdMe`y_%k-}y56Sr&tIl;< zf2S)GQ@Mg`M*{3&E(~)G;M+Q5L|{UfC9sD6mQO^{wKvAst$7AFe8w|w*DhW&aA%l| zFH*z__hVEHHwuK|*A5Y+X>C-w0~c9*n(_FZ4=MWWYSaw213TD2;89-5iWX$gLA;4M zRAw)%U<{2#fSGSV@0RR8oSxs-_HW0n%R}9ocTOfAg*p8DR5t^U@x`!?TbkSZG z2xxI+v6e-Jq+;ja?~w9WP*b*Kei*P-u~jfI%)rX4o)A5Scc}xc!pBvrwjBDMWHI6d7`u z3X_1$$X3BbDujuckp&11MQX%^8BAZG$iYZ>kwu%rhS$j%2!0bxl`s^oe>D*!#f*@d z4j@XI);EF1$bQgDC^9_~ghv3^3=)O$P4H8NVIrSVwNjCdoef!u#aBwW&s&oKm=dg& z2+lFP35+T*AUuQ%a>Cr3g=%4FaAtz=pE4-?xePi7^yvB|IiuG+Tzy3m5X?(1B9>DA zB8$?36I?8nh?Ew1&JGrXqsdhfmr91(A(U#_nN}+0PW@O8!g8{H$S> z`W(`(gLGaWO(owA$_)l@2jSoIU~9m2OW>q73vQLz5n>9t7!r6|OmgBO5vWWWA(raO zW$h?z>AZ+DVPhn+VM;7i0T{(Hos!8-kV#tL`jW;x2sy?R$%_;hf4#B(z%&S9)8|CpKTs0wB?anu90$P3QEQ}Rk+*Ce`=@8!(|*5qd2XAROOLlB z2lobtSr8IxQklAmeMaOdZcU>iE=vW|hr+XN-epZ|MUR7U&a21V6EUx<&sh-u(!}W3 z%|_vIoz-jYV+VP+4yWpqTscuH}w@Slh zxtmR;8Xto&PL792J76k|v1+75G#04Z@CPa+L8k9<#+*`-Ji#kf5*eu`3FI)9(Rd#D z7^aDc650{81kySJo}56DiKoKKAIBN(tK?SFMxns%#UD`gf9`Bbhf=-Xpf@23nG#?sxj|FzK%qWx=0 zRcXJsrrSLF#s3Y7P%7}FQ{dW*?lmDq?;{g}E-|pCi*}@pU}vlw zZ|+v&og2E4^UaTxJy1UMj7qyPu*RIJat2O8MrhpFH%LxK?zn+iqhq5qmWQjtq;vyxl!u_&A*12Ml<@0d&7(d#dD(3@Tcf1! zU_;R0ELR($+2(N1W6hegMyDE*_@_deS`@BaMQ__G{Pa@zR1j0%j@RB3(vDt8B-)<( zf0twV$K}@5kYSYrklKy3E!2v8-v9sr|Nq=s-A~&v5P#>dh|J3-(Lxd^Euxl~wnrwU zJx&ucvDA;bPjXl*8}G z2!FCThTSQhLj-m^v4Y5dH~S^b4Y%1N3hidWY8G z0mQ3eXmM+&u(^`-9;BLo@G3VnM(;m3H(_MY?=Tlf4ye1a?hA9OrRu-~F$m=Gd&ETT z5hb~(T>*8-p$!s-Nu6DsE!_>0e+xv0@`Xl5h`)YE7Q1T_RyOL;D)9Ybq@%ns0G*m+ zNX4yI0kZZ0T64F9HXCE9(MIL1rGIDw{A|s?h1s@>y4Ir8?$GzxvJ&u zAeC|+WMwi7Qa)$FLtmPkL!$6$ZC+*SN@mrWlqz7US*}q~Xd?2|Bd`VoYLliLxrn4? zGYj)&h!u|5J+T=4>h|k z4dh<$fVe&=ZX(4&iXP?VXs)G4pEYHg{^k%WDKSRbmE8xj)7s#8&tzDugsrgehAVBvaBWq?ZV1iV@@ZQpu$Wy}2ff94KOr zQ^!NV{jE|~ABU6-YDI1|oq8sDL9SnHjyT913Bq54q`n26(2-vI8DwdYRgVFyb{916 z{YMDj*`yX`n|T+}-VjuZ!SJTuqAVMLWI zpQ0HI!zz;RJ@N0({;(ke+$yzyVbz$U;I~|a8pB07FSm9MQW_RmMMM1`GG%Z#Jc_Ls zM|)(IzM)lECEP$EQrq+vb(q5ai?R+buOx{7C2U3tS2E)y@892n!9$4-3RW@-%AHY5 ze;j1mZhP6})tlMB3XH#1ArjUq)nTSh_9N4#VVPzQ!u@#PO9zA0By|Q)pIsQC0^cg- z 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%0A@szaNH`T-rI+DG8h34i0 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�ta!8&}*>)ywwHzx?qt#dC`k~!w?YU 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%0AU7t}}l$8F}lc87+N- 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

    R(CE=@PGxAKlVC|c7MqKa9oLnrD(!F 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 diff --git a/boundaries.html b/boundaries.html index dd5026b2f90..b209d1a37e3 100644 --- a/boundaries.html +++ b/boundaries.html @@ -13,7 +13,7 @@ - + diff --git a/changelog-autogenerated.html b/changelog-autogenerated.html index 192399ee989..5e89b0d6468 100644 --- a/changelog-autogenerated.html +++ b/changelog-autogenerated.html @@ -13,7 +13,7 @@ - + diff --git a/changelog.html b/changelog.html index 1f095c9f50e..39fe7db3353 100644 --- a/changelog.html +++ b/changelog.html @@ -13,7 +13,7 @@ - + diff --git a/classic.html b/classic.html index 52f129b1503..b745659650e 100644 --- a/classic.html +++ b/classic.html @@ -13,7 +13,7 @@ - + diff --git a/community.html b/community.html index e530046c02c..a52789a8fd2 100644 --- a/community.html +++ b/community.html @@ -13,7 +13,7 @@ - + diff --git a/cooperation.html b/cooperation.html index e65ff1d55a6..5abb0f8b662 100644 --- a/cooperation.html +++ b/cooperation.html @@ -13,7 +13,7 @@ - + diff --git a/database.html b/database.html index 1d6922603f0..a6f3e02833a 100644 --- a/database.html +++ b/database.html @@ -13,7 +13,7 @@ - + @@ -153,26 +153,26 @@

    Mixins - storing data about objects

    Mixins are tables which contain extra information on behalf of objects. Each object can choose to -record or not record information for each mixin. Sample mixins include:

    • user profile (containing a name, location and summary)
    • post content (containing the title, summary, and/or html body of a post or message)
    • created (containing the id of the object creator)

    In this way, they are reusable across different object types. One mixin may (or may not) be used by any number of objects. This is mostly driven by the type of the object we are storing, but can also be driven by user input.

    Mixins are just tables too! The only requirement is they have a ULID primary key which references Needle.Pointer. The developer of the mixin is free to put whatever other fields they want in the table, so long as they have that primary-key-as-reference (which will be automatically added for you by the mixin_schema macro).

    Here is a sample mixin definition for a user profile:

    defmodule Bonfire.Data.Social.Profile do
    +record or not record information for each mixin. Sample mixins include:

    • user profile (containing a name, location and summary)
    • post content (containing the title, summary, and/or html body of a post or message)
    • created (containing the id of the object creator)

    In this way, they are reusable across different object types. One mixin may (or may not) be used by any number of objects. This is mostly driven by the type of the object we are storing, but can also be driven by user input.

    Mixins are just tables too! The only requirement is they have a ULID primary key which references Needle.Pointer. The developer of the mixin is free to put whatever other fields they want in the table, so long as they have that primary-key-as-reference (which will be automatically added for you by the mixin_schema macro).

    Here is a sample mixin definition for a user profile:

    defmodule Bonfire.Data.Social.Profile do
     
       use Needle.Mixin,
         otp_app: :bonfire_data_social,
         source: "bonfire_data_social_profile"
     
    -  mixin_schema do
    +  mixin_schema do
         field :name, :string
         field :summary, :string
         field :website, :string
         field :location, :string
    -  end
    -end

    Aside from useing Needle.Mixin instead of Ecto.Schema and calling mixin_schema instead of + end +end

    Aside from useing Needle.Mixin instead of Ecto.Schema and calling mixin_schema instead of schema, pretty similar to a standard Ecto schema, right?

    The arguments to use Needle.Mixin are:

    • otp_app: the OTP app name to use when loading dynamic configuration, e.g. the current extension or app (required)
    • source: the underlying table name to use in the database

    We will cover dynamic configuration later. For now, you can use the OTP app that includes the module.

    Multimixins

    -

    Multimixins are like mixins, except that where an object may have 0 or 1 of a particular mixins, an object may have any number of a particular multimixin.

    For this to work, a multimixin must have a compound primary key which must contain an id column referencing Needle.Pointer and at least one other field which will collectively be unique.

    An example multimixin is used for publishing an item to feeds:

    defmodule Bonfire.Data.Social.FeedPublish do
    +

    Multimixins are like mixins, except that where an object may have 0 or 1 of a particular mixins, an object may have any number of a particular multimixin.

    For this to work, a multimixin must have a compound primary key which must contain an id column referencing Needle.Pointer and at least one other field which will collectively be unique.

    An example multimixin is used for publishing an item to feeds:

    defmodule Bonfire.Data.Social.FeedPublish do
     
       use Needle.Mixin,
         otp_app: :bonfire_data_social,
    @@ -180,10 +180,10 @@ 

    alias Needle.Pointer - mixin_schema do + mixin_schema do belongs_to :feed, Pointer, primary_key: true - end -end

    Notice that this looks very similar to defining a mixin. Indeed, the only difference is the primary_key: true in this line, which adds a second field to the compound primary key. + end +end

    Notice that this looks very similar to defining a mixin. Indeed, the only difference is the primary_key: true in this line, which adds a second field to the compound primary key. This results in ecto recording a compound primary key of (id, feed_id) for the schema (the id is added for you as with regular mixins).

    @@ -196,26 +196,26 @@

    Picking a table id

    -

    The first step to declaring a type is picking a unique table ID in ULID format. You could just generate one at the terminal, but since these IDs are special, we tend to assign a synthetic ULID that are readable as words so they stand out in debug output.

    For example, the ID for the Feed table is: 1TFEEDS0NTHES0V1S0FM0RTA1S, which can be read as "It feeds on the souls of mortals". Feel free to have a little fun coming up with them, it makes debug output a little more cheery! The rules are:

    • The alphabet is Crockford's Base32.
    • They must be 26 characters in length.
    • The first character must be a digit in the range 0-7.

    To help you with this, the Needle.ULID.synthesise!/1 method takes an alphanumeric binary and tries to return you it transliterated into a valid ULID. Example usage:

    iex(1)> Needle.ULID.synthesise!("itfeedsonthesouls")
    +

    The first step to declaring a type is picking a unique table ID in ULID format. You could just generate one at the terminal, but since these IDs are special, we tend to assign a synthetic ULID that are readable as words so they stand out in debug output.

    For example, the ID for the Feed table is: 1TFEEDS0NTHES0V1S0FM0RTA1S, which can be read as "It feeds on the souls of mortals". Feel free to have a little fun coming up with them, it makes debug output a little more cheery! The rules are:

    • The alphabet is Crockford's Base32.
    • They must be 26 characters in length.
    • The first character must be a digit in the range 0-7.

    To help you with this, the Needle.ULID.synthesise!/1 method takes an alphanumeric binary and tries to return you it transliterated into a valid ULID. Example usage:

    iex(1)> Needle.ULID.synthesise!("itfeedsonthesouls")
     
    -11:20:28.299 [error] Too short, need 9 chars.
    +11:20:28.299 [error] Too short, need 9 chars.
     :ok
    -iex(2)> Needle.ULID.synthesise!("itfeedsonthesoulsofmortalsandothers")
    +iex(2)> Needle.ULID.synthesise!("itfeedsonthesoulsofmortalsandothers")
     
    -11:20:31.819 [warn]  Too long, chopping off last 9 chars
    +11:20:31.819 [warn]  Too long, chopping off last 9 chars
     "1TFEEDS0NTHES0V1S0FM0RTA1S"
    -iex(3)> Needle.ULID.synthesise!("itfeedsonthesoulsofmortals")
    +iex(3)> Needle.ULID.synthesise!("itfeedsonthesoulsofmortals")
     "1TFEEDS0NTHES0V1S0FM0RTA1S"
    -iex(4)> Needle.ULID.synthesise!("gtfeedsonthesoulsofmortals")
    +iex(4)> Needle.ULID.synthesise!("gtfeedsonthesoulsofmortals")
     
    -11:21:03.268 [warn]  First character must be a digit in the range 0-7, replacing with 7
    +11:21:03.268 [warn]  First character must be a digit in the range 0-7, replacing with 7
     "7TFEEDS0NTHES0V1S0FM0RTA1S"

    Virtuals

    -

    Virtuals are the simplest and most common type of object. Here's a definition of block:

    defmodule Bonfire.Data.Social.Block do
    +

    Virtuals are the simplest and most common type of object. Here's a definition of block:

    defmodule Bonfire.Data.Social.Block do
     
       use Needle.Virtual,
         otp_app: :bonfire_data_social,
    @@ -224,26 +224,26 @@ 

    alias Bonfire.Data.Edges.Edge - virtual_schema do + virtual_schema do has_one :edge, Edge, foreign_key: :id - end -end

    It should look quite similar to a mixin definition, except that we use Needle.Virtual this time (passing an additional table_id argument) and we call the virtual_schema macro.

    The primary limitation of a virtual is that you cannot put extra fields into one. This also means that belongs_to is not generally permitted because it results in adding a field. has_one and has_many work just fine as they do not cause the creation of fields in the schema.

    This is not usually a problem, as extra fields can be put into mixins or multimixins as appropriate.

    Under the hood, a virtual has a view (in this example, called bonfire_data_social_block). It looks like a table with just an id, but it's populated with all the ids of blocks that are not deleted. When the view is inserted into, a record is created in the pointers table for you transparently. When you delete from the view, the corresponding pointers entry is marked deleted for you.

    + end +end

    It should look quite similar to a mixin definition, except that we use Needle.Virtual this time (passing an additional table_id argument) and we call the virtual_schema macro.

    The primary limitation of a virtual is that you cannot put extra fields into one. This also means that belongs_to is not generally permitted because it results in adding a field. has_one and has_many work just fine as they do not cause the creation of fields in the schema.

    This is not usually a problem, as extra fields can be put into mixins or multimixins as appropriate.

    Under the hood, a virtual has a view (in this example, called bonfire_data_social_block). It looks like a table with just an id, but it's populated with all the ids of blocks that are not deleted. When the view is inserted into, a record is created in the pointers table for you transparently. When you delete from the view, the corresponding pointers entry is marked deleted for you.

    Pointables

    -

    The other, lesser used, type of object is called the Pointable. The major difference is that unlike the simple case of virtuals, pointables are not backed by views, but by tables.

    When a record is inserted into a pointable table, a copy is made in the pointers table for you transparently. When you delete from the table, the the corresponding pointers entry is marked deleted for you. In these ways, they behave very much like virtuals. By having a table, however, we are free to add new fields.

    Pointables pay for this flexibility by being slightly more expensive than virtuals:

    • Records must be inserted into/deleted from two tables (the pointable's table and the pointers table).
    • The pointable table needs its own primary key index.

    Here is a definition of a pointable type (indicating an ActivityPub activity whose type we don't recognise, stored as a JSON blob):

    defmodule Bonfire.Data.Social.APActivity do
    +

    The other, lesser used, type of object is called the Pointable. The major difference is that unlike the simple case of virtuals, pointables are not backed by views, but by tables.

    When a record is inserted into a pointable table, a copy is made in the pointers table for you transparently. When you delete from the table, the the corresponding pointers entry is marked deleted for you. In these ways, they behave very much like virtuals. By having a table, however, we are free to add new fields.

    Pointables pay for this flexibility by being slightly more expensive than virtuals:

    • Records must be inserted into/deleted from two tables (the pointable's table and the pointers table).
    • The pointable table needs its own primary key index.

    Here is a definition of a pointable type (indicating an ActivityPub activity whose type we don't recognise, stored as a JSON blob):

    defmodule Bonfire.Data.Social.APActivity do
     
       use Needle.Pointable,
         otp_app: :bonfire_data_social,
         table_id: "30NF1REAPACTTAB1ENVMBER0NE",
         source: "bonfire_data_social_apactivity"
     
    -  pointable_schema do
    +  pointable_schema do
         field :json, :map
    -  end
    -end

    The choice of using a pointable instead of a virtual combined with one or more mixins is ultimately up to you.

    + end +end

    The choice of using a pointable instead of a virtual combined with one or more mixins is ultimately up to you.

    @@ -255,37 +255,37 @@

    Virtuals

    -

    Most virtuals are incredibly simple to migrate for:

    defmodule Bonfire.Data.Social.Post.Migration do
    +

    Most virtuals are incredibly simple to migrate for:

    defmodule Bonfire.Data.Social.Post.Migration do
     
       import Needle.Migration
       alias Bonfire.Data.Social.Post
     
    -  def migrate_post(), do: migrate_virtual(Post)
    +  def migrate_post(), do: migrate_virtual(Post)
     
    -end

    If you need to do more work, it can be a little trickier. Here's an example for block, which also creates a unique index on another table:

    defmodule Bonfire.Data.Social.Block.Migration do
    +end

    If you need to do more work, it can be a little trickier. Here's an example for block, which also creates a unique index on another table:

    defmodule Bonfire.Data.Social.Block.Migration do
     
       import Ecto.Migration
       import Needle.Migration
       import Bonfire.Data.Edges.Edge.Migration
       alias Bonfire.Data.Social.Block
     
    -  def migrate_block_view(), do: migrate_virtual(Block)
    +  def migrate_block_view(), do: migrate_virtual(Block)
     
    -  def migrate_block_unique_index(), do: migrate_type_unique_index(Block)
    +  def migrate_block_unique_index(), do: migrate_type_unique_index(Block)
     
    -  def migrate_block(dir \\ direction())
    +  def migrate_block(dir \\ direction())
     
    -  def migrate_block(:up) do
    -    migrate_block_view()
    -    migrate_block_unique_index()
    -  end
    +  def migrate_block(:up) do
    +    migrate_block_view()
    +    migrate_block_unique_index()
    +  end
     
    -  def migrate_block(:down) do
    -    migrate_block_unique_index()
    -    migrate_block_view()
    -  end
    +  def migrate_block(:down) do
    +    migrate_block_unique_index()
    +    migrate_block_view()
    +  end
     
    -end

    Notice how we have to write our up and down versions separately to get the correct ordering of operations.

    +end

    Notice how we have to write our up and down versions separately to get the correct ordering of operations.

    @@ -293,156 +293,156 @@

    As of now, pointables are a little trickier to define flexibly than virtuals because we want to preserve the ability for the user to define extra fields in config. There are some questions about -how useful this is in practice, so we might go for a simpler option in future.

    Example:

    defmodule Bonfire.Data.Social.APActivity.Migration  do
    +how useful this is in practice, so we might go for a simpler option in future.

    Example:

    defmodule Bonfire.Data.Social.APActivity.Migration  do
       @moduledoc false
       use Ecto.Migration
       import Needle.Migration
       alias Bonfire.Data.Social.APActivity
     
    -  defp make_apactivity_table(exprs) do
    -    quote do
    +  defp make_apactivity_table(exprs) do
    +    quote do
           require Needle.Migration
    -      Needle.Migration.create_pointable_table(Bonfire.Data.Social.APActivity) do
    +      Needle.Migration.create_pointable_table(Bonfire.Data.Social.APActivity) do
             Ecto.Migration.add :json, :jsonb
    -        unquote_splicing(exprs)
    -      end
    -    end
    -  end
    -
    -  defmacro create_apactivity_table, do: make_apactivity_table([])
    -  defmacro create_apactivity_table([do: body]), do: make_apactivity_table(body)
    -
    -  def drop_apactivity_table(), do: drop_pointable_table(APActivity)
    -
    -  defp maa(:up), do: make_apactivity_table([])
    -  defp maa(:down) do
    -    quote do: Bonfire.Data.Social.APActivity.Migration.drop_apactivity_table()
    -  end
    -
    -  defmacro migrate_apactivity() do
    -    quote do
    -      if Ecto.Migration.direction() == :up,
    -        do: unquote(maa(:up)),
    -        else: unquote(maa(:down))
    -    end
    -  end
    -
    -end

    + unquote_splicing(exprs) + end + end + end + + defmacro create_apactivity_table, do: make_apactivity_table([]) + defmacro create_apactivity_table([do: body]), do: make_apactivity_table(body) + + def drop_apactivity_table(), do: drop_pointable_table(APActivity) + + defp maa(:up), do: make_apactivity_table([]) + defp maa(:down) do + quote do: Bonfire.Data.Social.APActivity.Migration.drop_apactivity_table() + end + + defmacro migrate_apactivity() do + quote do + if Ecto.Migration.direction() == :up, + do: unquote(maa(:up)), + else: unquote(maa(:down)) + end + end + +end

    Mixins

    -

    Mixins look much like pointables:

    defmodule Bonfire.Data.Social.Profile.Migration do
    +

    Mixins look much like pointables:

    defmodule Bonfire.Data.Social.Profile.Migration do
     
       import Needle.Migration
       alias Bonfire.Data.Social.Profile
     
       # create_profile_table/{0,1}
     
    -  defp make_profile_table(exprs) do
    -    quote do
    +  defp make_profile_table(exprs) do
    +    quote do
           require Needle.Migration
    -      Needle.Migration.create_mixin_table(Bonfire.Data.Social.Profile) do
    +      Needle.Migration.create_mixin_table(Bonfire.Data.Social.Profile) do
             Ecto.Migration.add :name, :text
             Ecto.Migration.add :summary, :text
             Ecto.Migration.add :website, :text
             Ecto.Migration.add :location, :text
    -        Ecto.Migration.add :icon_id, strong_pointer(Bonfire.Files.Media)
    -        Ecto.Migration.add :image_id, strong_pointer(Bonfire.Files.Media)
    -        unquote_splicing(exprs)
    -      end
    -    end
    -  end
    +        Ecto.Migration.add :icon_id, strong_pointer(Bonfire.Files.Media)
    +        Ecto.Migration.add :image_id, strong_pointer(Bonfire.Files.Media)
    +        unquote_splicing(exprs)
    +      end
    +    end
    +  end
     
    -  defmacro create_profile_table(), do: make_profile_table([])
    -  defmacro create_profile_table([do: {_, _, body}]), do: make_profile_table(body)
    +  defmacro create_profile_table(), do: make_profile_table([])
    +  defmacro create_profile_table([do: {_, _, body}]), do: make_profile_table(body)
     
       # drop_profile_table/0
     
    -  def drop_profile_table(), do: drop_mixin_table(Profile)
    +  def drop_profile_table(), do: drop_mixin_table(Profile)
     
       # migrate_profile/{0,1}
     
    -  defp mp(:up), do: make_profile_table([])
    +  defp mp(:up), do: make_profile_table([])
     
    -  defp mp(:down) do
    -    quote do
    -      Bonfire.Data.Social.Profile.Migration.drop_profile_table()
    -    end
    -  end
    +  defp mp(:down) do
    +    quote do
    +      Bonfire.Data.Social.Profile.Migration.drop_profile_table()
    +    end
    +  end
     
    -  defmacro migrate_profile() do
    -    quote do
    -      if Ecto.Migration.direction() == :up,
    -        do: unquote(mp(:up)),
    -        else: unquote(mp(:down))
    -    end
    -  end
    +  defmacro migrate_profile() do
    +    quote do
    +      if Ecto.Migration.direction() == :up,
    +        do: unquote(mp(:up)),
    +        else: unquote(mp(:down))
    +    end
    +  end
     
    -end

    +end

    Multimixins

    -

    Similar to mixins:

    defmodule Bonfire.Data.Social.FeedPublish.Migration do
    +

    Similar to mixins:

    defmodule Bonfire.Data.Social.FeedPublish.Migration do
     
       import Ecto.Migration
       import Needle.Migration
       alias Bonfire.Data.Social.FeedPublish
     
    -  @feed_publish_table FeedPublish.__schema__(:source)
    +  @feed_publish_table FeedPublish.__schema__(:source)
     
       # create_feed_publish_table/{0,1}
     
    -  defp make_feed_publish_table(exprs) do
    -    quote do
    +  defp make_feed_publish_table(exprs) do
    +    quote do
           require Needle.Migration
    -      Needle.Migration.create_mixin_table(Bonfire.Data.Social.FeedPublish) do
    +      Needle.Migration.create_mixin_table(Bonfire.Data.Social.FeedPublish) do
             Ecto.Migration.add :feed_id,
    -          Needle.Migration.strong_pointer(), primary_key: true
    -        unquote_splicing(exprs)
    -      end
    -    end
    -  end
    -
    -  defmacro create_feed_publish_table(), do: make_feed_publish_table([])
    -  defmacro create_feed_publish_table([do: {_, _, body}]), do: make_feed_publish_table(body)
    -
    -  def drop_feed_publish_table(), do: drop_pointable_table(FeedPublish)
    -
    -  def migrate_feed_publish_feed_index(dir \\ direction(), opts \\ [])
    -  def migrate_feed_publish_feed_index(:up, opts),
    -    do: create_if_not_exists(index(@feed_publish_table, [:feed_id], opts))
    -  def migrate_feed_publish_feed_index(:down, opts),
    -    do: drop_if_exists(index(@feed_publish_table, [:feed_id], opts))
    -
    -  defp mf(:up) do
    -    quote do
    -      Bonfire.Data.Social.FeedPublish.Migration.create_feed_publish_table()
    -      Bonfire.Data.Social.FeedPublish.Migration.migrate_feed_publish_feed_index()
    -    end
    -  end
    -
    -  defp mf(:down) do
    -    quote do
    -      Bonfire.Data.Social.FeedPublish.Migration.migrate_feed_publish_feed_index()
    -      Bonfire.Data.Social.FeedPublish.Migration.drop_feed_publish_table()
    -    end
    -  end
    -
    -  defmacro migrate_feed_publish() do
    -    quote do
    -      if Ecto.Migration.direction() == :up,
    -        do: unquote(mf(:up)),
    -        else: unquote(mf(:down))
    -    end
    -  end
    -
    -  defmacro migrate_feed_publish(dir), do: mf(dir)
    -
    -end

    + Needle.Migration.strong_pointer(), primary_key: true + unquote_splicing(exprs) + end + end + end + + defmacro create_feed_publish_table(), do: make_feed_publish_table([]) + defmacro create_feed_publish_table([do: {_, _, body}]), do: make_feed_publish_table(body) + + def drop_feed_publish_table(), do: drop_pointable_table(FeedPublish) + + def migrate_feed_publish_feed_index(dir \\ direction(), opts \\ []) + def migrate_feed_publish_feed_index(:up, opts), + do: create_if_not_exists(index(@feed_publish_table, [:feed_id], opts)) + def migrate_feed_publish_feed_index(:down, opts), + do: drop_if_exists(index(@feed_publish_table, [:feed_id], opts)) + + defp mf(:up) do + quote do + Bonfire.Data.Social.FeedPublish.Migration.create_feed_publish_table() + Bonfire.Data.Social.FeedPublish.Migration.migrate_feed_publish_feed_index() + end + end + + defp mf(:down) do + quote do + Bonfire.Data.Social.FeedPublish.Migration.migrate_feed_publish_feed_index() + Bonfire.Data.Social.FeedPublish.Migration.drop_feed_publish_table() + end + end + + defmacro migrate_feed_publish() do + quote do + if Ecto.Migration.direction() == :up, + do: unquote(mf(:up)), + else: unquote(mf(:down)) + end + end + + defmacro migrate_feed_publish(dir), do: mf(dir) + +end

    diff --git a/deploy.html b/deploy.html index 8e106550b32..0d5ad629f13 100644 --- a/deploy.html +++ b/deploy.html @@ -13,7 +13,7 @@ - + @@ -184,13 +184,13 @@

    -

    The app needs these environment variables to be configured in order to work.

    • FLAVOUR should reflect your chosen flavour
    • HOSTNAME (your domain name, eg: bonfire.example.com)
    • PUBLIC_PORT (usually 443)
    • MAIL_DOMAIN and MAIL_KEY and related keys to configure transactional email, for example set MAIL_BACKEND=mailgun and sign up at Mailgun and then configure the domain name and key (you may also need to set MAIL_BASE_URI if your domain is not setup in EU, as the default MAIL_BASE_URI is set as https://api.eu.mailgun.net/v3).
    • SMTP is supported as well, through the following env vars
      MAIL_SERVER (smtp domain of the mail server)
      -MAIL_DOMAIN (the bit after the @ in your email)
      +

      The app needs these environment variables to be configured in order to work.

      • FLAVOUR should reflect your chosen flavour
      • HOSTNAME (your domain name, eg: bonfire.example.com)
      • PUBLIC_PORT (usually 443)
      • MAIL_DOMAIN and MAIL_KEY and related keys to configure transactional email, for example set MAIL_BACKEND=mailgun and sign up at Mailgun and then configure the domain name and key (you may also need to set MAIL_BASE_URI if your domain is not setup in EU, as the default MAIL_BASE_URI is set as https://api.eu.mailgun.net/v3).
      • SMTP is supported as well, through the following env vars
        MAIL_SERVER (smtp domain of the mail server)
        +MAIL_DOMAIN (the bit after the @ in your email)
         MAIL_USER
         MAIL_PASSWORD
         MAIL_FROM
        -MAIL_PORT (optional)
        -MAIL_SSL (optional)
      • UPLOADS_S3_BUCKET and the related API key and secret for uploads. WARNING: If you want to store uploads in an object storage rather than directly on your server (which you probably want, to not run out of space), you need to configure that up front, otherwise URLs will break if you change it later. See config/runtime.exs for extra variables to set if you're not using the default service and region (which is Scaleway Paris).

      +MAIL_PORT (optional) +MAIL_SSL (optional)

    • UPLOADS_S3_BUCKET and the related API key and secret for uploads. WARNING: If you want to store uploads in an object storage rather than directly on your server (which you probably want, to not run out of space), you need to configure that up front, otherwise URLs will break if you change it later. See config/runtime.exs for extra variables to set if you're not using the default service and region (which is Scaleway Paris).

    @@ -377,14 +377,14 @@

    Dependencies

    • Postgres (or Postgis) version 12 or newer
    • < Troubleshooting

    -

    Some common issues that may arise during deployment and our suggestions for resolving them.

    WebSocket connections not establishing behind a reverse proxy

    If you are running Bonfire behind your own reverse proxy (e.g. nginx), you might experience issues with WebSocket connections not establishing. WebSocket connections require specific configuration to work, in nginx the following configuration is necessary for websockets to work:

    location /live/websocket {
    +

    Some common issues that may arise during deployment and our suggestions for resolving them.

    WebSocket connections not establishing behind a reverse proxy

    If you are running Bonfire behind your own reverse proxy (e.g. nginx), you might experience issues with WebSocket connections not establishing. WebSocket connections require specific configuration to work, in nginx the following configuration is necessary for websockets to work:

    location /live/websocket {
         proxy_pass http://127.0.0.1:4000;
         
         # these configurations are necessary to proxy WebSocket requests
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
    -}
    +
    }
    diff --git a/deps-classic.html b/deps-classic.html index 9ed57a40a0e..2aacd57fc46 100644 --- a/deps-classic.html +++ b/deps-classic.html @@ -13,7 +13,7 @@ - + diff --git a/deps-cooperation.html b/deps-cooperation.html index 3c2736be669..a7d4abf7950 100644 --- a/deps-cooperation.html +++ b/deps-cooperation.html @@ -13,7 +13,7 @@ - + diff --git a/dist/search_data-AF8E67A3.js b/dist/search_data-AF8E67A3.js deleted file mode 100644 index d1d4f7b6903..00000000000 --- a/dist/search_data-AF8E67A3.js +++ /dev/null @@ -1 +0,0 @@ -searchData={"items":[{"type":"module","title":"Bonfire.Data.AccessControl.Acl","doc":"Conceptually, a complete list of all permissions for everybody.\nIn practice, it's a partial specification, and anything not\nexplicitly granted is assumed to be denied.\n\nCan be reused to secure multiple objects, thus exists independently\nof any object.","ref":"Bonfire.Data.AccessControl.Acl.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Acl.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Acl.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Circle","doc":"","ref":"Bonfire.Data.AccessControl.Circle.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Circle.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Circle.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Controlled","doc":"An object is linked to one or more `Acl`s by the `Controlled` multimixin, which pairs an object ID with an ACL ID. Because it is a multimixin, a given object can have multiple ACLs applied. In the case of overlap, permissions are combined with `false` being prioritised.","ref":"Bonfire.Data.AccessControl.Controlled.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Controlled.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Controlled.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Encircle","doc":"","ref":"Bonfire.Data.AccessControl.Encircle.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Encircle.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Encircle.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Grant","doc":"","ref":"Bonfire.Data.AccessControl.Grant.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Grant.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Grant.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.InstanceAdmin","doc":"A mixin for superpowers","ref":"Bonfire.Data.AccessControl.InstanceAdmin.html"},{"type":"function","title":"Bonfire.Data.AccessControl.InstanceAdmin.changeset/3","doc":"","ref":"Bonfire.Data.AccessControl.InstanceAdmin.html#changeset/3"},{"type":"module","title":"Bonfire.Data.AccessControl.Stereotyped","doc":"A marker that identifies special context-dependent semantics to the system.","ref":"Bonfire.Data.AccessControl.Stereotyped.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Stereotyped.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Stereotyped.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Verb","doc":"","ref":"Bonfire.Data.AccessControl.Verb.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Verb.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Verb.html#changeset/2"},{"type":"module","title":"Bonfire.Data.ActivityPub.Actor","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.html"},{"type":"function","title":"Bonfire.Data.ActivityPub.Actor.changeset/2","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.html#changeset/2"},{"type":"module","title":"Bonfire.Data.ActivityPub.Actor.Migration","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html"},{"type":"macro","title":"Bonfire.Data.ActivityPub.Actor.Migration.create_actor_table/0","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#create_actor_table/0"},{"type":"macro","title":"Bonfire.Data.ActivityPub.Actor.Migration.create_actor_table/1","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#create_actor_table/1"},{"type":"function","title":"Bonfire.Data.ActivityPub.Actor.Migration.drop_actor_table/0","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#drop_actor_table/0"},{"type":"macro","title":"Bonfire.Data.ActivityPub.Actor.Migration.migrate_actor/0","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#migrate_actor/0"},{"type":"macro","title":"Bonfire.Data.ActivityPub.Actor.Migration.migrate_actor/1","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#migrate_actor/1"},{"type":"module","title":"Bonfire.Data.ActivityPub.Peer","doc":"Federated instances","ref":"Bonfire.Data.ActivityPub.Peer.html"},{"type":"function","title":"Bonfire.Data.ActivityPub.Peer.changeset/3","doc":"","ref":"Bonfire.Data.ActivityPub.Peer.html#changeset/3"},{"type":"module","title":"Bonfire.Data.ActivityPub.Peered","doc":"Federated actors or objects","ref":"Bonfire.Data.ActivityPub.Peered.html"},{"type":"function","title":"Bonfire.Data.ActivityPub.Peered.changeset/3","doc":"","ref":"Bonfire.Data.ActivityPub.Peered.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Assort.Ranked","doc":"A reusable table to link child or related items and also rank sibling items.\n\nUsage (for global ranking, otherwise you should specify scope):\n```\n{:ok, first} = Bonfire.Data.Assort.Ranked.changeset(%{item_id: \"01FGTH48ZZD08ADBHQ260KYJHW\"}) |> repo().insert\nsecond = Bonfire.Data.Assort.Ranked.changeset(%{item_id: \"01FGTH0N3YPBS5MNNAEAEVV54J\"}) |> repo().insert\n\nimport Ecto.Query\nBonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all\n\nfirst |> Bonfire.Data.Assort.Ranked.changeset(%{rank_set: :last}) |> repo().update\n\nBonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all\n```","ref":"Bonfire.Data.Assort.Ranked.html"},{"type":"function","title":"Bonfire.Data.Assort.Ranked.changeset/2","doc":"","ref":"Bonfire.Data.Assort.Ranked.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Assort.Ranked.Migration","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.create_ranked_table/0","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#create_ranked_table/0"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.create_ranked_table/1","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#create_ranked_table/1"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.create_unique_index/1","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#create_unique_index/1"},{"type":"function","title":"Bonfire.Data.Assort.Ranked.Migration.drop_ranked_table/0","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#drop_ranked_table/0"},{"type":"function","title":"Bonfire.Data.Assort.Ranked.Migration.drop_unique_index/1","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#drop_unique_index/1"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.migrate_ranked/0","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#migrate_ranked/0"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.migrate_ranked/1","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#migrate_ranked/1"},{"type":"module","title":"Bonfire.Data.Edges.Edge","doc":"","ref":"Bonfire.Data.Edges.Edge.html"},{"type":"function","title":"Bonfire.Data.Edges.Edge.changeset/2","doc":"","ref":"Bonfire.Data.Edges.Edge.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Edges.EdgeTotal","doc":"","ref":"Bonfire.Data.Edges.EdgeTotal.html"},{"type":"function","title":"Bonfire.Data.Edges.EdgeTotal.changeset/2","doc":"","ref":"Bonfire.Data.Edges.EdgeTotal.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.Account","doc":"An account is an identity for authentication purposes. An account\nhas one or more credentials with which it may identify.","ref":"Bonfire.Data.Identity.Account.html"},{"type":"function","title":"Bonfire.Data.Identity.Account.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Account.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.Accounted","doc":"A mixin for an account ID, indicating ownership\n\nPrimarily used for Users.","ref":"Bonfire.Data.Identity.Accounted.html"},{"type":"function","title":"Bonfire.Data.Identity.Accounted.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Accounted.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.Alias","doc":"","ref":"Bonfire.Data.Identity.Alias.html"},{"type":"function","title":"Bonfire.Data.Identity.Alias.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Alias.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.AuthSecondFactor","doc":"A mixin that stores a second factor secret to authenticate an account.","ref":"Bonfire.Data.Identity.AuthSecondFactor.html"},{"type":"function","title":"Bonfire.Data.Identity.AuthSecondFactor.changeset/2","doc":"","ref":"Bonfire.Data.Identity.AuthSecondFactor.html#changeset/2"},{"type":"function","title":"Bonfire.Data.Identity.AuthSecondFactor.valid_totp?/2","doc":"","ref":"Bonfire.Data.Identity.AuthSecondFactor.html#valid_totp?/2"},{"type":"module","title":"Bonfire.Data.Identity.CareClosure","doc":"A recursive view of all entities taken care of by their root entities.\n\nReally, really do not query this without providing a branch_id.","ref":"Bonfire.Data.Identity.CareClosure.html"},{"type":"function","title":"Bonfire.Data.Identity.CareClosure.by_branch/1","doc":"","ref":"Bonfire.Data.Identity.CareClosure.html#by_branch/1"},{"type":"module","title":"Bonfire.Data.Identity.Caretaker","doc":"The entity responsible for something. In practice, it means that\nsomething is deleted when its caretaker is deleted.\n\nYou can think of it as being like the creator, except:\na) You can give it away.\nb) Objects can take care of arbitrary objects, such as e.g. custom\n ACLs created to permit people mentioned special permissions","ref":"Bonfire.Data.Identity.Caretaker.html"},{"type":"function","title":"Bonfire.Data.Identity.Caretaker.changeset/3","doc":"","ref":"Bonfire.Data.Identity.Caretaker.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Identity.Character","doc":"A username mixin that denies reuse of the same or similar usernames\neven when the username has been deleted.","ref":"Bonfire.Data.Identity.Character.html"},{"type":"function","title":"Bonfire.Data.Identity.Character.changeset/3","doc":"","ref":"Bonfire.Data.Identity.Character.html#changeset/3"},{"type":"function","title":"Bonfire.Data.Identity.Character.changeset_basic/2","doc":"","ref":"Bonfire.Data.Identity.Character.html#changeset_basic/2"},{"type":"function","title":"Bonfire.Data.Identity.Character.hash/1","doc":"","ref":"Bonfire.Data.Identity.Character.html#hash/1"},{"type":"function","title":"Bonfire.Data.Identity.Character.uniform/1","doc":"","ref":"Bonfire.Data.Identity.Character.html#uniform/1"},{"type":"module","title":"Bonfire.Data.Identity.Credential","doc":"A Mixin that provides a password for local login.","ref":"Bonfire.Data.Identity.Credential.html"},{"type":"function","title":"Bonfire.Data.Identity.Credential.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Credential.html#changeset/2"},{"type":"function","title":"Bonfire.Data.Identity.Credential.check_password/2","doc":"","ref":"Bonfire.Data.Identity.Credential.html#check_password/2"},{"type":"function","title":"Bonfire.Data.Identity.Credential.confirmation_changeset/2","doc":"","ref":"Bonfire.Data.Identity.Credential.html#confirmation_changeset/2"},{"type":"function","title":"Bonfire.Data.Identity.Credential.dummy_check/0","doc":"","ref":"Bonfire.Data.Identity.Credential.html#dummy_check/0"},{"type":"function","title":"Bonfire.Data.Identity.Credential.hash_password/1","doc":"","ref":"Bonfire.Data.Identity.Credential.html#hash_password/1"},{"type":"module","title":"Bonfire.Data.Identity.Credential.Migration","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html"},{"type":"macro","title":"Bonfire.Data.Identity.Credential.Migration.create_credential_table/0","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#create_credential_table/0"},{"type":"macro","title":"Bonfire.Data.Identity.Credential.Migration.create_credential_table/1","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#create_credential_table/1"},{"type":"function","title":"Bonfire.Data.Identity.Credential.Migration.drop_credential_table/0","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#drop_credential_table/0"},{"type":"macro","title":"Bonfire.Data.Identity.Credential.Migration.migrate_credential/0","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#migrate_credential/0"},{"type":"macro","title":"Bonfire.Data.Identity.Credential.Migration.migrate_credential/1","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#migrate_credential/1"},{"type":"module","title":"Bonfire.Data.Identity.Email","doc":"","ref":"Bonfire.Data.Identity.Email.html"},{"type":"function","title":"Bonfire.Data.Identity.Email.changeset/3","doc":"Options:\n email_regex: Regexp.t (default very minimal validation)\n must_confirm?: bool (default true)","ref":"Bonfire.Data.Identity.Email.html#changeset/3"},{"type":"function","title":"Bonfire.Data.Identity.Email.confirm/1","doc":"Changeset function. Marks the user's email as confirmed and removes\ntheir confirmation token.","ref":"Bonfire.Data.Identity.Email.html#confirm/1"},{"type":"function","title":"Bonfire.Data.Identity.Email.may_confirm?/2","doc":"","ref":"Bonfire.Data.Identity.Email.html#may_confirm?/2"},{"type":"function","title":"Bonfire.Data.Identity.Email.may_request_confirm_email?/2","doc":"Checks whether the user should be able to request a confirm email","ref":"Bonfire.Data.Identity.Email.html#may_request_confirm_email?/2"},{"type":"function","title":"Bonfire.Data.Identity.Email.put_token/1","doc":"Changeset function. Unconditionally sets the user as unconfirmed,\ngenerates a confirmation token and puts an expiry on it determined\nby the `:confirm_duration` config key (default one day).","ref":"Bonfire.Data.Identity.Email.html#put_token/1"},{"type":"function","title":"Bonfire.Data.Identity.Email.should_request_or_refresh?/2","doc":"Checks whether the user should request a new confirmation token or refresh it","ref":"Bonfire.Data.Identity.Email.html#should_request_or_refresh?/2"},{"type":"type","title":"Bonfire.Data.Identity.Email.t/0","doc":"","ref":"Bonfire.Data.Identity.Email.html#t:t/0"},{"type":"module","title":"Bonfire.Data.Identity.ExtraInfo","doc":"","ref":"Bonfire.Data.Identity.ExtraInfo.html"},{"type":"function","title":"Bonfire.Data.Identity.ExtraInfo.changeset/3","doc":"","ref":"Bonfire.Data.Identity.ExtraInfo.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Identity.Named","doc":"","ref":"Bonfire.Data.Identity.Named.html"},{"type":"function","title":"Bonfire.Data.Identity.Named.changeset/3","doc":"","ref":"Bonfire.Data.Identity.Named.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Identity.Self","doc":"","ref":"Bonfire.Data.Identity.Self.html"},{"type":"function","title":"Bonfire.Data.Identity.Self.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Self.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.Settings","doc":"A mixin that stores settings (of the instance, account, user, etc) as an Erlang Term (typically a map or keyword list) encoded to binary.","ref":"Bonfire.Data.Identity.Settings.html"},{"type":"function","title":"Bonfire.Data.Identity.Settings.changeset/3","doc":"","ref":"Bonfire.Data.Identity.Settings.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Identity.User","doc":"A persona. A person (account) may have more than one user, but this\nis not exposed publicly (except to local instance administrators),\nso it is as if they are different people.","ref":"Bonfire.Data.Identity.User.html"},{"type":"function","title":"Bonfire.Data.Identity.User.changeset/2","doc":"","ref":"Bonfire.Data.Identity.User.html#changeset/2"},{"type":"function","title":"Bonfire.Data.Identity.User.maybe_redact/1","doc":"","ref":"Bonfire.Data.Identity.User.html#maybe_redact/1"},{"type":"module","title":"Bonfire.Data.SharedUser","doc":"A mixin for shared user personas (which multiple accounts can use)","ref":"Bonfire.Data.SharedUser.html"},{"type":"function","title":"Bonfire.Data.SharedUser.changeset/2","doc":"","ref":"Bonfire.Data.SharedUser.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.APActivity","doc":"","ref":"Bonfire.Data.Social.APActivity.html"},{"type":"function","title":"Bonfire.Data.Social.APActivity.changeset/2","doc":"","ref":"Bonfire.Data.Social.APActivity.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Activity","doc":"","ref":"Bonfire.Data.Social.Activity.html"},{"type":"function","title":"Bonfire.Data.Social.Activity.changeset/2","doc":"","ref":"Bonfire.Data.Social.Activity.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Bookmark","doc":"","ref":"Bonfire.Data.Social.Bookmark.html"},{"type":"function","title":"Bonfire.Data.Social.Bookmark.changeset/2","doc":"","ref":"Bonfire.Data.Social.Bookmark.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Boost","doc":"","ref":"Bonfire.Data.Social.Boost.html"},{"type":"function","title":"Bonfire.Data.Social.Boost.changeset/2","doc":"","ref":"Bonfire.Data.Social.Boost.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Created","doc":"","ref":"Bonfire.Data.Social.Created.html"},{"type":"function","title":"Bonfire.Data.Social.Created.changeset/2","doc":"","ref":"Bonfire.Data.Social.Created.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Feed","doc":"","ref":"Bonfire.Data.Social.Feed.html"},{"type":"function","title":"Bonfire.Data.Social.Feed.changeset/2","doc":"","ref":"Bonfire.Data.Social.Feed.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.FeedPublish","doc":"A multimixin for an activity/object appearing in a feed.\n\nA quite interesting thing about this model is that `feed`\nreferences `Pointer`, so it isn't only things of type `Feed` that it can\nappear in, they are just an obvious choice.","ref":"Bonfire.Data.Social.FeedPublish.html"},{"type":"function","title":"Bonfire.Data.Social.FeedPublish.changeset/2","doc":"","ref":"Bonfire.Data.Social.FeedPublish.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Flag","doc":"","ref":"Bonfire.Data.Social.Flag.html"},{"type":"function","title":"Bonfire.Data.Social.Flag.changeset/2","doc":"","ref":"Bonfire.Data.Social.Flag.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Follow","doc":"","ref":"Bonfire.Data.Social.Follow.html"},{"type":"function","title":"Bonfire.Data.Social.Follow.changeset/2","doc":"","ref":"Bonfire.Data.Social.Follow.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Inbox","doc":"","ref":"Bonfire.Data.Social.Inbox.html"},{"type":"function","title":"Bonfire.Data.Social.Inbox.changeset/2","doc":"","ref":"Bonfire.Data.Social.Inbox.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Like","doc":"","ref":"Bonfire.Data.Social.Like.html"},{"type":"function","title":"Bonfire.Data.Social.Like.changeset/2","doc":"","ref":"Bonfire.Data.Social.Like.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Message","doc":"","ref":"Bonfire.Data.Social.Message.html"},{"type":"function","title":"Bonfire.Data.Social.Message.changeset/2","doc":"","ref":"Bonfire.Data.Social.Message.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Pin","doc":"","ref":"Bonfire.Data.Social.Pin.html"},{"type":"function","title":"Bonfire.Data.Social.Pin.changeset/2","doc":"","ref":"Bonfire.Data.Social.Pin.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Post","doc":"","ref":"Bonfire.Data.Social.Post.html"},{"type":"function","title":"Bonfire.Data.Social.Post.changeset/2","doc":"","ref":"Bonfire.Data.Social.Post.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.PostContent","doc":"","ref":"Bonfire.Data.Social.PostContent.html"},{"type":"function","title":"Bonfire.Data.Social.PostContent.changeset/2","doc":"","ref":"Bonfire.Data.Social.PostContent.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Profile","doc":"","ref":"Bonfire.Data.Social.Profile.html"},{"type":"function","title":"Bonfire.Data.Social.Profile.changeset/2","doc":"","ref":"Bonfire.Data.Social.Profile.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Replied","doc":"","ref":"Bonfire.Data.Social.Replied.html"},{"type":"function","title":"Bonfire.Data.Social.Replied.ancestor_ids/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#ancestor_ids/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.ancestors/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#ancestors/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.arrange/2","doc":"","ref":"Bonfire.Data.Social.Replied.html#arrange/2"},{"type":"function","title":"Bonfire.Data.Social.Replied.build_child/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#build_child/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.changeset/2","doc":"","ref":"Bonfire.Data.Social.Replied.html#changeset/2"},{"type":"function","title":"Bonfire.Data.Social.Replied.children/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#children/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.depth/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#depth/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.descendants/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#descendants/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.make_child_of/2","doc":"","ref":"Bonfire.Data.Social.Replied.html#make_child_of/2"},{"type":"function","title":"Bonfire.Data.Social.Replied.parent/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#parent/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.parent_id/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#parent_id/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.path/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#path/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.path_ids/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#path_ids/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.root/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#root/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.root?/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#root?/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.root_id/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#root_id/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.siblings/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#siblings/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.subtree/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#subtree/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.where_depth/2","doc":"","ref":"Bonfire.Data.Social.Replied.html#where_depth/2"},{"type":"module","title":"Bonfire.Data.Social.Request","doc":"","ref":"Bonfire.Data.Social.Request.html"},{"type":"function","title":"Bonfire.Data.Social.Request.changeset/2","doc":"","ref":"Bonfire.Data.Social.Request.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Seen","doc":"Track seen/unseen (similar to read/unread, but only indicates that it was displayed in a feed or other listing for the user, not that they actually read it) status of things (usually an `Activity`)","ref":"Bonfire.Data.Social.Seen.html"},{"type":"function","title":"Bonfire.Data.Social.Seen.changeset/2","doc":"","ref":"Bonfire.Data.Social.Seen.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Sensitive","doc":"","ref":"Bonfire.Data.Social.Sensitive.html"},{"type":"function","title":"Bonfire.Data.Social.Sensitive.changeset/2","doc":"","ref":"Bonfire.Data.Social.Sensitive.html#changeset/2"},{"type":"module","title":"Bonfire.UI.Common","doc":"A library of common utils and helpers used across Bonfire extensions","ref":"Bonfire.UI.Common.html"},{"type":"function","title":"Bonfire.UI.Common.assign_error/3","doc":"","ref":"Bonfire.UI.Common.html#assign_error/3"},{"type":"function","title":"Bonfire.UI.Common.assign_flash/5","doc":"","ref":"Bonfire.UI.Common.html#assign_flash/5"},{"type":"function","title":"Bonfire.UI.Common.assign_generic/2","doc":"","ref":"Bonfire.UI.Common.html#assign_generic/2"},{"type":"function","title":"Bonfire.UI.Common.assign_generic/3","doc":"","ref":"Bonfire.UI.Common.html#assign_generic/3"},{"type":"function","title":"Bonfire.UI.Common.assign_generic_global/2","doc":"","ref":"Bonfire.UI.Common.html#assign_generic_global/2"},{"type":"function","title":"Bonfire.UI.Common.assign_global/2","doc":"","ref":"Bonfire.UI.Common.html#assign_global/2"},{"type":"function","title":"Bonfire.UI.Common.assign_global/3","doc":"","ref":"Bonfire.UI.Common.html#assign_global/3"},{"type":"function","title":"Bonfire.UI.Common.assigns_clean/1","doc":"","ref":"Bonfire.UI.Common.html#assigns_clean/1"},{"type":"function","title":"Bonfire.UI.Common.assigns_merge/2","doc":"","ref":"Bonfire.UI.Common.html#assigns_merge/2"},{"type":"function","title":"Bonfire.UI.Common.assigns_merge/3","doc":"","ref":"Bonfire.UI.Common.html#assigns_merge/3"},{"type":"function","title":"Bonfire.UI.Common.assigns_minimal/1","doc":"","ref":"Bonfire.UI.Common.html#assigns_minimal/1"},{"type":"function","title":"Bonfire.UI.Common.assigns_subscribe/2","doc":"","ref":"Bonfire.UI.Common.html#assigns_subscribe/2"},{"type":"function","title":"Bonfire.UI.Common.batch_update_many_async/3","doc":"","ref":"Bonfire.UI.Common.html#batch_update_many_async/3"},{"type":"function","title":"Bonfire.UI.Common.batch_update_many_async/4","doc":"","ref":"Bonfire.UI.Common.html#batch_update_many_async/4"},{"type":"function","title":"Bonfire.UI.Common.can?/4","doc":"","ref":"Bonfire.UI.Common.html#can?/4"},{"type":"function","title":"Bonfire.UI.Common.cast_public/2","doc":"Warning: this will set assigns for any/all users who subscribe to them. You want to `cast_self/2` instead if dealing with user-specific actions or private data.","ref":"Bonfire.UI.Common.html#cast_public/2"},{"type":"function","title":"Bonfire.UI.Common.cast_self/2","doc":"","ref":"Bonfire.UI.Common.html#cast_self/2"},{"type":"function","title":"Bonfire.UI.Common.copy_go/1","doc":"copies the `go` param into a query string, if any","ref":"Bonfire.UI.Common.html#copy_go/1"},{"type":"function","title":"Bonfire.UI.Common.current_url/2","doc":"","ref":"Bonfire.UI.Common.html#current_url/2"},{"type":"function","title":"Bonfire.UI.Common.current_user_or_remote_interaction/3","doc":"","ref":"Bonfire.UI.Common.html#current_user_or_remote_interaction/3"},{"type":"function","title":"Bonfire.UI.Common.go_query/1","doc":"Generate a query string adding a `go` redirection path to the URI (for redirecting somewhere after auth flows).\nIt is recommended to use `set_go_after/2` where possible instead.","ref":"Bonfire.UI.Common.html#go_query/1"},{"type":"function","title":"Bonfire.UI.Common.hero_icons_list/0","doc":"","ref":"Bonfire.UI.Common.html#hero_icons_list/0"},{"type":"macro","title":"Bonfire.UI.Common.live_aliases/5","doc":"","ref":"Bonfire.UI.Common.html#live_aliases/5"},{"type":"function","title":"Bonfire.UI.Common.live_render_component/2","doc":"Special LiveView helper function which allows loading LiveComponents in regular Phoenix views: `live_render_component(@conn, MyLiveComponent)`","ref":"Bonfire.UI.Common.html#live_render_component/2"},{"type":"function","title":"Bonfire.UI.Common.live_render_with_conn/2","doc":"","ref":"Bonfire.UI.Common.html#live_render_with_conn/2"},{"type":"function","title":"Bonfire.UI.Common.live_upload_files/3","doc":"","ref":"Bonfire.UI.Common.html#live_upload_files/3"},{"type":"function","title":"Bonfire.UI.Common.markdown/1","doc":"","ref":"Bonfire.UI.Common.html#markdown/1"},{"type":"function","title":"Bonfire.UI.Common.maybe_assign/3","doc":"","ref":"Bonfire.UI.Common.html#maybe_assign/3"},{"type":"function","title":"Bonfire.UI.Common.maybe_component/2","doc":"","ref":"Bonfire.UI.Common.html#maybe_component/2"},{"type":"function","title":"Bonfire.UI.Common.maybe_consume_uploaded_entries/3","doc":"","ref":"Bonfire.UI.Common.html#maybe_consume_uploaded_entries/3"},{"type":"function","title":"Bonfire.UI.Common.maybe_consume_uploaded_entry/3","doc":"","ref":"Bonfire.UI.Common.html#maybe_consume_uploaded_entry/3"},{"type":"function","title":"Bonfire.UI.Common.maybe_cute_gif/0","doc":"","ref":"Bonfire.UI.Common.html#maybe_cute_gif/0"},{"type":"function","title":"Bonfire.UI.Common.maybe_last_sentry_event_id/0","doc":"","ref":"Bonfire.UI.Common.html#maybe_last_sentry_event_id/0"},{"type":"function","title":"Bonfire.UI.Common.maybe_push_event/3","doc":"","ref":"Bonfire.UI.Common.html#maybe_push_event/3"},{"type":"function","title":"Bonfire.UI.Common.maybe_send_update/4","doc":"","ref":"Bonfire.UI.Common.html#maybe_send_update/4"},{"type":"function","title":"Bonfire.UI.Common.maybe_stream_insert/4","doc":"Inserts one or many items in an existing stream.\nSee `Phoenix.LiveView.stream_insert/4` for opts.","ref":"Bonfire.UI.Common.html#maybe_stream_insert/4"},{"type":"function","title":"Bonfire.UI.Common.opts_for_update_many_async/2","doc":"","ref":"Bonfire.UI.Common.html#opts_for_update_many_async/2"},{"type":"function","title":"Bonfire.UI.Common.patch_to/3","doc":"","ref":"Bonfire.UI.Common.html#patch_to/3"},{"type":"function","title":"Bonfire.UI.Common.path_fallback/2","doc":"","ref":"Bonfire.UI.Common.html#path_fallback/2"},{"type":"function","title":"Bonfire.UI.Common.redirect_to/3","doc":"","ref":"Bonfire.UI.Common.html#redirect_to/3"},{"type":"function","title":"Bonfire.UI.Common.redirect_to_previous_go/4","doc":"","ref":"Bonfire.UI.Common.html#redirect_to_previous_go/4"},{"type":"macro","title":"Bonfire.UI.Common.render_sface_or_native/0","doc":"","ref":"Bonfire.UI.Common.html#render_sface_or_native/0"},{"type":"function","title":"Bonfire.UI.Common.rich/2","doc":"","ref":"Bonfire.UI.Common.html#rich/2"},{"type":"function","title":"Bonfire.UI.Common.self_subscribe/2","doc":"Subscribe to assigns targeted at the current account/user","ref":"Bonfire.UI.Common.html#self_subscribe/2"},{"type":"function","title":"Bonfire.UI.Common.send_self/2","doc":"","ref":"Bonfire.UI.Common.html#send_self/2"},{"type":"function","title":"Bonfire.UI.Common.send_self_global/2","doc":"","ref":"Bonfire.UI.Common.html#send_self_global/2"},{"type":"function","title":"Bonfire.UI.Common.set_go_after/2","doc":"Save a `go` redirection path in the session (for redirecting somewhere after auth flows)","ref":"Bonfire.UI.Common.html#set_go_after/2"},{"type":"function","title":"Bonfire.UI.Common.templated/2","doc":"","ref":"Bonfire.UI.Common.html#templated/2"},{"type":"function","title":"Bonfire.UI.Common.templated_or_remote_markdown/2","doc":"","ref":"Bonfire.UI.Common.html#templated_or_remote_markdown/2"},{"type":"function","title":"Bonfire.UI.Common.the_object/1","doc":"","ref":"Bonfire.UI.Common.html#the_object/1"},{"type":"function","title":"Bonfire.UI.Common.undead/3","doc":"","ref":"Bonfire.UI.Common.html#undead/3"},{"type":"function","title":"Bonfire.UI.Common.undead_mount/2","doc":"Run a function and expects tuple.\nIf anything else is returned, like an error, a flash message is shown to the user.","ref":"Bonfire.UI.Common.html#undead_mount/2"},{"type":"function","title":"Bonfire.UI.Common.undead_on_mount/2","doc":"","ref":"Bonfire.UI.Common.html#undead_on_mount/2"},{"type":"function","title":"Bonfire.UI.Common.undead_params/2","doc":"","ref":"Bonfire.UI.Common.html#undead_params/2"},{"type":"function","title":"Bonfire.UI.Common.update_many_async/2","doc":"","ref":"Bonfire.UI.Common.html#update_many_async/2"},{"type":"function","title":"Bonfire.UI.Common.update_many_async/3","doc":"","ref":"Bonfire.UI.Common.html#update_many_async/3"},{"type":"module","title":"Bonfire.UI.Common.ComponentID","doc":"","ref":"Bonfire.UI.Common.ComponentID.html"},{"type":"function","title":"Bonfire.UI.Common.ComponentID.new/3","doc":"","ref":"Bonfire.UI.Common.ComponentID.html#new/3"},{"type":"function","title":"Bonfire.UI.Common.ComponentID.send_assigns/5","doc":"","ref":"Bonfire.UI.Common.ComponentID.html#send_assigns/5"},{"type":"function","title":"Bonfire.UI.Common.ComponentID.send_updates/4","doc":"","ref":"Bonfire.UI.Common.ComponentID.html#send_updates/4"},{"type":"module","title":"Bonfire.UI.Common.EndpointTemplate","doc":"","ref":"Bonfire.UI.Common.EndpointTemplate.html"},{"type":"function","title":"Bonfire.UI.Common.EndpointTemplate.session_options/0","doc":"","ref":"Bonfire.UI.Common.EndpointTemplate.html#session_options/0"},{"type":"module","title":"Bonfire.UI.Common.ErrorHelpers","doc":"Conveniences for translating and building error messages.","ref":"Bonfire.UI.Common.ErrorHelpers.html"},{"type":"function","title":"Bonfire.UI.Common.ErrorHelpers.error_tag/2","doc":"Generates tag for inlined form input errors.\n# TODO: use `Surface.Components.Form.ErrorTag` instead","ref":"Bonfire.UI.Common.ErrorHelpers.html#error_tag/2"},{"type":"function","title":"Bonfire.UI.Common.ErrorHelpers.translate_error/1","doc":"Translates an error message using gettext.","ref":"Bonfire.UI.Common.ErrorHelpers.html#translate_error/1"},{"type":"module","title":"Bonfire.UI.Common.ErrorReportingPlug","doc":"","ref":"Bonfire.UI.Common.ErrorReportingPlug.html"},{"type":"module","title":"Bonfire.UI.Common.LiveHandlers","doc":"usage examples:\n\n`phx-submit=\"Bonfire.Posts:post\"` will be routed to `Bonfire.Posts.LiveHandler.handle_event(\"post\", ...`\n\n`PubSub.broadcast(feed_id, {{Bonfire.Social.Feeds, :new_activity}, activity})` will be routed to `Bonfire.Social.Feeds.LiveHandler.handle_info({:new_activity, activity}, ...`\n\n`href=\"?Bonfire.Social.Feeds[after]= \"` will be routed to `Bonfire.Social.Feeds.LiveHandler.handle_params(%{\"after\" => cursor_after} ...`","ref":"Bonfire.UI.Common.LiveHandlers.html"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.assign_attrs/2","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#assign_attrs/2"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.handle_event/5","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#handle_event/5"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.handle_info/3","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#handle_info/3"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.handle_params/5","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#handle_params/5"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.handle_progress/5","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#handle_progress/5"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.maybe_from_json/1","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#maybe_from_json/1"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.mod_delegate/4","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#mod_delegate/4"},{"type":"macro","title":"Bonfire.UI.Common.LiveHandlers.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#sigil_p/2"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs","doc":"Like a plug, but for a liveview","ref":"Bonfire.UI.Common.LivePlugs.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.maybe_send_persistent_assigns/2","doc":"","ref":"Bonfire.UI.Common.LivePlugs.html#maybe_send_persistent_assigns/2"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox","doc":"","ref":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.mount/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html#mount/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.Csrf","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Csrf.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Csrf.mount/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Csrf.html#mount/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Csrf.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Csrf.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.Helpers","doc":"Like a plug, but for a liveview","ref":"Bonfire.UI.Common.LivePlugs.Helpers.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Helpers.assign_default_params/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Helpers.html#assign_default_params/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Helpers.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Helpers.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.Locale","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.assign_put_locale/2","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#assign_put_locale/2"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.assign_put_locale/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#assign_put_locale/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.default/2","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#default/2"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.mount/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#mount/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.StaticChanged","doc":"","ref":"Bonfire.UI.Common.LivePlugs.StaticChanged.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.StaticChanged.mount/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.StaticChanged.html#mount/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.StaticChanged.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.StaticChanged.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug","doc":"","ref":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.html"},{"type":"function","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.call/2","doc":"","ref":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.html#call/2"},{"type":"function","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.init/1","doc":"","ref":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.html#init/1"},{"type":"function","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.maybe_add_index_html/2","doc":"","ref":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.html#maybe_add_index_html/2"},{"type":"module","title":"Bonfire.UI.Common.MultiTenancyPlug","doc":"","ref":"Bonfire.UI.Common.MultiTenancyPlug.html"},{"type":"module","title":"Bonfire.UI.Common.MultiselectLive.LiveHandler","doc":"","ref":"Bonfire.UI.Common.MultiselectLive.LiveHandler.html"},{"type":"function","title":"Bonfire.UI.Common.MultiselectLive.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.UI.Common.MultiselectLive.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.UI.Common.MultiselectLive.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.MultiselectLive.LiveHandler.html#sigil_p/2"},{"type":"behaviour","title":"Bonfire.UI.Common.NavModule","doc":"Add items to extensions' navigation sidebar.","ref":"Bonfire.UI.Common.NavModule.html"},{"type":"function","title":"Bonfire.UI.Common.NavModule.app_modules/0","doc":"","ref":"Bonfire.UI.Common.NavModule.html#app_modules/0"},{"type":"callback","title":"Bonfire.UI.Common.NavModule.declared_nav/0","doc":"Declares a nav module, with links or nav components","ref":"Bonfire.UI.Common.NavModule.html#c:declared_nav/0"},{"type":"function","title":"Bonfire.UI.Common.NavModule.modules/0","doc":"","ref":"Bonfire.UI.Common.NavModule.html#modules/0"},{"type":"function","title":"Bonfire.UI.Common.NavModule.nav/0","doc":"Load all navs","ref":"Bonfire.UI.Common.NavModule.html#nav/0"},{"type":"function","title":"Bonfire.UI.Common.NavModule.nav/1","doc":"Get navs for an extension","ref":"Bonfire.UI.Common.NavModule.html#nav/1"},{"type":"function","title":"Bonfire.UI.Common.NavModule.nav_function_error/2","doc":"","ref":"Bonfire.UI.Common.NavModule.html#nav_function_error/2"},{"type":"module","title":"Bonfire.UI.Common.Notifications","doc":"","ref":"Bonfire.UI.Common.Notifications.html"},{"type":"function","title":"Bonfire.UI.Common.Notifications.assign_notification/2","doc":"","ref":"Bonfire.UI.Common.Notifications.html#assign_notification/2"},{"type":"function","title":"Bonfire.UI.Common.Notifications.handle_event/3","doc":"","ref":"Bonfire.UI.Common.Notifications.html#handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.Notifications.handle_info/2","doc":"","ref":"Bonfire.UI.Common.Notifications.html#handle_info/2"},{"type":"function","title":"Bonfire.UI.Common.Notifications.notify_feeds/5","doc":"","ref":"Bonfire.UI.Common.Notifications.html#notify_feeds/5"},{"type":"function","title":"Bonfire.UI.Common.Notifications.notify_me/4","doc":"","ref":"Bonfire.UI.Common.Notifications.html#notify_me/4"},{"type":"function","title":"Bonfire.UI.Common.Notifications.receive_flash/3","doc":"","ref":"Bonfire.UI.Common.Notifications.html#receive_flash/3"},{"type":"function","title":"Bonfire.UI.Common.Notifications.receive_notification/2","doc":"","ref":"Bonfire.UI.Common.Notifications.html#receive_notification/2"},{"type":"macro","title":"Bonfire.UI.Common.Notifications.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.Notifications.html#sigil_p/2"},{"type":"module","title":"Bonfire.UI.Common.PlugProtect","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html"},{"type":"function","title":"Bonfire.UI.Common.PlugProtect.allow_action/3","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html#allow_action/3"},{"type":"function","title":"Bonfire.UI.Common.PlugProtect.block_action/3","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html#block_action/3"},{"type":"function","title":"Bonfire.UI.Common.PlugProtect.call/2","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html#call/2"},{"type":"function","title":"Bonfire.UI.Common.PlugProtect.init/1","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html#init/1"},{"type":"module","title":"Bonfire.UI.Common.Plugs.ActivityPub","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html"},{"type":"function","title":"Bonfire.UI.Common.Plugs.ActivityPub.call/2","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html#call/2"},{"type":"function","title":"Bonfire.UI.Common.Plugs.ActivityPub.init/1","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html#init/1"},{"type":"function","title":"Bonfire.UI.Common.Plugs.ActivityPub.maybe_redirect/1","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html#maybe_redirect/1"},{"type":"function","title":"Bonfire.UI.Common.Plugs.ActivityPub.with_headers/3","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html#with_headers/3"},{"type":"module","title":"Bonfire.UI.Common.Presence","doc":"WIP for tracking online users. Used by `PersistentLive`","ref":"Bonfire.UI.Common.Presence.html"},{"type":"function","title":"Bonfire.UI.Common.Presence.child_spec/1","doc":"","ref":"Bonfire.UI.Common.Presence.html#child_spec/1"},{"type":"function","title":"Bonfire.UI.Common.Presence.fetch/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#fetch/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.fetchers_pids/0","doc":"","ref":"Bonfire.UI.Common.Presence.html#fetchers_pids/0"},{"type":"function","title":"Bonfire.UI.Common.Presence.get_by_key/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#get_by_key/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.handle_info/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#handle_info/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.list/0","doc":"","ref":"Bonfire.UI.Common.Presence.html#list/0"},{"type":"function","title":"Bonfire.UI.Common.Presence.list/1","doc":"","ref":"Bonfire.UI.Common.Presence.html#list/1"},{"type":"function","title":"Bonfire.UI.Common.Presence.list_and_maybe_subscribe_to_presence/1","doc":"","ref":"Bonfire.UI.Common.Presence.html#list_and_maybe_subscribe_to_presence/1"},{"type":"function","title":"Bonfire.UI.Common.Presence.present!/2","doc":"Join a user to the list of those who are present","ref":"Bonfire.UI.Common.Presence.html#present!/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.present?/2","doc":"Check if a given user (or the current user) is in the list of those who are present","ref":"Bonfire.UI.Common.Presence.html#present?/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.present_meta/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#present_meta/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.track/3","doc":"","ref":"Bonfire.UI.Common.Presence.html#track/3"},{"type":"function","title":"Bonfire.UI.Common.Presence.track/4","doc":"","ref":"Bonfire.UI.Common.Presence.html#track/4"},{"type":"function","title":"Bonfire.UI.Common.Presence.untrack/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#untrack/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.untrack/3","doc":"","ref":"Bonfire.UI.Common.Presence.html#untrack/3"},{"type":"function","title":"Bonfire.UI.Common.Presence.update/3","doc":"","ref":"Bonfire.UI.Common.Presence.html#update/3"},{"type":"function","title":"Bonfire.UI.Common.Presence.update/4","doc":"","ref":"Bonfire.UI.Common.Presence.html#update/4"},{"type":"module","title":"Bonfire.UI.Common.PreviewContentLive","doc":"A special 'modal' for previewing objects from a feed without redirecting to a new view (so we can go back to where we were in the feed)","ref":"Bonfire.UI.Common.PreviewContentLive.html"},{"type":"module","title":"Properties - Bonfire.UI.Common.PreviewContentLive","doc":"* **id** *:string, required: true* - The id of the live component (required by LiveView for stateful components).\n\n* **source_inspector_attrs** *:map, default: %{}*\n* **title_text** *:string, default: nil* - The title of the modal. Only used if no title slot is passed.\n* **title_class** *:css_class, default: nil* - The classes of the title of the modal\n* **show** *:boolean, default: false* - Force modal to be open\n* **no_header** *:boolean, default: false* - Optional prop to hide the header at the top of the modal\n* **modal_class** *:string, default: nil* - The classes of the modal.\n* **modal_assigns** *:any, default: []* - Additional assigns for the modal\n\n* **opts** *:keyword, default: []* - Additional attributes to add onto the modal wrapper","ref":"Bonfire.UI.Common.PreviewContentLive.html#module-properties"},{"type":"module","title":"Slots - Bonfire.UI.Common.PreviewContentLive","doc":"* **default, arg: [:autocomplete]** - Slots for the contents of the modal, title, buttons...\n\n* **open_btn**\n* **action_btns**\n* **cancel_btn**\n* **title**","ref":"Bonfire.UI.Common.PreviewContentLive.html#module-slots"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.do_handle_event/3","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#do_handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.handle_event/3","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.handle_info/2","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#handle_info/2"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.mount/1","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#mount/1"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.render/1","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#render/1"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.render_native/1","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#render_native/1"},{"type":"macro","title":"Bonfire.UI.Common.PreviewContentLive.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#sigil_p/2"},{"type":"macro","title":"Bonfire.UI.Common.PreviewContentLive.sigil_SWIFTUI/2","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#sigil_SWIFTUI/2"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.update/2","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#update/2"},{"type":"module","title":"Bonfire.UI.Common.ReusableModalLive","doc":"The classic **modal**","ref":"Bonfire.UI.Common.ReusableModalLive.html"},{"type":"module","title":"Properties - Bonfire.UI.Common.ReusableModalLive","doc":"* **id** *:string, required: true* - The id of the live component (required by LiveView for stateful components).\n\n* **source_inspector_attrs** *:map, default: %{}*\n* **title_text** *:string, default: nil* - The title of the modal. Only used if no title slot is passed.\n* **image_preview** *:boolean, default: false* - If the modal is a preview of an image, set this to true.\n* **title_class** *:css_class, default: nil* - The classes of the title of the modal\n* **modal_class** *:css_class, default: \"\"* - The classes of the modal.\n* **wrapper_class** *:css_class, default: nil* - The classes of the modal wrapper.\n* **action_btns_wrapper_class** *:css_class, default: nil* - The classes around the action/submit button(s) on the modal\n* **cancel_btn_class** *:css_class, default: nil* - The classes of the close/cancel button on the modal. Only used if no close_btn slot is passed.\n* **cancel_label** *:string, default: nil*\n* **show** *:boolean, default: false* - Force modal to be open\n* **form_opts** *:map, default: %{}*\n* **no_actions** *:boolean, default: false* - Optional prop to hide the actions at the bottom of the modal\n* **no_header** *:boolean, default: false* - Optional prop to hide the header at the top of the modal\n* **no_backdrop** *:boolean, default: false*\n* **opts** *:keyword, default: []* - Additional attributes to add onto the modal wrapper\n\n* **autocomplete** *:list, default: []*","ref":"Bonfire.UI.Common.ReusableModalLive.html#module-properties"},{"type":"module","title":"Slots - Bonfire.UI.Common.ReusableModalLive","doc":"* **open_btn, arg: [autocomplete: :list, value: :any]** - Slots for the contents of the modal, title, buttons...\n\n* **action_btns**\n* **cancel_btn**\n* **title**\n* **default, arg: [autocomplete: :list, value: :any]**","ref":"Bonfire.UI.Common.ReusableModalLive.html#module-slots"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.default_assigns/0","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#default_assigns/0"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.do_handle_event/3","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#do_handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.handle_event/3","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.handle_info/2","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#handle_info/2"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.mount/1","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#mount/1"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.render/1","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#render/1"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.render_native/1","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#render_native/1"},{"type":"macro","title":"Bonfire.UI.Common.ReusableModalLive.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#sigil_p/2"},{"type":"macro","title":"Bonfire.UI.Common.ReusableModalLive.sigil_SWIFTUI/2","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#sigil_SWIFTUI/2"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.update/2","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#update/2"},{"type":"module","title":"Bonfire.UI.Common.Routes","doc":"","ref":"Bonfire.UI.Common.Routes.html"},{"type":"function","title":"Bonfire.UI.Common.Routes.gon_js_config/0","doc":"Config keys to make available in JS (via Phoenix Gon lib)","ref":"Bonfire.UI.Common.Routes.html#gon_js_config/0"},{"type":"module","title":"Bonfire.UI.Common.SEO","doc":"","ref":"Bonfire.UI.Common.SEO.html"},{"type":"function","title":"Bonfire.UI.Common.SEO.config/0","doc":"Get configuration for SEO.\n\nconfig/0 will return all SEO config\nconfig/1 with SEO domain atom will return that domain's config","ref":"Bonfire.UI.Common.SEO.html#config/0"},{"type":"function","title":"Bonfire.UI.Common.SEO.open_graph_config/1","doc":"","ref":"Bonfire.UI.Common.SEO.html#open_graph_config/1"},{"type":"function","title":"Bonfire.UI.Common.SEO.site_config/1","doc":"","ref":"Bonfire.UI.Common.SEO.html#site_config/1"},{"type":"function","title":"Bonfire.UI.Common.SEO.twitter_config/1","doc":"","ref":"Bonfire.UI.Common.SEO.html#twitter_config/1"},{"type":"behaviour","title":"Bonfire.UI.Common.SettingsModule","doc":"Settings nav & components","ref":"Bonfire.UI.Common.SettingsModule.html"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.app_modules/0","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#app_modules/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.component_function_error/2","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#component_function_error/2"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.components/0","doc":"Load all components at once","ref":"Bonfire.UI.Common.SettingsModule.html#components/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.components/1","doc":"Load components for an extension","ref":"Bonfire.UI.Common.SettingsModule.html#components/1"},{"type":"callback","title":"Bonfire.UI.Common.SettingsModule.declared_component/0","doc":"Declares a component component","ref":"Bonfire.UI.Common.SettingsModule.html#c:declared_component/0"},{"type":"callback","title":"Bonfire.UI.Common.SettingsModule.declared_nav/0","doc":"Declares a nav module, with links or nav components","ref":"Bonfire.UI.Common.SettingsModule.html#c:declared_nav/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.extension_has_components?/2","doc":"List extensions that have settings component(s)","ref":"Bonfire.UI.Common.SettingsModule.html#extension_has_components?/2"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.modules/0","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#modules/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.modules_component/1","doc":"Get components identified by their module","ref":"Bonfire.UI.Common.SettingsModule.html#modules_component/1"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.modules_nav/1","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#modules_nav/1"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.nav/0","doc":"Load all navs","ref":"Bonfire.UI.Common.SettingsModule.html#nav/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.nav/1","doc":"Get navs for an extension","ref":"Bonfire.UI.Common.SettingsModule.html#nav/1"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.nav_function_error/2","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#nav_function_error/2"},{"type":"module","title":"Bonfire.UI.Common.SmartInput.LiveHandler","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.active_smart_input_component/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#active_smart_input_component/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.active_smart_input_components/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#active_smart_input_components/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.activity_type_or_reply/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#activity_type_or_reply/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.all_smart_input_components/0","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#all_smart_input_components/0"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.assign_open/2","doc":"Open the composer by setting assigns","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#assign_open/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.close_smart_input/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#close_smart_input/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.confirm_close_smart_input/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#confirm_close_smart_input/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.max_length/0","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#max_length/0"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.maximize/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#maximize/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.maybe_from_json/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#maybe_from_json/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.maybe_from_json_string/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#maybe_from_json_string/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.minimize/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#minimize/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.open/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#open/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.open_type/4","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#open_type/4"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.open_with_text_suggestion/3","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#open_with_text_suggestion/3"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.replace_input_next_time/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#replace_input_next_time/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.reply_to_param/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#reply_to_param/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.reset_input/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#reset_input/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.set/2","doc":"Set assigns in the smart input from anywhere in the app (whether using a live component or sticky live view)","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#set/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.set_smart_input_text/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#set_smart_input_text/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.show_main/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#show_main/2"},{"type":"macro","title":"Bonfire.UI.Common.SmartInput.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.smart_input_name/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#smart_input_name/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.switch_smart_input_type/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#switch_smart_input_type/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.toggle_expanded/4","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#toggle_expanded/4"},{"type":"behaviour","title":"Bonfire.UI.Common.SmartInputModule","doc":"Find a smart input module via the object type(s) it can create, or vice versa. Backed by a global cache of known smart input modules.\n\nTo add a module to this list, you should declare `@behaviour Bonfire.UI.Common.SmartInputModule` in it and define a `smart_input_module/0` function which returns a list of object types that it can create.\n\nExample:\n```\n@behaviour Bonfire.UI.Common.SmartInputModule\ndef smart_input_module, do: [:page, Bonfire.Pages.Page]\n```\n\nYou can then open the smart input composer / object creator using that declared type, for example:\n```\n \n```","ref":"Bonfire.UI.Common.SmartInputModule.html"},{"type":"function","title":"Bonfire.UI.Common.SmartInputModule.app_modules/0","doc":"","ref":"Bonfire.UI.Common.SmartInputModule.html#app_modules/0"},{"type":"function","title":"Bonfire.UI.Common.SmartInputModule.modules/0","doc":"","ref":"Bonfire.UI.Common.SmartInputModule.html#modules/0"},{"type":"callback","title":"Bonfire.UI.Common.SmartInputModule.smart_input_module/0","doc":"Declares a smart input module","ref":"Bonfire.UI.Common.SmartInputModule.html#c:smart_input_module/0"},{"type":"function","title":"Bonfire.UI.Common.SmartInputModule.smart_input_modules_types/0","doc":"Returns a list of smart input modules and the object type(s) it can create, and vice versa.","ref":"Bonfire.UI.Common.SmartInputModule.html#smart_input_modules_types/0"},{"type":"module","title":"Bonfire.UI.Common.StaticGenerator","doc":"Static-site generator which can take a list of URLs served by the current Phoenix server and output static HTML for them","ref":"Bonfire.UI.Common.StaticGenerator.html"},{"type":"function","title":"Bonfire.UI.Common.StaticGenerator.base_path/0","doc":"","ref":"Bonfire.UI.Common.StaticGenerator.html#base_path/0"},{"type":"function","title":"Bonfire.UI.Common.StaticGenerator.generate/2","doc":"","ref":"Bonfire.UI.Common.StaticGenerator.html#generate/2"},{"type":"module","title":"Bonfire.UI.Common.StaticGeneratorPlug","doc":"","ref":"Bonfire.UI.Common.StaticGeneratorPlug.html"},{"type":"function","title":"Bonfire.UI.Common.StaticGeneratorPlug.add_index_html/2","doc":"","ref":"Bonfire.UI.Common.StaticGeneratorPlug.html#add_index_html/2"},{"type":"function","title":"Bonfire.UI.Common.StaticGeneratorPlug.call/2","doc":"","ref":"Bonfire.UI.Common.StaticGeneratorPlug.html#call/2"},{"type":"function","title":"Bonfire.UI.Common.StaticGeneratorPlug.init/1","doc":"","ref":"Bonfire.UI.Common.StaticGeneratorPlug.html#init/1"},{"type":"module","title":"Bonfire.UI.Common.Testing.Helpers","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_field_error/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_field_error/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_field_good/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_field_good/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_flash/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_flash/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_flash_kind/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_flash_kind/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_flash_message/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_flash_message/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.conn/0","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#conn/0"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.conn/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#conn/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.conn/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#conn/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fake_account!/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fake_account!/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fake_admin!/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fake_admin!/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fake_user!/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fake_user!/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fake_user_and_conn!/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fake_user_and_conn!/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fancy_fake_user!/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fancy_fake_user!/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fancy_fake_user_on_test_instance/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fancy_fake_user_on_test_instance/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.find_flash/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#find_flash/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.find_form_error/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#find_form_error/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_attr/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_attr/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_click/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_click/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_live/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_live/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_redirect/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_redirect/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_response/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_response/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_submit/4","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_submit/4"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.live_pubsub_wait/1","doc":"Wait for the LiveView to receive any queued PubSub broadcasts","ref":"Bonfire.UI.Common.Testing.Helpers.html#live_pubsub_wait/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.live_sockets_disconnect/1","doc":"Disconnect all LiveViews associated with current user or account","ref":"Bonfire.UI.Common.Testing.Helpers.html#live_sockets_disconnect/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.live_view_stop/1","doc":"Stop a specific LiveView","ref":"Bonfire.UI.Common.Testing.Helpers.html#live_view_stop/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.render_stateful/3","doc":"Render stateful Surface or LiveView components","ref":"Bonfire.UI.Common.Testing.Helpers.html#render_stateful/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.render_stateless/3","doc":"Render stateless Surface or LiveView components","ref":"Bonfire.UI.Common.Testing.Helpers.html#render_stateless/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.session_conn/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#session_conn/1"},{"type":"behaviour","title":"Bonfire.UI.Common.WidgetModule","doc":"Widgets: components that can be added to the dashboard or sidebards","ref":"Bonfire.UI.Common.WidgetModule.html"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.app_modules/0","doc":"","ref":"Bonfire.UI.Common.WidgetModule.html#app_modules/0"},{"type":"callback","title":"Bonfire.UI.Common.WidgetModule.declared_widget/0","doc":"Declares a widget component","ref":"Bonfire.UI.Common.WidgetModule.html#c:declared_widget/0"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.modules/0","doc":"","ref":"Bonfire.UI.Common.WidgetModule.html#modules/0"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.widget/1","doc":"Get a widget identified by module","ref":"Bonfire.UI.Common.WidgetModule.html#widget/1"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.widget_function_error/2","doc":"","ref":"Bonfire.UI.Common.WidgetModule.html#widget_function_error/2"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.widgets/0","doc":"Load all widgets at once","ref":"Bonfire.UI.Common.WidgetModule.html#widgets/0"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.widgets/1","doc":"Load widgets for an extension","ref":"Bonfire.UI.Common.WidgetModule.html#widgets/1"},{"type":"module","title":"Bonfire.UI.Me.Integration","doc":"","ref":"Bonfire.UI.Me.Integration.html"},{"type":"function","title":"Bonfire.UI.Me.Integration.mailer/0","doc":"","ref":"Bonfire.UI.Me.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.UI.Me.Integration.repo/0","doc":"","ref":"Bonfire.UI.Me.Integration.html#repo/0"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.AccountRequired","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AccountRequired.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.AccountRequired.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AccountRequired.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.AccountRequired.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AccountRequired.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.AdminRequired","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AdminRequired.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.AdminRequired.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AdminRequired.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.AdminRequired.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AdminRequired.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.UserRequired","doc":"","ref":"Bonfire.UI.Me.LivePlugs.UserRequired.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.UserRequired.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.UserRequired.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.UserRequired.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.UserRequired.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.Plugs.AccountRequired","doc":"","ref":"Bonfire.UI.Me.Plugs.AccountRequired.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.AccountRequired.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.AccountRequired.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.AccountRequired.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.AccountRequired.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.AdminRequired","doc":"","ref":"Bonfire.UI.Me.Plugs.AdminRequired.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.AdminRequired.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.AdminRequired.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.AdminRequired.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.AdminRequired.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.GuestOnly","doc":"","ref":"Bonfire.UI.Me.Plugs.GuestOnly.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.GuestOnly.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.GuestOnly.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.GuestOnly.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.GuestOnly.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccount","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.LoadCurrentUser","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentUser.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentUser.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentUser.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentUser.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentUser.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.UserRequired","doc":"","ref":"Bonfire.UI.Me.Plugs.UserRequired.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.UserRequired.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.UserRequired.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.UserRequired.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.UserRequired.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Routes","doc":"","ref":"Bonfire.UI.Me.Routes.html"},{"type":"module","title":"Bonfire.UI.Me.RuntimeConfig","doc":"","ref":"Bonfire.UI.Me.RuntimeConfig.html"},{"type":"function","title":"Bonfire.UI.Me.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's `runtime.exs`, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs()` line","ref":"Bonfire.UI.Me.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.UI.Me.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.UI.Me.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.UI.Social.Benchmark","doc":"","ref":"Bonfire.UI.Social.Benchmark.html"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed_page/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed_page/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed_queries_without_benchee/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed_queries_without_benchee/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed_query_methods/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed_query_methods/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed_render_page/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed_render_page/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.live_feed/1","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#live_feed/1"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.render_feed/2","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#render_feed/2"},{"type":"module","title":"Bonfire.UI.Social.Integration","doc":"","ref":"Bonfire.UI.Social.Integration.html"},{"type":"function","title":"Bonfire.UI.Social.Integration.mailer/0","doc":"","ref":"Bonfire.UI.Social.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.UI.Social.Integration.repo/0","doc":"","ref":"Bonfire.UI.Social.Integration.html#repo/0"},{"type":"module","title":"Bonfire.UI.Social.Routes","doc":"","ref":"Bonfire.UI.Social.Routes.html"},{"type":"function","title":"Bonfire.UI.Social.Routes.declare_routes/0","doc":"","ref":"Bonfire.UI.Social.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.UI.Social.RuntimeConfig","doc":"","ref":"Bonfire.UI.Social.RuntimeConfig.html"},{"type":"function","title":"Bonfire.UI.Social.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's `runtime.exs`, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs()` line","ref":"Bonfire.UI.Social.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.UI.Social.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.UI.Social.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Needle.Changesets","doc":"","ref":"Needle.Changesets.html"},{"type":"function","title":"Needle.Changesets.build_assoc/3","doc":"Like Ecto.build_assoc/3, but can work with a Changeset","ref":"Needle.Changesets.html#build_assoc/3"},{"type":"function","title":"Needle.Changesets.built?/1","doc":"True if the schema object's current state is `:built`","ref":"Needle.Changesets.html#built?/1"},{"type":"function","title":"Needle.Changesets.cast/3","doc":"Like `Ecto.Changeset.cast` but for Pointables, Virtuals and Mixins.\n\nIf a pointable or virtual, Generates an ID if one is not present.","ref":"Needle.Changesets.html#cast/3"},{"type":"function","title":"Needle.Changesets.cast_assoc/3","doc":"","ref":"Needle.Changesets.html#cast_assoc/3"},{"type":"function","title":"Needle.Changesets.cast_belongs_to/4","doc":"","ref":"Needle.Changesets.html#cast_belongs_to/4"},{"type":"function","title":"Needle.Changesets.cast_has_many/4","doc":"","ref":"Needle.Changesets.html#cast_has_many/4"},{"type":"function","title":"Needle.Changesets.cast_has_one/4","doc":"","ref":"Needle.Changesets.html#cast_has_one/4"},{"type":"function","title":"Needle.Changesets.config_for/3","doc":"","ref":"Needle.Changesets.html#config_for/3"},{"type":"function","title":"Needle.Changesets.deleted?/1","doc":"True if the schema object's current state is `:deleted`","ref":"Needle.Changesets.html#deleted?/1"},{"type":"function","title":"Needle.Changesets.get_field/2","doc":"","ref":"Needle.Changesets.html#get_field/2"},{"type":"function","title":"Needle.Changesets.insert_verb/1","doc":"","ref":"Needle.Changesets.html#insert_verb/1"},{"type":"function","title":"Needle.Changesets.loaded?/1","doc":"True if the schema object's current state is `:loaded`","ref":"Needle.Changesets.html#loaded?/1"},{"type":"function","title":"Needle.Changesets.merge_child_errors/1","doc":"","ref":"Needle.Changesets.html#merge_child_errors/1"},{"type":"function","title":"Needle.Changesets.put_assoc/3","doc":"Like `put_assoc!/3` but doesn't raise if the association doesn't exist","ref":"Needle.Changesets.html#put_assoc/3"},{"type":"function","title":"Needle.Changesets.put_assoc!/3","doc":"Like `Ecto.Changeset.put_assoc/3` but for Pointables, Virtuals and Mixins.\n\nCopies across keys where possible.","ref":"Needle.Changesets.html#put_assoc!/3"},{"type":"function","title":"Needle.Changesets.put_id_on_mixins/3","doc":"","ref":"Needle.Changesets.html#put_id_on_mixins/3"},{"type":"function","title":"Needle.Changesets.put_new_id/1","doc":"","ref":"Needle.Changesets.html#put_new_id/1"},{"type":"function","title":"Needle.Changesets.state/1","doc":"Returns the schema object's current state.","ref":"Needle.Changesets.html#state/1"},{"type":"function","title":"Needle.Changesets.update_data/2","doc":"","ref":"Needle.Changesets.html#update_data/2"},{"type":"function","title":"Needle.Changesets.valid?/1","doc":"true if the provided changeset or list of changesets is valid.","ref":"Needle.Changesets.html#valid?/1"},{"type":"module","title":"Needle.Form","doc":"","ref":"Needle.Form.html"},{"type":"macro","title":"Needle.Form.form_schema/1","doc":"","ref":"Needle.Form.html#form_schema/1"},{"type":"function","title":"Needle.Form.using/2","doc":"","ref":"Needle.Form.html#using/2"},{"type":"module","title":"Needle.Migration","doc":"Helpers for writing Pointer-aware migrations.","ref":"Needle.Migration.html"},{"type":"function","title":"Needle.Migration.add_is_not_deleted/1","doc":"","ref":"Needle.Migration.html#add_is_not_deleted/1"},{"type":"macro","title":"Needle.Migration.create_mixin_table/3","doc":"Creates a mixin table - one with a ULID primary key and no trigger","ref":"Needle.Migration.html#create_mixin_table/3"},{"type":"macro","title":"Needle.Migration.create_pointable_table/2","doc":"Creates a pointable table along with its trigger.","ref":"Needle.Migration.html#create_pointable_table/2"},{"type":"macro","title":"Needle.Migration.create_pointable_table/3","doc":"","ref":"Needle.Migration.html#create_pointable_table/3"},{"type":"macro","title":"Needle.Migration.create_pointable_table/4","doc":"","ref":"Needle.Migration.html#create_pointable_table/4"},{"type":"macro","title":"Needle.Migration.create_random_table/3","doc":"Creates a random table - one with a UUID v4 primary key.","ref":"Needle.Migration.html#create_random_table/3"},{"type":"function","title":"Needle.Migration.create_virtual/1","doc":"","ref":"Needle.Migration.html#create_virtual/1"},{"type":"function","title":"Needle.Migration.create_virtual/2","doc":"","ref":"Needle.Migration.html#create_virtual/2"},{"type":"function","title":"Needle.Migration.create_virtual_trigger_function/0","doc":"","ref":"Needle.Migration.html#create_virtual_trigger_function/0"},{"type":"function","title":"Needle.Migration.drop_mixin_table/1","doc":"Drops a mixin table.","ref":"Needle.Migration.html#drop_mixin_table/1"},{"type":"function","title":"Needle.Migration.drop_pointable_table/1","doc":"Drops a pointable table","ref":"Needle.Migration.html#drop_pointable_table/1"},{"type":"function","title":"Needle.Migration.drop_pointable_table/2","doc":"","ref":"Needle.Migration.html#drop_pointable_table/2"},{"type":"function","title":"Needle.Migration.drop_random_table/1","doc":"Drops a random table.","ref":"Needle.Migration.html#drop_random_table/1"},{"type":"function","title":"Needle.Migration.drop_table/1","doc":"","ref":"Needle.Migration.html#drop_table/1"},{"type":"function","title":"Needle.Migration.drop_virtual/1","doc":"","ref":"Needle.Migration.html#drop_virtual/1"},{"type":"function","title":"Needle.Migration.drop_virtual/2","doc":"","ref":"Needle.Migration.html#drop_virtual/2"},{"type":"function","title":"Needle.Migration.init_pointers/0","doc":"When migrating up: initialises the pointers database.\nWhen migrating down: deinitialises the pointers database.","ref":"Needle.Migration.html#init_pointers/0"},{"type":"function","title":"Needle.Migration.init_pointers/1","doc":"Given `:up`: initialises the pointers database.\nGiven `:down`: deinitialises the pointers database.","ref":"Needle.Migration.html#init_pointers/1"},{"type":"function","title":"Needle.Migration.init_pointers_ulid_extra/0","doc":"","ref":"Needle.Migration.html#init_pointers_ulid_extra/0"},{"type":"function","title":"Needle.Migration.migrate_virtual/1","doc":"","ref":"Needle.Migration.html#migrate_virtual/1"},{"type":"function","title":"Needle.Migration.migrate_virtual/2","doc":"","ref":"Needle.Migration.html#migrate_virtual/2"},{"type":"function","title":"Needle.Migration.migrate_virtual/3","doc":"","ref":"Needle.Migration.html#migrate_virtual/3"},{"type":"function","title":"Needle.Migration.pointer/2","doc":"Creates a strong, weak or unbreakable pointer depending on `type`.","ref":"Needle.Migration.html#pointer/2"},{"type":"function","title":"Needle.Migration.strong_pointer/1","doc":"A reference to a pointer for use with `add/3`. A strong pointer will\nbe deleted when the thing it's pointing to is deleted.","ref":"Needle.Migration.html#strong_pointer/1"},{"type":"function","title":"Needle.Migration.unbreakable_pointer/1","doc":"A reference to a pointer for use with `add/3`. An unbreakable\npointer will prevent the thing it's pointing to from being deleted.","ref":"Needle.Migration.html#unbreakable_pointer/1"},{"type":"function","title":"Needle.Migration.weak_pointer/1","doc":"A reference to a pointer for use with `add/3`. A weak pointer will\nbe set null when the thing it's pointing to is deleted.","ref":"Needle.Migration.html#weak_pointer/1"},{"type":"type","title":"Needle.Migration.pointer_type/0","doc":"","ref":"Needle.Migration.html#t:pointer_type/0"},{"type":"module","title":"Needle.Mixin","doc":"If a Pointer represents an object, mixins represent data about the object. Mixins collate optional\nadditional information about an object. Different types of object will typically make use of\ndifferent mixins. You can see these as aspects of the data if you like.\n\nA mixin table starts with an `id` column which references `Pointer` and forms the default primary\nkey. It is up to the user to choose which other fields go in the table, and thus what the mixin is for.\n\nUse of a mixin is typically through `has_one`:\n\n```\nhas_one :my_mixin, MyMixin, foreign_key: :id, references: :id\n```\n\nSometimes, the user may wish to add fields to the primary key by using the `primary_key: true`\noption to `add` in their migrations. This is permitted and in such case we call the resulting\nmixin a `multimixin`. Use becomes `has_many`:\n\n```\nhas_many :my_mixin, MyMixin, foreign_key: :id, references: :id\n```\n\nThus the choice of single or multi comes down to how many times you want to store that data for\nthe object. A user's profile naturally lends itself to a regular `single` mixin, whereas an\nobject's appearance in a feed would naturally lend itself to being a multimixin since the object\nmay appear in many feeds.\n\n#","ref":"Needle.Mixin.html"},{"type":"module","title":"Declaring a mixin table type - Needle.Mixin","doc":"```\ndefmodule My.Mixin do\n\n use Needle.Mixin,\n otp_app: :my_app,\n source: \"postgres_table_name\"\n\n mixin_schema do\n field :is_awesome, :boolean\n end\nend\n```","ref":"Needle.Mixin.html#module-declaring-a-mixin-table-type"},{"type":"macro","title":"Needle.Mixin.mixin_schema/1","doc":"","ref":"Needle.Mixin.html#mixin_schema/1"},{"type":"function","title":"Needle.Mixin.using/2","doc":"","ref":"Needle.Mixin.html#using/2"},{"type":"exception","title":"Needle.NotFound","doc":"We could not find the requested object","ref":"Needle.NotFound.html"},{"type":"function","title":"Needle.NotFound.new/1","doc":"Creates a new NotFound","ref":"Needle.NotFound.html#new/1"},{"type":"type","title":"Needle.NotFound.t/0","doc":"","ref":"Needle.NotFound.html#t:t/0"},{"type":"module","title":"Needle.Pointable","doc":"Sets up an Ecto Schema for a Pointable table.","ref":"Needle.Pointable.html"},{"type":"module","title":"Sample Usage - Needle.Pointable","doc":"```\nuse Needle.Pointable,\n otp_app: :my_app, # your OTP application's name\n source: \"my_table\", # default name of table in database\n table_id: \"01EBTVSZJ6X02J01R1XWWPWGZW\" # unique ULID to identify table\n\npointable_schema do\n # ... fields go here, if any\nend\n```","ref":"Needle.Pointable.html#module-sample-usage"},{"type":"module","title":"Overriding with configuration - Needle.Pointable","doc":"During `use` (i.e. compilation time), we will attempt to load\nconfiguration from the provided `:otp_app` under the key of the\ncurrent module. Any values provided here will override the defaults\nprovided to `use`. This allows you to configure them after the fact.\n\nAdditionally, pointables use `Exto`'s `flex_schema()`, so you can\nprovide additional configuration for those in the same place.\n\nI shall say it again because it's important: This happens at\n*compile time*. You must rebuild the app containing the pointable\nwhenever the configuration changes.","ref":"Needle.Pointable.html#module-overriding-with-configuration"},{"type":"module","title":"Introspection - Needle.Pointable","doc":"Defines a function `__pointers__/1` to introspect data. Recognised\nparameters:\n\n`:role` - `:pointable`\n`:table_id` - retrieves the ULID id of the pointable table.\n`:otp_app` - retrieves the OTP application to which this belongs.","ref":"Needle.Pointable.html#module-introspection"},{"type":"macro","title":"Needle.Pointable.pointable_schema/1","doc":"","ref":"Needle.Pointable.html#pointable_schema/1"},{"type":"module","title":"Needle.Pointer","doc":"A Pointer is any object that can be referenced by its id.\n\nPointer is a simple table consisting of three fields:\n* id - the database-unique id for this pointer in ULID format.\n* table_id - a type tag, references `Table`.\n* deleted_at - timestamp of when the object was deleted, null by default.\n\nTo reference `any` object, simply reference `Pointer`:\n\n```\nalias Needle.Pointer\nbelongs_to :object, Pointer\n```\n\nTo define a new object type there are two options, you should choose one:\n\n* `Virtual` - an object type with a view over `Pointer` limited by type.\n* `Pointable` - an object type with a table which is kept synchronised with `Pointer`.\n\nFor most purposes, you should use a `Virtual`. Pointable exists mostly to support existing code.\nThe major difference in practice is that you cannot add new fields to a virtual. Most of the time\nyou will want to store such extra fields in one or more mixins anyway so they may be reused.\n\nSee `Mixin` for more information about mixins.","ref":"Needle.Pointer.html"},{"type":"function","title":"Needle.Pointer.create/2","doc":"Changeset for creating a Pointer","ref":"Needle.Pointer.html#create/2"},{"type":"module","title":"Needle.Pointers","doc":"A context for working with Needle, a sort of global foreign key scheme.","ref":"Needle.Pointers.html"},{"type":"function","title":"Needle.Pointers.assert_points_to!/2","doc":"Return the provided pointer when it belongs to table queryable by the given table search term.","ref":"Needle.Pointers.html#assert_points_to!/2"},{"type":"function","title":"Needle.Pointers.cast!/1","doc":"Returns a Pointer, either the one provided or a synthesised one\npointing to the provided schema object. Does not hit the database or\ncause the pointer to be written to the database whatsoever.","ref":"Needle.Pointers.html#cast!/1"},{"type":"function","title":"Needle.Pointers.get_table_id!/1","doc":"","ref":"Needle.Pointers.html#get_table_id!/1"},{"type":"function","title":"Needle.Pointers.plan/1","doc":"Given a list of pointers which may or may have their pointed loaded,\nreturn a plan for preloading, a map of module name to set of loadable IDs.","ref":"Needle.Pointers.html#plan/1"},{"type":"function","title":"Needle.Pointers.query_base/1","doc":"Returns a basic query over non-deleted pointable objects in the system,\noptionally limited to one or more types.\n\nIf the type is set to a Pointable, Virtual or Mixin schema, records\nwill be selected from that schema directly. It is assumed this\nfilters deleted records by construction.\n\nOtherwise, will query from Pointer, filtering not is_nil(deleted_at)","ref":"Needle.Pointers.html#query_base/1"},{"type":"function","title":"Needle.Pointers.schema/1","doc":"","ref":"Needle.Pointers.html#schema/1"},{"type":"function","title":"Needle.Pointers.table/1","doc":"Looks up the table for a given pointer","ref":"Needle.Pointers.html#table/1"},{"type":"module","title":"Needle.Random","doc":"A securely randomly generated UUID keyed table. Not pointable.","ref":"Needle.Random.html"},{"type":"macro","title":"Needle.Random.random_schema/1","doc":"","ref":"Needle.Random.html#random_schema/1"},{"type":"function","title":"Needle.Random.using/2","doc":"","ref":"Needle.Random.html#using/2"},{"type":"module","title":"Needle.Table","doc":"One Table to rule them all. A record of a table participating in the\npointers abstraction - mandatory if participating.","ref":"Needle.Table.html"},{"type":"type","title":"Needle.Table.t/0","doc":"","ref":"Needle.Table.html#t:t/0"},{"type":"module","title":"Needle.Tables","doc":"A Global cache of Tables to be queried by their (Pointer) IDs, table\nnames or Ecto Schema module names.\n\nUse of the Table Service requires:\n\n1. You have run the migrations shipped with this library.\n2. You have started `Needle.Tables` before querying.\n3. All OTP applications with pointable Ecto Schemata to be added to the schema path.\n4. OTP 21.2 or greater, though we recommend using the most recent release available.\n\nWhile this module is a GenServer, it is only responsible for setup\nof the cache and then exits with :ignore having done so. It is not\nrecommended to restart the service as this will lead to a stop the\nworld garbage collection of all processes and the copying of the\nentire cache to each process that has queried it since its last\nlocal garbage collection.","ref":"Needle.Tables.html"},{"type":"function","title":"Needle.Tables.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Needle.Tables.html#child_spec/1"},{"type":"function","title":"Needle.Tables.data/0","doc":"","ref":"Needle.Tables.html#data/0"},{"type":"function","title":"Needle.Tables.id/1","doc":"Look up a table id by id, name or schema.","ref":"Needle.Tables.html#id/1"},{"type":"function","title":"Needle.Tables.id!/1","doc":"Look up a table id by id, name or schema, raise NotFound if not found.","ref":"Needle.Tables.html#id!/1"},{"type":"function","title":"Needle.Tables.ids!/1","doc":"Look up many ids at once, raise NotFound if any of them are not found","ref":"Needle.Tables.html#ids!/1"},{"type":"function","title":"Needle.Tables.mixin_modules/0","doc":"","ref":"Needle.Tables.html#mixin_modules/0"},{"type":"function","title":"Needle.Tables.schema/1","doc":"Look up a schema module by id, name or schema","ref":"Needle.Tables.html#schema/1"},{"type":"function","title":"Needle.Tables.schema!/1","doc":"Look up a schema module by id, name or schema, raise NotFound if not found","ref":"Needle.Tables.html#schema!/1"},{"type":"function","title":"Needle.Tables.schema?/1","doc":"","ref":"Needle.Tables.html#schema?/1"},{"type":"function","title":"Needle.Tables.schema_modules/0","doc":"","ref":"Needle.Tables.html#schema_modules/0"},{"type":"function","title":"Needle.Tables.start_link/1","doc":"Populates the global cache with table data via introspection.","ref":"Needle.Tables.html#start_link/1"},{"type":"function","title":"Needle.Tables.table/1","doc":"Get a Table identified by name, id or module.","ref":"Needle.Tables.html#table/1"},{"type":"function","title":"Needle.Tables.table!/1","doc":"Look up a Table by name or id, raise NotFound if not found.","ref":"Needle.Tables.html#table!/1"},{"type":"type","title":"Needle.Tables.query/0","doc":"A query is either a table's (database) name or (Pointer) ID as a\nbinary or the name of its Ecto Schema Module as an atom.","ref":"Needle.Tables.html#t:query/0"},{"type":"module","title":"Needle.ULID","doc":"An Ecto type for ULID strings.","ref":"Needle.ULID.html"},{"type":"function","title":"Needle.ULID.bingenerate/1","doc":"Generates a binary ULID.\n\nIf a value is provided for `timestamp`, the generated ULID will be for the provided timestamp.\nOtherwise, a ULID will be generated for the current time.\n\nArguments:\n\n* `timestamp`: A Unix timestamp with millisecond precision.","ref":"Needle.ULID.html#bingenerate/1"},{"type":"function","title":"Needle.ULID.bintimestamp/1","doc":"","ref":"Needle.ULID.html#bintimestamp/1"},{"type":"function","title":"Needle.ULID.cast/1","doc":"Casts a 26-byte encoded string to ULID or a 16-byte binary unchanged","ref":"Needle.ULID.html#cast/1"},{"type":"function","title":"Needle.ULID.cast!/1","doc":"Same as `cast/1` but raises `Ecto.CastError` on invalid arguments.","ref":"Needle.ULID.html#cast!/1"},{"type":"function","title":"Needle.ULID.dump/1","doc":"Converts a Crockford Base32 encoded ULID into a binary.","ref":"Needle.ULID.html#dump/1"},{"type":"function","title":"Needle.ULID.dump!/1","doc":"","ref":"Needle.ULID.html#dump!/1"},{"type":"function","title":"Needle.ULID.embed_as/1","doc":"","ref":"Needle.ULID.html#embed_as/1"},{"type":"function","title":"Needle.ULID.encoded_randomness/1","doc":"Returns the randomness portion of the encoded ulid","ref":"Needle.ULID.html#encoded_randomness/1"},{"type":"function","title":"Needle.ULID.encoded_timestamp/1","doc":"Returns the timestamp portion of the encoded ulid","ref":"Needle.ULID.html#encoded_timestamp/1"},{"type":"function","title":"Needle.ULID.equal?/2","doc":"","ref":"Needle.ULID.html#equal?/2"},{"type":"function","title":"Needle.ULID.generate/1","doc":"Generates a Crockford Base32 encoded ULID.\n\nIf a value is provided for `timestamp`, the generated ULID will be for the provided timestamp.\nOtherwise, a ULID will be generated for the current time.\n\nArguments:\n\n* `timestamp`: A Unix timestamp with millisecond precision.","ref":"Needle.ULID.html#generate/1"},{"type":"function","title":"Needle.ULID.load/1","doc":"Converts a binary ULID into a Crockford Base32 encoded string.","ref":"Needle.ULID.html#load/1"},{"type":"function","title":"Needle.ULID.synthesise!/1","doc":"translates alphanumerics into a sentinel ulid value","ref":"Needle.ULID.html#synthesise!/1"},{"type":"function","title":"Needle.ULID.timestamp/1","doc":"Returns the timestamp of an encoded or unencoded ULID","ref":"Needle.ULID.html#timestamp/1"},{"type":"function","title":"Needle.ULID.type/0","doc":"The underlying schema type.","ref":"Needle.ULID.html#type/0"},{"type":"module","title":"Needle.ULID.Migration","doc":"","ref":"Needle.ULID.Migration.html"},{"type":"function","title":"Needle.ULID.Migration.init_pointers_ulid_extra/0","doc":"","ref":"Needle.ULID.Migration.html#init_pointers_ulid_extra/0"},{"type":"function","title":"Needle.ULID.Migration.init_pointers_ulid_extra/1","doc":"","ref":"Needle.ULID.Migration.html#init_pointers_ulid_extra/1"},{"type":"module","title":"Needle.Unpointable","doc":"Has a ULID primary key but is not pointable.","ref":"Needle.Unpointable.html"},{"type":"macro","title":"Needle.Unpointable.unpointable_schema/1","doc":"","ref":"Needle.Unpointable.html#unpointable_schema/1"},{"type":"function","title":"Needle.Unpointable.using/2","doc":"","ref":"Needle.Unpointable.html#using/2"},{"type":"module","title":"Needle.Virtual","doc":"Sets up an Ecto Schema for a Virtual Pointable\n\nVirtual Pointables (or just `virtuals`) are like pointables with no\nadditional columns, except instead of being backed by a table they\nare backed by a view. This is more efficient of resources but only\nworks when there are no additional columns to add.\n\nIf you need to add columns to the schema, you should use a pointable.","ref":"Needle.Virtual.html"},{"type":"module","title":"Sample Usage - Needle.Virtual","doc":"```\nuse Needle.Virtual,\n otp_app: :my_app, # your OTP application's name\n source: \"my_table\", # default name of view in database\n table_id: \"01EBTVSZJ6X02J01R1XWWPWGZW\" # valid ULID to identify virtual\n\nvirtual_schema do\n # ... `has_one`, `has_many`, or *virtual* fields ONLY go here.\nend\n```","ref":"Needle.Virtual.html#module-sample-usage"},{"type":"module","title":"Overriding with configuration - Needle.Virtual","doc":"During `use` (i.e. compilation time), we will attempt to load\nconfiguration from the provided `:otp_app` under the key of the\ncurrent module. Any values provided here will override the defaults\nprovided to `use`. This allows you to configure them after the fact.\n\nAdditionally, pointables use `Exto`'s `flex_schema()`, so you can\nprovide additional configuration for those in the same place. Unlike\na regular pointable, you should not add additional\n(non-virtual) fields, but it is permitted to add `has_one` /\n`has_many` associations.\n\nI shall say it again because it's important: This happens at\n*compile time*. You must rebuild the app containing the pointable\nwhenever the configuration changes.","ref":"Needle.Virtual.html#module-overriding-with-configuration"},{"type":"module","title":"Introspection - Needle.Virtual","doc":"Defines a function `__pointers__/1` to introspect data. Recognised\nparameters:\n\n`:role` - `:virtual`.\n`:table_id` - retrieves the ULID id of the virtual.\n`:otp_app` - retrieves the OTP application to which this belongs.","ref":"Needle.Virtual.html#module-introspection"},{"type":"macro","title":"Needle.Virtual.virtual_schema/1","doc":"","ref":"Needle.Virtual.html#virtual_schema/1"},{"type":"module","title":"Bonfire.Boundaries","doc":"","ref":"Bonfire.Boundaries.html"},{"type":"function","title":"Bonfire.Boundaries.acls_from_preset_boundary_names/1","doc":"","ref":"Bonfire.Boundaries.html#acls_from_preset_boundary_names/1"},{"type":"function","title":"Bonfire.Boundaries.boundaries_normalise/1","doc":"","ref":"Bonfire.Boundaries.html#boundaries_normalise/1"},{"type":"function","title":"Bonfire.Boundaries.boundaries_or_default/2","doc":"","ref":"Bonfire.Boundaries.html#boundaries_or_default/2"},{"type":"function","title":"Bonfire.Boundaries.can?/4","doc":"","ref":"Bonfire.Boundaries.html#can?/4"},{"type":"function","title":"Bonfire.Boundaries.default_boundaries/1","doc":"","ref":"Bonfire.Boundaries.html#default_boundaries/1"},{"type":"function","title":"Bonfire.Boundaries.find_caretaker_stereotype/3","doc":"","ref":"Bonfire.Boundaries.html#find_caretaker_stereotype/3"},{"type":"function","title":"Bonfire.Boundaries.find_caretaker_stereotypes/3","doc":"","ref":"Bonfire.Boundaries.html#find_caretaker_stereotypes/3"},{"type":"function","title":"Bonfire.Boundaries.find_caretaker_stereotypes_q/3","doc":"","ref":"Bonfire.Boundaries.html#find_caretaker_stereotypes_q/3"},{"type":"function","title":"Bonfire.Boundaries.list_grants_on/1","doc":"","ref":"Bonfire.Boundaries.html#list_grants_on/1"},{"type":"function","title":"Bonfire.Boundaries.list_grants_on/2","doc":"eg: `list_grants_on(id, [:see, :read])`","ref":"Bonfire.Boundaries.html#list_grants_on/2"},{"type":"function","title":"Bonfire.Boundaries.list_object_acls/2","doc":"","ref":"Bonfire.Boundaries.html#list_object_acls/2"},{"type":"function","title":"Bonfire.Boundaries.list_object_boundaries/2","doc":"","ref":"Bonfire.Boundaries.html#list_object_boundaries/2"},{"type":"function","title":"Bonfire.Boundaries.load_pointer/2","doc":"","ref":"Bonfire.Boundaries.html#load_pointer/2"},{"type":"function","title":"Bonfire.Boundaries.load_pointers/2","doc":"Loads binaries according to boundaries (which are assumed to be ULID pointer IDs).\nLists which are iterated and return a [sub]list with only permitted pointers.","ref":"Bonfire.Boundaries.html#load_pointers/2"},{"type":"function","title":"Bonfire.Boundaries.pointer_permitted?/2","doc":"","ref":"Bonfire.Boundaries.html#pointer_permitted?/2"},{"type":"function","title":"Bonfire.Boundaries.preset_boundary_from_acl/2","doc":"","ref":"Bonfire.Boundaries.html#preset_boundary_from_acl/2"},{"type":"function","title":"Bonfire.Boundaries.preset_boundary_tuple_from_acl/2","doc":"","ref":"Bonfire.Boundaries.html#preset_boundary_tuple_from_acl/2"},{"type":"function","title":"Bonfire.Boundaries.preset_name/2","doc":"","ref":"Bonfire.Boundaries.html#preset_name/2"},{"type":"function","title":"Bonfire.Boundaries.replace_boundaries/4","doc":"","ref":"Bonfire.Boundaries.html#replace_boundaries/4"},{"type":"function","title":"Bonfire.Boundaries.set_boundaries/3","doc":"","ref":"Bonfire.Boundaries.html#set_boundaries/3"},{"type":"function","title":"Bonfire.Boundaries.take_care_of!/2","doc":"Assigns the user as the caretaker of the given object or objects,\nreplacing the existing caretaker, if any.","ref":"Bonfire.Boundaries.html#take_care_of!/2"},{"type":"function","title":"Bonfire.Boundaries.user_default_boundaries/0","doc":"","ref":"Bonfire.Boundaries.html#user_default_boundaries/0"},{"type":"function","title":"Bonfire.Boundaries.users_grants_on/2","doc":"","ref":"Bonfire.Boundaries.html#users_grants_on/2"},{"type":"function","title":"Bonfire.Boundaries.users_grants_on/3","doc":"","ref":"Bonfire.Boundaries.html#users_grants_on/3"},{"type":"module","title":"Bonfire.Boundaries.Acls","doc":"ACLs represent fully populated access control rules that can be reused.\nCan be reused to secure multiple objects, thus exists independently of any object.\n\nThe table doesn't have any fields of its own:\n```\nhas_many(:grants, Grant)\nhas_many(:controlled, Controlled)\n```","ref":"Bonfire.Boundaries.Acls.html"},{"type":"function","title":"Bonfire.Boundaries.Acls.acl_grants_to_tuples/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#acl_grants_to_tuples/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.acl_id/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#acl_id/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.acls/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#acls/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.acls_from_preset/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#acls_from_preset/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.base_acls_from_preset/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#base_acls_from_preset/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.built_in_ids/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#built_in_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.cast/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#cast/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.changeset/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#changeset/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.create/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#create/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.default_exclude_ids/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#default_exclude_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.delete/2","doc":"Fully delete the ACL, including permissions/grants and controlled information. This will affect all objects previously shared with this ACL.","ref":"Bonfire.Boundaries.Acls.html#delete/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.edit/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#edit/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.exclude_stereotypes/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#exclude_stereotypes/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get!/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get!/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_for_caretaker/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_for_caretaker/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_for_caretaker_q/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_for_caretaker_q/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_id/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_id/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_id!/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_id!/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_object_custom_acl/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_object_custom_acl/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_or_create_object_custom_acl/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_or_create_object_custom_acl/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.grant_tuples_from_preset/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#grant_tuples_from_preset/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.is_built_in?/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#is_built_in?/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.is_object_custom?/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#is_object_custom?/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.is_stereotype?/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#is_stereotype?/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.is_stereotyped?/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#is_stereotyped?/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.list/1","doc":"Lists ACLs we are permitted to see.","ref":"Bonfire.Boundaries.Acls.html#list/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_built_ins/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#list_built_ins/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_my/2","doc":"Lists the ACLs we are the registered caretakers of that we are\npermitted to see. If any are created without permitting the\nuser to see them, they will not be shown.","ref":"Bonfire.Boundaries.Acls.html#list_my/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_my_q/2","doc":"query for `list_my`","ref":"Bonfire.Boundaries.Acls.html#list_my_q/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_my_with_counts/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#list_my_with_counts/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_q/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#list_q/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.local_acl_ids/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#local_acl_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.maybe_by_ids/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#maybe_by_ids/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.maybe_search/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#maybe_search/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.opts_for_dropdown/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#opts_for_dropdown/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.opts_for_list/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#opts_for_list/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.prepare_cast/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#prepare_cast/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.preset_acl_ids/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#preset_acl_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.preview/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#preview/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.public_acl_ids/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#public_acl_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.remote_public_acl_ids/0","doc":"Built-in ACLs for things that should federate","ref":"Bonfire.Boundaries.Acls.html#remote_public_acl_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.set/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#set/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.simple_create/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#simple_create/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.soft_delete/2","doc":"Soft-delete the ACL, meaning it will not be displayed anymore, but permissions/grants and controlled information will be preserved. This will not affect objects previously shared with this ACL.","ref":"Bonfire.Boundaries.Acls.html#soft_delete/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.stereotype_ids/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#stereotype_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.user_default_acl/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#user_default_acl/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.user_default_acls/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#user_default_acls/0"},{"type":"module","title":"Bonfire.Boundaries.Acts.SetBoundaries","doc":"","ref":"Bonfire.Boundaries.Acts.SetBoundaries.html"},{"type":"function","title":"Bonfire.Boundaries.Acts.SetBoundaries.run/2","doc":"","ref":"Bonfire.Boundaries.Acts.SetBoundaries.html#run/2"},{"type":"module","title":"Bonfire.Boundaries.Blocks","doc":"","ref":"Bonfire.Boundaries.Blocks.html"},{"type":"function","title":"Bonfire.Boundaries.Blocks.ap_receive_activity/3","doc":"","ref":"Bonfire.Boundaries.Blocks.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.block/3","doc":"","ref":"Bonfire.Boundaries.Blocks.html#block/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.federation_module/0","doc":"","ref":"Bonfire.Boundaries.Blocks.html#federation_module/0"},{"type":"function","title":"Bonfire.Boundaries.Blocks.instance_wide_block/2","doc":"Block something for everyone on the instance (only for admins)","ref":"Bonfire.Boundaries.Blocks.html#instance_wide_block/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.instance_wide_circles/1","doc":"","ref":"Bonfire.Boundaries.Blocks.html#instance_wide_circles/1"},{"type":"function","title":"Bonfire.Boundaries.Blocks.is_blocked?/3","doc":"Checks if a `user_or_instance` is blocked\nPass a `block_type` (eg `:silence` or `:ghost`)\nPass a `current_user` in `opts` or check `:instance_wide`","ref":"Bonfire.Boundaries.Blocks.html#is_blocked?/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.list/2","doc":"","ref":"Bonfire.Boundaries.Blocks.html#list/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.remote_instance_block/3","doc":"","ref":"Bonfire.Boundaries.Blocks.html#remote_instance_block/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.types_blocked/1","doc":"","ref":"Bonfire.Boundaries.Blocks.html#types_blocked/1"},{"type":"function","title":"Bonfire.Boundaries.Blocks.unblock/3","doc":"","ref":"Bonfire.Boundaries.Blocks.html#unblock/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.unblock_all/2","doc":"","ref":"Bonfire.Boundaries.Blocks.html#unblock_all/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.user_block_circles/2","doc":"","ref":"Bonfire.Boundaries.Blocks.html#user_block_circles/2"},{"type":"module","title":"Bonfire.Boundaries.Blocks.LiveHandler","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html"},{"type":"function","title":"Bonfire.Boundaries.Blocks.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Boundaries.Blocks.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.LiveHandler.update_many/2","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html#update_many/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.LiveHandler.update_many_opts/1","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html#update_many_opts/1"},{"type":"module","title":"Bonfire.Boundaries.Circles","doc":"","ref":"Bonfire.Boundaries.Circles.html"},{"type":"function","title":"Bonfire.Boundaries.Circles.add_to_circles/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#add_to_circles/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.built_in_ids/0","doc":"","ref":"Bonfire.Boundaries.Circles.html#built_in_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Circles.changeset/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#changeset/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.changeset/3","doc":"","ref":"Bonfire.Boundaries.Circles.html#changeset/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.circle_ids/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#circle_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.circles/0","doc":"","ref":"Bonfire.Boundaries.Circles.html#circles/0"},{"type":"function","title":"Bonfire.Boundaries.Circles.create/2","doc":"Create a circle for the provided user (and with the user in the circle?)","ref":"Bonfire.Boundaries.Circles.html#create/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.delete/2","doc":"Fully delete the circle, including membership and boundary information. This will affect all objects previously shared with members of this circle.","ref":"Bonfire.Boundaries.Circles.html#delete/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.edit/3","doc":"","ref":"Bonfire.Boundaries.Circles.html#edit/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.empty_circles/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#empty_circles/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get!/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get!/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_by_name/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_by_name/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_for_caretaker/3","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_for_caretaker/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_id/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_id/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_id!/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_id!/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_or_create/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_or_create/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_stereotype_circles/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_stereotype_circles/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_tuple/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_tuple/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.is_built_in?/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#is_built_in?/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.is_encircled_by?/2","doc":"Lists the circles that we are permitted to see.","ref":"Bonfire.Boundaries.Circles.html#is_encircled_by?/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.is_encircled_by_q/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#is_encircled_by_q/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.is_stereotype?/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#is_stereotype?/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_built_ins/0","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_built_ins/0"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_by_ids/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_by_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_my/2","doc":"Lists the circles we are the registered caretakers of that we are\npermitted to see. If any circles are created without permitting the\nuser to see them, they will not be shown.","ref":"Bonfire.Boundaries.Circles.html#list_my/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_my_defaults/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_my_defaults/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_my_with_counts/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_my_with_counts/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_my_with_global/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_my_with_global/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_visible/2","doc":"Lists the circles that we are permitted to see.","ref":"Bonfire.Boundaries.Circles.html#list_visible/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.preload_encircled_by/3","doc":"","ref":"Bonfire.Boundaries.Circles.html#preload_encircled_by/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.query/1","doc":"query for `list_visible`","ref":"Bonfire.Boundaries.Circles.html#query/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.query_my/2","doc":"query for `list_my`","ref":"Bonfire.Boundaries.Circles.html#query_my/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.query_my_by_id/3","doc":"query for `get`","ref":"Bonfire.Boundaries.Circles.html#query_my_by_id/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.query_visible/2","doc":"query for `list_visible`","ref":"Bonfire.Boundaries.Circles.html#query_visible/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.remove_from_circles/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#remove_from_circles/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.stereotype_ids/0","doc":"","ref":"Bonfire.Boundaries.Circles.html#stereotype_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Circles.stereotypes/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#stereotypes/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.to_circle_ids/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#to_circle_ids/1"},{"type":"module","title":"Bonfire.Boundaries.Controlleds","doc":"An object is linked to one or more `Acl`s by the `Controlled` multimixin, which pairs an object ID with an ACL ID. Because it is a multimixin, a given object can have multiple ACLs applied. In the case of overlap, permissions are combined with `false` being prioritised.","ref":"Bonfire.Boundaries.Controlleds.html"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.add_acls/2","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#add_acls/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.changeset/2","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#changeset/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.create/1","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#create/1"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.get_preset_on_object/1","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#get_preset_on_object/1"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.grant_role/4","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#grant_role/4"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_acls_on_object/2","doc":"List ACLs applied to an object.\nOnly call this as an admin or curator of the object.","ref":"Bonfire.Boundaries.Controlleds.html#list_acls_on_object/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_grants_by_verbs/3","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_grants_by_verbs/3"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_on_object/2","doc":"List ALL boundaries (ACLs and grants) applied to an object.\nOnly call this as an admin or curator of the object.","ref":"Bonfire.Boundaries.Controlleds.html#list_on_object/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_on_objects_by_subject/2","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_on_objects_by_subject/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_presets_on_objects/1","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_presets_on_objects/1"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_q/1","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_q/1"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_subjects_by_verb/3","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_subjects_by_verb/3"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.remove_acls/2","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#remove_acls/2"},{"type":"module","title":"Bonfire.Boundaries.Debug","doc":"","ref":"Bonfire.Boundaries.Debug.html"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_grants_on/1","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_grants_on/1"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_grants_on/2","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_grants_on/2"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_my_grants_on/2","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_my_grants_on/2"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_object_acls/1","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_object_acls/1"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_user_acls/2","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_user_acls/2"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_user_circles/1","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_user_circles/1"},{"type":"module","title":"Bonfire.Boundaries.Fixtures","doc":"","ref":"Bonfire.Boundaries.Fixtures.html"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.activity_pub_circle/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#activity_pub_circle/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.admin_circle/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#admin_circle/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.custom_acl/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#custom_acl/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.fixtures/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#fixtures/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.global_circles/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#global_circles/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.insert/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#insert/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.instance_acl/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#instance_acl/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.mod_circle/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#mod_circle/0"},{"type":"module","title":"Bonfire.Boundaries.FixturesUsersMigrations","doc":"","ref":"Bonfire.Boundaries.FixturesUsersMigrations.html"},{"type":"function","title":"Bonfire.Boundaries.FixturesUsersMigrations.down/0","doc":"","ref":"Bonfire.Boundaries.FixturesUsersMigrations.html#down/0"},{"type":"function","title":"Bonfire.Boundaries.FixturesUsersMigrations.up/0","doc":"","ref":"Bonfire.Boundaries.FixturesUsersMigrations.html#up/0"},{"type":"module","title":"Bonfire.Boundaries.Grants","doc":"A grant is part of an `Acl`, and defines a permission (`value` boolean on a `verb`) for a `subject`","ref":"Bonfire.Boundaries.Grants.html"},{"type":"function","title":"Bonfire.Boundaries.Grants.changeset/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#changeset/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.changeset/3","doc":"","ref":"Bonfire.Boundaries.Grants.html#changeset/3"},{"type":"function","title":"Bonfire.Boundaries.Grants.create/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#create/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.create/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#create/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.get/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#get/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.grant/5","doc":"Edits or adds a grant to an Acl \n\nTakes three parameters:\n- subject_id: who we are granting access to\n- acl_id: what ACL we're applying a grant to\n- verb: which verb/action\n- value: true, false, or nil","ref":"Bonfire.Boundaries.Grants.html#grant/5"},{"type":"function","title":"Bonfire.Boundaries.Grants.grant_role/4","doc":"Edits or adds grants to an Acl based on a role","ref":"Bonfire.Boundaries.Grants.html#grant_role/4"},{"type":"function","title":"Bonfire.Boundaries.Grants.grants/0","doc":"","ref":"Bonfire.Boundaries.Grants.html#grants/0"},{"type":"function","title":"Bonfire.Boundaries.Grants.grants_to_tuples/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#grants_to_tuples/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.list/1","doc":"Lists the grants permitted to see.","ref":"Bonfire.Boundaries.Grants.html#list/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.list_for_acl/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#list_for_acl/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.list_my/1","doc":"Lists the grants we are the registered caretakers of that we are\npermitted to see. If any are created without permitting the\nuser to see them, they will not be shown.","ref":"Bonfire.Boundaries.Grants.html#list_my/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.list_q/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#list_q/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.remove_subject_from_acl/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#remove_subject_from_acl/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.subject_grants/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#subject_grants/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.subject_verb_grants/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#subject_verb_grants/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.subjects/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#subjects/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.upsert_or_delete/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#upsert_or_delete/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.verb_subject_grant/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#verb_subject_grant/1"},{"type":"module","title":"Bonfire.Boundaries.Integration","doc":"","ref":"Bonfire.Boundaries.Integration.html"},{"type":"function","title":"Bonfire.Boundaries.Integration.is_local?/1","doc":"","ref":"Bonfire.Boundaries.Integration.html#is_local?/1"},{"type":"function","title":"Bonfire.Boundaries.Integration.many/3","doc":"","ref":"Bonfire.Boundaries.Integration.html#many/3"},{"type":"function","title":"Bonfire.Boundaries.Integration.repo/0","doc":"","ref":"Bonfire.Boundaries.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Boundaries.LiveHandler","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.acl_create/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#acl_create/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.boundaries_on_objects/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#boundaries_on_objects/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.circle_create/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#circle_create/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.maybe_check_boundaries/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#maybe_check_boundaries/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.maybe_redirect_to/3","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#maybe_redirect_to/3"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.my_acls/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#my_acls/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.my_circles_paginated/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#my_circles_paginated/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.prepare_assigns/1","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#prepare_assigns/1"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.remove_from_circle_tuples/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#remove_from_circle_tuples/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.scope_origin/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#scope_origin/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.set_circles_tuples/3","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#set_circles_tuples/3"},{"type":"macro","title":"Bonfire.Boundaries.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.subject_name/1","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#subject_name/1"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.unblock/4","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#unblock/4"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.update_many/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#update_many/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.update_many_opts/1","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#update_many_opts/1"},{"type":"module","title":"Bonfire.Boundaries.Queries","doc":"Helpers for writing common queries. In particular, access control.\n\nMost of this stuff will probably move at some point when we figure\nout how to better organise it.\n\nUnfortunately, ecto is against the sort of thing we take for granted\nin the bonfire ecosystem, so some of these patterns are a bit\nconvoluted to make ecto generate acceptable sql. In particular the\nlateral join and the macro is a bit loltastic when we could just\nreturn an arbitrary tuple if ecto would support inferring (or us\nproviding) the return type of a subquery.","ref":"Bonfire.Boundaries.Queries.html"},{"type":"macro","title":"Bonfire.Boundaries.Queries.add_perms/2","doc":"Call the `add_perms(bool?, bool?)` postgres function for combining permissions.","ref":"Bonfire.Boundaries.Queries.html#add_perms/2"},{"type":"macro","title":"Bonfire.Boundaries.Queries.agg_perms/1","doc":"Call the `agg_perms(bool?)` postgres aggregate for combining permissions.","ref":"Bonfire.Boundaries.Queries.html#agg_perms/1"},{"type":"macro","title":"Bonfire.Boundaries.Queries.boundarise/3","doc":"","ref":"Bonfire.Boundaries.Queries.html#boundarise/3"},{"type":"function","title":"Bonfire.Boundaries.Queries.object_boundarised/2","doc":"","ref":"Bonfire.Boundaries.Queries.html#object_boundarised/2"},{"type":"function","title":"Bonfire.Boundaries.Queries.permitted/1","doc":"","ref":"Bonfire.Boundaries.Queries.html#permitted/1"},{"type":"function","title":"Bonfire.Boundaries.Queries.permitted/2","doc":"","ref":"Bonfire.Boundaries.Queries.html#permitted/2"},{"type":"function","title":"Bonfire.Boundaries.Queries.query_with_summary/3","doc":"A subquery which filters out results the current user is not permitted to perform *all* of the specified verbs on.\n\nParameters are an expression evaluating to the current user, a list of verbs, and optionally an initial query on `Summary` in order to filter what objects are checked.","ref":"Bonfire.Boundaries.Queries.html#query_with_summary/3"},{"type":"function","title":"Bonfire.Boundaries.Queries.skip_boundary_check?/2","doc":"","ref":"Bonfire.Boundaries.Queries.html#skip_boundary_check?/2"},{"type":"module","title":"Bonfire.Boundaries.Roles","doc":"","ref":"Bonfire.Boundaries.Roles.html"},{"type":"function","title":"Bonfire.Boundaries.Roles.cannot_role_from_verb/5","doc":"","ref":"Bonfire.Boundaries.Roles.html#cannot_role_from_verb/5"},{"type":"function","title":"Bonfire.Boundaries.Roles.create/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#create/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.create/3","doc":"","ref":"Bonfire.Boundaries.Roles.html#create/3"},{"type":"function","title":"Bonfire.Boundaries.Roles.edit_verb_permission/4","doc":"","ref":"Bonfire.Boundaries.Roles.html#edit_verb_permission/4"},{"type":"function","title":"Bonfire.Boundaries.Roles.get/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#get/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.preset_boundary_role_from_acl/1","doc":"","ref":"Bonfire.Boundaries.Roles.html#preset_boundary_role_from_acl/1"},{"type":"function","title":"Bonfire.Boundaries.Roles.reset_instance_roles/0","doc":"","ref":"Bonfire.Boundaries.Roles.html#reset_instance_roles/0"},{"type":"function","title":"Bonfire.Boundaries.Roles.role_from_grants/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#role_from_grants/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.role_from_verb/5","doc":"","ref":"Bonfire.Boundaries.Roles.html#role_from_verb/5"},{"type":"function","title":"Bonfire.Boundaries.Roles.role_verbs/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#role_verbs/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.roles_for_dropdown/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#roles_for_dropdown/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.split_tuples_can_cannot/1","doc":"","ref":"Bonfire.Boundaries.Roles.html#split_tuples_can_cannot/1"},{"type":"function","title":"Bonfire.Boundaries.Roles.verbs_for_role/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#verbs_for_role/2"},{"type":"module","title":"Bonfire.Boundaries.RuntimeConfig","doc":"","ref":"Bonfire.Boundaries.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Boundaries.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs` line","ref":"Bonfire.Boundaries.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Boundaries.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Boundaries.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Boundaries.Summary","doc":"","ref":"Bonfire.Boundaries.Summary.html"},{"type":"function","title":"Bonfire.Boundaries.Summary.migrate_views/0","doc":"","ref":"Bonfire.Boundaries.Summary.html#migrate_views/0"},{"type":"module","title":"Bonfire.Boundaries.Users","doc":"Reads fixtures in configuration and creates a default boundaries setup for a user","ref":"Bonfire.Boundaries.Users.html"},{"type":"function","title":"Bonfire.Boundaries.Users.create_default_boundaries/2","doc":"","ref":"Bonfire.Boundaries.Users.html#create_default_boundaries/2"},{"type":"function","title":"Bonfire.Boundaries.Users.create_missing_boundaries/2","doc":"","ref":"Bonfire.Boundaries.Users.html#create_missing_boundaries/2"},{"type":"function","title":"Bonfire.Boundaries.Users.do_insert_main/2","doc":"","ref":"Bonfire.Boundaries.Users.html#do_insert_main/2"},{"type":"function","title":"Bonfire.Boundaries.Users.prepare_default_boundaries/3","doc":"","ref":"Bonfire.Boundaries.Users.html#prepare_default_boundaries/3"},{"type":"module","title":"Bonfire.Boundaries.Verbs","doc":"","ref":"Bonfire.Boundaries.Verbs.html"},{"type":"function","title":"Bonfire.Boundaries.Verbs.changeset/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#changeset/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.create/1","doc":"","ref":"Bonfire.Boundaries.Verbs.html#create/1"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get!/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get!/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get_id/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get_id/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get_id!/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get_id!/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get_slug/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get_slug/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get_tuple/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get_tuple/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.ids/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#ids/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.list/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#list/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.list_verbs_debug/0","doc":"","ref":"Bonfire.Boundaries.Verbs.html#list_verbs_debug/0"},{"type":"function","title":"Bonfire.Boundaries.Verbs.slugs/0","doc":"","ref":"Bonfire.Boundaries.Verbs.html#slugs/0"},{"type":"function","title":"Bonfire.Boundaries.Verbs.verbs/0","doc":"","ref":"Bonfire.Boundaries.Verbs.html#verbs/0"},{"type":"function","title":"Bonfire.Boundaries.Verbs.verbs_count/0","doc":"","ref":"Bonfire.Boundaries.Verbs.html#verbs_count/0"},{"type":"module","title":"Bonfire.Boundaries.Web.ExcludeBoundaries","doc":"","ref":"Bonfire.Boundaries.Web.ExcludeBoundaries.html"},{"type":"function","title":"Bonfire.Boundaries.Web.ExcludeBoundaries.do_handle_event/3","doc":"","ref":"Bonfire.Boundaries.Web.ExcludeBoundaries.html#do_handle_event/3"},{"type":"module","title":"Bonfire.Boundaries.Web.Routes","doc":"","ref":"Bonfire.Boundaries.Web.Routes.html"},{"type":"function","title":"Bonfire.Boundaries.Web.Routes.declare_routes/0","doc":"","ref":"Bonfire.Boundaries.Web.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.Common","doc":"A library of common utils and helpers used across Bonfire extensions\n\nRefer to the [README](https://doc.bonfirenetworks.org/bonfire_common.html)","ref":"Bonfire.Common.html"},{"type":"module","title":"Bonfire.Common.Benchmark","doc":"Simple way to measure the execution time of functions. It is preferred to use `@decorator` from `Untangle` instead.","ref":"Bonfire.Common.Benchmark.html"},{"type":"function","title":"Bonfire.Common.Benchmark.apply_timed/1","doc":"","ref":"Bonfire.Common.Benchmark.html#apply_timed/1"},{"type":"function","title":"Bonfire.Common.Benchmark.apply_timed/2","doc":"","ref":"Bonfire.Common.Benchmark.html#apply_timed/2"},{"type":"function","title":"Bonfire.Common.Benchmark.apply_timed/3","doc":"","ref":"Bonfire.Common.Benchmark.html#apply_timed/3"},{"type":"module","title":"Bonfire.Common.Cache","doc":"Helpers for caching data and operations","ref":"Bonfire.Common.Cache.html"},{"type":"macro","title":"Bonfire.Common.Cache.cache/0","doc":"","ref":"Bonfire.Common.Cache.html#cache/0"},{"type":"function","title":"Bonfire.Common.Cache.cache_store/1","doc":"","ref":"Bonfire.Common.Cache.html#cache_store/1"},{"type":"function","title":"Bonfire.Common.Cache.cached_preloads_for_objects/3","doc":"","ref":"Bonfire.Common.Cache.html#cached_preloads_for_objects/3"},{"type":"function","title":"Bonfire.Common.Cache.get/2","doc":"","ref":"Bonfire.Common.Cache.html#get/2"},{"type":"function","title":"Bonfire.Common.Cache.get!/2","doc":"","ref":"Bonfire.Common.Cache.html#get!/2"},{"type":"function","title":"Bonfire.Common.Cache.maybe_apply_cached/3","doc":"Takes a function (or module and function names) and a set of arguments for that function, and tries to fetch the previous result of running that function from the in-memory cache, using the MFA (module name/function name/arguments used) to generate the cache key. If it's not in the cache, it executes the function, and caches and returns the result.","ref":"Bonfire.Common.Cache.html#maybe_apply_cached/3"},{"type":"function","title":"Bonfire.Common.Cache.put/3","doc":"","ref":"Bonfire.Common.Cache.html#put/3"},{"type":"function","title":"Bonfire.Common.Cache.remove/2","doc":"It removes the entry associated with a key from the cache.","ref":"Bonfire.Common.Cache.html#remove/2"},{"type":"function","title":"Bonfire.Common.Cache.remove_all/1","doc":"","ref":"Bonfire.Common.Cache.html#remove_all/1"},{"type":"function","title":"Bonfire.Common.Cache.reset/3","doc":"It removes the result of a given function from the cache.","ref":"Bonfire.Common.Cache.html#reset/3"},{"type":"module","title":"Bonfire.Common.Changelog.Github.DataGrabber","doc":"Datagrabber for changelog generation, `Versioce.Config.Changelog.datagrabber/0`\n\nUses repository history to obtain and format data.","ref":"Bonfire.Common.Changelog.Github.DataGrabber.html"},{"type":"function","title":"Bonfire.Common.Changelog.Github.DataGrabber.fetch_issues/1","doc":"","ref":"Bonfire.Common.Changelog.Github.DataGrabber.html#fetch_issues/1"},{"type":"function","title":"Bonfire.Common.Changelog.Github.DataGrabber.format_issue/1","doc":"","ref":"Bonfire.Common.Changelog.Github.DataGrabber.html#format_issue/1"},{"type":"function","title":"Bonfire.Common.Changelog.Github.DataGrabber.prepare_data/2","doc":"","ref":"Bonfire.Common.Changelog.Github.DataGrabber.html#prepare_data/2"},{"type":"module","title":"Bonfire.Common.Config","doc":"","ref":"Bonfire.Common.Config.html"},{"type":"macro","title":"Bonfire.Common.Config.compilation_error/1","doc":"","ref":"Bonfire.Common.Config.html#compilation_error/1"},{"type":"function","title":"Bonfire.Common.Config.delete/2","doc":"","ref":"Bonfire.Common.Config.html#delete/2"},{"type":"function","title":"Bonfire.Common.Config.endpoint_module/0","doc":"","ref":"Bonfire.Common.Config.html#endpoint_module/0"},{"type":"function","title":"Bonfire.Common.Config.env/0","doc":"","ref":"Bonfire.Common.Config.html#env/0"},{"type":"function","title":"Bonfire.Common.Config.get/3","doc":"Get config value for a config key (optionally from a specific OTP app or Bonfire extension)","ref":"Bonfire.Common.Config.html#get/3"},{"type":"function","title":"Bonfire.Common.Config.get!/2","doc":"","ref":"Bonfire.Common.Config.html#get!/2"},{"type":"function","title":"Bonfire.Common.Config.get_ext/1","doc":"Get *all* config keys/values for a specific Bonfire extension or OTP app","ref":"Bonfire.Common.Config.html#get_ext/1"},{"type":"function","title":"Bonfire.Common.Config.get_ext/3","doc":"Get config value for a Bonfire extension or OTP app config key","ref":"Bonfire.Common.Config.html#get_ext/3"},{"type":"function","title":"Bonfire.Common.Config.get_ext!/1","doc":"","ref":"Bonfire.Common.Config.html#get_ext!/1"},{"type":"function","title":"Bonfire.Common.Config.get_ext!/2","doc":"","ref":"Bonfire.Common.Config.html#get_ext!/2"},{"type":"function","title":"Bonfire.Common.Config.keys_tree/1","doc":"Constructs a key path for settings/config, which always starts with an app or extension name (which defaults to the main OTP app)\n\niex> keys_tree([:bonfire_me, Bonfire.Me.Users])\n [:bonfire_me, Bonfire.Me.Users]\n\niex> keys_tree(Bonfire.Me.Users)\n [:bonfire_me, Bonfire.Me.Users]\n\niex> keys_tree(:bonfire_me)\n [:bonfire_me]\n\niex> keys_tree(:random_atom)\n [:bonfire, :random_atom]\n\niex>keys_tree([:random_atom, :sub_key])\n [:bonfire, :random_atom, :sub_key]","ref":"Bonfire.Common.Config.html#keys_tree/1"},{"type":"function","title":"Bonfire.Common.Config.module_enabled?/1","doc":"","ref":"Bonfire.Common.Config.html#module_enabled?/1"},{"type":"function","title":"Bonfire.Common.Config.put/1","doc":"","ref":"Bonfire.Common.Config.html#put/1"},{"type":"function","title":"Bonfire.Common.Config.put/3","doc":"","ref":"Bonfire.Common.Config.html#put/3"},{"type":"function","title":"Bonfire.Common.Config.repo/0","doc":"","ref":"Bonfire.Common.Config.html#repo/0"},{"type":"function","title":"Bonfire.Common.Config.require_extension_config!/1","doc":"Stop if an Elixir module or extension / OTP app doesn't have configuration keys set up","ref":"Bonfire.Common.Config.html#require_extension_config!/1"},{"type":"function","title":"Bonfire.Common.Config.top_level_otp_app/0","doc":"","ref":"Bonfire.Common.Config.html#top_level_otp_app/0"},{"type":"exception","title":"Bonfire.Common.Config.Error","doc":"","ref":"Bonfire.Common.Config.Error.html"},{"type":"module","title":"Bonfire.Common.Config.LoadExtensionsConfig","doc":"Loads instance Settings from DB into Elixir's Config\n\nWhile this module is a GenServer, it is only responsible for querying the settings, putting them in Config, and then exits with :ignore having done so.","ref":"Bonfire.Common.Config.LoadExtensionsConfig.html"},{"type":"function","title":"Bonfire.Common.Config.LoadExtensionsConfig.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.Config.LoadExtensionsConfig.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Config.LoadExtensionsConfig.load_configs/1","doc":"","ref":"Bonfire.Common.Config.LoadExtensionsConfig.html#load_configs/1"},{"type":"function","title":"Bonfire.Common.Config.LoadExtensionsConfig.start_link/1","doc":"Populates the global cache with table data via introspection.","ref":"Bonfire.Common.Config.LoadExtensionsConfig.html#start_link/1"},{"type":"behaviour","title":"Bonfire.Common.ConfigModule","doc":"A global cache of runtime config modules to be loaded at app startup.","ref":"Bonfire.Common.ConfigModule.html"},{"type":"callback","title":"Bonfire.Common.ConfigModule.config/0","doc":"Set runtime config","ref":"Bonfire.Common.ConfigModule.html#c:config/0"},{"type":"callback","title":"Bonfire.Common.ConfigModule.config_module/0","doc":"Declares a config module","ref":"Bonfire.Common.ConfigModule.html#c:config_module/0"},{"type":"function","title":"Bonfire.Common.ConfigModule.modules/0","doc":"","ref":"Bonfire.Common.ConfigModule.html#modules/0"},{"type":"behaviour","title":"Bonfire.Common.ContextModule","doc":"Find a context or query module via its schema, backed by a global cache of known modules.","ref":"Bonfire.Common.ContextModule.html"},{"type":"function","title":"Bonfire.Common.ContextModule.apply_error/2","doc":"","ref":"Bonfire.Common.ContextModule.html#apply_error/2"},{"type":"function","title":"Bonfire.Common.ContextModule.context_function_error/2","doc":"","ref":"Bonfire.Common.ContextModule.html#context_function_error/2"},{"type":"callback","title":"Bonfire.Common.ContextModule.context_module/0","doc":"Declares a context module","ref":"Bonfire.Common.ContextModule.html#c:context_module/0"},{"type":"function","title":"Bonfire.Common.ContextModule.context_module/1","doc":"Get a context identified by schema","ref":"Bonfire.Common.ContextModule.html#context_module/1"},{"type":"function","title":"Bonfire.Common.ContextModule.context_module!/1","doc":"Look up a context, throw :not_found if not found.","ref":"Bonfire.Common.ContextModule.html#context_module!/1"},{"type":"function","title":"Bonfire.Common.ContextModule.context_modules/1","doc":"Look up many contexts at once, throw :not_found if any of them are not found","ref":"Bonfire.Common.ContextModule.html#context_modules/1"},{"type":"function","title":"Bonfire.Common.ContextModule.linked_query_modules/0","doc":"","ref":"Bonfire.Common.ContextModule.html#linked_query_modules/0"},{"type":"function","title":"Bonfire.Common.ContextModule.linked_schema_modules/0","doc":"","ref":"Bonfire.Common.ContextModule.html#linked_schema_modules/0"},{"type":"function","title":"Bonfire.Common.ContextModule.maybe_apply/4","doc":"Given an object or schema module name, run a function on the associated context module.\nTODO: refactor to re-use Utils.maybe_apply?","ref":"Bonfire.Common.ContextModule.html#maybe_apply/4"},{"type":"function","title":"Bonfire.Common.ContextModule.maybe_context_module/1","doc":"","ref":"Bonfire.Common.ContextModule.html#maybe_context_module/1"},{"type":"function","title":"Bonfire.Common.ContextModule.modules/0","doc":"","ref":"Bonfire.Common.ContextModule.html#modules/0"},{"type":"callback","title":"Bonfire.Common.ContextModule.query_module/0","doc":"Points to the related queries module","ref":"Bonfire.Common.ContextModule.html#c:query_module/0"},{"type":"callback","title":"Bonfire.Common.ContextModule.schema_module/0","doc":"Points to the related schema module","ref":"Bonfire.Common.ContextModule.html#c:schema_module/0"},{"type":"module","title":"Bonfire.Common.DatesTimes","doc":"Date/time helpers","ref":"Bonfire.Common.DatesTimes.html"},{"type":"function","title":"Bonfire.Common.DatesTimes.date_from_now/2","doc":"Takes a ULID ID (or an object with one) or a `DateTime` struct, and turns the date into a relative phrase, e.g. `2 days ago`, using the `Cldr.DateTime` or `Timex` library.","ref":"Bonfire.Common.DatesTimes.html#date_from_now/2"},{"type":"function","title":"Bonfire.Common.DatesTimes.date_from_pointer/1","doc":"Takes an object (or string with an ULID) and converts the ULID ID to a `DateTime` struct.","ref":"Bonfire.Common.DatesTimes.html#date_from_pointer/1"},{"type":"function","title":"Bonfire.Common.DatesTimes.format/2","doc":"","ref":"Bonfire.Common.DatesTimes.html#format/2"},{"type":"function","title":"Bonfire.Common.DatesTimes.future?/1","doc":"","ref":"Bonfire.Common.DatesTimes.html#future?/1"},{"type":"function","title":"Bonfire.Common.DatesTimes.now/0","doc":"","ref":"Bonfire.Common.DatesTimes.html#now/0"},{"type":"function","title":"Bonfire.Common.DatesTimes.past/2","doc":"","ref":"Bonfire.Common.DatesTimes.html#past/2"},{"type":"function","title":"Bonfire.Common.DatesTimes.past?/1","doc":"","ref":"Bonfire.Common.DatesTimes.html#past?/1"},{"type":"function","title":"Bonfire.Common.DatesTimes.remove/3","doc":"","ref":"Bonfire.Common.DatesTimes.html#remove/3"},{"type":"function","title":"Bonfire.Common.DatesTimes.to_date/1","doc":"","ref":"Bonfire.Common.DatesTimes.html#to_date/1"},{"type":"module","title":"Bonfire.Common.Enums","doc":"Extra functions to manipulate enumerables, basically an extension of `Enum`","ref":"Bonfire.Common.Enums.html"},{"type":"function","title":"Bonfire.Common.Enums.attr_get_id/2","doc":"Gets the value of a key in a map and returns the ID of that value (i.e. either the :id field of that association, or the value itself).","ref":"Bonfire.Common.Enums.html#attr_get_id/2"},{"type":"function","title":"Bonfire.Common.Enums.count_where/2","doc":"Counts the number of items in an enumerable that satisfy the given function.","ref":"Bonfire.Common.Enums.html#count_where/2"},{"type":"function","title":"Bonfire.Common.Enums.deep_merge/3","doc":"Recursively merges two data structures (`left` and `right`), which can be structs, maps or lists.\nIf `left` and `right` are `Ecto.Changeset`s, `merge_changesets/2` is called on them.\nIf `left` is a struct, a similar struct is returned with the merged values.\nIf `left` and `right` are lists, they are concatenated unless `:replace_lists` option is set to `true`.","ref":"Bonfire.Common.Enums.html#deep_merge/3"},{"type":"function","title":"Bonfire.Common.Enums.deep_merge_reduce/2","doc":"Deep merges a list of maps into a single map.","ref":"Bonfire.Common.Enums.html#deep_merge_reduce/2"},{"type":"function","title":"Bonfire.Common.Enums.enum_get/3","doc":"Attempt getting a value out of a map by atom key, or try with string key, or return a fallback","ref":"Bonfire.Common.Enums.html#enum_get/3"},{"type":"function","title":"Bonfire.Common.Enums.filter_empty/2","doc":"Takes a value and a fallback value. If the value is empty (e.g. an empty map, a non-loaded association, an empty list, an empty string, or nil), the fallback value is returned.","ref":"Bonfire.Common.Enums.html#filter_empty/2"},{"type":"function","title":"Bonfire.Common.Enums.filter_empty/3","doc":"","ref":"Bonfire.Common.Enums.html#filter_empty/3"},{"type":"function","title":"Bonfire.Common.Enums.flatter/1","doc":"Takes a list and recursively flattens it by recursively flattening the head and tail of the list","ref":"Bonfire.Common.Enums.html#flatter/1"},{"type":"function","title":"Bonfire.Common.Enums.fun/3","doc":"Applies a function from one of Elixir's `Map`, `Keyword`, or `List` modules depending on the type of the given enumerable.","ref":"Bonfire.Common.Enums.html#fun/3"},{"type":"function","title":"Bonfire.Common.Enums.group/2","doc":"Like `Enum.group_by/3`, except children are required to be unique (will throw\notherwise!) and the resulting map does not wrap each item in a list","ref":"Bonfire.Common.Enums.html#group/2"},{"type":"function","title":"Bonfire.Common.Enums.group_map/2","doc":"","ref":"Bonfire.Common.Enums.html#group_map/2"},{"type":"function","title":"Bonfire.Common.Enums.has_duplicates?/2","doc":"Checks if the given list contains any duplicates. Takes an optional function that can be used to extract and/or compute the value to compare for each element in the list.","ref":"Bonfire.Common.Enums.html#has_duplicates?/2"},{"type":"function","title":"Bonfire.Common.Enums.id/1","doc":"Extracts a binary ID from various data structures, such as a map containing the key :id or \"id\", a changeset, or a tuple containing the atom :id.","ref":"Bonfire.Common.Enums.html#id/1"},{"type":"function","title":"Bonfire.Common.Enums.ids/1","doc":"","ref":"Bonfire.Common.Enums.html#ids/1"},{"type":"function","title":"Bonfire.Common.Enums.input_to_atoms/2","doc":"Takes a data structure and converts any keys in maps to (previously defined) atoms, recursively. By default any unknown string keys will be discarded. It can optionally also convert string values to known atoms as well.","ref":"Bonfire.Common.Enums.html#input_to_atoms/2"},{"type":"function","title":"Bonfire.Common.Enums.input_to_value/7","doc":"","ref":"Bonfire.Common.Enums.html#input_to_value/7"},{"type":"function","title":"Bonfire.Common.Enums.map_filter_empty/1","doc":"Recursively filters nil values from a map","ref":"Bonfire.Common.Enums.html#map_filter_empty/1"},{"type":"function","title":"Bonfire.Common.Enums.map_key_replace/4","doc":"Renames a key in a map. Optionally changes the value as well.","ref":"Bonfire.Common.Enums.html#map_key_replace/4"},{"type":"function","title":"Bonfire.Common.Enums.map_key_replace_existing/4","doc":"Renames a key in a `map`, only if the key exists in the `map`. Optionally changes the value as well.","ref":"Bonfire.Common.Enums.html#map_key_replace_existing/4"},{"type":"function","title":"Bonfire.Common.Enums.map_new/2","doc":"Takes an enumerable object and converts it to a map. If it is not an enumerable, a map is created with the data under a fallback key (`:data` by default).","ref":"Bonfire.Common.Enums.html#map_new/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_append/2","doc":"Appends a value to a list, but only if the value is not nil or an empty list.","ref":"Bonfire.Common.Enums.html#maybe_append/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_elem/3","doc":"Takes any element, an index and a fallback value. If the element is a Tuple it returns either the tuple value at that index, otherwise it returns the fallback. If the tuple doesn't contain such an index, it raises `ArgumentError`.","ref":"Bonfire.Common.Enums.html#maybe_elem/3"},{"type":"function","title":"Bonfire.Common.Enums.maybe_flatten/1","doc":"Flattens the list if provided a list, otherwise just return the input","ref":"Bonfire.Common.Enums.html#maybe_flatten/1"},{"type":"function","title":"Bonfire.Common.Enums.maybe_from_struct/1","doc":"If given a struct, returns a map representation of it","ref":"Bonfire.Common.Enums.html#maybe_from_struct/1"},{"type":"function","title":"Bonfire.Common.Enums.maybe_get/3","doc":"","ref":"Bonfire.Common.Enums.html#maybe_get/3"},{"type":"function","title":"Bonfire.Common.Enums.maybe_list/2","doc":"","ref":"Bonfire.Common.Enums.html#maybe_list/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_merge_to_struct/2","doc":"","ref":"Bonfire.Common.Enums.html#maybe_merge_to_struct/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_put/3","doc":"Updates a `map` with the given `key` and `value`, but only if the `value` is not `nil`, an empty list or an empty string.","ref":"Bonfire.Common.Enums.html#maybe_put/3"},{"type":"function","title":"Bonfire.Common.Enums.maybe_to_keyword_list/2","doc":"Returns a keyword list representation of the input object. If the second argument is `true`, the function will recursively convert nested data structures to keyword lists as well.\nNote: make sure that all keys are atoms, i.e. using `input_to_atoms` first, otherwise the enumerable(s) containing a string key won't be converted.","ref":"Bonfire.Common.Enums.html#maybe_to_keyword_list/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_to_map/2","doc":"Returns a map representation of the input object. If the second argument is `true`, the function will recursively convert nested data structures to maps as well.","ref":"Bonfire.Common.Enums.html#maybe_to_map/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_to_struct/2","doc":"Takes a data structure and tries to convert it to a struct, using some hints in the data (eg. `__type` or `index_type` fields) or a manually-provided type.","ref":"Bonfire.Common.Enums.html#maybe_to_struct/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_to_structs/2","doc":"Takes a data structure and recursively converts any known keys to atoms and then tries to recursively convert any maps to structs, using some hints in the data (eg. `__type` or `index_type` fields).","ref":"Bonfire.Common.Enums.html#maybe_to_structs/2"},{"type":"function","title":"Bonfire.Common.Enums.merge_as_map/3","doc":"Merges two maps or lists into a single map","ref":"Bonfire.Common.Enums.html#merge_as_map/3"},{"type":"function","title":"Bonfire.Common.Enums.merge_changesets/2","doc":"Merges two `Ecto` changesets. If both changesets have a prepare field, the function concatenates the values of the prepare fields. Either way it also calls `Ecto.Changeset.merge/2` operation.","ref":"Bonfire.Common.Enums.html#merge_changesets/2"},{"type":"function","title":"Bonfire.Common.Enums.merge_keeping_only_first_keys/2","doc":"Merges two maps map_1 and map_2, but only keeps the keys that exist in map_1.","ref":"Bonfire.Common.Enums.html#merge_keeping_only_first_keys/2"},{"type":"function","title":"Bonfire.Common.Enums.merge_structs_as_map/2","doc":"","ref":"Bonfire.Common.Enums.html#merge_structs_as_map/2"},{"type":"function","title":"Bonfire.Common.Enums.merge_uniq/2","doc":"","ref":"Bonfire.Common.Enums.html#merge_uniq/2"},{"type":"function","title":"Bonfire.Common.Enums.naughty_to_atoms!/2","doc":"","ref":"Bonfire.Common.Enums.html#naughty_to_atoms!/2"},{"type":"function","title":"Bonfire.Common.Enums.nested_structs_to_maps/1","doc":"Recursively converts all nested structs to maps.","ref":"Bonfire.Common.Enums.html#nested_structs_to_maps/1"},{"type":"function","title":"Bonfire.Common.Enums.put_new_in/3","doc":"This function is used to insert a new value into a nested map data structure, where the path to the location of the value is specified as a list of keys.\n\nWhen the path is a single-element list, if the key already exists in the map, it returns the original map; otherwise, it inserts the key-value pair.\n\nWhen the path is a list of more than one key, the first element of the list (key) represents the key for the current level of the nested map, and the remaining elements (path) represent the keys for the nested map at the next level. The function starts by retrieving the value at the current level of the map (if it exists) and updates the map with the new value.","ref":"Bonfire.Common.Enums.html#put_new_in/3"},{"type":"function","title":"Bonfire.Common.Enums.stringify_keys/2","doc":"Takes a map or keyword list, and returns a map with any atom keys converted to string keys. It can optionally do so recursively.","ref":"Bonfire.Common.Enums.html#stringify_keys/2"},{"type":"function","title":"Bonfire.Common.Enums.struct_from_map/2","doc":"","ref":"Bonfire.Common.Enums.html#struct_from_map/2"},{"type":"function","title":"Bonfire.Common.Enums.struct_to_map/1","doc":"","ref":"Bonfire.Common.Enums.html#struct_to_map/1"},{"type":"function","title":"Bonfire.Common.Enums.uniq_by_id/1","doc":"Takes a list of maps that have an id field and returns a list with only the unique maps. Uniqueness is determined based on the id field and not the full contents of the maps.","ref":"Bonfire.Common.Enums.html#uniq_by_id/1"},{"type":"module","title":"Bonfire.Common.Errors","doc":"","ref":"Bonfire.Common.Errors.html"},{"type":"function","title":"Bonfire.Common.Errors.debug_banner_with_trace/4","doc":"","ref":"Bonfire.Common.Errors.html#debug_banner_with_trace/4"},{"type":"function","title":"Bonfire.Common.Errors.debug_exception/5","doc":"","ref":"Bonfire.Common.Errors.html#debug_exception/5"},{"type":"function","title":"Bonfire.Common.Errors.debug_log/4","doc":"","ref":"Bonfire.Common.Errors.html#debug_log/4"},{"type":"function","title":"Bonfire.Common.Errors.error_msg/1","doc":"Turns various kind of errors into an error message string. Used to format errors in a way that can be easily read by the user.","ref":"Bonfire.Common.Errors.html#error_msg/1"},{"type":"function","title":"Bonfire.Common.Errors.format_banner/4","doc":"Normalizes and formats any throw/error/exit.\nThe message is formatted and displayed in the same\nformat as used by Elixir's CLI.\nThe third argument is the stacktrace which is used to enrich\na normalized error with more information. It is only used when\nthe kind is an error.","ref":"Bonfire.Common.Errors.html#format_banner/4"},{"type":"function","title":"Bonfire.Common.Errors.format_location/1","doc":"","ref":"Bonfire.Common.Errors.html#format_location/1"},{"type":"function","title":"Bonfire.Common.Errors.format_mfa/3","doc":"Receives a module, fun and arity and formats it\nas shown in stacktraces. The arity may also be a list\nof arguments.","ref":"Bonfire.Common.Errors.html#format_mfa/3"},{"type":"function","title":"Examples - Bonfire.Common.Errors.format_mfa/3","doc":"iex> Exception.format_mfa(Foo, :bar, 1)\n {Foo, :bar, \"Foo.bar/1\"}\n iex> Exception.format_mfa(Foo, :bar, [])\n {Foo, :bar, \"Foo.bar()\"}\n iex> Exception.format_mfa(nil, :bar, [])\n {nil, :bar, \"nil.bar()\"}\nAnonymous functions are reported as -func/arity-anonfn-count-,\nwhere func is the name of the enclosing function. Convert to\n\"anonymous fn in func/arity\"","ref":"Bonfire.Common.Errors.html#format_mfa/3-examples"},{"type":"function","title":"Bonfire.Common.Errors.format_stacktrace/2","doc":"Formats the stacktrace.\nA stacktrace must be given as an argument. If not, the stacktrace\nis retrieved from `Process.info/2`.","ref":"Bonfire.Common.Errors.html#format_stacktrace/2"},{"type":"function","title":"Bonfire.Common.Errors.format_stacktrace_entry/2","doc":"Receives a stacktrace entry and formats it into a string.","ref":"Bonfire.Common.Errors.html#format_stacktrace_entry/2"},{"type":"function","title":"Bonfire.Common.Errors.format_stacktrace_entry_sliced/2","doc":"","ref":"Bonfire.Common.Errors.html#format_stacktrace_entry_sliced/2"},{"type":"function","title":"Bonfire.Common.Errors.last_stacktrace/0","doc":"","ref":"Bonfire.Common.Errors.html#last_stacktrace/0"},{"type":"function","title":"Bonfire.Common.Errors.map_error/2","doc":"","ref":"Bonfire.Common.Errors.html#map_error/2"},{"type":"function","title":"Bonfire.Common.Errors.maybe_ok_error/2","doc":"Applies change_fn if the first parameter is an {:ok, val} tuple, else returns the value","ref":"Bonfire.Common.Errors.html#maybe_ok_error/2"},{"type":"function","title":"Bonfire.Common.Errors.mf_maybe_link_to_code/4","doc":"","ref":"Bonfire.Common.Errors.html#mf_maybe_link_to_code/4"},{"type":"function","title":"Bonfire.Common.Errors.module_maybe_link_to_code/3","doc":"","ref":"Bonfire.Common.Errors.html#module_maybe_link_to_code/3"},{"type":"function","title":"Bonfire.Common.Errors.replace_error/2","doc":"","ref":"Bonfire.Common.Errors.html#replace_error/2"},{"type":"module","title":"Bonfire.Common.Extend","doc":"","ref":"Bonfire.Common.Extend.html"},{"type":"function","title":"Bonfire.Common.Extend.application_loaded?/1","doc":"","ref":"Bonfire.Common.Extend.html#application_loaded?/1"},{"type":"function","title":"Bonfire.Common.Extend.disabled_value?/1","doc":"","ref":"Bonfire.Common.Extend.html#disabled_value?/1"},{"type":"macro","title":"Bonfire.Common.Extend.extend_module/1","doc":"Extend a module (i.e. define `defdelegate` and `defoverridable` for all functions from the source module in the current module. \nUsage:\nimport Module.Extend\nextend_module Common.Text","ref":"Bonfire.Common.Extend.html#extend_module/1"},{"type":"function","title":"Bonfire.Common.Extend.extension_enabled?/2","doc":"Whether an Elixir module or extension / OTP app is present AND not part of a disabled Bonfire extension (by having in config something like `config :bonfire_common, modularity: :disabled`)","ref":"Bonfire.Common.Extend.html#extension_enabled?/2"},{"type":"function","title":"Bonfire.Common.Extend.extension_loaded?/1","doc":"Whether an Elixir module or extension / OTP app is present","ref":"Bonfire.Common.Extend.html#extension_loaded?/1"},{"type":"function","title":"Bonfire.Common.Extend.function_ast/2","doc":"","ref":"Bonfire.Common.Extend.html#function_ast/2"},{"type":"function","title":"Bonfire.Common.Extend.function_code/2","doc":"","ref":"Bonfire.Common.Extend.html#function_code/2"},{"type":"function","title":"Bonfire.Common.Extend.function_line_number/2","doc":"Return the number of the first line where a function is defined in a module","ref":"Bonfire.Common.Extend.html#function_line_number/2"},{"type":"function","title":"Bonfire.Common.Extend.function_line_numbers/2","doc":"Return the numbers (as a tuple) of the first and last lines of a function's definition in a module","ref":"Bonfire.Common.Extend.html#function_line_numbers/2"},{"type":"function","title":"Bonfire.Common.Extend.generate_reverse_router!/0","doc":"","ref":"Bonfire.Common.Extend.html#generate_reverse_router!/0"},{"type":"function","title":"Bonfire.Common.Extend.has_extension_config?/1","doc":"Whether an Elixir module or extension / OTP app has configuration keys set up","ref":"Bonfire.Common.Extend.html#has_extension_config?/1"},{"type":"macro","title":"Bonfire.Common.Extend.import_if_enabled/2","doc":"","ref":"Bonfire.Common.Extend.html#import_if_enabled/2"},{"type":"function","title":"Bonfire.Common.Extend.inject_function/3","doc":"Copy the code defining a function from its original module to one that extends it (or a manually specified module). \nUsage: `Module.Extend.inject_function(Common.TextExtended, :blank?)`","ref":"Bonfire.Common.Extend.html#inject_function/3"},{"type":"function","title":"Bonfire.Common.Extend.macro_inspect/1","doc":"","ref":"Bonfire.Common.Extend.html#macro_inspect/1"},{"type":"function","title":"Bonfire.Common.Extend.maybe_extension_loaded/1","doc":"","ref":"Bonfire.Common.Extend.html#maybe_extension_loaded/1"},{"type":"function","title":"Bonfire.Common.Extend.maybe_extension_loaded!/1","doc":"","ref":"Bonfire.Common.Extend.html#maybe_extension_loaded!/1"},{"type":"function","title":"Bonfire.Common.Extend.maybe_module/2","doc":"Given an Elixir module, this returns an Elixir module, as long as the module and extension / OTP app is present AND not disabled (eg. by having in config something like `config Bonfire.Common.Text, modularity: :disabled`)\n\nImportant note: you should make sure to use the returned module, rather than the one provided as argument, as it can be different, this allows for swapping out modules in config or user settings (eg. by having in config something like `config Bonfire.Common.Text, modularity: MyCustomExtension.Text`)","ref":"Bonfire.Common.Extend.html#maybe_module/2"},{"type":"function","title":"Bonfire.Common.Extend.maybe_module!/2","doc":"","ref":"Bonfire.Common.Extend.html#maybe_module!/2"},{"type":"function","title":"Bonfire.Common.Extend.maybe_module_loaded/1","doc":"","ref":"Bonfire.Common.Extend.html#maybe_module_loaded/1"},{"type":"function","title":"Bonfire.Common.Extend.maybe_schema_or_pointer/1","doc":"","ref":"Bonfire.Common.Extend.html#maybe_schema_or_pointer/1"},{"type":"function","title":"Bonfire.Common.Extend.module_code/1","doc":"","ref":"Bonfire.Common.Extend.html#module_code/1"},{"type":"function","title":"Bonfire.Common.Extend.module_enabled?/2","doc":"Whether an Elixir module or extension / OTP app is present AND not disabled (eg. by having in config something like `config :bonfire_common, modularity: :disabled`)","ref":"Bonfire.Common.Extend.html#module_enabled?/2"},{"type":"function","title":"Bonfire.Common.Extend.module_exists?/1","doc":"","ref":"Bonfire.Common.Extend.html#module_exists?/1"},{"type":"function","title":"Bonfire.Common.Extend.module_exists_or/2","doc":"","ref":"Bonfire.Common.Extend.html#module_exists_or/2"},{"type":"function","title":"Bonfire.Common.Extend.module_file/1","doc":"","ref":"Bonfire.Common.Extend.html#module_file/1"},{"type":"function","title":"Bonfire.Common.Extend.module_file_code/1","doc":"","ref":"Bonfire.Common.Extend.html#module_file_code/1"},{"type":"function","title":"Bonfire.Common.Extend.quoted_import_if_enabled/3","doc":"","ref":"Bonfire.Common.Extend.html#quoted_import_if_enabled/3"},{"type":"function","title":"Bonfire.Common.Extend.quoted_require_if_enabled/3","doc":"","ref":"Bonfire.Common.Extend.html#quoted_require_if_enabled/3"},{"type":"function","title":"Bonfire.Common.Extend.quoted_use_if_enabled/3","doc":"","ref":"Bonfire.Common.Extend.html#quoted_use_if_enabled/3"},{"type":"macro","title":"Bonfire.Common.Extend.require_if_enabled/2","doc":"","ref":"Bonfire.Common.Extend.html#require_if_enabled/2"},{"type":"function","title":"Bonfire.Common.Extend.split_lines/1","doc":"","ref":"Bonfire.Common.Extend.html#split_lines/1"},{"type":"macro","title":"Bonfire.Common.Extend.use_if_enabled/2","doc":"","ref":"Bonfire.Common.Extend.html#use_if_enabled/2"},{"type":"behaviour","title":"Bonfire.Common.ExtensionBehaviour","doc":"A Global cache of known Behaviours in Bonfire\n\nUse of the ExtensionBehaviour Service requires declaring `@behaviour Bonfire.Common.ExtensionBehaviour` in your behaviour module. This module will then index those behaviours *and* all the modules that implement those behaviours at app startup.\n\nWhile this module is a GenServer, it is only responsible for setup\nof the cache and then exits with :ignore having done so. It is not\nrecommended to restart the service as this will lead to a stop the\nworld garbage collection of all processes and the copying of the\nentire cache to each process that has queried it since its last\nlocal garbage collection.","ref":"Bonfire.Common.ExtensionBehaviour.html"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.adopters_of_behaviour/1","doc":"Given a behaviour module, filters app modules to only those that implement that behaviour","ref":"Bonfire.Common.ExtensionBehaviour.html#adopters_of_behaviour/1"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.apply_modules/2","doc":"Note: use `apply_modules_cached/2` instead, as it caches the result.","ref":"Bonfire.Common.ExtensionBehaviour.html#apply_modules/2"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.apply_modules_cached/2","doc":"Runs/applies a given function name on each of a list of given modules, returning a map (listing the modules with their result as value) and vice versa (listing the results as key with their calling module as value). It also caches the result on first run.","ref":"Bonfire.Common.ExtensionBehaviour.html#apply_modules_cached/2"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.apps_to_scan/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#apps_to_scan/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.behaviour_app_modules/2","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#behaviour_app_modules/2"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.behaviour_modules/2","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#behaviour_modules/2"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.behaviours/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#behaviours/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.cached_behaviours/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#cached_behaviours/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.ExtensionBehaviour.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.find_adopters_of_behaviours/1","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#find_adopters_of_behaviours/1"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.find_extension_behaviours/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#find_extension_behaviours/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.module_behaviours/1","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#module_behaviours/1"},{"type":"callback","title":"Bonfire.Common.ExtensionBehaviour.modules/0","doc":"List modules that implement a behaviour","ref":"Bonfire.Common.ExtensionBehaviour.html#c:modules/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.populate/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#populate/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.start_link/1","doc":"Populates the global cache with config_module data via introspection.","ref":"Bonfire.Common.ExtensionBehaviour.html#start_link/1"},{"type":"behaviour","title":"Bonfire.Common.ExtensionModule","doc":"A global cache of known Bonfire extensions and their metadata.","ref":"Bonfire.Common.ExtensionModule.html"},{"type":"function","title":"Bonfire.Common.ExtensionModule.app_modules/0","doc":"","ref":"Bonfire.Common.ExtensionModule.html#app_modules/0"},{"type":"callback","title":"Bonfire.Common.ExtensionModule.declared_extension/0","doc":"Declares a Bonfire extensions","ref":"Bonfire.Common.ExtensionModule.html#c:declared_extension/0"},{"type":"function","title":"Bonfire.Common.ExtensionModule.declared_extension/1","doc":"","ref":"Bonfire.Common.ExtensionModule.html#declared_extension/1"},{"type":"function","title":"Bonfire.Common.ExtensionModule.declared_extensions/1","doc":"","ref":"Bonfire.Common.ExtensionModule.html#declared_extensions/1"},{"type":"function","title":"Bonfire.Common.ExtensionModule.default_nav/0","doc":"","ref":"Bonfire.Common.ExtensionModule.html#default_nav/0"},{"type":"function","title":"Bonfire.Common.ExtensionModule.default_nav/1","doc":"","ref":"Bonfire.Common.ExtensionModule.html#default_nav/1"},{"type":"function","title":"Bonfire.Common.ExtensionModule.extension/1","doc":"Get a extension identified by schema","ref":"Bonfire.Common.ExtensionModule.html#extension/1"},{"type":"function","title":"Bonfire.Common.ExtensionModule.extension_function_error/2","doc":"","ref":"Bonfire.Common.ExtensionModule.html#extension_function_error/2"},{"type":"function","title":"Bonfire.Common.ExtensionModule.modules/0","doc":"","ref":"Bonfire.Common.ExtensionModule.html#modules/0"},{"type":"module","title":"Bonfire.Common.Extensions","doc":"","ref":"Bonfire.Common.Extensions.html"},{"type":"function","title":"Bonfire.Common.Extensions.data/0","doc":"","ref":"Bonfire.Common.Extensions.html#data/0"},{"type":"function","title":"Bonfire.Common.Extensions.get_branch/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_branch/1"},{"type":"function","title":"Bonfire.Common.Extensions.get_code_link/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_code_link/1"},{"type":"function","title":"Bonfire.Common.Extensions.get_link/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_link/1"},{"type":"function","title":"Bonfire.Common.Extensions.get_version/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_version/1"},{"type":"function","title":"Bonfire.Common.Extensions.get_version_link/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_version_link/1"},{"type":"function","title":"Bonfire.Common.Extensions.global_disable/1","doc":"","ref":"Bonfire.Common.Extensions.html#global_disable/1"},{"type":"function","title":"Bonfire.Common.Extensions.global_enable/1","doc":"","ref":"Bonfire.Common.Extensions.html#global_enable/1"},{"type":"function","title":"Bonfire.Common.Extensions.loaded_deps/1","doc":"","ref":"Bonfire.Common.Extensions.html#loaded_deps/1"},{"type":"module","title":"Bonfire.Common.Extensions.Diff","doc":"","ref":"Bonfire.Common.Extensions.Diff.html"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.analyse_repo_latest_diff_stream/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#analyse_repo_latest_diff_stream/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.generate_diff/2","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#generate_diff/2"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git!/4","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git!/4"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git_add_all/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git_add_all/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git_fetch/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git_fetch/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git_generate_diff/4","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git_generate_diff/4"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git_pre_configure/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git_pre_configure/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.parse_repo_latest_diff/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#parse_repo_latest_diff/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.repo_latest_diff/3","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#repo_latest_diff/3"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.root/0","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#root/0"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.tmp_path/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#tmp_path/1"},{"type":"module","title":"Bonfire.Common.HTTP","doc":"Module for building and performing HTTP requests.","ref":"Bonfire.Common.HTTP.html"},{"type":"function","title":"Bonfire.Common.HTTP.delete/4","doc":"Makes a DELETE request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#delete/4"},{"type":"function","title":"Bonfire.Common.HTTP.get/3","doc":"Makes a GET request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#get/3"},{"type":"function","title":"Bonfire.Common.HTTP.get_cached/1","doc":"","ref":"Bonfire.Common.HTTP.html#get_cached/1"},{"type":"function","title":"Bonfire.Common.HTTP.patch/4","doc":"Makes a PATCH request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#patch/4"},{"type":"function","title":"Bonfire.Common.HTTP.post/4","doc":"Makes a POST request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#post/4"},{"type":"function","title":"Bonfire.Common.HTTP.put/4","doc":"Makes a PUT request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#put/4"},{"type":"function","title":"Bonfire.Common.HTTP.request/5","doc":"Builds and perform http request.\n\n# Arguments:\n`method` - :get, :post, :put, :delete\n`url`\n`body`\n`headers` - a keyworld list of headers, e.g. `[{\"content-type\", \"text/plain\"}]`\n`options` - custom, per-request middleware or adapter options\n\n# Returns:\n`{:ok, %Tesla.Env{}}` or `{:error, error}`","ref":"Bonfire.Common.HTTP.html#request/5"},{"type":"type","title":"Bonfire.Common.HTTP.t/0","doc":"","ref":"Bonfire.Common.HTTP.html#t:t/0"},{"type":"module","title":"Bonfire.Common.HTTP.Connection","doc":"Specifies connection options for HTTP requests","ref":"Bonfire.Common.HTTP.Connection.html"},{"type":"function","title":"Bonfire.Common.HTTP.Connection.adapter_options/2","doc":"","ref":"Bonfire.Common.HTTP.Connection.html#adapter_options/2"},{"type":"function","title":"Bonfire.Common.HTTP.Connection.new/1","doc":"","ref":"Bonfire.Common.HTTP.Connection.html#new/1"},{"type":"module","title":"Bonfire.Common.HTTP.RequestBuilder","doc":"Helper functions for building HTTP requests","ref":"Bonfire.Common.HTTP.RequestBuilder.html"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.add_param/4","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#add_param/4"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.headers/2","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#headers/2"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.method/2","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#method/2"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.opts/2","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#opts/2"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.url/2","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#url/2"},{"type":"module","title":"Bonfire.Common.Localise","doc":"Various helpers for localisation","ref":"Bonfire.Common.Localise.html"},{"type":"function","title":"Bonfire.Common.Localise.default_locale/0","doc":"","ref":"Bonfire.Common.Localise.html#default_locale/0"},{"type":"function","title":"Bonfire.Common.Localise.get_locale/0","doc":"","ref":"Bonfire.Common.Localise.html#get_locale/0"},{"type":"function","title":"Bonfire.Common.Localise.get_locale_id/0","doc":"","ref":"Bonfire.Common.Localise.html#get_locale_id/0"},{"type":"function","title":"Bonfire.Common.Localise.known_locales/0","doc":"","ref":"Bonfire.Common.Localise.html#known_locales/0"},{"type":"function","title":"Bonfire.Common.Localise.locale_name/1","doc":"","ref":"Bonfire.Common.Localise.html#locale_name/1"},{"type":"function","title":"Bonfire.Common.Localise.put_locale/1","doc":"","ref":"Bonfire.Common.Localise.html#put_locale/1"},{"type":"function","title":"Bonfire.Common.Localise.set_locale_config/0","doc":"","ref":"Bonfire.Common.Localise.html#set_locale_config/0"},{"type":"module","title":"Bonfire.Common.Localise.Cldr","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":"Bonfire.Common.Localise.Cldr.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.available_locale_name?/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#available_locale_name?/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.default_locale/0","doc":"Returns the default `locale`.","ref":"Bonfire.Common.Localise.Cldr.html#default_locale/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.default_locale/0","doc":"iex> Bonfire.Common.Localise.Cldr.default_locale()\n %Cldr.LanguageTag{\n backend: Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.html#default_locale/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.default_territory/0","doc":"Returns the default territory when a locale\ndoes not specify one and none can be inferred.","ref":"Bonfire.Common.Localise.Cldr.html#default_territory/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.default_territory/0","doc":"iex> Bonfire.Common.Localise.Cldr.default_territory()\n :\"001\"","ref":"Bonfire.Common.Localise.Cldr.html#default_territory/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.ellipsis/2","doc":"Add locale-specific ellipsis to a string.","ref":"Bonfire.Common.Localise.Cldr.html#ellipsis/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.ellipsis/2","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":"Bonfire.Common.Localise.Cldr.html#ellipsis/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.ellipsis/2","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":"Bonfire.Common.Localise.Cldr.html#ellipsis/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.ellipsis/2","doc":"iex> Bonfire.Common.Localise.Cldr.ellipsis(\"And furthermore\")\n \"And furthermore…\"\n\n iex> Bonfire.Common.Localise.Cldr.ellipsis([\"And furthermore\", \"there is much to be done\"], locale: :ja)\n \"And furthermore…there is much to be done\"\n\n iex> Bonfire.Common.Localise.Cldr.ellipsis(\"And furthermore\", format: :word)\n \"And furthermore …\"\n\n iex> Bonfire.Common.Localise.Cldr.ellipsis([\"And furthermore\", \"there is much to be done\"], locale: :ja, format: :word)\n \"And furthermore … there is much to be done\"","ref":"Bonfire.Common.Localise.Cldr.html#ellipsis/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.get_locale/0","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":"Bonfire.Common.Localise.Cldr.html#get_locale/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.get_locale/0","doc":"iex> Bonfire.Common.Localise.Cldr.put_locale(\"pl\")\n iex> Bonfire.Common.Localise.Cldr.get_locale()\n %Cldr.LanguageTag{\n backend: Elixir.Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.html#get_locale/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_calendars/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#known_calendars/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_currencies/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#known_currencies/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_gettext_locale_name/1","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":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_gettext_locale_name/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_gettext_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_gettext_locale_name/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name(\"en\")\n \"en\"\n\n iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name(\"en-SA\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_gettext_locale_name?/1","doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Gettext.","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_gettext_locale_name?/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name?/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_gettext_locale_name?/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?(\"en\")\n true\n\n iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?(\"!!\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_gettext_locale_names/0","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":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_locale_name/1","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":"Bonfire.Common.Localise.Cldr.html#known_locale_name/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_locale_name/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_locale_name/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_locale_name(:\"en-AU\")\n :\"en-AU\"\n\n iex> Bonfire.Common.Localise.Cldr.known_locale_name(:\"en-SA\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_locale_name?/1","doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Cldr.","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_locale_name?/1","doc":"* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name?/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_locale_name?/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:en)\n true\n\n iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:\"!!\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_locale_names/0","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":"Bonfire.Common.Localise.Cldr.html#known_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_number_system_types/0","doc":"Returns a list of atoms representing the number systems types known to `Cldr`.","ref":"Bonfire.Common.Localise.Cldr.html#known_number_system_types/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.known_number_system_types/0","doc":"iex> Bonfire.Common.Localise.Cldr.known_number_system_types()\n [:default, :finance, :native, :traditional]","ref":"Bonfire.Common.Localise.Cldr.html#known_number_system_types/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_number_systems/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#known_number_systems/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_rbnf_locale_name/1","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":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_rbnf_locale_name/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_rbnf_locale_name/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:en)\n :en\n\n iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:\"en-SA\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?/1","doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Cldr and supports\nrules based number formats (RBNF).","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?/1","doc":"* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name?/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:en)\n true\n\n iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:\"!!\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_rbnf_locale_names/0","doc":"Returns a list of locale names which have rules-based number\nformats (RBNF).","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_territories/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#known_territories/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.normalize_lenient_parse/3","doc":"Normalizes a string by applying transliteration\nof common symbols in numbers, currencies and dates","ref":"Bonfire.Common.Localise.Cldr.html#normalize_lenient_parse/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"Set the current process's Gettext locale from a\n`t:Cldr.LanguageTag`.","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"* `locale` is a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`.","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"* `{:ok, gettext_locale_name}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1-returns"},{"type":"function","title":"Behaviour - Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"1. If the `locale.gettext_locale_name` is `nil` then an error\n is returned.\n\n2. The `gettext` locale for the `gettext_backend` configured for the\n CLDR backend defined by the `t:Cldr.LanguageTag` is set.","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1-behaviour"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"iex> import Cldr.LanguageTag.Sigil\n iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l\"en\")\n {:ok, \"en\"}\n\n iex> import Cldr.LanguageTag.Sigil\n iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l\"de\")\n {:error,\n {Cldr.UnknownLocaleError,\n \"Locale #Cldr.LanguageTag does not map to a known gettext locale name\"}}","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.put_locale/1","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":"Bonfire.Common.Localise.Cldr.html#put_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.put_locale/1","doc":"* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1`\n\nSee [rfc5646](https://tools.ietf.org/html/rfc5646) for the specification\nof a language tag.","ref":"Bonfire.Common.Localise.Cldr.html#put_locale/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.put_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.put_locale(\"en\")\n {:ok,\n %Cldr.LanguageTag{\n backend: Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.html#put_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.quote/2","doc":"Add locale-specific quotation marks around a string.","ref":"Bonfire.Common.Localise.Cldr.html#quote/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.quote/2","doc":"* `string` is any valid Elixir string\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.html#quote/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.quote/2","doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/1`.\n The default is `Cldr.get_locale/0`","ref":"Bonfire.Common.Localise.Cldr.html#quote/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.quote/2","doc":"iex> Bonfire.Common.Localise.Cldr.quote(\"Quoted String\")\n \"“Quoted String”\"\n\n iex> Bonfire.Common.Localise.Cldr.quote(\"Quoted String\", locale: :ja)\n \"「Quoted String」\"","ref":"Bonfire.Common.Localise.Cldr.html#quote/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.unknown_locale_names/0","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":"Bonfire.Common.Localise.Cldr.html#unknown_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_calendar/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#validate_calendar/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_currency/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#validate_currency/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"Normalise and validate a locale name.","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1`","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"* `{:ok, language_tag}`\n\n* `{:error, reason}`","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"See [rfc5646](https://tools.ietf.org/html/rfc5646) for the specification\nof a language tag.","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.validate_locale(:en)\n {:ok,\n %Cldr.LanguageTag{\n backend: Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.validate_locale Bonfire.Common.Localise.Cldr.default_locale()\n {:ok,\n %Cldr.LanguageTag{\n backend: Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.validate_locale(\"zzz\")\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zzz\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_number_system/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_number_system_type/1","doc":"Normalise and validate a number system type.","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system_type/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.validate_number_system_type/1","doc":"* `number_system_type` is any number system type returned by\n `Cldr.known_number_system_types/1`","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system_type/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.validate_number_system_type/1","doc":"* `{:ok, normalized_number_system_type}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system_type/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.validate_number_system_type/1","doc":"iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:default)\n {:ok, :default}\n\n iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:traditional)\n {:ok, :traditional}\n\n iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:latn)\n {\n :error,\n {Cldr.UnknownNumberSystemTypeError, \"The number system type :latn is unknown\"}\n }\n\n iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(\"bork\")\n {\n :error,\n {Cldr.UnknownNumberSystemTypeError, \"The number system type \\\"bork\\\" is invalid\"}\n }","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system_type/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_territory/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#validate_territory/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.with_locale/2","doc":"Execute a function with a locale ensuring that the\ncurrent locale is restored after the function.","ref":"Bonfire.Common.Localise.Cldr.html#with_locale/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.with_locale/2","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":"Bonfire.Common.Localise.Cldr.html#with_locale/2-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.with_locale/2","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":"Bonfire.Common.Localise.Cldr.html#with_locale/2-returns"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match/1","doc":"Parse an `Accept-Language` string and return the best match for\na configured `Cldr` locale.","ref":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#best_match/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match/1","doc":"* `accept_langauge` is a string representing an accept language header","ref":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#best_match/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match/1","doc":"* `{:ok, language_tag}` or\n\n* `{:error, reason}`","ref":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#best_match/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match/1","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#best_match/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage.parse/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse/1-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse/1","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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse!/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!/1","doc":"* `accept-language` is any string in the format defined by [rfc2616](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)","ref":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse!/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse!/1-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!/1","doc":"iex> Bonfire.Common.Localise.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 Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse!/1-example"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Calendar","doc":"Data functions to retrieve localised calendar\ninformation.\n\n`Cldr` defines formats for several calendars, the names of which\nare returned by `Cldr.known_calendars/0`.\n\nCurrently this implementation only supports the `:gregorian`,\n`:persian`, `:coptic` and `ethiopic` calendars.\n\nThe `:gregorian` calendar aligns with the proleptic Gregorian calendar\ndefined by Elixir, `Calendar.ISO`.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale/1","doc":"Return the calendar module for a locale.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale/1","doc":"* `:locale` is any locale or locale name validated\n by `Cldr.validate_locale/2`. The default is\n `Cldr.get_locale()` which returns the locale\n set for the current process","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale/1","doc":"* `{:ok, calendar_module}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale \"en-GB\"\n {:ok, Cldr.Calendar.GB}\n\n iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale \"en-GB-u-ca-gregory\"\n {:ok, Cldr.Calendar.Gregorian}\n\n iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale \"en\"\n {:ok, Cldr.Calendar.US}\n\n iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale \"fa-IR\"\n {:ok, Cldr.Calendar.Persian}","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"Returns the calendar module preferred for\na territory.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"* `territory` is any valid ISO3166-2 code as\n an `String.t` or upcased `atom()`","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"* `{:ok, calendar_module}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory :US\n {:ok, Cldr.Calendar.Gregorian}\n\n iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory :XX\n {:error, {Cldr.UnknownTerritoryError, \"The territory :XX is unknown\"}}","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1-examples"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"The overwhelming majority of territories have\n`:gregorian` as their first preferred calendar\nand therefore `Cldr.Calendar.Gregorian`\nwill be returned for most territories.\n\nReturning any other calendar module would require:\n\n1. That another calendar is preferred over `:gregorian`\n for a territory\n\n2. That a calendar module is available to support\n that calendar.\n\nAs an example, Iran (territory `:IR`) prefers the\n`:persian` calendar. If the optional library\n[ex_cldr_calendars_persian](https://hex.pm/packages/ex_cldr_calendars_persian)\nis installed, the calendar module `Cldr.Calendar.Persian` will\nbe returned. If it is not installed, `Cldr.Calendar.Gregorian`\nwill be returned as `:gregorian` is the second preference\nfor `:IR`.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1-notes"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.cyclic_years/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#cyclic_years/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.day_periods/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#day_periods/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.days/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#days/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.eras/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#eras/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.month_patterns/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#month_patterns/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.months/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#months/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.quarters/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#quarters/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"Returns a keyword list of options than can be applied to\n`NimbleStrftime.format/3`.\n\nThe hex package [nimble_strftime](https://hex.pm/packages/nimble_strftime)\nprovides a `format/3` function to format dates, times and datetimes.\nIt takes a set of options that can return day, month and am/pm names.\n\n`strftime_options!` returns a keyword list than can be used as these\noptions to return localised names for days, months and am/pm.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"* `locale` is any locale returned by `MyApp.Cldr.known_locale_names/0`. The\n default is `MyApp.Cldr.get_locale/0`\n\n* `options` is a set of keyword options. The default is `[]`","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"* `:calendar` is the name of any known CLDR calendar. The default\n is `:gregorian`.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2-options"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"iex: MyApp.Cldr.Calendar.strftime_options!\n [\n am_pm_names: #Function ,\n month_names: #Function ,\n abbreviated_month_names: #Function ,\n day_of_week_names: #Function ,\n abbreviated_day_of_week_names: #Function \n ]","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2-example"},{"type":"function","title":"Typical usage - Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"iex: NimbleStrftime.format(Date.today(), MyApp.Cldr.Calendar.strftime_options!())","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2-typical-usage"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Currency","doc":"","ref":"Bonfire.Common.Localise.Cldr.Currency.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale/3","doc":"Returns a map of the metadata for all currencies for\na given locale.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale/3-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale/3","doc":"* `{:ok, currency_map}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale/3-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale/3-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale!/3","doc":"Returns a map of the metadata for all currencies for\na given locale and raises on error.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale!/3-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale!/3","doc":"* `{:ok, currency_map}` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale!/3-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale!/3-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","doc":"Returns the currency metadata for the requested currency code.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","doc":"* `currency_or_currency_code` is a `binary` or `atom` representation\n of an ISO 4217 currency code, or a `%Cldr.Currency{}` struct.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","doc":"* A `{:ok, currency}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","doc":"Returns the currency metadata for the requested currency code.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","doc":"* `currency_or_currency_code` is a `binary` or `atom` representation\n of an ISO 4217 currency code, or a `%Cldr.Currency{}` struct.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","doc":"* A `t:Cldr.Current.t/0` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_from_locale/1","doc":"Returns the effective currency for a given locale","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_from_locale/1","doc":"* `locale` is a `Cldr.LanguageTag` struct returned by\n `Cldr.Locale.new!/2`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_from_locale/1","doc":"* A ISO 4217 currency code as an upcased atom","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.currency_from_locale/1","doc":"iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale(\"en\")\n iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale locale\n :USD\n\n iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale(\"en-AU\")\n iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale locale\n :AUD\n\n iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale(\"en-GB\")\n :GBP","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_history_for_locale/1","doc":"Returns a list of historic and the current\ncurrency for a given locale.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_history_for_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_history_for_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_history_for_locale/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currency_history_for_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_history_for_locale/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_strings/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_strings/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings/3-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_strings/3","doc":"* `{:ok, currency_string_map}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings/3-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currency_strings/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings/3-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_strings!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_strings!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings!/3-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_strings!/3","doc":"* `{:ok, currency_string_map}` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings!/3-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currency_strings!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings!/3-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.current_currency_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#current_currency_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.current_currency_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#current_currency_from_locale/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.current_currency_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#current_currency_from_locale/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies/0","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":"Bonfire.Common.Localise.Cldr.Currency.html#current_territory_currencies/0"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies/0","doc":"* A map of `{territory_code => Cldr.Currency.t}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#current_territory_currencies/0-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies/0","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies()","ref":"Bonfire.Common.Localise.Cldr.Currency.html#current_territory_currencies/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currencies/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currencies/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currency?/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency?/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currency_code/1","doc":"Returns a 2-tuple indicating if the supplied currency code is known.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.known_currency_code/1","doc":"* `currency_code` is a `binary` or `atom` representing an ISO4217\n currency code","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.known_currency_code/1","doc":"* `{:ok, currency_code}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.known_currency_code/1","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code(\"AUD\")\n {:ok, :AUD}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code(\"GGG\")\n {:error, {Cldr.UnknownCurrencyError, \"The currency \\\"GGG\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currency_code?/1","doc":"Returns a boolean indicating if the supplied currency code is known.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.known_currency_code?/1","doc":"* `currency_code` is a `binary` or `atom` representing an ISO4217\n currency code","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code?/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.known_currency_code?/1","doc":"* `true` or `false`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code?/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.known_currency_code?/1","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(\"AUD\")\n true\n\n iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(\"GGG\")\n false\n\n iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(:XCV)\n false","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currency_codes/0","doc":"Returns a list of all known currency codes.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_codes/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.known_currency_codes/0","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_codes()","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_codes/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.new/2","doc":"Returns a `Currency` struct created from the arguments.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#new/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.new/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#new/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Currency.new/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#new/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.new/2","doc":"* `{:ok, Cldr.Currency.t}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#new/2-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.new/2","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Currency.new(:XAE, name: \"XAE\", digits: 0)\n {:error, {Cldr.CurrencyAlreadyDefined, \"Currency :XAE is already defined.\"}}","ref":"Bonfire.Common.Localise.Cldr.Currency.html#new/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.pluralize/3","doc":"Returns the appropriate currency display name for the `currency`, based\non the plural rules in effect for the `locale`.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.pluralize/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Currency.pluralize/3","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 `Bonfire.Common.Localise.Cldr.get_locale/0`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.pluralize/3","doc":"* `{:ok, plural_string}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.pluralize/3","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD)\n {:ok, \"US dollar\"}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(3, :USD)\n {:ok, \"US dollars\"}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: \"zh\")\n {:ok, \"美元\"}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: \"fr\")\n {:ok, \"dollars des États-Unis\"}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD, locale: \"fr\")\n {:ok, \"dollar des États-Unis\"}","ref":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.strings_for_currency/2","doc":"Returns the strings associated with a currency\nin a given locale.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#strings_for_currency/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.strings_for_currency/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#strings_for_currency/2-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.strings_for_currency/2","doc":"* A list of strings or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#strings_for_currency/2-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.strings_for_currency/2","doc":"iex> MyApp.Cldr.Currency.strings_for_currency(:AUD, \"en\")\n [\"a$\", \"australian dollars\", \"aud\", \"australian dollar\"]","ref":"Bonfire.Common.Localise.Cldr.Currency.html#strings_for_currency/2-example"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Date","doc":"","ref":"Bonfire.Common.Localise.Cldr.Date.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"Formats a date according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html)","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"* `date` is a `%Date{}` struct or any map that contains the keys\n `year`, `month`, `day` and `calendar`\n\n* `options` is a keyword list of options for formatting. The valid options are:","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string.\n The default is `:medium`.\n\n * `locale:` any locale returned by `Cldr.known_locale_names/1`.\n The default is `Cldr.get_locale()`.\n\n * `number_system:` a number system into which the formatted date digits\n should be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"* `{:ok, formatted_string}` or\n\n* `{:error, reason}`","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :medium, locale: \"en\"\n {:ok, \"Jul 10, 2017\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], locale: \"en\"\n {:ok, \"Jul 10, 2017\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :full, locale: \"en\"\n {:ok, \"Monday, July 10, 2017\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :short, locale: \"en\"\n {:ok, \"7/10/17\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :short, locale: \"fr\"\n {:ok, \"10/07/2017\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :long, locale: \"af\"\n {:ok, \"10 Julie 2017\"}","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"Formats a date according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html).","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"* `date` is a `%Date{}` struct or any map that contains the keys\n `year`, `month`, `day` and `calendar`.\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string.\n The default is `:medium`.\n\n * `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`.\n\n * `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"* `formatted_date` or\n\n* raises an exception.","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :medium, locale: \"en\"\n \"Jul 10, 2017\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], locale: \"en\"\n \"Jul 10, 2017\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :full,locale: \"en\"\n \"Monday, July 10, 2017\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :short, locale: \"en\"\n \"7/10/17\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :short, locale: \"fr\"\n \"10/07/2017\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :long, locale: \"af\"\n \"10 Julie 2017\"","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Date.Interval","doc":"Interval formats allow for software to format intervals like \"Jan 10-12, 2008\" as a\nshorter and more natural format than \"Jan 10, 2008 - Jan 12, 2008\". They are designed\nto take a start and end date, time or datetime plus a formatting pattern\nand use that information to produce a localized format.\n\nSee `Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3` and `Bonfire.Common.Localise.Cldr.Interval.to_string/3`","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.Interval.do_to_string!/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#do_to_string!/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"Returns a interval formed from two dates as\na localised string.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"* `from` is any map that conforms to the\n `Calendar.date` type.\n\n* `to` is any map that conforms to the\n `Calendar.date` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone date.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The\n alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"* For more information on interval format string\n see the `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-12-31]\n {:ok, \"Jan 1 – Dec 31, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12]\n {:ok, \"Jan 1 – 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Sun, Jan 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-12-01],\n ...> format: :long, style: :year_and_month\n {:ok, \"January – December 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :short\n {:ok, \"1/1/2020 – 1/12/2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long, locale: \"fr\"\n {:ok, \"mer. 1 – dim. 12 janv. 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long, locale: \"th\", number_system: :thai\n {:ok, \"พ. ๑ ม.ค. – อา. ๑๒ ม.ค. ๒๐๒๐\"}","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"Returns a interval formed from two dates as\na localised string.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"* `from` is any map that conforms to the\n `Calendar.date` type.\n\n* `to` is any map that conforms to the\n `Calendar.date` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone date.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The\n alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"* `string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"* For more information on interval format string\n see the `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31])\n \"Jan 1 – Dec 31, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12])\n \"Jan 1 – 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),\n ...> format: :long\n \"Wed, Jan 1 – Sun, Jan 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-01]),\n ...> format: :long, style: :year_and_month\n \"January – December 2020\"\n\n iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! ~I\"2020-01/12\"\n \"Jan 1 – Dec 31, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),\n ...> format: :short\n \"1/1/2020 – 1/12/2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),\n ...> format: :long, locale: \"fr\"\n \"mer. 1 – dim. 12 janv. 2020\"","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"Formats a DateTime according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html)","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"* `datetime` is a `%DateTime{}` `or %NaiveDateTime{}`struct or any map that contains the keys\n `:year`, `:month`, `:day`, `:calendar`. `:hour`, `:minute` and `:second` with optional\n `:microsecond`.\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string or\n any of the keys returned by `Cldr.DateTime.available_format_names`.\n The default is `:medium`\n\n * `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n * `number_system:` a number system into which the formatted date digits should\n be transliterated\n\n * `era: :variant` will use a variant for the era is one is available in the locale.\n In the \"en\" for example, the locale `era: :variant` will return \"BCE\" instead of \"BC\".\n\n * `period: :variant` will use a variant for the time period and flexible time period if\n one is available in the locale. For example, in the \"en\" locale `period: :variant` will\n return \"pm\" instead of \"PM\"","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"* `{:ok, formatted_datetime}` or\n\n* `{:error, reason}`","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], \"Etc/UTC\")\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime\n {:ok, \"Jan 1, 2000, 11:59:59 PM\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, locale: \"en\"\n {:ok, \"Jan 1, 2000, 11:59:59 PM\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :long, locale: \"en\"\n {:ok, \"January 1, 2000, 11:59:59 PM UTC\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :hms, locale: \"en\"\n {:ok, \"11:59:59 PM\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :full, locale: \"en\"\n {:ok, \"Saturday, January 1, 2000, 11:59:59 PM GMT\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :full, locale: \"fr\"\n {:ok, \"samedi 1 janvier 2000, 23:59:59 UTC\"}","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"Formats a DateTime according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html)\nreturning a formatted string or raising on error.","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"* `datetime` is a `%DateTime{}` `or %NaiveDateTime{}`struct or any map that contains the keys\n `:year`, `:month`, `:day`, `:calendar`. `:hour`, `:minute` and `:second` with optional\n `:microsecond`.\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string or\n any of the keys returned by `Cldr.DateTime.available_format_names` or a format string.\n The default is `:medium`.\n\n * `:date_format` is any one of `:short`, `:medium`, `:long`, `:full`. If defined,\n this option is used to format the date part of the date time. This option is\n only acceptable if the `:format` option is not specified, or is specified as either\n `:short`, `:medium`, `:long`, `:full`. If `:date_format` is not specified\n then the date format is defined by the `:format` option.\n\n * `:time_format` is any one of `:short`, `:medium`, `:long`, `:full`. If defined,\n this option is used to format the time part of the date time. This option is\n only acceptable if the `:format` option is not specified, or is specified as either\n `:short`, `:medium`, `:long`, `:full`. If `:time_format` is not specified\n then the time format is defined by the `:format` option.\n\n * `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`.\n\n * `number_system:` a number system into which the formatted date digits should\n be transliterated.\n\n * `era: :variant` will use a variant for the era is one is available in the locale.\n In the \"en\" for example, the locale `era: :variant` will return \"BCE\" instead of \"BC\".\n\n * `period: :variant` will use a variant for the time period and flexible time period if\n one is available in the locale. For example, in the \"en\" locale `period: :variant` will\n return \"pm\" instead of \"PM\".","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"* `formatted_datetime` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], \"Etc/UTC\")\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, locale: \"en\"\n \"Jan 1, 2000, 11:59:59 PM\"\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, format: :long, locale: \"en\"\n \"January 1, 2000, 11:59:59 PM UTC\"\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, format: :full, locale: \"en\"\n \"Saturday, January 1, 2000, 11:59:59 PM GMT\"\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, format: :full, locale: \"fr\"\n \"samedi 1 janvier 2000, 23:59:59 UTC\"","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime.Format","doc":"Manages the Date, TIme and DateTime formats\ndefined by CLDR.\n\nThe functions in `Cldr.DateTime.Format` are\nprimarily concerned with encapsulating the\ndata from CLDR in functions that are used\nduring the formatting process.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for/1","doc":"Returns a list of calendars defined for a given locale.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#calendars_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for/1","doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#calendars_for/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for(:en)\n {:ok, [:buddhist, :chinese, :coptic, :dangi, :ethiopic, :ethiopic_amete_alem,\n :generic, :gregorian, :hebrew, :indian, :islamic, :islamic_civil,\n :islamic_rgsa, :islamic_tbla, :islamic_umalqura, :japanese, :persian, :roc]}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#calendars_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats/2","doc":"Returns a map of the standard date formats for a given locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`.\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en)\n {:ok, %Cldr.Date.Formats{\n full: \"EEEE, MMMM d, y\",\n long: \"MMMM d, y\",\n medium: \"MMM d, y\",\n short: \"M/d/yy\"\n }}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en, :buddhist)\n {:ok, %Cldr.Date.Formats{\n full: \"EEEE, MMMM d, y G\",\n long: \"MMMM d, y G\",\n medium: \"MMM d, y G\",\n short: \"M/d/y GGGGG\"\n }}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats/2","doc":"Returns a map of the standard datetime \"at\" formats for a given\nlocale and calendar.\n\nAn \"at\" format is one where the datetime is formatted with the\ndate part separated from the time part by a localized version\nof \"at\".","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_at_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`.\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`,","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_at_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en)\n {:ok, %Cldr.DateTime.Formats{\n full: \"{1} 'at' {0}\",\n long: \"{1} 'at' {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\"}\n }\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en, :buddhist)\n {:ok, %Cldr.DateTime.Formats{\n full: \"{1} 'at' {0}\",\n long: \"{1} 'at' {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\"}\n }","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_at_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats/2","doc":"Returns a map of the available non-standard datetime formats for a\ngiven locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_available_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag.t()`\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\nThe default is `:gregorian`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_available_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats \"en\"\n {\n :ok,\n %{\n d: \"d\",\n h: \"h a\",\n hm: \"h:mm a\",\n hms: \"h:mm:ss a\",\n hmsv: \"h:mm:ss a v\",\n hmv: \"h:mm a v\",\n ms: \"mm:ss\",\n y: \"y\",\n yw: %{one: \"'week' w 'of' Y\", other: \"'week' w 'of' Y\"},\n Bh: \"h B\",\n Bhm: \"h:mm B\",\n Bhms: \"h:mm:ss B\",\n E: \"ccc\",\n EBhm: \"E h:mm B\",\n EBhms: \"E h:mm:ss B\",\n EHm: \"E HH:mm\",\n EHms: \"E HH:mm:ss\",\n Ed: \"d E\",\n Ehm: \"E h:mm a\",\n Ehms: \"E h:mm:ss a\",\n Gy: \"y G\",\n GyMMM: \"MMM y G\",\n GyMMMEd: \"E, MMM d, y G\",\n GyMMMd: \"MMM d, y G\",\n GyMd: \"M/d/y G\",\n H: \"HH\",\n Hm: \"HH:mm\",\n Hms: \"HH:mm:ss\",\n Hmsv: \"HH:mm:ss v\",\n Hmv: \"HH:mm v\",\n M: \"L\",\n MEd: \"E, M/d\",\n MMM: \"LLL\",\n MMMEd: \"E, MMM d\",\n MMMMW: %{one: \"'week' W 'of' MMMM\", other: \"'week' W 'of' MMMM\"},\n MMMMd: \"MMMM d\",\n MMMd: \"MMM d\",\n Md: \"M/d\",\n yM: \"M/y\",\n yMEd: \"E, M/d/y\",\n yMMM: \"MMM y\",\n yMMMEd: \"E, MMM d, y\",\n yMMMM: \"MMMM y\",\n yMMMd: \"MMM d, y\",\n yMd: \"M/d/y\",\n yQQQ: \"QQQ y\",\n yQQQQ: \"QQQQ y\"\n }\n }","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_available_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats/2","doc":"Returns a map of the standard datetime formats for a given locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`.\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en)\n {:ok, %Cldr.DateTime.Formats{\n full: \"{1}, {0}\",\n long: \"{1}, {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\"\n }}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en, :buddhist)\n {:ok, %Cldr.DateTime.Formats{\n full: \"{1}, {0}\",\n long: \"{1}, {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\"\n }}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback/2","doc":"Returns the fallback format for a given\nlocale and calendar type","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_fallback/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag.t()`\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_fallback/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback :en, :gregorian\n [0, \" – \", 1]","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_fallback/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_formats/2","doc":"Returns a map of the interval formats for a\ngiven locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag.t/0`\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_formats/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for/2","doc":"Returns the time period for a given time of day.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#day_period_for/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for/2","doc":"* `time` is any `Time.t` or a map with at least `:hour`,\n `:minute` and `:second` keys\n\n* `language` is a binary representation of a valid and\n configured language in `Cldr`\n\nThe time period is a locale-specific key that is used\nto localise a time into a textual representation of \"am\",\n\"pm\", \"noon\", \"midnight\", \"evening\", \"morning\" and so on\nas defined in the CLDR day period rules.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#day_period_for/2-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for ~T[06:05:54.515228], :en\n :morning1\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for ~T[13:05:54.515228], :en\n :afternoon1\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for ~T[21:05:54.515228], :en\n :night1\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for ~T[21:05:54.515228], :fr\n :evening1","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#day_period_for/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format/1","doc":"Returns the GMT offset format list for a\nfor a timezone offset for a given locale.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_format/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format/1","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_format/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format :en\n {:ok, [\"GMT\", 0]}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_format/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format/1","doc":"Returns the GMT format string for a\nfor a timezone with an offset of zero for\na given locale.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_zero_format/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format/1","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_zero_format/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format :en\n {:ok, \"GMT\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format :fr\n {:ok, \"UTC\"}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_zero_format/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format/1","doc":"Returns the positive and negative hour format\nfor a timezone offset for a given locale.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#hour_format/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format/1","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#hour_format/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format \"en\"\n {:ok, {\"+HH:mm\", \"-HH:mm\"}}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#hour_format/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight?/1","doc":"Returns a boolean indicating is a given language defines the\nnotion of \"noon\" and \"midnight\"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#language_has_noon_and_midnight?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight?/1","doc":"* `language` is a binary representation of a valid and\n configured language in `Cldr`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#language_has_noon_and_midnight?/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight?/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight? :fr\n true\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight? :en\n true\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight? :af\n false","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#language_has_noon_and_midnight?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats/2","doc":"Returns a map of the standard time formats for a given locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#time_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`.\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#time_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en)\n {:ok, %Cldr.Time.Formats{\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\"\n }}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en, :buddhist)\n {:ok, %Cldr.Time.Formats{\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\"\n }}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#time_formats/2-examples"},{"type":"type","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.calendar/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#t:calendar/0"},{"type":"type","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.formats/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#t:formats/0"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime.Formatter","doc":"Implements the compilation and execution of\ndate, time and datetime formats.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.format/4","doc":"Returns the formatted and localised date, time or datetime\nfor a given `Date`, `Time`, `DateTime` or struct with the\nappropriate fields.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#format/4"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Formatter.format/4","doc":"* `date` is a `Date`, `Time`, `DateTime` or other struct that\ncontains the required date and time fields.\n\n* `format` is a valid format string, for example `yy/MM/dd hh:MM`\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `options` is a keyword list of options. The valid options are:","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#format/4-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Formatter.format/4","doc":"* `:number_system`. The resulting formatted and localised date/time\nstring will be transliterated into this number system. Number system\nis anything returned from `Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1`\n\n*NOTE* This function is called by `Cldr.Date.to_string/2`, `Cldr.Time.to_string/2`\nand `Cldr.DateTime.to_string/2` which is the preferred API.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#format/4-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Formatter.format/4","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Formatter.format ~U[2017-09-03 10:23:00.0Z], \"yy/MM/dd hh:MM\", \"en\"\n {:ok, \"17/09/03 10:09\"}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#format/4-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.gmt_tz_format/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#gmt_tz_format/3"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval","doc":"Interval formats allow for software to format intervals like \"Jan 10-12, 2008\" as a\nshorter and more natural format than \"Jan 10, 2008 - Jan 12, 2008\". They are designed\nto take a start and end date, time or datetime plus a formatting pattern\nand use that information to produce a localized format.\n\nSee `Cldr.Interval.to_string/3` and `Cldr.DateTime.Interval.to_string/3`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval.do_to_string/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#do_to_string/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval.do_to_string!/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#do_to_string!/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"Returns a string representing the formatted\ninterval formed by two dates.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"* `from` is any map that conforms to the\n `Calendar.datetime` type.\n\n* `to` is any map that conforms to the\n `Calendar.datetime` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone datetime.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see the `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string ~U[2020-01-01 00:00:00.0Z],\n ...> ~U[2020-12-31 10:00:00.0Z]\n {:ok, \"Jan 1, 2020, 12:00:00 AM – Dec 31, 2020, 10:00:00 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string ~U[2020-01-01 00:00:00.0Z], nil\n {:ok, \"Jan 1, 2020, 12:00:00 AM –\"}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"Returns a string representing the formatted\ninterval formed by two dates or raises an\nexception.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"* `from` is any map that conforms to the\n `Calendar.datetime` type.\n\n* `to` is any map that conforms to the\n `Calendar.datetime` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone datetime.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"* `string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"* For more information on interval format string\n see the `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date is formatted instead of an interval.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string! ~U[2020-01-01 00:00:00.0Z],\n ...> ~U[2020-12-31 10:00:00.0Z]\n \"Jan 1, 2020, 12:00:00 AM – Dec 31, 2020, 10:00:00 AM\"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime.Relative","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string/2","doc":"Returns a `{:ok, string}` representing a relative time (ago, in) for a given\nnumber, Date or Datetime. Returns `{:error, reason}` when errors are detected.\n\n* `relative` is a number or Date/Datetime representing the time distance from `now` or from\n options[:relative_to]\n\n* `options` is a `Keyword` list of options which are:","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string/2"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string/2","doc":"* `:locale` is the locale in which the binary is formatted.\n The default is `Cldr.get_locale/0`\n\n* `:style` is the style of the binary. Style may be `:default`, `:narrow` or `:short`\n\n* `:unit` is the time unit for the formatting. The allowable units are `:second`, `:minute`,\n `:hour`, `:day`, `:week`, `:month`, `:year`, `:mon`, `:tue`, `:wed`, `:thu`, `:fri`, `:sat`,\n `:sun`, `:quarter`\n\n* `:relative_to` is the baseline Date or Datetime from which the difference from `relative` is\n calculated when `relative` is a Date or a DateTime. The default for a Date is `Date.utc_today`,\n for a DateTime it is `DateTime.utc_now`\n\n#","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string/2-options"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string/2","doc":"When `options[:unit]` is not specified, `MyApp.Cldr.DateTime.Relative.to_string/2`\nattempts to identify the appropriate unit based upon the magnitude of `relative`.\nFor example, given a parameter of less than `60`, then `to_string/2` will\nassume `:seconds` as the unit. See `unit_from_relative_time/1`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(-1)\n {:ok, \"1 second ago\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1)\n {:ok, \"in 1 second\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day)\n {:ok, \"tomorrow\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, locale: \"fr\")\n {:ok, \"demain\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, style: :narrow)\n {:ok, \"tomorrow\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year)\n {:ok, \"in 1,234 years\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year, locale: \"fr\")\n {:ok, \"dans 1 234 ans\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(31)\n {:ok, \"in 31 seconds\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], relative_to: ~D[2017-04-26])\n {:ok, \"in 3 days\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :short, locale: \"fr\")\n {:ok, \"dans 5 min\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :narrow, locale: \"fr\")\n {:ok, \"+5 min\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string 2, unit: :wed, style: :short, locale: \"en\"\n {:ok, \"in 2 Wed.\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string 1, unit: :wed, style: :short\n {:ok, \"next Wed.\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :wed, style: :short\n {:ok, \"last Wed.\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :wed\n {:ok, \"last Wednesday\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :quarter\n {:ok, \"last quarter\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :mon, locale: \"fr\"\n {:ok, \"lundi dernier\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], unit: :ziggeraut)\n {:error, {Cldr.UnknownTimeUnit,\n \"Unknown time unit :ziggeraut. Valid time units are [:day, :fri, :hour, :minute, :mon, :month, :quarter, :sat, :second, :sun, :thu, :tue, :wed, :week, :year]\"}}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string!/2","doc":"Returns a `{:ok, string}` representing a relative time (ago, in) for a given\nnumber, Date or Datetime or raises an exception on error.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string!/2","doc":"* `relative` is a number or Date/Datetime representing the time distance from `now` or from\n options[:relative_to].\n\n* `options` is a `Keyword` list of options.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string!/2","doc":"* `:locale` is the locale in which the binary is formatted.\n The default is `Cldr.get_locale/0`\n\n* `:style` is the format of the binary. Style may be `:default`, `:narrow` or `:short`.\n The default is `:default`\n\n* `:unit` is the time unit for the formatting. The allowable units are `:second`, `:minute`,\n `:hour`, `:day`, `:week`, `:month`, `:year`, `:mon`, `:tue`, `:wed`, `:thu`, `:fri`, `:sat`,\n `:sun`, `:quarter`\n\n* `:relative_to` is the baseline Date or Datetime from which the difference from `relative` is\n calculated when `relative` is a Date or a DateTime. The default for a Date is `Date.utc_today`,\n for a DateTime it is `DateTime.utc_now`\n\nSee `to_string/2`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string!/2-options"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Interval","doc":"Interval formats allow for software to format intervals like \"Jan 10-12, 2008\" as a\nshorter and more natural format than \"Jan 10, 2008 - Jan 12, 2008\". They are designed\nto take a start and end date, time or datetime plus a formatting pattern\nand use that information to produce a localized format.\n\nThe interval functions in this library will determine the calendar\nfield with the greatest difference between the two datetimes before using the\nformat pattern.\n\nFor example, the greatest difference in \"Jan 10-12, 2008\" is the day field, while\nthe greatest difference in \"Jan 10 - Feb 12, 2008\" is the month field. This is used to\npick the exact pattern to be used.\n\nSee `Cldr.Interval` for further detail.","ref":"Bonfire.Common.Localise.Cldr.Interval.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"Returns a `Date.Range` or `CalendarInterval` as\na localised string.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"* `range` is either a `Date.Range.t` returned from `Date.range/2`\n or a `CalendarInterval.t`\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date | :time | nil]`.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The valid\n styles depends on whether formatting is for a date, time or datetime.\n Since the functions in this module will make a determination as\n to which formatter to be used based upon the data passed to them\n it is recommended the style option be omitted. If a style is important\n then call `to_string/3` directly on `Cldr.Date.Interval`, `Cldr.Time.Interval`\n or `Cldr.DateTime.Interval`.\n\n * For a date the alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n * For a time the alternatives are `:time`, `:zone` and\n `:flex`. The default is `:time`\n\n * For a datetime there are no style options, the default\n for each of the date and time part is used\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"* `to_string/2` will decide which formatter to call based upon\n the arguments provided to it.\n\n * A `Date.Range.t` will call `Cldr.Date.Interval.to_string/3`\n\n * A `CalendarInterval` will call `Cldr.Date.Interval.to_string/3`\n if its `:precision` is `:year`, `:month` or `:day`. Othersie\n it will call `Cldr.Time.Interval.to_string/3`\n\n * If `from` and `to` both conform to the `Calendar.datetime()`\n type then `Cldr.DateTime.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.date()`\n type then `Cldr.Date.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.time()`\n type then `Cldr.Time.Interval.to_string/3` is called\n\n* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date, time or datetime is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~I\"2020-01-01/12\",\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Sun, Jan 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string Date.range(~D[2020-01-01], ~D[2020-12-31]),\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Thu, Dec 31, 2020\"}","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"Returns a string representing the formatted\ninterval formed by two dates.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"* `from` is any map that conforms to the\n any one of the `Calendar` types.\n\n* `to` is any map that conforms to the\n any one of the `Calendar` types. `to` must\n occur on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date | :time | nil]`.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The valid\n styles depends on whether formatting is for a date, time or datetime.\n Since the functions in this module will make a determination as\n to which formatter to be used based upon the data passed to them\n it is recommended the style option be omitted. If styling is important\n then call `to_string/3` directly on `Cldr.Date.Interval`, `Cldr.Time.Interval`\n or `Cldr.DateTime.Interval`.\n\n * For a date the alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n * For a time the alternatives are `:time`, `:zone` and\n `:flex`. The default is `:time`\n\n * For a datetime there are no style options, the default\n for each of the date and time part is used\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"* `to_string/2` will decide which formatter to call based upon\n the arguments provided to it.\n\n * A `Date.Range.t` will call `Cldr.Date.Interval.to_string/3`\n\n * A `CalendarInterval` will call `Cldr.Date.Interval.to_string/3`\n if its `:precision` is `:year`, `:month` or `:day`. Othersie\n it will call `Cldr.Time.Interval.to_string/3`\n\n * If `from` and `to` both conform to the `Calendar.datetime()`\n type then `Cldr.DateTime.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.date()`\n type then `Cldr.Date.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.time()`\n type then `Cldr.Time.Interval.to_string/3` is called\n\n* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date, time or datetime is formatted instead of an interval.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-12-31]\n {:ok, \"Jan 1 – Dec 31, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-01-12]\n {:ok, \"Jan 1 – 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Sun, Jan 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-12-01],\n ...> format: :long, style: :year_and_month\n {:ok, \"January – December 2020\"}\n\n iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~I\"2020-01-01/12\",\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Sun, Jan 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-12-01 10:05:00.0Z],\n ...> format: :long\n {:ok, \"January 1, 2020, 12:00:00 AM UTC – December 1, 2020, 10:05:00 AM UTC\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:05:00.0Z],\n ...> format: :long\n {:ok, \"January 1, 2020, 12:00:00 AM UTC – 10:05:00 AM UTC\"}","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"Returns a `Date.Range` or `CalendarInterval` as\na localised string or raises an exception.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"* `range` is either a `Date.Range.t` returned from `Date.range/2`\n or a `CalendarInterval.t`\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date | :time | nil]`.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The valid\n styles depends on whether formatting is for a date, time or datetime.\n Since the functions in this module will make a determination as\n to which formatter to be used based upon the data passed to them\n it is recommended the style option be omitted. If a style is important\n then call `to_string/3` directly on `Cldr.Date.Interval`, `Cldr.Time.Interval`\n or `Cldr.DateTime.Interval`.\n\n * For a date the alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n * For a time the alternatives are `:time`, `:zone` and\n `:flex`. The default is `:time`.\n\n * For a datetime there are no style options, the default\n for each of the date and time part is used.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"* `string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"* `to_string/3` will decide which formatter to call based upon\n the arguments provided to it.\n\n * A `Date.Range.t` will call `Cldr.Date.Interval.to_string/3`\n\n * A `CalendarInterval` will call `Cldr.Date.Interval.to_string/3`\n if its `:precision` is `:year`, `:month` or `:day`. Otherwise\n it will call `Cldr.Time.Interval.to_string/3`\n\n * If `from` and `to` both conform to the `Calendar.datetime()`\n type then `Cldr.DateTime.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.date()`\n type then `Cldr.Date.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.time()`\n type then `Cldr.Time.Interval.to_string/3` is called\n\n* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date, time or datetime is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~I\"2020-01-01/12\",\n ...> format: :long\n \"Wed, Jan 1 – Sun, Jan 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31]),\n ...> format: :long\n \"Wed, Jan 1 – Thu, Dec 31, 2020\"","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"Returns a string representing the formatted\ninterval formed by two date or raises an\nexception.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"* `from` is any map that conforms to the\n any one of the `Calendar` types.\n\n* `to` is any map that conforms to the\n any one of the `Calendar` types. `to` must\n occur on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date | :time | nil]`.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The valid\n styles depends on whether formatting is for a date, time or datetime.\n Since the functions in this module will make a determination as\n to which formatter to be used based upon the data passed to them\n it is recommended the style option be omitted. If styling is important\n then call `to_string/3` directly on `Cldr.Date.Interval`, `Cldr.Time.Interval`\n or `Cldr.DateTime.Interval`.\n\n * For a date the alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n * For a time the alternatives are `:time`, `:zone` and\n `:flex`. The default is `:time`.\n\n * For a datetime there are no style options, the default\n for each of the date and time part is used.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"* `string` or\n\n* raises and exception","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"* `to_string/3` will decide which formatter to call based upon\n the arguments provided to it.\n\n * A `Date.Range.t` will call `Cldr.Date.Interval.to_string/3`\n\n * A `CalendarInterval` will call `Cldr.Date.Interval.to_string/3`\n if its `:precision` is `:year`, `:month` or `:day`. Othersie\n it will call `Cldr.Time.Interval.to_string/3`\n\n * If `from` and `to` both conform to the `Calendar.datetime()`\n type then `Cldr.DateTime.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.date()`\n type then `Cldr.Date.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.time()`\n type then `Cldr.Time.Interval.to_string/3` is called\n\n* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date, time or datetime is formatted instead of an interval.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~D[2020-01-01], ~D[2020-12-31]\n \"Jan 1 – Dec 31, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~D[2020-01-01], ~D[2020-01-12]\n \"Jan 1 – 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long\n \"Wed, Jan 1 – Sun, Jan 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~D[2020-01-01], ~D[2020-12-01],\n ...> format: :long, style: :year_and_month\n \"January – December 2020\"\n\n iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~I\"2020-01-01/12\",\n ...> format: :long\n \"Wed, Jan 1 – Sun, Jan 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~U[2020-01-01 00:00:00.0Z], ~U[2020-12-01 10:05:00.0Z],\n ...> format: :long\n \"January 1, 2020, 12:00:00 AM UTC – December 1, 2020, 10:05:00 AM UTC\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:05:00.0Z],\n ...> format: :long\n \"January 1, 2020, 12:00:00 AM UTC – 10:05:00 AM UTC\"","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Language","doc":"","ref":"Bonfire.Common.Localise.Cldr.Language.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Language.available_languages/1","doc":"Return all the languages' iso-codes available for a given locale.\nDefaults to the current locale.","ref":"Bonfire.Common.Localise.Cldr.Language.html#available_languages/1"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Language.available_languages/1","doc":"> Bonfire.Common.Localise.Cldr.Language.Language.available_languages(:en)\n [\"aa\", \"ab\", \"ace\", \"ach\", \"ada\", \"ady\", \"ae\", \"aeb\", \"af\", \"afh\", \"agq\", \"ain\",\n \"ak\", \"akk\", \"akz\", \"ale\", \"aln\", \"alt\", \"am\", \"an\", \"ang\", \"anp\", \"ar\",\n \"ar-001\", \"arc\", \"arn\", \"aro\", \"arp\", \"arq\", \"ars\", \"arw\", \"ary\", \"arz\", \"as\",\n \"asa\", \"ase\", \"ast\", \"av\", \"avk\", \"awa\", \"ay\", \"az\", \"ba\", \"bal\", \"ban\", \"bar\",\n \"bas\", \"bax\", \"bbc\", \"bbj\", ...]","ref":"Bonfire.Common.Localise.Cldr.Language.html#available_languages/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Language.known_languages/1","doc":"Return a map of iso-code keyed maps of language names in any available\nformats for the given locale.\nDefaults to the current locale.","ref":"Bonfire.Common.Localise.Cldr.Language.html#known_languages/1"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Language.known_languages/1","doc":"> Bonfire.Common.Localise.Cldr.Language.Language.known_languages(:en)\n %{\"bez\" => %{standard: \"Bena\"}, \"lo\" => %{standard: \"Lao\"},\n \"kha\" => %{standard: \"Khasi\"}, \"eo\" => %{standard: \"Esperanto\"},\n \"rm\" => %{standard: \"Romansh\"}, \"ja\" => %{standard: \"Japanese\"},\n \"sw-CD\" => %{standard: \"Congo Swahili\"},\n \"pdc\" => %{standard: \"Pennsylvania German\"}, \"om\" => %{standard: \"Oromo\"},\n \"jut\" => %{standard: \"Jutish\"}, \"lij\" => %{standard: \"Ligurian\"},\n \"kut\" => %{standard: \"Kutenai\"}, \"vep\" => %{standard: \"Veps\"},\n \"yao\" => %{standard: \"Yao\"}, \"gez\" => %{standard: \"Geez\"},\n \"cr\" => %{standard: \"Cree\"}, \"ne\" => %{standard: \"Nepali\"},\n \"zbl\" => %{standard: \"Blissymbols\"}, \"ae\" => %{standard: \"Avestan\"},\n \"rof\" => %{standard: \"Rombo\"}, \"tkl\" => %{standard: \"Tokelau\"},\n \"rgn\" => %{standard: \"Romagnol\"}, \"el\" => %{standard: \"Greek\"},\n \"myv\" => %{standard: \"Erzya\"}, \"smj\" => %{standard: \"Lule Sami\"},\n \"fo\" => %{standard: \"Faroese\"}, \"ii\" => %{standard: \"Sichuan Yi\"},\n \"bum\" => %{standard: \"Bulu\"}, \"za\" => %{standard: \"Zhuang\"},\n \"raj\" => %{standard: \"Rajasthani\"}, \"mrj\" => %{standard: \"Western Mari\"},\n \"stq\" => %{standard: \"Saterland Frisian\"}, \"hu\" => %{standard: \"Hungarian\"},\n \"mga\" => %{standard: \"Middle Irish\"}, \"bej\" => %{standard: \"Beja\"},\n \"yue\" => %{standard: \"Cantonese\"}, \"xog\" => %{standard: \"Soga\"},\n \"ttt\" => %{standard: \"Muslim Tat\"}, \"uga\" => %{standard: \"Ugaritic\"},\n \"rup\" => %{standard: \"Aromanian\"},\n \"crs\" => %{standard: \"Seselwa Creole French\"}, \"oc\" => %{standard: \"Occitan\"},\n \"chp\" => %{standard: \"Chipewyan\"}, \"zen\" => %{standard: \"Zenaga\"},\n \"kmb\" => %{standard: \"Kimbundu\"}, \"nr\" => %{standard: \"South Ndebele\"},\n \"tiv\" => %{standard: \"Tiv\"}, \"aln\" => %{standard: \"Gheg Albanian\"},\n \"sh\" => %{standard: \"Serbo-Croatian\"}, \"fil\" => %{...}, ...}","ref":"Bonfire.Common.Localise.Cldr.Language.html#known_languages/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Language.to_string/2","doc":"Try to translate the given language iso code or language tag.","ref":"Bonfire.Common.Localise.Cldr.Language.html#to_string/2"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Language.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Language.Language.to_string(\"eo\")\n {:ok, \"Esperanto\"}","ref":"Bonfire.Common.Localise.Cldr.Language.html#to_string/2-example"},{"type":"type","title":"Bonfire.Common.Localise.Cldr.Language.styles/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Language.html#t:styles/0"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.List","doc":"Cldr backend module that formats lists.\n\nIf we have a list of days like `[\"Monday\", \"Tuesday\", \"Wednesday\"]`\nthen we can format that list for a given locale by:\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([\"Monday\", \"Tuesday\", \"Wednesday\"], locale: \"en\")\n {:ok, \"Monday, Tuesday, and Wednesday\"}","ref":"Bonfire.Common.Localise.Cldr.List.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.intersperse/2","doc":"Intersperces a list elements into a list format according to the list\npattern rules for a locale.\n\nThis function can be helpful when creating a list from `Phoenix`\nsafe strings which are of the format `{:safe, \"some string\"}`","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.List.intersperse/2","doc":"* `list` is any list of of terms that can be passed through `Kernel.to_string/1`\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.List.intersperse/2","doc":"* `:locale` is any configured locale. See . The default\n is `Bonfire.Common.Localise.Cldr.known_locale_names/0`.\n\n* `:format` is one of those returned by\n `Cldr.List.known_list_formats/0`. The default is `format: :standard`","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.List.intersperse/2","doc":"iex> Bonfire.Common.Localise.Cldr.List.intersperse([\"a\", \"b\", \"c\"], locale: \"en\")\n {:ok, [\"a\", \", \", \"b\", \", and \", \"c\"]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([\"a\", \"b\", \"c\"], locale: \"en\", format: :unit_narrow)\n {:ok, [\"a\", \" \", \"b\", \" \", \"c\"]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([\"a\", \"b\", \"c\"], locale: \"fr\")\n {:ok, [\"a\", \", \", \"b\", \" et \", \"c\"]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2,3,4,5,6])\n {:ok, [1, \", \", 2, \", \", 3, \", \", 4, \", \", 5, \", and \", 6]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([\"a\"])\n {:ok, [\"a\"]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2])\n {:ok, [1, \" and \", 2]}","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.intersperse/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.intersperse!/2","doc":"Formats a list using `intersperse/2` but raises if there is\nan error.","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse!/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.List.intersperse!/2","doc":"iex> Bonfire.Common.Localise.Cldr.List.intersperse!([\"a\", \"b\", \"c\"], locale: \"en\")\n [\"a\", \", \", \"b\", \", and \", \"c\"]\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse!([\"a\", \"b\", \"c\"], locale: \"en\", format: :unit_narrow)\n [\"a\", \" \", \"b\", \" \", \"c\"]","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.list_formats_for/1","doc":"Returns the styles of list patterns available for a locale.\n\nReturns a list of `atom`s of of the list formats that are\navailable in CLDR for a locale.","ref":"Bonfire.Common.Localise.Cldr.List.html#list_formats_for/1"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.List.list_formats_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.List.list_formats_for(:en)\n [:or, :or_narrow, :or_short, :standard, :standard_narrow, :standard_short,\n :unit, :unit_narrow, :unit_short]","ref":"Bonfire.Common.Localise.Cldr.List.html#list_formats_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.list_patterns_for/1","doc":"Returns the list patterns for a locale.\n\nList patterns provide rules for combining multiple\nitems into a language format appropriate for a locale.","ref":"Bonfire.Common.Localise.Cldr.List.html#list_patterns_for/1"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.List.list_patterns_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.List.list_patterns_for(:en)\n %{\n or: %{\n 2 => [0, \" or \", 1],\n end: [0, \", or \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n or_narrow: %{\n 2 => [0, \" or \", 1],\n end: [0, \", or \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n or_short: %{\n 2 => [0, \" or \", 1],\n end: [0, \", or \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n standard: %{\n 2 => [0, \" and \", 1],\n end: [0, \", and \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n standard_narrow: %{\n 2 => [0, \", \", 1],\n end: [0, \", \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n standard_short: %{\n 2 => [0, \" & \", 1],\n end: [0, \", & \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n unit: %{\n 2 => [0, \", \", 1],\n end: [0, \", \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n unit_narrow: %{\n 2 => [0, \" \", 1],\n end: [0, \" \", 1],\n middle: [0, \" \", 1],\n start: [0, \" \", 1]\n },\n unit_short: %{\n 2 => [0, \", \", 1],\n end: [0, \", \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n }\n }","ref":"Bonfire.Common.Localise.Cldr.List.html#list_patterns_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.to_string/2","doc":"Formats a list into a string according to the list pattern rules for a locale.","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.List.to_string/2","doc":"* `list` is any list of of terms that can be passed through `Kernel.to_string/1`\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.List.to_string/2","doc":"* `:locale` is any configured locale. See . The default\n is `Bonfire.Common.Localise.Cldr.known_locale_names/0`.\n\n* `:format` is one of those returned by\n `Cldr.List.known_list_formats/0`. The default is `format: :standard`","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.List.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.List.to_string([\"a\", \"b\", \"c\"], locale: \"en\")\n {:ok, \"a, b, and c\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([\"a\", \"b\", \"c\"], locale: \"en\", format: :unit_narrow)\n {:ok, \"a b c\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([\"a\", \"b\", \"c\"], locale: \"fr\")\n {:ok, \"a, b et c\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2,3,4,5,6])\n {:ok, \"1, 2, 3, 4, 5, and 6\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([\"a\"])\n {:ok, \"a\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2])\n {:ok, \"1 and 2\"}","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.to_string!/2","doc":"Formats a list using `to_string/2` but raises if there is\nan error.","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string!/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.List.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.List.to_string!([\"a\", \"b\", \"c\"], locale: \"en\")\n \"a, b, and c\"\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string!([\"a\", \"b\", \"c\"], locale: \"en\", format: :unit_narrow)\n \"a b c\"","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Locale","doc":"Backend module that provides functions\nto define new locales and display human-readable\nlocale names for presentation purposes.","ref":"Bonfire.Common.Localise.Cldr.Locale.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locale_names/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names/1","doc":"* `locale_name` is any locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locale_names/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names/1","doc":"* `{:ok, list_of_locale_names}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locale_names/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names/1","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names(:nb)\n {:ok, [:nb, :no, :und]}","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locale_names/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.fallback_locales/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locales/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.fallback_locales/1","doc":"* `locale_name` is any locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locales/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.fallback_locales/1","doc":"* `{:ok, list_of_locales}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locales/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.fallback_locales/1","doc":"Bonfire.Common.Localise.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 Bonfire.Common.Localise.Cldr.Locale.fallback_locales(:nb))\n => {:ok,\n [#Cldr.LanguageTag , #Cldr.LanguageTag ,\n #Cldr.LanguageTag ]}","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locales/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.locale_for_territory/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#locale_for_territory/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.locale_for_territory/1","doc":"* `territory` is any ISO 3166 Alpha-2 territory\n code that can be validated by `Cldr.validate_territory/1`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_for_territory/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.locale_for_territory/1","doc":"* `{:ok, language_tag}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_for_territory/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.locale_for_territory/1","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.locale_for_territory(:AU)\n Elixir.Bonfire.Common.Localise.Cldr.validate_locale(:\"en-AU\")\n\n iex> Bonfire.Common.Localise.Cldr.Locale.locale_for_territory(:US)\n Elixir.Bonfire.Common.Localise.Cldr.validate_locale(:\"en-US\")\n\n iex> Bonfire.Common.Localise.Cldr.Locale.locale_for_territory(:ZZ)\n {:error, {Cldr.UnknownTerritoryError, \"The territory :ZZ is unknown\"}}","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_for_territory/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","doc":"Returns a \"best fit\" locale for a host name.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","doc":"* `host` is any valid host name\n\n* `options` is a keyword list of options. The default\n is `[]`.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","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":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","doc":"* `{:ok, langauge_tag}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","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":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host \"a.b.com.au\"\n Elixir.Bonfire.Common.Localise.Cldr.validate_locale(:\"en-AU\")\n\n iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host(\"a.b.com.tv\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"tv\\\"\"}}\n\n iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host(\"a.b.com\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"com\\\"\"}}","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.new/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Locale.html#new/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.new!/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Locale.html#new!/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale/1","doc":"Returns the script direction for a locale.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#script_direction_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#script_direction_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale/1","doc":"* The script direction which is either `:ltr` (for left-to-right\n scripts) or `:rtl` (for right-to-left scripts).","ref":"Bonfire.Common.Localise.Cldr.Locale.html#script_direction_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale \"en-US\"\n :ltr\n\n iex> Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale :ar\n :rtl","ref":"Bonfire.Common.Localise.Cldr.Locale.html#script_direction_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.territory_from_host/1","doc":"Returns the last segment of a host that might\nbe a territory.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_host/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.territory_from_host/1","doc":"* `host` is any valid host name","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_host/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.territory_from_host/1","doc":"* `{:ok, territory}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_host/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.territory_from_host/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_host/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.territory_from_locale/1","doc":"Returns the territory from a language tag or\nlocale name.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.territory_from_locale/1","doc":"* `locale` is any language tag returned by\n `Bonfire.Common.Localise.Cldr.Locale.new/1`\n or a locale name in the list returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.territory_from_locale/1","doc":"* A territory code as an atom","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.territory_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.territory_from_locale \"en-US\"\n :US\n\n iex> Bonfire.Common.Localise.Cldr.Locale.territory_from_locale \"en-US-u-rg-GBzzzz\"\n :GB","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale/1","doc":"Returns the time zone from a language tag or\nlocale name.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#timezone_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale/1","doc":"* `locale` is any language tag returned by\n `Bonfire.Common.Localise.Cldr.Locale.new/1`\n or a locale name in the list returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#timezone_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale/1","doc":"* A time zone ID as a string or\n\n* `:error` if no time zone can be determined","ref":"Bonfire.Common.Localise.Cldr.Locale.html#timezone_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale \"en-US-u-tz-ausyd\"\n \"Australia/Sydney\"","ref":"Bonfire.Common.Localise.Cldr.Locale.html#timezone_from_locale/1-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number","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":"Bonfire.Common.Localise.Cldr.Number.html"},{"type":"module","title":"Non-Scientific Notation Formatting - Bonfire.Common.Localise.Cldr.Number","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":"Bonfire.Common.Localise.Cldr.Number.html#module-non-scientific-notation-formatting"},{"type":"module","title":"Scientific Notation Formatting - Bonfire.Common.Localise.Cldr.Number","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":"Bonfire.Common.Localise.Cldr.Number.html#module-scientific-notation-formatting"},{"type":"module","title":"Significant Digits - Bonfire.Common.Localise.Cldr.Number","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":"Bonfire.Common.Localise.Cldr.Number.html#module-significant-digits"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.parse/2","doc":"Parse a string locale-aware manner and return\na number.","ref":"Bonfire.Common.Localise.Cldr.Number.html#parse/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.parse/2","doc":"* `string` is any `String.t`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.parse/2","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 `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag.t`. The default is\n `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.parse/2","doc":"* A number of the requested or default type or\n\n* `{:error, {exception, error}}` if no number could be determined","ref":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Number.parse/2","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":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.parse/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.parse(\"+1.000,34\", locale: \"de\")\n {:ok, 1000.34}\n\n iex> Bonfire.Common.Localise.Cldr.Number.parse(\"-1_000_000.34\")\n {:ok, -1000000.34}\n\n iex> Bonfire.Common.Localise.Cldr.Number.parse(\"1.000\", locale: \"de\", number: :integer)\n {:ok, 1000}\n\n iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","doc":"Resolve curencies from strings within\na list.","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","doc":"* `list` is any list in which currency\n names and symbols are expected\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","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 `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2-options"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.scan(\"100 US dollars\")\n ...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies\n [100, :USD]\n\n iex> Bonfire.Common.Localise.Cldr.Number.scan(\"100 eurosports\")\n ...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(fuzzy: 0.75)\n [100, :EUR]\n\n iex> Bonfire.Common.Localise.Cldr.Number.scan(\"100 dollars des États-Unis\")\n ...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(locale: \"fr\")\n [100, :USD]","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","doc":"Resolve a currency from a string","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","doc":"* `list` is any list in which currency\n names and symbols are expected\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","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 `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","doc":"* An ISO4217 currency code as an atom or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency(\"US dollars\")\n [:USD]\n\n iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency(\"100 eurosports\", fuzzy: 0.75)\n [:EUR]\n\n iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency(\"dollars des États-Unis\", locale: \"fr\")\n [:USD]\n\n iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.resolve_per/2","doc":"Resolve and tokenize percent or permille\nfrom the beginning and/or the end of a string","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.resolve_per/2","doc":"* `list` is any list in which percent\n and permille symbols are expected\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.resolve_per/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.resolve_per/2","doc":"* An `:percent` or `permille` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.resolve_per/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.resolve_per \"11%\"\n [\"11\", :percent]\n\n iex> Bonfire.Common.Localise.Cldr.Number.resolve_per \"% of linguists\"\n [:percent, \" of linguists\"]\n\n iex> Bonfire.Common.Localise.Cldr.Number.resolve_per \"% of linguists %\"\n [:percent, \" of linguists \", :percent]","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.resolve_pers/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_pers/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.resolve_pers/2","doc":"* `list` is any list in which percent and\n permille symbols are expected\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_pers/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.resolve_pers/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_pers/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.resolve_pers/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.scan(\"100%\")\n ...> |> Bonfire.Common.Localise.Cldr.Number.resolve_pers()\n [100, :percent]","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_pers/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"Scans a string locale-aware manner and returns\na list of strings and numbers.","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"* `string` is any `String.t`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.scan/2","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 `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"* A list of strings and numbers","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"Number parsing is performed by `Cldr.Number.Parser.parse/2`\nand any options provided are passed to that function.","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.scan(\"£1_000_000.34\")\n [\"£\", 1000000.34]\n\n iex> Bonfire.Common.Localise.Cldr.Number.scan(\"I want £1_000_000 dollars\")\n [\"I want £\", 1000000, \" dollars\"]\n\n iex> Bonfire.Common.Localise.Cldr.Number.scan(\"The prize is 23\")\n [\"The prize is \", 23]\n\n iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.scan(\"The loss is -1.000 euros\", locale: \"de\", number: :integer)\n [\"The loss is \", -1000, \" euros\"]","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_approx_string/2","doc":"Formats a number and applies the `:approximately` format for\na locale and number system.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_approx_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_approx_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_approx_string/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.to_approx_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_approx_string 1234\n {:ok, \"~1,234\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_approx_string/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_at_least_string/2","doc":"Formats a number and applies the `:at_least` format for\na locale and number system.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_least_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_at_least_string/2","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 `Bonfire.Common.Localise.Cldr.Number.to_string/2` for a description of the available\n options.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_least_string/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.to_at_least_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_at_least_string 1234\n {:ok, \"1,234+\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_least_string/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_at_most_string/2","doc":"Formats a number and applies the `:at_most` format for\na locale and number system.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_most_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_at_most_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_at_most_string/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.to_at_most_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_at_most_string 1234\n {:ok, \"≤1,234\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_most_string/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_range_string/2","doc":"Formats the first and last numbers of a range and applies\nthe `:range` format for a locale and number system.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_range_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_range_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_range_string/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.to_range_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_range_string 1234..5678\n {:ok, \"1,234–5,678\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_range_string/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_string/2","doc":"Returns a number formatted into a string according to a format pattern and options.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.to_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-options"},{"type":"function","title":"Locale extensions affecting formatting - Bonfire.Common.Localise.Cldr.Number.to_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-locale-extensions-affecting-formatting"},{"type":"function","title":"Wrapping format elements - Bonfire.Common.Localise.Cldr.Number.to_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-wrapping-format-elements"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.to_string/2","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345\n {:ok, \"12,345\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, locale: \"fr\"\n {:ok, \"12 345\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1345.32, currency: :EUR, locale: \"es\", minimum_grouping_digits: 1\n {:ok, \"1.345,32 €\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1345.32, currency: :EUR, locale: \"es\"\n {:ok, \"1345,32 €\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, locale: \"fr\", currency: \"USD\"\n {:ok, \"12 345,00 $US\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: \"#E0\"\n {:ok, \"1.2345E4\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\"\n {:ok, \"THB 12,345.00\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string -12345, format: :accounting, currency: \"THB\"\n {:ok, \"(THB 12,345.00)\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\",\n ...> locale: \"th\"\n {:ok, \"฿12,345.00\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\",\n ...> locale: \"th\", number_system: :native\n {:ok, \"฿๑๒,๓๔๕.๐๐\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :long\n {:ok, \"1 thousand\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :long, currency: \"USD\"\n {:ok, \"1,244 US dollars\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :short\n {:ok, \"1K\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :short, currency: \"EUR\"\n {:ok, \"€1K\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1234, format: :spellout\n {:ok, \"one thousand two hundred thirty-four\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1234, format: :spellout_verbose\n {:ok, \"one thousand two hundred and thirty-four\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1989, format: :spellout_year\n {:ok, \"nineteen eighty-nine\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 123, format: :ordinal\n {:ok, \"123rd\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 123, format: :roman\n {:ok, \"CXXIII\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 123, locale: \"th-u-nu-thai\"\n {:ok, \"๑๒๓\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-examples"},{"type":"function","title":"Errors - Bonfire.Common.Localise.Cldr.Number.to_string/2","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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.to_string(1234, locale: \"he\", number_system: \"hebr\", format: :percent)\n {:error, {Cldr.UnknownFormatError,\n \"The locale :he with number system :hebr does not define a format :percent\"}}\n```","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-errors"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_string!/2","doc":"Same as the execution of `to_string/2` but raises an exception if an error would be\nreturned.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_string!/2","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 `Bonfire.Common.Localise.Cldr.Number.to_string/2`","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string!/2-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.to_string!/2","doc":"* a formatted number as a string or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_string! 12345\n \"12,345\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string! 12345, locale: \"fr\"\n \"12 345\"","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.validate_number_system/2","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":"Bonfire.Common.Localise.Cldr.Number.html#validate_number_system/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.validate_number_system/2","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":"Bonfire.Common.Localise.Cldr.Number.html#validate_number_system/2-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.validate_number_system/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system \"en\", :latn\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system \"en\", :default\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system \"en\", :unknown\n {:error,\n {Cldr.UnknownNumberSystemError, \"The number system :unknown is unknown\"}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system \"zz\", :default\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.Number.html#validate_number_system/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal","doc":"Implements cardinal plural rules for numbers.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.available_locale_names/0","doc":"The locale names for which plural rules are defined.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#available_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.known_locale_names/0","doc":"The configured locales for which plural rules are defined.\n\nReturns the intersection of `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#known_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule/3","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":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rule/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule/3","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 `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rule/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule 0, \"fr\"\n :one\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule 0, \"en\"\n :other","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rule/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rules/0","doc":"Returns all the plural rules defined in CLDR.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rules/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rules_for/1","doc":"Return the plural rules for a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rules_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rules_for/1","doc":"* `locale` is any locale returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n\nThe rules are returned in AST form after parsing.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rules_for/1-arguments"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize/3","doc":"Pluralize a number using cardinal plural rules\nand a substitution map.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#pluralize/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize/3","doc":"* `number` is an integer, float or Decimal\n\n* `locale` is any locale returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Bonfire.Common.Localise.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 `Bonfire.Common.Localise.Cldr.Number.Cardinal.Cardinal.plural_rule/3`.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#pluralize/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1, \"en\", %{one: \"one\"}\n \"one\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, \"en\", %{one: \"one\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, \"en\", %{one: \"one\", two: \"two\", other: \"other\"}\n \"other\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 22, \"en\", %{one: \"one\", two: \"two\", other: \"other\"}\n \"other\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(1), \"en\", %{one: \"one\"}\n \"one\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), \"en\", %{one: \"one\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), \"en\", %{one: \"one\", two: \"two\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, \"ar\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"few\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, \"en\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#pluralize/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Format","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":"Bonfire.Common.Localise.Cldr.Number.Format.html"},{"type":"module","title":"Number Pattern Examples - Bonfire.Common.Localise.Cldr.Number.Format","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":"Bonfire.Common.Localise.Cldr.Number.Format.html#module-number-pattern-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for/1","doc":"Returns the decimal formats defined for a given locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for/1","doc":"* `{:ok, map}` where map is a map of decimal formats\n keyed by number system or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for/1-returns"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for!/1","doc":"Returns the decimal formats defined for a given locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for!/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for!/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for!/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for!/1","doc":"* `{:ok, map}` where map is a map of decimal formats\n keyed by number system or\n\n* raises an exception\n\nSee `Bonfire.Common.Localise.Cldr.Number.Format.Number.Format.all_formats_for/1` for further information.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for!/1-returns"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.currency_spacing/2","doc":"Returns the currency space for a given locale and\nnumber system.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#currency_spacing/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list/0","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":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list/0","doc":"#=> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list_for/1","doc":"Returns the list of decimal formats for a configured locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list_for/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list_for/1","doc":"iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for/1","doc":"Returns the default grouping for a locale as a map.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for/1","doc":"* `{:ok, grouping}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for(:en)\n {:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!/1","doc":"Returns the default grouping for a locale\nor raises on error.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for!/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for!/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!/1","doc":"* `grouping` as a map or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for!/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!(:en)\n %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for!/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.formats_for/2","doc":"Return the predfined formats for a given `locale` and `number_system`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#formats_for/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.formats_for/2","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system` is any valid number system or number system type returned\n by `Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#formats_for/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.Format.formats_for/2","doc":"Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Format.html#formats_for/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.formats_for!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#formats_for!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for/1","doc":"Returns the minimum grouping digits for a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for/1","doc":"* `{:ok, minumum_digits}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for(\"en\")\n {:ok, 1}","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!/1","doc":"Returns the minimum grouping digits for a locale\nor raises on error.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for!/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!/1","doc":"* `minumum_digits` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!(\"en\")\n 1","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.metadata!/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html#metadata!/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.to_string/3","doc":"Formats a number according to a decimal format string.","ref":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.to_string/3","doc":"* `number` is an integer, float or Decimal\n\n* `format` is a format string. See `Bonfire.Common.Localise.Cldr.Number` for further information.\n\n* `options` is a map of options. See `Bonfire.Common.Localise.Cldr.Number.to_string/2`\n for further information.","ref":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html#to_string/3-arguments"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal","doc":"Implements ordinal plural rules for numbers.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.available_locale_names/0","doc":"The locale names for which plural rules are defined.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#available_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.known_locale_names/0","doc":"The configured locales for which plural rules are defined.\n\nReturns the intersection of `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#known_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule/3","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":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rule/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule/3","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 `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rule/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule 0, \"fr\"\n :other\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule 1, \"en\"\n :one","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rule/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rules/0","doc":"Returns all the plural rules defined in CLDR.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rules/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rules_for/1","doc":"Return the plural rules for a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rules_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rules_for/1","doc":"* `locale` is any locale returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n\nThe rules are returned in AST form after parsing.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rules_for/1-arguments"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize/3","doc":"Pluralize a number using ordinal plural rules\nand a substitution map.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#pluralize/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize/3","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 `Bonfire.Common.Localise.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Bonfire.Common.Localise.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 `Bonfire.Common.Localise.Cldr.Number.Ordinal.Ordinal.plural_rule/3`.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#pluralize/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1, :en, %{one: \"one\"}\n \"one\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: \"one\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: \"one\", two: \"two\"}\n \"two\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 22, :en, %{one: \"one\", two: \"two\", other: \"other\"}\n \"two\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: \"one\"}\n \"one\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: \"one\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: \"one\", two: \"two\"}\n \"two\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, \"ar\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, \"en\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#pluralize/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range","doc":"Implements plural rules for ranges","ref":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.plural_rule/3","doc":"Returns a final plural type for a start-of-range plural\ntype, an end-of-range plural type and a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html#plural_rule/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.plural_rule/3","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":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html#plural_rule/3-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.plural_rule/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.plural_rule :other, :few, \"ar\"\n :few","ref":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html#plural_rule/3-example"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Symbol","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.all_decimal_symbols/0","doc":"Returns a list of all decimal symbols defined\nby the locales configured in this backend as\na list.","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#all_decimal_symbols/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.all_decimal_symbols_class/0","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":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#all_decimal_symbols_class/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.all_grouping_symbols/0","doc":"Returns a list of all grouping symbols defined\nby the locales configured in this backend as\na list.","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#all_grouping_symbols/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.all_grouping_symbols_class/0","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":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#all_grouping_symbols_class/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/1","doc":"Returns a map of `Cldr.Number.Symbol.t` structs of the number symbols for each\nof the number systems of a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#number_symbols_for/1"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#number_symbols_for/1-options"},{"type":"function","title":"Example: - Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/1","doc":"iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#number_symbols_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#number_symbols_for/2"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.System","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_for/2","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":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_for/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.number_system_for/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for \"th\", :latn\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for \"en\", :default\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for \"he\", :traditional\n {:ok, %{rules: \"hebrew\", type: :algorithmic}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for \"en\", :native\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_for/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale/1","doc":"Returns the number system from a language tag or\nlocale name.","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale/1","doc":"* A number system name as an atom","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale \"en-US-u-nu-thai\"\n :thai\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale \"en-US\"\n :latn","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for/1","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 `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1`","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_names_for/1"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for \"en\"\n {:ok, [:latn]}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for \"zz\"\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_names_for/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for!/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_names_for!/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_types_for/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_types_for/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1","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 `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1`","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_systems_for/1"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for \"en\"\n {:ok, %{default: :latn, native: :latn}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for \"th\"\n {:ok, %{default: :latn, native: :thai}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for \"zz\"\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_systems_for/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_systems_for!/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_systems_for!/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_systems_like/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_systems_like/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.system_name_from/2","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 `Bonfire.Common.Localise.Cldr.known_number_systems/0` or a number system type\n returned by `Bonfire.Common.Localise.Cldr.known_number_system_types/0`\n\n* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.System.html#system_name_from/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.system_name_from/2","doc":"ex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:default, \"en\")\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(\"latn\", \"en\")\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:native, \"en\")\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.System.html#system_name_from/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.to_system/2","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":"Bonfire.Common.Localise.Cldr.Number.System.html#to_system/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.to_system/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123456, :hebr\n {:ok, \"קכ״ג׳תנ״ו\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hans\n {:ok, \"一百二十三\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hant\n {:ok, \"一百二十三\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hansfin\n {:ok, \"壹佰贰拾叁\"}","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#to_system/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.to_system!/2","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 `Bonfire.Common.Localise.Cldr.known_number_systems/0` or a number system type\n returned by `Bonfire.Common.Localise.Cldr.known_number_system_types/0`\n\nSee `Bonfire.Common.Localise.Cldr.Number.System.to_system/2` for further\ninformation.","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#to_system!/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.to_system!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.to_system! 123, :hans\n \"一百二十三\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system! 123, :hant\n \"一百二十三\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system! 123, :hansfin\n \"壹佰贰拾叁\"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#to_system!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate","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":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html"},{"type":"module","title":"Configuring precompilation of digit transliterations - Bonfire.Common.Localise.Cldr.Number.Transliterate","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.numeric_systems/0`.\n\nIf a transliteration is requested between two number pairs that have not been configured for\nprecompilation, a warning is logged.","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#module-configuring-precompilation-of-digit-transliterations"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate/3","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":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate/3","doc":"* `sequence` is the string to be transliterated.\n\n* `locale` is any known locale, defaulting to `Bonfire.Common.Localise.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 `Bonfire.Common.Localise.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 `Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1`. Also see\n`Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/1`.","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123556\")\n \"123556\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123,556.000\", \"fr\", :default)\n \"123 556,000\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", :default)\n \"123556\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", \"thai\")\n \"๑๒๓๕๕๖\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", :native)\n \"๑๒๓๕๕๖\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"Some number is: 123556\", \"th\", \"thai\")\n \"Some number is: ๑๒๓๕๕๖\"","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate!/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate!/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate_digits/3","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.numeric_systems/0` for available number systems.","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate_digits/3"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate_digits/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate_digits \"٠١٢٣٤٥٦٧٨٩\", :arab, :latn\n \"0123456789\"","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate_digits/3-example"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem","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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :roman)\n {:ok, \"CXXIII\"}","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.all_rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#all_rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.armenian_lower/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#armenian_lower/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.armenian_lower/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#armenian_lower/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.armenian_upper/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#armenian_upper/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.armenian_upper/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#armenian_upper/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower_1_10/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_1_10/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower_final/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_final/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower_post/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_post/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower_thousands/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_thousands/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic_p1/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic_p1/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic_p2/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic_p2/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic_p3/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic_p3/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic_p/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic_p/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.georgian/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#georgian/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.georgian/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#georgian/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_lower/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_lower/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_lower/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_lower/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_numeral_majuscules/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_numeral_majuscules/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_numeral_minuscules/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_numeral_minuscules/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_upper/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_upper/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_upper/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_upper/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_0_99/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_0_99/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_item/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_item/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_item/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_item/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_item_hundreds/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_item_hundreds/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_thousands/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_thousands/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_lower/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#roman_lower/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_lower/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#roman_lower/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_upper/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#roman_upper/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_upper/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#roman_upper/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.rule_sets/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#rule_sets/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.tamil/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#tamil/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.tamil/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#tamil/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.tamil_thousands/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#tamil_thousands/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.zz_default/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#zz_default/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.zz_default/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#zz_default/2"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal","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> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets(:en)\n [:digits_ordinal]\n\n iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :ordinal)\n {:ok, \"123rd\"}","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.all_rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#all_rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_feminine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_feminine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_feminine_plural/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_feminine_plural/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_indicator_m/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_indicator_m/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_masculine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_masculine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_masculine_adjective/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_masculine_adjective/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_masculine_plural/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_masculine_plural/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.dord_femabbrev/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#dord_femabbrev/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.dord_mascabbrev/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#dord_mascabbrev/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#rule_sets/1"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout","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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :spellout)\n {:ok, \"one hundred twenty-three\"}","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.after_hundred/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#after_hundred/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.after_thousand_or_more/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#after_thousand_or_more/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.all_rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#all_rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.and/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#and/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.and_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#and_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.cents_f/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#cents_f/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.cents_m/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#cents_m/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.cents_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#cents_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.commas/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#commas/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.commas_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#commas_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.et_un/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#et_un/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.et_une/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#et_une/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.et_unieme/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#et_unieme/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.fem_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#fem_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.fem_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#fem_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.fem_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#fem_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.lenient_parse/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#lenient_parse/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.mille_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#mille_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_no_final/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_no_final/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_a_nofinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_a_nofinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_i_nofinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_i_nofinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_o_nofinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_o_nofinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msco_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msco_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msco_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msco_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msco_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msco_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esima/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esima/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esima_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esima_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esima_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esima_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esima_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esima_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esime/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esime/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esime_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esime_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esime_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esime_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esime_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esime_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimi/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimi/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimi_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimi_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimi_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimi_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimi_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimi_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimo/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimo/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimo_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimo_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimo_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimo_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimo_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimo_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.r2d_year/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#r2d_year/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.rule_sets/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#rule_sets/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_feminine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_feminine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_feminine_cents/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_feminine_cents/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_masculine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_masculine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_masculine_cents/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_masculine_cents/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_verbose/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_verbose/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_leading/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_leading/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_numbering/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_numbering/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_numbering_cents/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_numbering_cents/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_numbering_verbose/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_numbering_verbose/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_numbering_year/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_numbering_year/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_feminine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_feminine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_feminine_cont/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_feminine_cont/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_feminine_conts/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_feminine_conts/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_feminine_plural/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_feminine_plural/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine_adjective/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine_adjective/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine_cont/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine_cont/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine_conts/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine_conts/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine_plural/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine_plural/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_verbose/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_verbose/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.subcents_f/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#subcents_f/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.subcents_m/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#subcents_m/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.subcents_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#subcents_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.teen/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#teen/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.th/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#th/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.tieth/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#tieth/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.x_ty/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#x_ty/2"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Time","doc":"","ref":"Bonfire.Common.Localise.Cldr.Time.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"Formats a time according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html)","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"* `{:ok, formatted_time}` or\n\n* `{:error, reason}`.","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2-returns"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"* `time` is a `%DateTime{}` or `%NaiveDateTime{}` struct or any map that contains the keys\n `hour`, `minute`, `second` and optionally `calendar` and `microsecond`\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string.\n The default is `:medium`.\n\n* `locale:` any locale returned by `Cldr.known_locale_names/1`. The default is `\n Cldr.get_locale()`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.\n\n* `era: :variant` will use a variant for the era is one is available in the locale.\n In the \"en\" locale, for example, `era: :variant` will return \"BCE\" instead of \"BC\".\n\n* `period: :variant` will use a variant for the time period and flexible time period if\n one is available in the locale. For example, in the \"en\" locale `period: :variant` will\n return \"pm\" instead of \"PM\".","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"iex> Cldr.Time.to_string ~T[07:35:13.215217]\n {:ok, \"7:35:13 AM\"}\n\n iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :short\n {:ok, \"7:35 AM\"}\n\n iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :medium, locale: \"fr\"\n {:ok, \"07:35:13\"}\n\n iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :medium\n {:ok, \"7:35:13 AM\"}\n\n iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], \"Etc/UTC\")\n iex> Cldr.Time.to_string datetime, format: :long\n {:ok, \"11:59:59 PM UTC\"}","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"Formats a time according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html).","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"* `time` is a `%DateTime{}` or `%NaiveDateTime{}` struct or any map that contains the keys\n `hour`, `minute`, `second` and optionally `calendar` and `microsecond`\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string.\n The default is `:medium`.\n\n * `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n * `number_system:` a number system into which the formatted date digits should\n be transliterated.\n\n * `era: :variant` will use a variant for the era is one is available in the locale.\n In the \"en\" locale, for example, `era: :variant` will return \"BCE\" instead of \"BC\".\n\n * `period: :variant` will use a variant for the time period and flexible time period if\n one is available in the locale. For example, in the \"en\" locale `period: :variant` will\n return \"pm\" instead of \"PM\".","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"* `formatted_time_string` or\n\n* raises an exception.","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217]\n \"7:35:13 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217], format: :short\n \"7:35 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.to_string ~T[07:35:13.215217], format: :short, period: :variant\n {:ok, \"7:35 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217], format: :medium, locale: \"fr\"\n \"07:35:13\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217], format: :medium\n \"7:35:13 AM\"\n\n iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], \"Etc/UTC\")\n iex> Bonfire.Common.Localise.Cldr.Time.to_string! datetime, format: :long\n \"11:59:59 PM UTC\"","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Time.Interval","doc":"Interval formats allow for software to format intervals like \"Jan 10-12, 2008\" as a\nshorter and more natural format than \"Jan 10, 2008 - Jan 12, 2008\". They are designed\nto take a start and end date, time or datetime plus a formatting pattern\nand use that information to produce a localized format.\n\nSee `Cldr.Interval.to_string/3` and `Cldr.Time.Interval.to_string/3`","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.Interval.do_to_string/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#do_to_string/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.Interval.do_to_string!/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#do_to_string!/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"Returns a string representing the formatted\ninterval formed by two times.","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"* `from` is any map that conforms to the\n `Calendar.time` type.\n\n* `to` is any map that conforms to the\n `Calendar.time` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :time]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone time.","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The\n alternatives are `:time`, `:zone`,\n and `:flex`. The default is `:time`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configured locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n time is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :short\n {:ok, \"10 – 10 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :medium\n {:ok, \"10:00 – 10:03 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :long\n {:ok, \"10:00 – 10:03 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00],\n ...> format: :long, style: :flex\n {:ok, \"10:00 – 10:03 in the morning\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],\n ...> format: :long, style: :flex\n {:ok, \"12:00 – 10:00 in the morning\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],\n ...> format: :long, style: :zone\n {:ok, \"12:00 – 10:00 AM Etc/UTC\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00],\n ...> format: :long, style: :flex, locale: \"th\"\n {:ok, \"10:00 – 10:03 ในตอนเช้า\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], nil\n {:ok, \"10:00:00 AM –\"}","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"Returns a string representing the formatted\ninterval formed by two times or raises an\nexception.","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"* `from` is any map that conforms to the\n `Calendar.time` type.\n\n* `to` is any map that conforms to the\n `Calendar.time` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :time]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone time.","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The\n alternatives are `:time`, `:zone`,\n and `:flex`. The default is `:time`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"* `string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configured locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n time is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00], format: :short\n \"10 – 10 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00], format: :medium\n \"10:00 – 10:03 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00], format: :long\n \"10:00 – 10:03 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00],\n ...> format: :long, style: :flex\n \"10:00 – 10:03 in the morning\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],\n ...> format: :long, style: :flex\n \"12:00 – 10:00 in the morning\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],\n ...> format: :long, style: :zone\n \"12:00 – 10:00 AM Etc/UTC\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00],\n ...> format: :long, style: :flex, locale: \"th\"\n \"10:00 – 10:03 ในตอนเช้า\"","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Unit","doc":"Supports the CLDR Units definitions which provide for the localization of many\nunit types.","ref":"Bonfire.Common.Localise.Cldr.Unit.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.add/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#add/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.add!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#add!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.compatible?/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#compatible?/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.convert/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#convert/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.convert!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#convert!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.decompose/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#decompose/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.default_gender/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#default_gender/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.default_style/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#default_style/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.display_name/2","doc":"Returns the localized display name\nfor a unit.\n\nThe returned text is generally suitable\nfor including in UI elements such as\nselection boxes.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#display_name/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.display_name/2","doc":"* `unit` is any `t:Cldr.Unit` or any\n unit name returned by `Cldr.Unit.known_units/0`.\n\n* `options` is a keyword list of options.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#display_name/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.display_name/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`.\n\n* `:style` is one of those returned by `Cldr.Unit.available_styles`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#display_name/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.display_name/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.display_name :liter\n \"liters\"\n\n iex> Bonfire.Common.Localise.Cldr.Unit.display_name :liter, locale: \"fr\"\n \"litres\"\n\n iex> Bonfire.Common.Localise.Cldr.Unit.display_name :liter, locale: \"fr\", style: :short\n \"l\"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#display_name/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.div/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#div/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.div!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#div!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.grammatical_features/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#grammatical_features/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.grammatical_gender/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#grammatical_gender/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.known_styles/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#known_styles/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.known_unit_categories/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#known_unit_categories/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.known_units/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#known_units/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.localize/1","doc":"Localizes a unit according to the current\nprocesses locale and backend.\n\nThe current process's locale is set with\n`Cldr.put_locale/1`.\n\nSee `Cldr.Unit.localize/3` for further\ndetails.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.localize/2","doc":"Localizes a unit according to a territory\n\nA territory can be derived from a `t:Cldr.Locale.locale_name`\nor `t:Cldr.LangaugeTag`.\n\nUse this function if you have a unit which\nshould be presented in a user interface using\nunits relevant to the audience. For example, a\nunit `#Cldr.Unit100, :meter>` might be better\npresented to a US audience as `#Cldr.Unit `.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.localize/2","doc":"* `unit` is any unit returned by `Cldr.Unit.new/2`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.localize/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `backend.get_locale/0`\n\n* `:territory` is any valid territory code returned by\n `Cldr.known_territories/0`. The default is the territory defined\n as part of the `:locale`. The option `:territory` has a precedence\n over the territory in a locale.\n\n* `:usage` is the way in which the unit is intended\n to be used. The available `usage` varyies according\n to the unit category. See `Cldr.Unit.preferred_units/3`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.localize/2","doc":"iex> unit = Cldr.Unit.new!(1.83, :meter)\n iex> Bonfire.Common.Localise.Cldr.Unit.localize(unit, usage: :person_height, territory: :US)\n [\n Cldr.Unit.new!(:foot, 6, usage: :person_height),\n Cldr.Unit.new!(:inch, \"0.04724409448818897637795275598\", usage: :person_height)\n ]","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system?/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system?/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_for/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_for/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_for/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_for/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_for_territory/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_for_territory/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_for_territory/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_for_territory/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_from_locale/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_from_locale/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_from_locale/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_from_locale/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_from_locale/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_from_locale/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_systems_for_unit/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_systems_for_unit/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.mult/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#mult/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.mult!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#mult!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.new/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#new/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.new!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#new!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"Parse a string to create a new unit.\n\nThis function attempts to parse a string\ninto a `number` and `unit type`. If successful\nit attempts to create a new unit using\n`Cldr.Unit.new/3`.\n\nThe parsed `unit type` is aliased against all the\nknown unit names for a give locale (or the current\nlocale if no locale is specified). The known\naliases for unit types can be returned with\n`MyApp.Cldr.Unit.unit_strings_for/1` where `MyApp.Cldr`\nis the name of a backend module.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"* `unit string` is any string to be parsed and if\n possible used to create a new `t:Cldr.Unit`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"* `{:ok, unit}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.parse \"1kg\"\n Cldr.Unit.new(1, :kilogram)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse \"1 tages\", locale: \"de\"\n Cldr.Unit.new(1, :day)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse \"1 tag\", locale: \"de\"\n Cldr.Unit.new(1, :day)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse(\"42 millispangels\")\n {:error, {Cldr.UnknownUnitError, \"Unknown unit was detected at \\\"spangels\\\"\"}}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"Parse a string to create a new unit or\nraises an exception.\n\nThis function attempts to parse a string\ninto a `number` and `unit type`. If successful\nit attempts to create a new unit using\n`Cldr.Unit.new/3`.\n\nThe parsed `unit type` is un-aliased against all the\nknown unit names for a give locale (or the current\nlocale if no locale is specified). The known\naliases for unit types can be returned with\n`MyApp.Cldr.Unit.unit_strings_for/1` where `MyApp.Cldr`\nis the name of a backend module.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"* `unit string` is any string to be parsed and if\n possible used to create a new `t:Cldr.Unit`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"* `unit` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.parse! \"1kg\"\n Cldr.Unit.new!(1, :kilogram)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse! \"1 tages\", locale: \"de\"\n Cldr.Unit.new!(1, :day)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse!(\"42 candela per lux\")\n Cldr.Unit.new!(42, \"candela per lux\")\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse!(\"42 millispangels\")\n ** (Cldr.UnknownUnitError) Unknown unit was detected at \"spangels\"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"Parse a string to find a matching unit-atom.\n\nThis function attempts to parse a string and\nextract the `unit type`.\n\nThe parsed `unit type` is aliased against all the\nknown unit names for a give locale (or the current\nlocale if no locale is specified). The known\naliases for unit types can be returned with\n`MyApp.Cldr.Unit.unit_strings_for/1` where `MyApp.Cldr`\nis the name of a backend module.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"* `unit_name_string` is any string to be parsed and converted into a `unit type`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\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\n* `:only` is a unit category or unit, or a list of unit categories and units.\n The parsed unit must match one of the categories or units in order to\n be valid. This is helpful when disambiguating parsed units. For example,\n parsing \"w\" could be either `:watt` or `:weeks`. Specifying `only: :duration`\n would return `:weeks`. Specifying `only: :power` would return `:watt`\n\n* `:except` is the oppostte of `:only`. The parsed unit must *not*\n match the specified unit or category, or unit categories and units.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"* `{:ok, unit_name}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"* When both `:only` and `:except` options are passed, both\n conditions must be true in order to return a parsed result.\n\n* Only units returned by `Cldr.Unit.known_units/0` can be\n used in the `:only` and `:except` filters.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"kg\"\n {:ok, :kilogram}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"w\"\n {:ok, :watt}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"w\", only: :duration\n {:ok, :week}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"m\", only: [:year, :month, :day]\n {:ok, :month}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"tages\", locale: \"de\"\n {:ok, :day}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"tag\", locale: \"de\"\n {:ok, :day}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name(\"millispangels\")\n {:error, {Cldr.UnknownUnitError, \"Unknown unit was detected at \\\"spangels\\\"\"}}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"Parse a string to find a matching unit-atom.\n\nThis function attempts to parse a string and\nextract the `unit type`.\n\nThe parsed `unit type` is aliased against all the\nknown unit names for a give locale (or the current\nlocale if no locale is specified). The known\naliases for unit types can be returned with\n`MyApp.Cldr.Unit.unit_strings_for/1` where `MyApp.Cldr`\nis the name of a backend module.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"* `unit_name_string` is any string to be parsed and converted into a `unit type`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\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\n* `:only` is a unit category or unit, or a list of unit categories and units.\n The parsed unit must match one of the categories or units in order to\n be valid. This is helpful when disambiguating parsed units. For example,\n parsing \"w\" could be either `watts` or `:week`. Specifying `only: :duration`\n would return `:week`. Specifying `only: :power` would return `:watts`\n\n* `:except` is the oppostte of `:only`. The parsed unit must *not*\n match the specified unit or category, or unit categories and units.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"* `unit_name` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"* When both `:only` and `:except` options are passed, both\n conditions must be true in order to return a parsed result.\n\n* Only units returned by `Cldr.Unit.known_units/0` can be\n used in the `:only` and `:except` filters.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"kg\"\n :kilogram\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"w\"\n :watt\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"w\", only: :duration\n :week\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"m\", only: [:year, :month, :day]\n :month\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"tages\", locale: \"de\"\n :day\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"tag\", locale: \"de\"\n :day\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!(\"millispangels\")\n ** (Cldr.UnknownUnitError) Unknown unit was detected at \"spangels\"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"Returns a list of the preferred units for a given\nunit, locale, use case and scope.\n\nThe units used to represent length, volume and so on\ndepend on a given territory, measurement system and usage.\n\nFor example, in the US, people height is most commonly\nreferred to in `inches`, or informally as `feet and inches`.\nIn most of the rest of the world it is `centimeters`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"* `unit` is any unit returned by `Cldr.Unit.new/2`.\n\n* `backend` is any Cldr backend module. That is, any module\n that includes `use Cldr`. The default is `Cldr.default_backend/0`\n\n* `options` is a keyword list of options or a\n `Cldr.Unit.Conversion.Options` struct. The default\n is `[]`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"* `:usage` is the unit usage. for example `;person` for a unit\n type of length. The available usage for a given unit category can\n be seen with `Cldr.Unit.unit_category_usage/0`. The default is `nil`\n\n* `:scope` is either `:small` or `nil`. In some usage, the units\n used are different when the unit size is small. It is up to the\n developer to determine when `scope: :small` is appropriate.\n\n* `:alt` is either `:informal` or `nil`. Like `:scope`, the units\n in use depend on whether they are being used in a formal or informal\n context.\n\n* `:locale` is any locale returned by `Cldr.validate_locale/2`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"* `{:ok, unit_list, formatting_options}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"`formatting_options` is a keyword list of options\nthat can be passed to `Cldr.Unit.to_string/3`. Its\nprimary intended usage is for localizing a unit that\ndecomposes into more than one unit (for example when\n2 meters might become 6 feet 6 inches.) In such\ncases, the last unit in the list (in this case the\ninches) is formatted with the `formatting_options`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"iex> meter = Cldr.Unit.new!(:meter, 1)\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-US\", usage: :person_height\n {:ok, [:foot, :inch], []}\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-US\", usage: :person\n {:ok, [:inch], []}\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-AU\", usage: :person\n {:ok, [:centimeter], []}\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-US\", usage: :road\n {:ok, [:foot], [round_nearest: 1]}\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-AU\", usage: :road\n {:ok, [:meter], [round_nearest: 1]}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"Returns a list of the preferred units for a given\nunit, locale, use case and scope.\n\nThe units used to represent length, volume and so on\ndepend on a given territory, measurement system and usage.\n\nFor example, in the US, people height is most commonly\nreferred to in `inches`, or informally as `feet and inches`.\nIn most of the rest of the world it is `centimeters`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"* `unit` is any unit returned by `Cldr.Unit.new/2`.\n\n* `backend` is any Cldr backend module. That is, any module\n that includes `use Cldr`. The default is `Cldr.default_backend/0`\n\n* `options` is a keyword list of options or a\n `Cldr.Unit.Conversion.Options` struct. The default\n is `[]`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"* `:usage` is the unit usage. for example `;person` for a unit\n type of length. The available usage for a given unit category can\n be seen with `Cldr.Unit.unit_category_usage/0`. The default is `nil`\n\n* `:scope` is either `:small` or `nil`. In some usage, the units\n used are different when the unit size is small. It is up to the\n developer to determine when `scope: :small` is appropriate.\n\n* `:alt` is either `:informal` or `nil`. Like `:scope`, the units\n in use depend on whether they are being used in a formal or informal\n context.\n\n* `:locale` is any locale returned by `Cldr.validate_locale/2`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"* `unit_list` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"iex> meter = Cldr.Unit.new!(:meter, 2)\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: \"en-US\", usage: :person_height\n [:foot, :inch]\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: \"en-AU\", usage: :person\n [:centimeter]\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: \"en-US\", usage: :road\n [:foot]\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: \"en-AU\", usage: :road\n [:meter]","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.round/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#round/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.round/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#round/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.round/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#round/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.styles/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#styles/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.sub/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#sub/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.sub!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#sub!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"Formats a number into an iolist according to a unit definition\nfor a locale.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"* `list_or_number` is any number (integer, float or Decimal) or a\n `t:Cldr.Unit` struct or a list of `t:Cldr.Unit` structs\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"* `:unit` is any unit returned by `Cldr.Unit.known_units/0`. Ignored if\n the number to be formatted is a `t:Cldr.Unit` struct\n\n* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `:style` is one of those returned by `Cldr.Unit.known_styles`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`\n\n* `:grammatical_case` indicates that a localisation for the given\n locale and given grammatical case should be used. See `Cldr.Unit.known_grammatical_cases/0`\n for the list of known grammatical cases. Note that not all locales\n define all cases. However all locales do define the `:nominative`\n case, which is also the default.\n\n* `:gender` indicates that a localisation for the given\n locale and given grammatical gender should be used. See `Cldr.Unit.known_grammatical_genders/0`\n for the list of known grammatical genders. Note that not all locales\n define all genders. The default gender is `Bonfire.Common.Localise.Cldr.Unit.default_gender/1`\n for the given locale.\n\n* `:list_options` is a keyword list of options for formatting a list\n which is passed through to `Cldr.List.to_string/3`. This is only\n applicable when formatting a list of units.\n\n* Any other options are passed to `Cldr.Number.to_string/2`\n which is used to format the `number`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"* `{:ok, io_list}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist Cldr.Unit.new!(:gallon, 123)\n {:ok, [\"123\", \" gallons\"]}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"Formats a unit using `to_iolist/3` but raises if there is\nan error.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"* `list_or_number` is any number (integer, float or Decimal) or a\n `t:Cldr.Unit` struct or a list of `t:Cldr.Unit` structs\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"* `:unit` is any unit returned by `Cldr.Unit.known_units/0`. Ignored if\n the number to be formatted is a `t:Cldr.Unit` struct\n\n* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `:style` is one of those returned by `Cldr.Unit.known_styles/0`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`.\n\n* `:grammatical_case` indicates that a localisation for the given\n locale and given grammatical case should be used. See `Cldr.Unit.known_grammatical_cases/0`\n for the list of known grammatical cases. Note that not all locales\n define all cases. However all locales do define the `:nominative`\n case, which is also the default.\n\n* `:gender` indicates that a localisation for the given\n locale and given grammatical gender should be used. See `Cldr.Unit.known_grammatical_genders/0`\n for the list of known grammatical genders. Note that not all locales\n define all genders. The default gender is `Bonfire.Common.Localise.Cldr.Unit.default_gender/1`\n for the given locale.\n\n* `:list_options` is a keyword list of options for formatting a list\n which is passed through to `Cldr.List.to_string/3`. This is only\n applicable when formatting a list of units.\n\n* Any other options are passed to `Cldr.Number.to_string/2`\n which is used to format the `number`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"* `io_list` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist! 123, unit: :gallon\n [\"123\", \" gallons\"]","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"Formats a number into a string according to a unit definition for a locale.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"* `list_or_number` is any number (integer, float or Decimal) or a\n `t:Cldr.Unit` struct or a list of `t:Cldr.Unit` structs\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"* `:unit` is any unit returned by `Cldr.Unit.known_units/0`. Ignored if\n the number to be formatted is a `t:Cldr.Unit` struct\n\n* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `:style` is one of those returned by `Cldr.Unit.known_styles`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`\n\n* `:grammatical_case` indicates that a localisation for the given\n locale and given grammatical case should be used. See `Cldr.Unit.known_grammatical_cases/0`\n for the list of known grammatical cases. Note that not all locales\n define all cases. However all locales do define the `:nominative`\n case, which is also the default.\n\n* `:gender` indicates that a localisation for the given\n locale and given grammatical gender should be used. See `Cldr.Unit.known_grammatical_genders/0`\n for the list of known grammatical genders. Note that not all locales\n define all genders. The default gender is `Bonfire.Common.Localise.Cldr.Unit.default_gender/1`\n for the given locale.\n\n* `:list_options` is a keyword list of options for formatting a list\n which is passed through to `Cldr.List.to_string/3`. This is only\n applicable when formatting a list of units.\n\n* Any other options are passed to `Cldr.Number.to_string/2`\n which is used to format the `number`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"* `{:ok, formatted_string}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 123)\n {:ok, \"123 gallons\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1)\n {:ok, \"1 gallon\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: \"af\"\n {:ok, \"1 gelling\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: \"af-NA\"\n {:ok, \"1 gelling\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: \"bs\"\n {:ok, \"1 galon\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :long\n {:ok, \"1 thousand gallons\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :short\n {:ok, \"1K gallons\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234)\n {:ok, \"1,234 megahertz\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234), style: :narrow\n {:ok, \"1,234MHz\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megabyte, 1234), locale: \"en\", style: :unknown\n {:error, {Cldr.UnknownFormatError, \"The unit style :unknown is not known.\"}}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"Formats a list using `to_string/3` but raises if there is\nan error.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"* `list_or_number` is any number (integer, float or Decimal) or a\n `t:Cldr.Unit` struct or a list of `t:Cldr.Unit` structs\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"* `:unit` is any unit returned by `Cldr.Unit.known_units/0`. Ignored if\n the number to be formatted is a `t:Cldr.Unit` struct\n\n* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `:style` is one of those returned by `Cldr.Unit.known_styles`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`\n\n* `:grammatical_case` indicates that a localisation for the given\n locale and given grammatical case should be used. See `Cldr.Unit.known_grammatical_cases/0`\n for the list of known grammatical cases. Note that not all locales\n define all cases. However all locales do define the `:nominative`\n case, which is also the default.\n\n* `:gender` indicates that a localisation for the given\n locale and given grammatical gender should be used. See `Cldr.Unit.known_grammatical_genders/0`\n for the list of known grammatical genders. Note that not all locales\n define all genders. The default gender is `Bonfire.Common.Localise.Cldr.Unit.default_gender/1`\n for the given locale.\n\n* `:list_options` is a keyword list of options for formatting a list\n which is passed through to `Cldr.List.to_string/3`. This is only\n applicable when formatting a list of units.\n\n* Any other options are passed to `Cldr.Number.to_string/2`\n which is used to format the `number`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"* `formatted_string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.to_string! 123, unit: :gallon\n \"123 gallons\"\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string! 1, unit: :gallon\n \"1 gallon\"\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string! 1, unit: :gallon, locale: \"af\"\n \"1 gelling\"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.unit_category/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#unit_category/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.unit_strings_for/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#unit_strings_for/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.validate_style/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#validate_style/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.validate_unit/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#validate_unit/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.value/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#value/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.zero/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#zero/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.zero?/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#zero?/1"},{"type":"module","title":"Bonfire.Common.Localise.Gettext","doc":"Default Gettext module\nIt is recommended to use the more convenient macros in `Bonfire.Common.Localise.Gettext.Helpers` instead.","ref":"Bonfire.Common.Localise.Gettext.html"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dgettext/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dgettext/3"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dgettext_noop/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dgettext_noop/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dngettext/5","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dngettext/5"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dngettext_noop/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dngettext_noop/3"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dpgettext/4","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dpgettext/4"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dpgettext_noop/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dpgettext_noop/3"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dpngettext/6","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dpngettext/6"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dpngettext_noop/4","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dpngettext_noop/4"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.gettext/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#gettext/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.gettext_comment/1","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#gettext_comment/1"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.gettext_noop/1","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#gettext_noop/1"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.handle_missing_bindings/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#handle_missing_bindings/2"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.handle_missing_plural_translation/7","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#handle_missing_plural_translation/7"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.handle_missing_translation/5","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#handle_missing_translation/5"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.lgettext/5","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#lgettext/5"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.lngettext/7","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#lngettext/7"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.ngettext/4","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#ngettext/4"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.ngettext_noop/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#ngettext_noop/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.pgettext/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#pgettext/3"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.pgettext_noop/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#pgettext_noop/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.pngettext/5","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#pngettext/5"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.pngettext_noop/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#pngettext_noop/3"},{"type":"module","title":"Bonfire.Common.Localise.Gettext.Helpers","doc":"A module providing Internationalization with a gettext-based API.\n\nBy using [Gettext](https://hexdocs.pm/gettext),\nyour module gains a set of macros for translations, for example:\n\n import Bonfire.Common.Localise.Gettext\n\n # Simple translation\n\n usage:\n \n \n \n\n\n output:\n Hello\n Hello Bookchin\n Hi\n\n\n # Plural translation\n\n usage:\n \n \n\n output:\n Hi friends\n Hiya Bookchin\n\nSee the [Gettext Docs](https://hexdocs.pm/gettext) for details.","ref":"Bonfire.Common.Localise.Gettext.Helpers.html"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.Helpers.l/4","doc":"","ref":"Bonfire.Common.Localise.Gettext.Helpers.html#l/4"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.Helpers.localise_dynamic/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.Helpers.html#localise_dynamic/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.Helpers.localise_strings/2","doc":"Localise a list of strings at compile time","ref":"Bonfire.Common.Localise.Gettext.Helpers.html#localise_strings/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.Helpers.lp/6","doc":"","ref":"Bonfire.Common.Localise.Gettext.Helpers.html#lp/6"},{"type":"module","title":"Bonfire.Common.Localise.Gettext.Plural","doc":"Defines a plural forms module for Gettext that uses CLDR plural rules\nhttps://cldr.unicode.org/index/cldr-spec/plural-rules","ref":"Bonfire.Common.Localise.Gettext.Plural.html"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.Plural.nplurals/1","doc":"Returns the number of plural forms for a given locale.\n\n* `locale` is either a locale name in the list\n `{:__aliases__, [counter: {Bonfire.Common.Localise.Gettext.Plural, 2}, line: 6, column: 42], [:Bonfire, :Common, :Localise, :Cldr]}.known_locale_names/0` or\n a `%LanguageTag{}` as returned by `Cldr.Locale.new/2`","ref":"Bonfire.Common.Localise.Gettext.Plural.html#nplurals/1"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Gettext.Plural.nplurals/1","doc":"iex> Bonfire.Common.Localise.Gettext.Plural.nplurals(\"pl\")\n 4\n\n iex> Bonfire.Common.Localise.Gettext.Plural.nplurals(\"en\")\n 2","ref":"Bonfire.Common.Localise.Gettext.Plural.html#nplurals/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.Plural.plural/2","doc":"Returns the plural form of a number for a given\nlocale.\n\n* `locale` is either a locale name in the list `{:__aliases__, [counter: {Bonfire.Common.Localise.Gettext.Plural, 2}, line: 6, column: 42], [:Bonfire, :Common, :Localise, :Cldr]}.known_locale_names/0` or\n a `%LanguageTag{}` as returned by `Cldr.Locale.new/2`","ref":"Bonfire.Common.Localise.Gettext.Plural.html#plural/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Gettext.Plural.plural/2","doc":"iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"pl\", 1)\n 0\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"pl\", 2)\n 1\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"pl\", 5)\n 2\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"pl\", 112)\n 2\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"en\", 1)\n 0\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"en\", 2)\n 1\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"en\", 112)\n 1\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"en_GB\", 112)\n 1","ref":"Bonfire.Common.Localise.Gettext.Plural.html#plural/2-examples"},{"type":"module","title":"Bonfire.Common.Media","doc":"Helpers for handling images and media URLs","ref":"Bonfire.Common.Media.html"},{"type":"function","title":"Bonfire.Common.Media.avatar_fallback/1","doc":"","ref":"Bonfire.Common.Media.html#avatar_fallback/1"},{"type":"function","title":"Bonfire.Common.Media.avatar_media/1","doc":"Takes a Media map (or an object containing one) and returns the avatar's URL.","ref":"Bonfire.Common.Media.html#avatar_media/1"},{"type":"function","title":"Bonfire.Common.Media.avatar_url/1","doc":"","ref":"Bonfire.Common.Media.html#avatar_url/1"},{"type":"function","title":"Bonfire.Common.Media.banner_fallback/0","doc":"","ref":"Bonfire.Common.Media.html#banner_fallback/0"},{"type":"function","title":"Bonfire.Common.Media.banner_url/1","doc":"Takes a Media map (or an object containing one) and returns the banner's URL.","ref":"Bonfire.Common.Media.html#banner_url/1"},{"type":"function","title":"Bonfire.Common.Media.extract_tar/2","doc":"Returns a map containing all files and their contents from a tar or compressed tar.gz archive.","ref":"Bonfire.Common.Media.html#extract_tar/2"},{"type":"function","title":"Bonfire.Common.Media.image_url/1","doc":"Takes a Media map (or an object containing one) and returns the image's URL.","ref":"Bonfire.Common.Media.html#image_url/1"},{"type":"function","title":"Bonfire.Common.Media.maybe_dominant_color/4","doc":"","ref":"Bonfire.Common.Media.html#maybe_dominant_color/4"},{"type":"function","title":"Bonfire.Common.Media.media_url/1","doc":"Takes a Media map (or an object containing one) and returns a URL for the media","ref":"Bonfire.Common.Media.html#media_url/1"},{"type":"function","title":"Bonfire.Common.Media.read_tar_files/3","doc":"","ref":"Bonfire.Common.Media.html#read_tar_files/3"},{"type":"function","title":"Bonfire.Common.Media.thumbnail_url/1","doc":"","ref":"Bonfire.Common.Media.html#thumbnail_url/1"},{"type":"module","title":"Bonfire.Common.Modularity.DeclareHelpers","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html"},{"type":"function","title":"Bonfire.Common.Modularity.DeclareHelpers.app/1","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#app/1"},{"type":"function","title":"Bonfire.Common.Modularity.DeclareHelpers.component_props/1","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#component_props/1"},{"type":"function","title":"Bonfire.Common.Modularity.DeclareHelpers.component_type/1","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#component_type/1"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_extension/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_extension/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_nav_component/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_nav_component/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_nav_link/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_nav_link/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_settings_component/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_settings_component/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_settings_nav_component/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_settings_nav_component/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_settings_nav_link/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_settings_nav_link/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_widget/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_widget/2"},{"type":"function","title":"Bonfire.Common.Modularity.DeclareHelpers.generate_link/3","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#generate_link/3"},{"type":"module","title":"Bonfire.Common.Module.Override","doc":"Utility to clone a module under a new name","ref":"Bonfire.Common.Module.Override.html"},{"type":"function","title":"Bonfire.Common.Module.Override.clone/2","doc":"Clone the existing module under a new name","ref":"Bonfire.Common.Module.Override.html#clone/2"},{"type":"function","title":"Bonfire.Common.Module.Override.clone_original/2","doc":"","ref":"Bonfire.Common.Module.Override.html#clone_original/2"},{"type":"function","title":"Bonfire.Common.Module.Override.module_name_atom/1","doc":"","ref":"Bonfire.Common.Module.Override.html#module_name_atom/1"},{"type":"function","title":"Bonfire.Common.Module.Override.module_name_string/1","doc":"","ref":"Bonfire.Common.Module.Override.html#module_name_string/1"},{"type":"function","title":"Bonfire.Common.Module.Override.module_original_name_atom/2","doc":"","ref":"Bonfire.Common.Module.Override.html#module_original_name_atom/2"},{"type":"function","title":"Bonfire.Common.Module.Override.module_original_name_str/2","doc":"","ref":"Bonfire.Common.Module.Override.html#module_original_name_str/2"},{"type":"module","title":"Bonfire.Common.Needles","doc":"","ref":"Bonfire.Common.Needles.html"},{"type":"function","title":"Bonfire.Common.Needles.dataloader/1","doc":"Batch loading of associations for GraphQL API","ref":"Bonfire.Common.Needles.html#dataloader/1"},{"type":"function","title":"Bonfire.Common.Needles.exists?/2","doc":"","ref":"Bonfire.Common.Needles.html#exists?/2"},{"type":"function","title":"Bonfire.Common.Needles.filter_one/1","doc":"","ref":"Bonfire.Common.Needles.html#filter_one/1"},{"type":"function","title":"Bonfire.Common.Needles.filters/3","doc":"","ref":"Bonfire.Common.Needles.html#filters/3"},{"type":"function","title":"Bonfire.Common.Needles.follow!/2","doc":"","ref":"Bonfire.Common.Needles.html#follow!/2"},{"type":"function","title":"Bonfire.Common.Needles.follow_function_error/2","doc":"","ref":"Bonfire.Common.Needles.html#follow_function_error/2"},{"type":"function","title":"Bonfire.Common.Needles.forge!/1","doc":"Forge a pointer from a pointable object\n\nDoes not hit the database.\n\nIs safe so long as the provided struct participates in the meta abstraction.","ref":"Bonfire.Common.Needles.html#forge!/1"},{"type":"function","title":"Bonfire.Common.Needles.forge!/2","doc":"Forges a pointer to a participating meta entity.\n\nDoes not hit the database, is safe so long as the entry we wish to\nsynthesise a pointer for represents a legitimate entry in the database.","ref":"Bonfire.Common.Needles.html#forge!/2"},{"type":"function","title":"Bonfire.Common.Needles.get/2","doc":"","ref":"Bonfire.Common.Needles.html#get/2"},{"type":"function","title":"Bonfire.Common.Needles.get!/2","doc":"","ref":"Bonfire.Common.Needles.html#get!/2"},{"type":"function","title":"Bonfire.Common.Needles.id_binary/1","doc":"","ref":"Bonfire.Common.Needles.html#id_binary/1"},{"type":"function","title":"Bonfire.Common.Needles.id_filter/2","doc":"","ref":"Bonfire.Common.Needles.html#id_filter/2"},{"type":"function","title":"Bonfire.Common.Needles.list!/2","doc":"","ref":"Bonfire.Common.Needles.html#list!/2"},{"type":"function","title":"Bonfire.Common.Needles.list_by_type!/3","doc":"","ref":"Bonfire.Common.Needles.html#list_by_type!/3"},{"type":"function","title":"Bonfire.Common.Needles.list_ids/0","doc":"","ref":"Bonfire.Common.Needles.html#list_ids/0"},{"type":"function","title":"Bonfire.Common.Needles.many/2","doc":"","ref":"Bonfire.Common.Needles.html#many/2"},{"type":"function","title":"Bonfire.Common.Needles.many!/2","doc":"","ref":"Bonfire.Common.Needles.html#many!/2"},{"type":"function","title":"Bonfire.Common.Needles.maybe_forge/1","doc":"Turns a thing into a pointer if it is not already or returns nil","ref":"Bonfire.Common.Needles.html#maybe_forge/1"},{"type":"function","title":"Bonfire.Common.Needles.maybe_forge!/1","doc":"Turns a thing into a pointer if it is not already. Errors if it cannot be performed","ref":"Bonfire.Common.Needles.html#maybe_forge!/1"},{"type":"function","title":"Bonfire.Common.Needles.maybe_resolve/4","doc":"","ref":"Bonfire.Common.Needles.html#maybe_resolve/4"},{"type":"function","title":"Bonfire.Common.Needles.one/2","doc":"","ref":"Bonfire.Common.Needles.html#one/2"},{"type":"function","title":"Bonfire.Common.Needles.one!/2","doc":"","ref":"Bonfire.Common.Needles.html#one!/2"},{"type":"function","title":"Bonfire.Common.Needles.pointer_preloads/2","doc":"","ref":"Bonfire.Common.Needles.html#pointer_preloads/2"},{"type":"function","title":"Bonfire.Common.Needles.pointer_query/2","doc":"Prepare a query for generic pointer objects","ref":"Bonfire.Common.Needles.html#pointer_query/2"},{"type":"function","title":"Bonfire.Common.Needles.preload!/2","doc":"Follows one or more pointers and adds the pointed records to the `pointed` attrs","ref":"Bonfire.Common.Needles.html#preload!/2"},{"type":"function","title":"Bonfire.Common.Needles.query/3","doc":"","ref":"Bonfire.Common.Needles.html#query/3"},{"type":"module","title":"Bonfire.Common.Needles.Pointers.Queries","doc":"","ref":"Bonfire.Common.Needles.Pointers.Queries.html"},{"type":"function","title":"Bonfire.Common.Needles.Pointers.Queries.filter/2","doc":"Filter the query according to arbitrary criteria","ref":"Bonfire.Common.Needles.Pointers.Queries.html#filter/2"},{"type":"function","title":"Bonfire.Common.Needles.Pointers.Queries.query/1","doc":"","ref":"Bonfire.Common.Needles.Pointers.Queries.html#query/1"},{"type":"function","title":"Bonfire.Common.Needles.Pointers.Queries.query/2","doc":"","ref":"Bonfire.Common.Needles.Pointers.Queries.html#query/2"},{"type":"function","title":"Bonfire.Common.Needles.Pointers.Queries.schema_module/0","doc":"","ref":"Bonfire.Common.Needles.Pointers.Queries.html#schema_module/0"},{"type":"module","title":"Bonfire.Common.Needles.Preload","doc":"","ref":"Bonfire.Common.Needles.Preload.html"},{"type":"function","title":"Bonfire.Common.Needles.Preload.maybe_preload_nested_pointers/3","doc":"","ref":"Bonfire.Common.Needles.Preload.html#maybe_preload_nested_pointers/3"},{"type":"function","title":"Bonfire.Common.Needles.Preload.maybe_preload_pointer/2","doc":"","ref":"Bonfire.Common.Needles.Preload.html#maybe_preload_pointer/2"},{"type":"function","title":"Bonfire.Common.Needles.Preload.maybe_preload_pointers/3","doc":"","ref":"Bonfire.Common.Needles.Preload.html#maybe_preload_pointers/3"},{"type":"module","title":"Bonfire.Common.Needles.Tables","doc":"","ref":"Bonfire.Common.Needles.Tables.html"},{"type":"function","title":"Bonfire.Common.Needles.Tables.list_ids/0","doc":"","ref":"Bonfire.Common.Needles.Tables.html#list_ids/0"},{"type":"function","title":"Bonfire.Common.Needles.Tables.list_schemas/0","doc":"","ref":"Bonfire.Common.Needles.Tables.html#list_schemas/0"},{"type":"function","title":"Bonfire.Common.Needles.Tables.list_tables/1","doc":"Lists all Pointable Tables","ref":"Bonfire.Common.Needles.Tables.html#list_tables/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.list_tables_debug/0","doc":"","ref":"Bonfire.Common.Needles.Tables.html#list_tables_debug/0"},{"type":"function","title":"Bonfire.Common.Needles.Tables.many/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#many/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.one/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#one/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.one!/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#one!/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.schema_or_table!/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#schema_or_table!/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.table!/1","doc":"Retrieves the Table that a pointer points to\nNote: Throws an error if the table cannot be found","ref":"Bonfire.Common.Needles.Tables.html#table!/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.table_fields/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#table_fields/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.table_fields_meta/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#table_fields_meta/1"},{"type":"module","title":"Bonfire.Common.Needles.Tables.Queries","doc":"","ref":"Bonfire.Common.Needles.Tables.Queries.html"},{"type":"function","title":"Bonfire.Common.Needles.Tables.Queries.filter/2","doc":"Filter the query according to arbitrary criteria","ref":"Bonfire.Common.Needles.Tables.Queries.html#filter/2"},{"type":"function","title":"Bonfire.Common.Needles.Tables.Queries.query/1","doc":"","ref":"Bonfire.Common.Needles.Tables.Queries.html#query/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.Queries.query/2","doc":"","ref":"Bonfire.Common.Needles.Tables.Queries.html#query/2"},{"type":"module","title":"Bonfire.Common.PubSub","doc":"","ref":"Bonfire.Common.PubSub.html"},{"type":"function","title":"Bonfire.Common.PubSub.broadcast/2","doc":"Broadcast some data for realtime updates, for example to a feed or thread","ref":"Bonfire.Common.PubSub.html#broadcast/2"},{"type":"macro","title":"Bonfire.Common.PubSub.broadcast_with_telemetry/2","doc":"Broadcast while attaching telemetry info. The receiving module must `use Bonfire.Common.PubSub` to correctly unwrap the Event","ref":"Bonfire.Common.PubSub.html#broadcast_with_telemetry/2"},{"type":"function","title":"Bonfire.Common.PubSub.broadcast_with_telemetry/3","doc":"","ref":"Bonfire.Common.PubSub.html#broadcast_with_telemetry/3"},{"type":"function","title":"Bonfire.Common.PubSub.current_function/1","doc":"","ref":"Bonfire.Common.PubSub.html#current_function/1"},{"type":"function","title":"Bonfire.Common.PubSub.subscribe/2","doc":"Subscribe to something for realtime updates, like a feed or thread","ref":"Bonfire.Common.PubSub.html#subscribe/2"},{"type":"module","title":"Bonfire.Common.PubSub.Event","doc":"","ref":"Bonfire.Common.PubSub.Event.html"},{"type":"behaviour","title":"Bonfire.Common.QueryModule","doc":"Properly query some data using the appropriate module depending on its schema.\n\nBack by a global cache of known query_modules to be queried by their schema, or vice versa.\n\nUse of the QueryModule Service requires:\n\n1. Exporting `query_module/0` in relevant modules (in schemas pointing to query modules and/or in query modules pointing to schemas), returning a Module atom\n2. To populate `:nee, :search_path` in config the list of OTP applications where query_modules are declared.\n3. Start the `Bonfire.Common.QueryModule` application before querying.\n4. OTP 21.2 or greater, though we recommend using the most recent\n release available.\n\nWhile this module is a GenServer, it is only responsible for setup\nof the cache and then exits with :ignore having done so. It is not\nrecommended to restart the service as this will lead to a stop the\nworld garbage collection of all processes and the copying of the\nentire cache to each process that has queried it since its last\nlocal garbage collection.","ref":"Bonfire.Common.QueryModule.html"},{"type":"function","title":"Bonfire.Common.QueryModule.app_modules/0","doc":"","ref":"Bonfire.Common.QueryModule.html#app_modules/0"},{"type":"function","title":"Bonfire.Common.QueryModule.apply_error/2","doc":"","ref":"Bonfire.Common.QueryModule.html#apply_error/2"},{"type":"callback","title":"Bonfire.Common.QueryModule.context_module/0","doc":"Points to the related context module","ref":"Bonfire.Common.QueryModule.html#c:context_module/0"},{"type":"function","title":"Bonfire.Common.QueryModule.linked_context_modules/0","doc":"","ref":"Bonfire.Common.QueryModule.html#linked_context_modules/0"},{"type":"function","title":"Bonfire.Common.QueryModule.linked_schema_modules/0","doc":"","ref":"Bonfire.Common.QueryModule.html#linked_schema_modules/0"},{"type":"function","title":"Bonfire.Common.QueryModule.maybe_query/3","doc":"","ref":"Bonfire.Common.QueryModule.html#maybe_query/3"},{"type":"function","title":"Bonfire.Common.QueryModule.maybe_query_module/1","doc":"","ref":"Bonfire.Common.QueryModule.html#maybe_query_module/1"},{"type":"function","title":"Bonfire.Common.QueryModule.modules/0","doc":"","ref":"Bonfire.Common.QueryModule.html#modules/0"},{"type":"function","title":"Bonfire.Common.QueryModule.query_function_error/3","doc":"","ref":"Bonfire.Common.QueryModule.html#query_function_error/3"},{"type":"callback","title":"Bonfire.Common.QueryModule.query_module/0","doc":"Declares a query module","ref":"Bonfire.Common.QueryModule.html#c:query_module/0"},{"type":"function","title":"Bonfire.Common.QueryModule.query_module/1","doc":"Get a Queryable identified by name or id.","ref":"Bonfire.Common.QueryModule.html#query_module/1"},{"type":"function","title":"Bonfire.Common.QueryModule.query_module!/1","doc":"Look up a Queryable by name or id, throw :not_found if not found.","ref":"Bonfire.Common.QueryModule.html#query_module!/1"},{"type":"function","title":"Bonfire.Common.QueryModule.query_modules/1","doc":"Look up many ids at once, throw :not_found if any of them are not found","ref":"Bonfire.Common.QueryModule.html#query_modules/1"},{"type":"callback","title":"Bonfire.Common.QueryModule.schema_module/0","doc":"Points to the related schema module","ref":"Bonfire.Common.QueryModule.html#c:schema_module/0"},{"type":"module","title":"Bonfire.Common.Repo","doc":"Ecto Repo and related common functions","ref":"Bonfire.Common.Repo.html"},{"type":"function","title":"Bonfire.Common.Repo.aggregate/3","doc":"","ref":"Bonfire.Common.Repo.html#aggregate/3"},{"type":"function","title":"Bonfire.Common.Repo.aggregate/4","doc":"","ref":"Bonfire.Common.Repo.html#aggregate/4"},{"type":"function","title":"Bonfire.Common.Repo.all/2","doc":"","ref":"Bonfire.Common.Repo.html#all/2"},{"type":"function","title":"Bonfire.Common.Repo.checked_out?/0","doc":"","ref":"Bonfire.Common.Repo.html#checked_out?/0"},{"type":"function","title":"Bonfire.Common.Repo.checkout/2","doc":"","ref":"Bonfire.Common.Repo.html#checkout/2"},{"type":"function","title":"Bonfire.Common.Repo.child_spec/1","doc":"","ref":"Bonfire.Common.Repo.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Repo.config/0","doc":"","ref":"Bonfire.Common.Repo.html#config/0"},{"type":"function","title":"Bonfire.Common.Repo.default_options/1","doc":"","ref":"Bonfire.Common.Repo.html#default_options/1"},{"type":"function","title":"Bonfire.Common.Repo.default_repo_opts/0","doc":"","ref":"Bonfire.Common.Repo.html#default_repo_opts/0"},{"type":"function","title":"Bonfire.Common.Repo.delete/2","doc":"","ref":"Bonfire.Common.Repo.html#delete/2"},{"type":"function","title":"Bonfire.Common.Repo.delete!/2","doc":"","ref":"Bonfire.Common.Repo.html#delete!/2"},{"type":"function","title":"Bonfire.Common.Repo.delete_all/2","doc":"","ref":"Bonfire.Common.Repo.html#delete_all/2"},{"type":"function","title":"Bonfire.Common.Repo.delete_many/1","doc":"Execute a query to delete all matching records.","ref":"Bonfire.Common.Repo.html#delete_many/1"},{"type":"function","title":"Bonfire.Common.Repo.disconnect_all/2","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":"Bonfire.Common.Repo.html#disconnect_all/2"},{"type":"function","title":"Bonfire.Common.Repo.exists?/2","doc":"","ref":"Bonfire.Common.Repo.html#exists?/2"},{"type":"function","title":"Bonfire.Common.Repo.explain/3","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":"Bonfire.Common.Repo.html#explain/3"},{"type":"function","title":"Bonfire.Common.Repo.fetch/2","doc":"Execute a query for one result where the primary key matches the given id, and return either an {:ok, result} tuple or a {:error, :not_found}","ref":"Bonfire.Common.Repo.html#fetch/2"},{"type":"function","title":"Bonfire.Common.Repo.fetch_all/2","doc":"Execute a query for multiple results given one or multiple IDs.","ref":"Bonfire.Common.Repo.html#fetch_all/2"},{"type":"function","title":"Bonfire.Common.Repo.fetch_by/2","doc":"Execute a query for one result (using a keyword list to specify the key/value to query with), and return either an {:ok, result} tuple or a {:error, :not_found}","ref":"Bonfire.Common.Repo.html#fetch_by/2"},{"type":"function","title":"Bonfire.Common.Repo.find/3","doc":"Like Repo.single, except on failure, adds an error to the changeset","ref":"Bonfire.Common.Repo.html#find/3"},{"type":"function","title":"Bonfire.Common.Repo.get/3","doc":"","ref":"Bonfire.Common.Repo.html#get/3"},{"type":"function","title":"Bonfire.Common.Repo.get!/3","doc":"","ref":"Bonfire.Common.Repo.html#get!/3"},{"type":"function","title":"Bonfire.Common.Repo.get_by/3","doc":"","ref":"Bonfire.Common.Repo.html#get_by/3"},{"type":"function","title":"Bonfire.Common.Repo.get_by!/3","doc":"","ref":"Bonfire.Common.Repo.html#get_by!/3"},{"type":"function","title":"Bonfire.Common.Repo.get_dynamic_repo/0","doc":"","ref":"Bonfire.Common.Repo.html#get_dynamic_repo/0"},{"type":"function","title":"Bonfire.Common.Repo.in_transaction?/0","doc":"","ref":"Bonfire.Common.Repo.html#in_transaction?/0"},{"type":"function","title":"Bonfire.Common.Repo.insert/2","doc":"","ref":"Bonfire.Common.Repo.html#insert/2"},{"type":"function","title":"Bonfire.Common.Repo.insert!/2","doc":"","ref":"Bonfire.Common.Repo.html#insert!/2"},{"type":"function","title":"Bonfire.Common.Repo.insert_all/3","doc":"","ref":"Bonfire.Common.Repo.html#insert_all/3"},{"type":"function","title":"Bonfire.Common.Repo.insert_all_or_ignore/2","doc":"","ref":"Bonfire.Common.Repo.html#insert_all_or_ignore/2"},{"type":"function","title":"Bonfire.Common.Repo.insert_or_ignore/1","doc":"","ref":"Bonfire.Common.Repo.html#insert_or_ignore/1"},{"type":"function","title":"Bonfire.Common.Repo.insert_or_ignore/2","doc":"","ref":"Bonfire.Common.Repo.html#insert_or_ignore/2"},{"type":"function","title":"Bonfire.Common.Repo.insert_or_update/2","doc":"","ref":"Bonfire.Common.Repo.html#insert_or_update/2"},{"type":"function","title":"Bonfire.Common.Repo.insert_or_update!/2","doc":"","ref":"Bonfire.Common.Repo.html#insert_or_update!/2"},{"type":"function","title":"Bonfire.Common.Repo.load/2","doc":"","ref":"Bonfire.Common.Repo.html#load/2"},{"type":"function","title":"Bonfire.Common.Repo.make_subquery/1","doc":"","ref":"Bonfire.Common.Repo.html#make_subquery/1"},{"type":"function","title":"Bonfire.Common.Repo.many/2","doc":"Execute a query for multiple results and return the results.","ref":"Bonfire.Common.Repo.html#many/2"},{"type":"function","title":"Bonfire.Common.Repo.many_paginated/3","doc":"Execute a query for multiple results and return one page of results.\nThis uses the main implementation for pagination, which is cursor-based and powered by the `Paginator` library.","ref":"Bonfire.Common.Repo.html#many_paginated/3"},{"type":"function","title":"Bonfire.Common.Repo.maybe_one/2","doc":"Execute a query for one result and return either an result or a fallback value (`nil` by default)","ref":"Bonfire.Common.Repo.html#maybe_one/2"},{"type":"function","title":"Bonfire.Common.Repo.maybe_preload/3","doc":"","ref":"Bonfire.Common.Repo.html#maybe_preload/3"},{"type":"function","title":"Bonfire.Common.Repo.migrate/0","doc":"","ref":"Bonfire.Common.Repo.html#migrate/0"},{"type":"function","title":"Bonfire.Common.Repo.one/2","doc":"","ref":"Bonfire.Common.Repo.html#one/2"},{"type":"function","title":"Bonfire.Common.Repo.one!/2","doc":"","ref":"Bonfire.Common.Repo.html#one!/2"},{"type":"function","title":"Bonfire.Common.Repo.paginate/2","doc":"Different implementation for pagination using Scrivener (used by eg. rauversion)","ref":"Bonfire.Common.Repo.html#paginate/2"},{"type":"function","title":"Bonfire.Common.Repo.preload/3","doc":"","ref":"Bonfire.Common.Repo.html#preload/3"},{"type":"function","title":"Bonfire.Common.Repo.preload_all/2","doc":"","ref":"Bonfire.Common.Repo.html#preload_all/2"},{"type":"function","title":"Bonfire.Common.Repo.preload_mixins/2","doc":"","ref":"Bonfire.Common.Repo.html#preload_mixins/2"},{"type":"function","title":"Bonfire.Common.Repo.prepare_query/3","doc":"","ref":"Bonfire.Common.Repo.html#prepare_query/3"},{"type":"function","title":"Bonfire.Common.Repo.put/1","doc":"Like `insert/1`, but understands remapping changeset errors to attr\nnames from config (and only config, no overrides at present!)","ref":"Bonfire.Common.Repo.html#put/1"},{"type":"function","title":"Bonfire.Common.Repo.put_dynamic_repo/1","doc":"","ref":"Bonfire.Common.Repo.html#put_dynamic_repo/1"},{"type":"function","title":"Bonfire.Common.Repo.put_many/1","doc":"Like `put/1` but for multiple `changesets`","ref":"Bonfire.Common.Repo.html#put_many/1"},{"type":"function","title":"Bonfire.Common.Repo.query/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Bonfire.Common.Repo.html#query/3"},{"type":"function","title":"Bonfire.Common.Repo.query!/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Bonfire.Common.Repo.html#query!/3"},{"type":"function","title":"Bonfire.Common.Repo.query_many/3","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":"Bonfire.Common.Repo.html#query_many/3"},{"type":"function","title":"Bonfire.Common.Repo.query_many!/3","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":"Bonfire.Common.Repo.html#query_many!/3"},{"type":"function","title":"Bonfire.Common.Repo.reload/2","doc":"","ref":"Bonfire.Common.Repo.html#reload/2"},{"type":"function","title":"Bonfire.Common.Repo.reload!/2","doc":"","ref":"Bonfire.Common.Repo.html#reload!/2"},{"type":"function","title":"Bonfire.Common.Repo.rollback/1","doc":"","ref":"Bonfire.Common.Repo.html#rollback/1"},{"type":"function","title":"Bonfire.Common.Repo.single/1","doc":"Execute a query for one result and return either an `{:ok, result}` or `{:error, :not_found}` tuple","ref":"Bonfire.Common.Repo.html#single/1"},{"type":"function","title":"Bonfire.Common.Repo.sql/3","doc":"","ref":"Bonfire.Common.Repo.html#sql/3"},{"type":"function","title":"Bonfire.Common.Repo.start_link/1","doc":"","ref":"Bonfire.Common.Repo.html#start_link/1"},{"type":"function","title":"Bonfire.Common.Repo.stop/1","doc":"","ref":"Bonfire.Common.Repo.html#stop/1"},{"type":"function","title":"Bonfire.Common.Repo.stream/2","doc":"","ref":"Bonfire.Common.Repo.html#stream/2"},{"type":"function","title":"Bonfire.Common.Repo.to_sql/2","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":"Bonfire.Common.Repo.html#to_sql/2"},{"type":"function","title":"Bonfire.Common.Repo.trace/1","doc":"Can be used to log specific queries (by calling function) in production","ref":"Bonfire.Common.Repo.html#trace/1"},{"type":"function","title":"Bonfire.Common.Repo.transact_many/1","doc":"","ref":"Bonfire.Common.Repo.html#transact_many/1"},{"type":"function","title":"Bonfire.Common.Repo.transact_with/1","doc":"Run a transaction, similar to `Repo.transaction/1`, but it expects an ok or error\ntuple. If an error tuple is returned, the transaction is aborted.","ref":"Bonfire.Common.Repo.html#transact_with/1"},{"type":"function","title":"Bonfire.Common.Repo.transaction/2","doc":"","ref":"Bonfire.Common.Repo.html#transaction/2"},{"type":"function","title":"Bonfire.Common.Repo.update/2","doc":"","ref":"Bonfire.Common.Repo.html#update/2"},{"type":"function","title":"Bonfire.Common.Repo.update!/2","doc":"","ref":"Bonfire.Common.Repo.html#update!/2"},{"type":"function","title":"Bonfire.Common.Repo.update_all/3","doc":"","ref":"Bonfire.Common.Repo.html#update_all/3"},{"type":"function","title":"Bonfire.Common.Repo.upsert/3","doc":"Inserts or updates data in the database with upsert semantics.\n\n* `cs` - The changeset or schema to insert or update.\n* `keys_or_attrs_to_update` - A list of keys or a map of attributes to update.\n* `conflict_target` - The column(s) or constraint to check for conflicts, defaults to `[:id]`.","ref":"Bonfire.Common.Repo.html#upsert/3"},{"type":"function","title":"Bonfire.Common.Repo.upsert_all/3","doc":"","ref":"Bonfire.Common.Repo.html#upsert_all/3"},{"type":"module","title":"Bonfire.Common.Repo.Delete","doc":"","ref":"Bonfire.Common.Repo.Delete.html"},{"type":"function","title":"Bonfire.Common.Repo.Delete.deletion_result/1","doc":"","ref":"Bonfire.Common.Repo.Delete.html#deletion_result/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.deletion_result!/1","doc":"","ref":"Bonfire.Common.Repo.Delete.html#deletion_result!/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.hard_delete/1","doc":"Actually deletes an entry from the database","ref":"Bonfire.Common.Repo.Delete.html#hard_delete/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.hard_delete!/1","doc":"Deletes an entry from the database, or throws an error","ref":"Bonfire.Common.Repo.Delete.html#hard_delete!/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.maybe_allow_delete?/2","doc":"","ref":"Bonfire.Common.Repo.Delete.html#maybe_allow_delete?/2"},{"type":"function","title":"Bonfire.Common.Repo.Delete.schema/1","doc":"","ref":"Bonfire.Common.Repo.Delete.html#schema/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.soft_delete/1","doc":"Just marks an entry as deleted in the database","ref":"Bonfire.Common.Repo.Delete.html#soft_delete/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.soft_delete!/1","doc":"Marks an entry as deleted in the database or throws an error","ref":"Bonfire.Common.Repo.Delete.html#soft_delete!/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.soft_delete_changeset/4","doc":"Creates a changeset for deleting an entity","ref":"Bonfire.Common.Repo.Delete.html#soft_delete_changeset/4"},{"type":"function","title":"Bonfire.Common.Repo.Delete.undelete/1","doc":"","ref":"Bonfire.Common.Repo.Delete.html#undelete/1"},{"type":"module","title":"Bonfire.Common.Repo.Preload","doc":"Preload helpers for Ecto Repo","ref":"Bonfire.Common.Repo.Preload.html"},{"type":"function","title":"Bonfire.Common.Repo.Preload.aggregate/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#aggregate/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.aggregate/4","doc":"","ref":"Bonfire.Common.Repo.Preload.html#aggregate/4"},{"type":"function","title":"Bonfire.Common.Repo.Preload.all/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#all/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.checked_out?/0","doc":"","ref":"Bonfire.Common.Repo.Preload.html#checked_out?/0"},{"type":"function","title":"Bonfire.Common.Repo.Preload.checkout/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#checkout/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.child_spec/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.config/0","doc":"","ref":"Bonfire.Common.Repo.Preload.html#config/0"},{"type":"function","title":"Bonfire.Common.Repo.Preload.default_options/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#default_options/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.delete/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#delete/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.delete!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#delete!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.delete_all/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#delete_all/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.disconnect_all/2","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":"Bonfire.Common.Repo.Preload.html#disconnect_all/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.exists?/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#exists?/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.explain/3","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":"Bonfire.Common.Repo.Preload.html#explain/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get!/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get!/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get_by/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get_by/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get_by!/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get_by!/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get_dynamic_repo/0","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get_dynamic_repo/0"},{"type":"function","title":"Bonfire.Common.Repo.Preload.in_transaction?/0","doc":"","ref":"Bonfire.Common.Repo.Preload.html#in_transaction?/0"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert_all/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert_all/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert_or_update/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert_or_update/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert_or_update!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert_or_update!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.load/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#load/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.maybe_preload/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#maybe_preload/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.maybe_preloads_per_nested_schema/4","doc":"","ref":"Bonfire.Common.Repo.Preload.html#maybe_preloads_per_nested_schema/4"},{"type":"function","title":"Bonfire.Common.Repo.Preload.maybe_preloads_per_schema/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#maybe_preloads_per_schema/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.one/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#one/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.one!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#one!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.preload/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#preload/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.preload_all/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#preload_all/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.preload_mixins/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#preload_mixins/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.prepare_query/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#prepare_query/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.put_dynamic_repo/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#put_dynamic_repo/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.query/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Bonfire.Common.Repo.Preload.html#query/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.query!/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Bonfire.Common.Repo.Preload.html#query!/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.query_many/3","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":"Bonfire.Common.Repo.Preload.html#query_many/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.query_many!/3","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":"Bonfire.Common.Repo.Preload.html#query_many!/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.reload/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#reload/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.reload!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#reload!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.rollback/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#rollback/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.schema_mixins/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#schema_mixins/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.start_link/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#start_link/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.stop/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#stop/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.stream/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#stream/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.to_sql/2","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":"Bonfire.Common.Repo.Preload.html#to_sql/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.transaction/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#transaction/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.update/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#update/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.update!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#update!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.update_all/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#update_all/3"},{"type":"module","title":"Bonfire.Common.Repo.Utils","doc":"Helper functions for changesets","ref":"Bonfire.Common.Repo.Utils.html"},{"type":"function","title":"Bonfire.Common.Repo.Utils.change_disabled/1","doc":"Keeps disabled_at in accord with is_disabled","ref":"Bonfire.Common.Repo.Utils.html#change_disabled/1"},{"type":"function","title":"Bonfire.Common.Repo.Utils.change_muted/1","doc":"Keeps muted_at in accord with is_muted","ref":"Bonfire.Common.Repo.Utils.html#change_muted/1"},{"type":"function","title":"Bonfire.Common.Repo.Utils.change_public/1","doc":"Keeps published_at in accord with is_public","ref":"Bonfire.Common.Repo.Utils.html#change_public/1"},{"type":"macro","title":"Bonfire.Common.Repo.Utils.match_admin/0","doc":"","ref":"Bonfire.Common.Repo.Utils.html#match_admin/0"},{"type":"function","title":"Bonfire.Common.Repo.Utils.validate_email/2","doc":"Validates an email for correctness","ref":"Bonfire.Common.Repo.Utils.html#validate_email/2"},{"type":"function","title":"Bonfire.Common.Repo.Utils.validate_email_domain/2","doc":"","ref":"Bonfire.Common.Repo.Utils.html#validate_email_domain/2"},{"type":"module","title":"Bonfire.Common.RepoTemplate","doc":"","ref":"Bonfire.Common.RepoTemplate.html"},{"type":"module","title":"Bonfire.Common.RuntimeConfig","doc":"","ref":"Bonfire.Common.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Common.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Common.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Common.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Common.RuntimeConfig.html#config_module/0"},{"type":"function","title":"Bonfire.Common.RuntimeConfig.skip_test_tags/1","doc":"","ref":"Bonfire.Common.RuntimeConfig.html#skip_test_tags/1"},{"type":"behaviour","title":"Bonfire.Common.SchemaModule","doc":"Find a context or query module via its schema, backed by a global cache of known schema modules to be queried by their schema, or vice versa (eg. via ContextModule).","ref":"Bonfire.Common.SchemaModule.html"},{"type":"function","title":"Bonfire.Common.SchemaModule.app_modules/0","doc":"","ref":"Bonfire.Common.SchemaModule.html#app_modules/0"},{"type":"callback","title":"Bonfire.Common.SchemaModule.context_module/0","doc":"Points to the related context module","ref":"Bonfire.Common.SchemaModule.html#c:context_module/0"},{"type":"function","title":"Bonfire.Common.SchemaModule.linked_context_modules/0","doc":"","ref":"Bonfire.Common.SchemaModule.html#linked_context_modules/0"},{"type":"function","title":"Bonfire.Common.SchemaModule.linked_query_modules/0","doc":"","ref":"Bonfire.Common.SchemaModule.html#linked_query_modules/0"},{"type":"function","title":"Bonfire.Common.SchemaModule.modules/0","doc":"","ref":"Bonfire.Common.SchemaModule.html#modules/0"},{"type":"callback","title":"Bonfire.Common.SchemaModule.query_module/0","doc":"Points to the related query module","ref":"Bonfire.Common.SchemaModule.html#c:query_module/0"},{"type":"callback","title":"Bonfire.Common.SchemaModule.schema_module/0","doc":"Declares a schema module","ref":"Bonfire.Common.SchemaModule.html#c:schema_module/0"},{"type":"module","title":"Bonfire.Common.Settings","doc":"","ref":"Bonfire.Common.Settings.html"},{"type":"function","title":"Bonfire.Common.Settings.get/3","doc":"Get config value for a config key (optionally from a specific OTP app or Bonfire extension)\n\nThese two calls have the same result (i.e. specifying a module as the first key will add the OTP app of that module as the first key):\n`get([:bonfire_me, Bonfire.Me.Users])`\n`get(Bonfire.Me.Users)`\n\nSame with these two (i.e. not specifying a module or app as the first key will default to the main OTP app):\n`get([:random_atom, :sub_key])`\n`get([:bonfire, :random_atom, :sub_key])`","ref":"Bonfire.Common.Settings.html#get/3"},{"type":"function","title":"Bonfire.Common.Settings.get!/2","doc":"","ref":"Bonfire.Common.Settings.html#get!/2"},{"type":"function","title":"Bonfire.Common.Settings.load_instance_settings/0","doc":"","ref":"Bonfire.Common.Settings.html#load_instance_settings/0"},{"type":"function","title":"Bonfire.Common.Settings.map_put_in/3","doc":"","ref":"Bonfire.Common.Settings.html#map_put_in/3"},{"type":"function","title":"Bonfire.Common.Settings.put/3","doc":"Put a setting using a key like `:key` or list of nested keys like `[:top_key, :sub_key]`","ref":"Bonfire.Common.Settings.html#put/3"},{"type":"function","title":"Bonfire.Common.Settings.reset_all/0","doc":"","ref":"Bonfire.Common.Settings.html#reset_all/0"},{"type":"function","title":"Bonfire.Common.Settings.reset_instance/0","doc":"","ref":"Bonfire.Common.Settings.html#reset_instance/0"},{"type":"function","title":"Bonfire.Common.Settings.set/2","doc":"Set several settings at once.\nAccepts nested attributes as map with string keys (which are transformed into keyword list), or a keyword list.\nDetermines what scope to use & sets/updates settings for it.","ref":"Bonfire.Common.Settings.html#set/2"},{"type":"module","title":"Bonfire.Common.Settings.LiveHandler","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.input_name/1","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#input_name/1"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.maybe_assign_input_value_from_keys/1","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#maybe_assign_input_value_from_keys/1"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.scoped/2","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#scoped/2"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.set_image_setting/5","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#set_image_setting/5"},{"type":"macro","title":"Bonfire.Common.Settings.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Common.Settings.LoadInstanceConfig","doc":"Loads instance Settings from DB into Elixir's Config\n\nWhile this module is a GenServer, it is only responsible for querying the settings, putting them in Config, and then exits with :ignore having done so.","ref":"Bonfire.Common.Settings.LoadInstanceConfig.html"},{"type":"function","title":"Bonfire.Common.Settings.LoadInstanceConfig.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.Settings.LoadInstanceConfig.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Settings.LoadInstanceConfig.load_config/0","doc":"","ref":"Bonfire.Common.Settings.LoadInstanceConfig.html#load_config/0"},{"type":"function","title":"Bonfire.Common.Settings.LoadInstanceConfig.start_link/1","doc":"Populates the global cache with table data via introspection.","ref":"Bonfire.Common.Settings.LoadInstanceConfig.html#start_link/1"},{"type":"module","title":"Bonfire.Common.Simulation","doc":"","ref":"Bonfire.Common.Simulation.html"},{"type":"function","title":"Bonfire.Common.Simulation.ap_url_base/0","doc":"Picks a unique random url for an ap endpoint","ref":"Bonfire.Common.Simulation.html#ap_url_base/0"},{"type":"function","title":"Bonfire.Common.Simulation.base64/0","doc":"Generates random base64 text","ref":"Bonfire.Common.Simulation.html#base64/0"},{"type":"function","title":"Bonfire.Common.Simulation.bool/0","doc":"Generates a random boolean","ref":"Bonfire.Common.Simulation.html#bool/0"},{"type":"function","title":"Bonfire.Common.Simulation.canonical_url/0","doc":"Picks a random canonical url and makes it unique","ref":"Bonfire.Common.Simulation.html#canonical_url/0"},{"type":"function","title":"Bonfire.Common.Simulation.content_type/0","doc":"Generate a random content type","ref":"Bonfire.Common.Simulation.html#content_type/0"},{"type":"function","title":"Bonfire.Common.Simulation.content_url/0","doc":"Picks a remote url from a set of available ones.","ref":"Bonfire.Common.Simulation.html#content_url/0"},{"type":"function","title":"Bonfire.Common.Simulation.date_of_birth/0","doc":"Generates a random date of birth based on an age range of 18-99","ref":"Bonfire.Common.Simulation.html#date_of_birth/0"},{"type":"function","title":"Bonfire.Common.Simulation.domain/0","doc":"Generates a random domain name","ref":"Bonfire.Common.Simulation.html#domain/0"},{"type":"function","title":"Bonfire.Common.Simulation.email/0","doc":"Generates a random unique email","ref":"Bonfire.Common.Simulation.html#email/0"},{"type":"function","title":"Bonfire.Common.Simulation.email_user/0","doc":"Generates the first half of an email address","ref":"Bonfire.Common.Simulation.html#email_user/0"},{"type":"function","title":"Bonfire.Common.Simulation.falsehood/0","doc":"Returns false","ref":"Bonfire.Common.Simulation.html#falsehood/0"},{"type":"function","title":"Bonfire.Common.Simulation.float/0","doc":"Generate a random floating point number","ref":"Bonfire.Common.Simulation.html#float/0"},{"type":"function","title":"Bonfire.Common.Simulation.future_date/0","doc":"Picks a date up to 300 days in the future, not including today","ref":"Bonfire.Common.Simulation.html#future_date/0"},{"type":"function","title":"Bonfire.Common.Simulation.future_datetime/0","doc":"Picks a datetime up to 300 days in the future, not including today","ref":"Bonfire.Common.Simulation.html#future_datetime/0"},{"type":"function","title":"Bonfire.Common.Simulation.future_datetime_iso/0","doc":"Same as future_datetime, but as an ISO8601 formatted string.","ref":"Bonfire.Common.Simulation.html#future_datetime_iso/0"},{"type":"function","title":"Bonfire.Common.Simulation.icon/0","doc":"Picks an icon url","ref":"Bonfire.Common.Simulation.html#icon/0"},{"type":"function","title":"Bonfire.Common.Simulation.image/0","doc":"Picks an image url","ref":"Bonfire.Common.Simulation.html#image/0"},{"type":"function","title":"Bonfire.Common.Simulation.integer/0","doc":"Generate a random signed integer","ref":"Bonfire.Common.Simulation.html#integer/0"},{"type":"function","title":"Bonfire.Common.Simulation.license/0","doc":"A random license for content","ref":"Bonfire.Common.Simulation.html#license/0"},{"type":"function","title":"Bonfire.Common.Simulation.location/0","doc":"Returns a city and country","ref":"Bonfire.Common.Simulation.html#location/0"},{"type":"function","title":"Bonfire.Common.Simulation.long_count/0","doc":"","ref":"Bonfire.Common.Simulation.html#long_count/0"},{"type":"function","title":"Bonfire.Common.Simulation.long_list/1","doc":"","ref":"Bonfire.Common.Simulation.html#long_list/1"},{"type":"function","title":"Bonfire.Common.Simulation.markdown/0","doc":"","ref":"Bonfire.Common.Simulation.html#markdown/0"},{"type":"function","title":"Bonfire.Common.Simulation.maybe_bool/0","doc":"Generate a random boolean that can also be nil","ref":"Bonfire.Common.Simulation.html#maybe_bool/0"},{"type":"function","title":"Bonfire.Common.Simulation.maybe_one_of/1","doc":"","ref":"Bonfire.Common.Simulation.html#maybe_one_of/1"},{"type":"function","title":"Bonfire.Common.Simulation.med_count/0","doc":"","ref":"Bonfire.Common.Simulation.html#med_count/0"},{"type":"function","title":"Bonfire.Common.Simulation.med_list/1","doc":"","ref":"Bonfire.Common.Simulation.html#med_list/1"},{"type":"function","title":"Bonfire.Common.Simulation.name/0","doc":"Picks a name","ref":"Bonfire.Common.Simulation.html#name/0"},{"type":"function","title":"Bonfire.Common.Simulation.neg_integer/0","doc":"Generate a random negative integer","ref":"Bonfire.Common.Simulation.html#neg_integer/0"},{"type":"function","title":"Bonfire.Common.Simulation.one_of/1","doc":"","ref":"Bonfire.Common.Simulation.html#one_of/1"},{"type":"function","title":"Bonfire.Common.Simulation.paragraph/0","doc":"Generates a random paragraph","ref":"Bonfire.Common.Simulation.html#paragraph/0"},{"type":"function","title":"Bonfire.Common.Simulation.password/0","doc":"Generates a random password string","ref":"Bonfire.Common.Simulation.html#password/0"},{"type":"function","title":"Bonfire.Common.Simulation.past_date/0","doc":"Picks a date up to 300 days in the past, not including today","ref":"Bonfire.Common.Simulation.html#past_date/0"},{"type":"function","title":"Bonfire.Common.Simulation.past_datetime/0","doc":"Picks a datetime up to 300 days in the past, not including today","ref":"Bonfire.Common.Simulation.html#past_datetime/0"},{"type":"function","title":"Bonfire.Common.Simulation.past_datetime_iso/0","doc":"Same as past_datetime, but as an ISO8601 formatted string.","ref":"Bonfire.Common.Simulation.html#past_datetime_iso/0"},{"type":"function","title":"Bonfire.Common.Simulation.path/0","doc":"Picks a path from a set of available files.","ref":"Bonfire.Common.Simulation.html#path/0"},{"type":"function","title":"Bonfire.Common.Simulation.pos_integer/0","doc":"Generate a random positive integer","ref":"Bonfire.Common.Simulation.html#pos_integer/0"},{"type":"function","title":"Bonfire.Common.Simulation.preferred_username/0","doc":"Picks a unique preferred_username","ref":"Bonfire.Common.Simulation.html#preferred_username/0"},{"type":"function","title":"Bonfire.Common.Simulation.short_count/0","doc":"","ref":"Bonfire.Common.Simulation.html#short_count/0"},{"type":"function","title":"Bonfire.Common.Simulation.short_list/1","doc":"","ref":"Bonfire.Common.Simulation.html#short_list/1"},{"type":"function","title":"Bonfire.Common.Simulation.signing_key/0","doc":"Picks a fake signing key","ref":"Bonfire.Common.Simulation.html#signing_key/0"},{"type":"function","title":"Bonfire.Common.Simulation.some/2","doc":"Repeats a function count times if count_or_range is a positive integer.\n\nIf count_or_range is a positive range, a random number from this\nrange is selected and that value used as a count","ref":"Bonfire.Common.Simulation.html#some/2"},{"type":"function","title":"Bonfire.Common.Simulation.summary/0","doc":"Picks a summary text paragraph","ref":"Bonfire.Common.Simulation.html#summary/0"},{"type":"function","title":"Bonfire.Common.Simulation.title/0","doc":"","ref":"Bonfire.Common.Simulation.html#title/0"},{"type":"function","title":"Bonfire.Common.Simulation.truth/0","doc":"Returns true","ref":"Bonfire.Common.Simulation.html#truth/0"},{"type":"function","title":"Bonfire.Common.Simulation.ulid/0","doc":"Generates a random unique ulid","ref":"Bonfire.Common.Simulation.html#ulid/0"},{"type":"function","title":"Bonfire.Common.Simulation.url/0","doc":"Generates a random url","ref":"Bonfire.Common.Simulation.html#url/0"},{"type":"function","title":"Bonfire.Common.Simulation.username/0","doc":"Generates a random username","ref":"Bonfire.Common.Simulation.html#username/0"},{"type":"function","title":"Bonfire.Common.Simulation.uuid/0","doc":"Generates a random unique uuid","ref":"Bonfire.Common.Simulation.html#uuid/0"},{"type":"function","title":"Bonfire.Common.Simulation.verb/0","doc":"A verb to be used for an activity.","ref":"Bonfire.Common.Simulation.html#verb/0"},{"type":"function","title":"Bonfire.Common.Simulation.website/0","doc":"A website address","ref":"Bonfire.Common.Simulation.html#website/0"},{"type":"module","title":"Bonfire.Common.StartupTimer","doc":"Open the console without starting the app: `iex -S mix run --no-start` or `just imix run --no-start`\n\nAnd then run `Bonfire.Common.StartupTimer.run()`","ref":"Bonfire.Common.StartupTimer.html"},{"type":"function","title":"Bonfire.Common.StartupTimer.run/1","doc":"","ref":"Bonfire.Common.StartupTimer.html#run/1"},{"type":"module","title":"Bonfire.Common.Test.Interactive","doc":"This utility allows to get the same effect of using\n`fcwatch | mix test --stale --listen-on-stdin` to watch for\ncode changes and run stale tests, but with more control and\nwithout the starting time penalty.\n\nNote that watching requires fswatch on your system.\nEg on Mac run `brew install fswatch`.\n\nTo use it, in your project's `.iex` file add:\n```\nunless GenServer.whereis(Bonfire.Common.Test.Interactive) do\n {:ok, pid} = Bonfire.Common.Test.Interactive.start_link()\n # Process will not exit when the iex goes out\n Process.unlink(pid)\nend\nimport Bonfire.Common.Test.Interactive.Helpers\n```\nThen to call `iex` and run tests just do:\n```\nMIX_ENV=test iex -S mix\n```\nThe `Bonfire.Common.Test.Interactive.Helpers` allows to call `f` and `s` and `a`\nto run failed, stale and all tests respectively.\nYou can call `w` to watch tests and `uw` to unwatch.\nThere is a really simple throttle mecanism that disallow running the suite concurrently.","ref":"Bonfire.Common.Test.Interactive.html"},{"type":"function","title":"Bonfire.Common.Test.Interactive.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.Test.Interactive.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.run_all_tests/1","doc":"","ref":"Bonfire.Common.Test.Interactive.html#run_all_tests/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.run_failed_tests/1","doc":"","ref":"Bonfire.Common.Test.Interactive.html#run_failed_tests/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.run_stale_tests/1","doc":"","ref":"Bonfire.Common.Test.Interactive.html#run_stale_tests/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.setup_test_repo/1","doc":"Sets up database options for tests\n\nYou can tell a specific test to not wrap in a transaction and rollback with:\n`@tag db_sandbox: false`","ref":"Bonfire.Common.Test.Interactive.html#setup_test_repo/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.start_link/0","doc":"","ref":"Bonfire.Common.Test.Interactive.html#start_link/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.unlock/0","doc":"","ref":"Bonfire.Common.Test.Interactive.html#unlock/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.unwatch_tests/0","doc":"","ref":"Bonfire.Common.Test.Interactive.html#unwatch_tests/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.watch_tests/1","doc":"","ref":"Bonfire.Common.Test.Interactive.html#watch_tests/1"},{"type":"module","title":"Bonfire.Common.Test.Interactive.Helpers","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.f/1","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#f/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.ready/0","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#ready/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.s/1","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#s/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.ta/1","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#ta/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.uw/0","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#uw/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.w/1","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#w/1"},{"type":"module","title":"Bonfire.Common.Test.Interactive.Observer","doc":"","ref":"Bonfire.Common.Test.Interactive.Observer.html"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Observer.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.Test.Interactive.Observer.html#child_spec/1"},{"type":"module","title":"Bonfire.Common.TestInstanceRepo","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.aggregate/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#aggregate/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.aggregate/4","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#aggregate/4"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.all/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.apply/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#apply/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.checked_out?/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#checked_out?/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.checkout/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#checkout/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.child_spec/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.config/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#config/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.default_endpoint/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#default_endpoint/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.default_options/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#default_options/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.default_repo/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#default_repo/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.default_repo_opts/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#default_repo_opts/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.delete/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#delete/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.delete!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#delete!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.delete_all/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#delete_all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.delete_many/1","doc":"Execute a query to delete all matching records.","ref":"Bonfire.Common.TestInstanceRepo.html#delete_many/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.disconnect_all/2","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":"Bonfire.Common.TestInstanceRepo.html#disconnect_all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.exists?/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#exists?/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.explain/3","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":"Bonfire.Common.TestInstanceRepo.html#explain/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.fetch/2","doc":"Execute a query for one result where the primary key matches the given id, and return either an {:ok, result} tuple or a {:error, :not_found}","ref":"Bonfire.Common.TestInstanceRepo.html#fetch/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.fetch_all/2","doc":"Execute a query for multiple results given one or multiple IDs.","ref":"Bonfire.Common.TestInstanceRepo.html#fetch_all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.fetch_by/2","doc":"Execute a query for one result (using a keyword list to specify the key/value to query with), and return either an {:ok, result} tuple or a {:error, :not_found}","ref":"Bonfire.Common.TestInstanceRepo.html#fetch_by/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.find/3","doc":"Like Repo.single, except on failure, adds an error to the changeset","ref":"Bonfire.Common.TestInstanceRepo.html#find/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get!/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get!/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get_by/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get_by/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get_by!/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get_by!/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get_dynamic_repo/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get_dynamic_repo/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.in_transaction?/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#in_transaction?/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_all/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_all/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_all_or_ignore/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_all_or_ignore/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_or_ignore/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_or_ignore/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_or_ignore/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_or_ignore/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_or_update/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_or_update/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_or_update!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_or_update!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.load/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#load/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.make_subquery/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#make_subquery/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.many/2","doc":"Execute a query for multiple results and return the results.","ref":"Bonfire.Common.TestInstanceRepo.html#many/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.many_paginated/3","doc":"Execute a query for multiple results and return one page of results.\nThis uses the main implementation for pagination, which is cursor-based and powered by the `Paginator` library.","ref":"Bonfire.Common.TestInstanceRepo.html#many_paginated/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.maybe_declare_test_instance/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#maybe_declare_test_instance/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.maybe_one/2","doc":"Execute a query for one result and return either an result or a fallback value (`nil` by default)","ref":"Bonfire.Common.TestInstanceRepo.html#maybe_one/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.maybe_preload/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#maybe_preload/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.one/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#one/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.one!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#one!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.paginate/2","doc":"Different implementation for pagination using Scrivener (used by eg. rauversion)","ref":"Bonfire.Common.TestInstanceRepo.html#paginate/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.preload/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#preload/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.preload_all/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#preload_all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.preload_mixins/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#preload_mixins/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.prepare_query/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#prepare_query/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.process_put/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#process_put/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.put/1","doc":"Like `insert/1`, but understands remapping changeset errors to attr\nnames from config (and only config, no overrides at present!)","ref":"Bonfire.Common.TestInstanceRepo.html#put/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.put_dynamic_repo/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#put_dynamic_repo/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.put_many/1","doc":"Like `put/1` but for multiple `changesets`","ref":"Bonfire.Common.TestInstanceRepo.html#put_many/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.query/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Bonfire.Common.TestInstanceRepo.html#query/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.query!/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Bonfire.Common.TestInstanceRepo.html#query!/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.query_many/3","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":"Bonfire.Common.TestInstanceRepo.html#query_many/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.query_many!/3","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":"Bonfire.Common.TestInstanceRepo.html#query_many!/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.reload/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#reload/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.reload!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#reload!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.rollback/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#rollback/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.single/1","doc":"Execute a query for one result and return either an `{:ok, result}` or `{:error, :not_found}` tuple","ref":"Bonfire.Common.TestInstanceRepo.html#single/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.sql/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#sql/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.start_link/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#start_link/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.stop/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#stop/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.stream/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#stream/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.to_sql/2","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":"Bonfire.Common.TestInstanceRepo.html#to_sql/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.trace/1","doc":"Can be used to log specific queries (by calling function) in production","ref":"Bonfire.Common.TestInstanceRepo.html#trace/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.transact_many/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#transact_many/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.transact_with/1","doc":"Run a transaction, similar to `Repo.transaction/1`, but it expects an ok or error\ntuple. If an error tuple is returned, the transaction is aborted.","ref":"Bonfire.Common.TestInstanceRepo.html#transact_with/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.transaction/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#transaction/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.update/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#update/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.update!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#update!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.update_all/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#update_all/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.upsert/3","doc":"Inserts or updates data in the database with upsert semantics.\n\n* `cs` - The changeset or schema to insert or update.\n* `keys_or_attrs_to_update` - A list of keys or a map of attributes to update.\n* `conflict_target` - The column(s) or constraint to check for conflicts, defaults to `[:id]`.","ref":"Bonfire.Common.TestInstanceRepo.html#upsert/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.upsert_all/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#upsert_all/3"},{"type":"module","title":"Bonfire.Common.Text","doc":"","ref":"Bonfire.Common.Text.html"},{"type":"function","title":"Bonfire.Common.Text.blank?/1","doc":"","ref":"Bonfire.Common.Text.html#blank?/1"},{"type":"function","title":"Bonfire.Common.Text.camelise/1","doc":"","ref":"Bonfire.Common.Text.html#camelise/1"},{"type":"function","title":"Bonfire.Common.Text.code_syntax/2","doc":"","ref":"Bonfire.Common.Text.html#code_syntax/2"},{"type":"function","title":"Bonfire.Common.Text.contains?/2","doc":"","ref":"Bonfire.Common.Text.html#contains?/2"},{"type":"function","title":"Bonfire.Common.Text.contains_html?/1","doc":"","ref":"Bonfire.Common.Text.html#contains_html?/1"},{"type":"function","title":"Bonfire.Common.Text.hash/2","doc":"","ref":"Bonfire.Common.Text.html#hash/2"},{"type":"function","title":"Bonfire.Common.Text.list_checkboxes/1","doc":"","ref":"Bonfire.Common.Text.html#list_checkboxes/1"},{"type":"function","title":"Bonfire.Common.Text.list_checked_boxes/1","doc":"","ref":"Bonfire.Common.Text.html#list_checked_boxes/1"},{"type":"function","title":"Bonfire.Common.Text.list_unchecked_boxes/1","doc":"","ref":"Bonfire.Common.Text.html#list_unchecked_boxes/1"},{"type":"function","title":"Bonfire.Common.Text.make_local_links_live/1","doc":"","ref":"Bonfire.Common.Text.html#make_local_links_live/1"},{"type":"function","title":"Bonfire.Common.Text.markdown_as_html_earmark/2","doc":"","ref":"Bonfire.Common.Text.html#markdown_as_html_earmark/2"},{"type":"function","title":"Bonfire.Common.Text.markdown_as_html_mdex/2","doc":"","ref":"Bonfire.Common.Text.html#markdown_as_html_mdex/2"},{"type":"function","title":"Bonfire.Common.Text.markdown_checkboxes/1","doc":"","ref":"Bonfire.Common.Text.html#markdown_checkboxes/1"},{"type":"function","title":"Bonfire.Common.Text.maybe_emote/2","doc":"","ref":"Bonfire.Common.Text.html#maybe_emote/2"},{"type":"function","title":"Bonfire.Common.Text.maybe_markdown_to_html/2","doc":"","ref":"Bonfire.Common.Text.html#maybe_markdown_to_html/2"},{"type":"function","title":"Bonfire.Common.Text.maybe_normalize_html/1","doc":"","ref":"Bonfire.Common.Text.html#maybe_normalize_html/1"},{"type":"function","title":"Bonfire.Common.Text.maybe_render_templated/2","doc":"","ref":"Bonfire.Common.Text.html#maybe_render_templated/2"},{"type":"function","title":"Bonfire.Common.Text.maybe_sane_html/1","doc":"It is recommended to call this before storing any that data is coming in from the user or from a remote instance","ref":"Bonfire.Common.Text.html#maybe_sane_html/1"},{"type":"function","title":"Bonfire.Common.Text.maybe_to_snake/1","doc":"takes a string as input and converts it to snake_case","ref":"Bonfire.Common.Text.html#maybe_to_snake/1"},{"type":"function","title":"Bonfire.Common.Text.normalise_links/2","doc":"","ref":"Bonfire.Common.Text.html#normalise_links/2"},{"type":"function","title":"Bonfire.Common.Text.random_string/1","doc":"","ref":"Bonfire.Common.Text.html#random_string/1"},{"type":"function","title":"Bonfire.Common.Text.regex_list/2","doc":"","ref":"Bonfire.Common.Text.html#regex_list/2"},{"type":"function","title":"Bonfire.Common.Text.sentence_truncate/3","doc":"","ref":"Bonfire.Common.Text.html#sentence_truncate/3"},{"type":"function","title":"Bonfire.Common.Text.slug/1","doc":"","ref":"Bonfire.Common.Text.html#slug/1"},{"type":"function","title":"Bonfire.Common.Text.strlen/1","doc":"","ref":"Bonfire.Common.Text.html#strlen/1"},{"type":"function","title":"Bonfire.Common.Text.text_only/1","doc":"","ref":"Bonfire.Common.Text.html#text_only/1"},{"type":"function","title":"Bonfire.Common.Text.truncate/3","doc":"","ref":"Bonfire.Common.Text.html#truncate/3"},{"type":"function","title":"Bonfire.Common.Text.underscore_truncate/2","doc":"","ref":"Bonfire.Common.Text.html#underscore_truncate/2"},{"type":"function","title":"Bonfire.Common.Text.upcase_first/1","doc":"","ref":"Bonfire.Common.Text.html#upcase_first/1"},{"type":"function","title":"Bonfire.Common.Text.verb_infinitive/1","doc":"Uses the `Verbs` library to convert an English conjugated verb back to inifinitive form.\nCurrently only supports irregular verbs.","ref":"Bonfire.Common.Text.html#verb_infinitive/1"},{"type":"module","title":"Bonfire.Common.TextExtended","doc":"","ref":"Bonfire.Common.TextExtended.html"},{"type":"function","title":"Bonfire.Common.TextExtended.blank?/1","doc":"","ref":"Bonfire.Common.TextExtended.html#blank?/1"},{"type":"function","title":"Bonfire.Common.TextExtended.camelise/1","doc":"","ref":"Bonfire.Common.TextExtended.html#camelise/1"},{"type":"function","title":"Bonfire.Common.TextExtended.code_syntax/2","doc":"","ref":"Bonfire.Common.TextExtended.html#code_syntax/2"},{"type":"function","title":"Bonfire.Common.TextExtended.contains?/2","doc":"","ref":"Bonfire.Common.TextExtended.html#contains?/2"},{"type":"function","title":"Bonfire.Common.TextExtended.contains_html?/1","doc":"","ref":"Bonfire.Common.TextExtended.html#contains_html?/1"},{"type":"function","title":"Bonfire.Common.TextExtended.hash/1","doc":"","ref":"Bonfire.Common.TextExtended.html#hash/1"},{"type":"function","title":"Bonfire.Common.TextExtended.hash/2","doc":"","ref":"Bonfire.Common.TextExtended.html#hash/2"},{"type":"function","title":"Bonfire.Common.TextExtended.list_checkboxes/1","doc":"","ref":"Bonfire.Common.TextExtended.html#list_checkboxes/1"},{"type":"function","title":"Bonfire.Common.TextExtended.list_checked_boxes/1","doc":"","ref":"Bonfire.Common.TextExtended.html#list_checked_boxes/1"},{"type":"function","title":"Bonfire.Common.TextExtended.list_unchecked_boxes/1","doc":"","ref":"Bonfire.Common.TextExtended.html#list_unchecked_boxes/1"},{"type":"function","title":"Bonfire.Common.TextExtended.make_local_links_live/1","doc":"","ref":"Bonfire.Common.TextExtended.html#make_local_links_live/1"},{"type":"function","title":"Bonfire.Common.TextExtended.markdown_as_html_earmark/2","doc":"","ref":"Bonfire.Common.TextExtended.html#markdown_as_html_earmark/2"},{"type":"function","title":"Bonfire.Common.TextExtended.markdown_as_html_mdex/2","doc":"","ref":"Bonfire.Common.TextExtended.html#markdown_as_html_mdex/2"},{"type":"function","title":"Bonfire.Common.TextExtended.markdown_checkboxes/1","doc":"","ref":"Bonfire.Common.TextExtended.html#markdown_checkboxes/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_emote/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_emote/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_emote/2","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_emote/2"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_markdown_to_html/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_markdown_to_html/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_markdown_to_html/2","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_markdown_to_html/2"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_normalize_html/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_normalize_html/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_render_templated/2","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_render_templated/2"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_sane_html/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_sane_html/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_to_snake/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_to_snake/1"},{"type":"function","title":"Bonfire.Common.TextExtended.normalise_links/1","doc":"","ref":"Bonfire.Common.TextExtended.html#normalise_links/1"},{"type":"function","title":"Bonfire.Common.TextExtended.normalise_links/2","doc":"","ref":"Bonfire.Common.TextExtended.html#normalise_links/2"},{"type":"function","title":"Bonfire.Common.TextExtended.random_string/0","doc":"","ref":"Bonfire.Common.TextExtended.html#random_string/0"},{"type":"function","title":"Bonfire.Common.TextExtended.random_string/1","doc":"","ref":"Bonfire.Common.TextExtended.html#random_string/1"},{"type":"function","title":"Bonfire.Common.TextExtended.regex_list/2","doc":"","ref":"Bonfire.Common.TextExtended.html#regex_list/2"},{"type":"function","title":"Bonfire.Common.TextExtended.sentence_truncate/1","doc":"","ref":"Bonfire.Common.TextExtended.html#sentence_truncate/1"},{"type":"function","title":"Bonfire.Common.TextExtended.sentence_truncate/2","doc":"","ref":"Bonfire.Common.TextExtended.html#sentence_truncate/2"},{"type":"function","title":"Bonfire.Common.TextExtended.sentence_truncate/3","doc":"","ref":"Bonfire.Common.TextExtended.html#sentence_truncate/3"},{"type":"function","title":"Bonfire.Common.TextExtended.slug/1","doc":"","ref":"Bonfire.Common.TextExtended.html#slug/1"},{"type":"function","title":"Bonfire.Common.TextExtended.strlen/1","doc":"","ref":"Bonfire.Common.TextExtended.html#strlen/1"},{"type":"function","title":"Bonfire.Common.TextExtended.text_only/1","doc":"","ref":"Bonfire.Common.TextExtended.html#text_only/1"},{"type":"function","title":"Bonfire.Common.TextExtended.truncate/1","doc":"","ref":"Bonfire.Common.TextExtended.html#truncate/1"},{"type":"function","title":"Bonfire.Common.TextExtended.truncate/2","doc":"","ref":"Bonfire.Common.TextExtended.html#truncate/2"},{"type":"function","title":"Bonfire.Common.TextExtended.truncate/3","doc":"","ref":"Bonfire.Common.TextExtended.html#truncate/3"},{"type":"function","title":"Bonfire.Common.TextExtended.underscore_truncate/1","doc":"","ref":"Bonfire.Common.TextExtended.html#underscore_truncate/1"},{"type":"function","title":"Bonfire.Common.TextExtended.underscore_truncate/2","doc":"","ref":"Bonfire.Common.TextExtended.html#underscore_truncate/2"},{"type":"function","title":"Bonfire.Common.TextExtended.upcase_first/1","doc":"","ref":"Bonfire.Common.TextExtended.html#upcase_first/1"},{"type":"function","title":"Bonfire.Common.TextExtended.verb_infinitive/1","doc":"","ref":"Bonfire.Common.TextExtended.html#verb_infinitive/1"},{"type":"module","title":"Bonfire.Common.Types","doc":"","ref":"Bonfire.Common.Types.html"},{"type":"function","title":"Bonfire.Common.Types.all_object_type_names/0","doc":"Outputs the names all object types, for the purpose of adding to the localisation strings, as long as the output is piped through to localise_strings/1 at compile time.","ref":"Bonfire.Common.Types.html#all_object_type_names/0"},{"type":"function","title":"Bonfire.Common.Types.defines_struct?/1","doc":"Takes an object or module name and checks if it defines a struct","ref":"Bonfire.Common.Types.html#defines_struct?/1"},{"type":"function","title":"Bonfire.Common.Types.is_numeric/1","doc":"Takes a value and returns true if it's a number or can be converted to a float","ref":"Bonfire.Common.Types.html#is_numeric/1"},{"type":"function","title":"Bonfire.Common.Types.is_ulid?/1","doc":"Takes a string and returns true if it is a valid ULID (Universally Unique Lexicographically Sortable Identifier)","ref":"Bonfire.Common.Types.html#is_ulid?/1"},{"type":"function","title":"Bonfire.Common.Types.is_uuid?/1","doc":"Takes a string and returns true if it is a valid UUID (Universally Unique Identifier)","ref":"Bonfire.Common.Types.html#is_uuid?/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_convert_ulids/1","doc":"Takes a map or list of maps, and if the value of a key in the map is a ULID, it replaces it with the corresponding Crockford Base32 encoded string.","ref":"Bonfire.Common.Types.html#maybe_convert_ulids/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_atom/1","doc":"Takes a string and returns an atom if it can be converted to one, else returns the input itself","ref":"Bonfire.Common.Types.html#maybe_to_atom/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_atom!/1","doc":"Takes a string or an atom and returns an atom if it is one or can be converted to one, else returns nil.","ref":"Bonfire.Common.Types.html#maybe_to_atom!/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_atom_or_module/3","doc":"","ref":"Bonfire.Common.Types.html#maybe_to_atom_or_module/3"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_float/2","doc":"Converts a value to a floating-point number if possible. If the value cannot be converted to a float, it returns a fallback value (which defaults to 0 if not provided)","ref":"Bonfire.Common.Types.html#maybe_to_float/2"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_integer/2","doc":"Converts a value to an integer if possible. If the value is not an integer, it attempts to convert it to a float and then rounds it to the nearest integer. Otherwise it returns a fallback value (which defaults to 0 if not provided).","ref":"Bonfire.Common.Types.html#maybe_to_integer/2"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_module/2","doc":"Takes a string and returns the corresponding Elixir module if it exists and is not disabled in the app.","ref":"Bonfire.Common.Types.html#maybe_to_module/2"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_snake_atom/1","doc":"Takes a string as input, converts it to snake_case, and converts it to an atom if such an atom exists, otherwise returns nil.","ref":"Bonfire.Common.Types.html#maybe_to_snake_atom/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_string/1","doc":"Handles multiple cases where the input value is of a different type (atom, list, tuple, etc.) and returns a string representation of it.","ref":"Bonfire.Common.Types.html#maybe_to_string/1"},{"type":"function","title":"Bonfire.Common.Types.module_to_human_readable/1","doc":"Takes a module name (as a string or an atom) and converts it to a human-readable string. It removes the `Elixir.` prefix (if it exists) and any other prefixes (eg. `Bonfire.Common.`) and converts the final part of the module name to a string in title case (eg. `Types`).","ref":"Bonfire.Common.Types.html#module_to_human_readable/1"},{"type":"function","title":"Bonfire.Common.Types.module_to_str/1","doc":"Takes a module atom and converts it to a string, or a string and removes the `Elixir.` prefix if it exists.","ref":"Bonfire.Common.Types.html#module_to_str/1"},{"type":"function","title":"Bonfire.Common.Types.object_type/1","doc":"Takes an object, module name, or string, and returns the type of the object. The function uses various patterns to match different object types (such as associations, Pointables, edges/verbs, etc.). If none of the patterns match, the function returns nil.","ref":"Bonfire.Common.Types.html#object_type/1"},{"type":"function","title":"Bonfire.Common.Types.object_type_display/1","doc":"","ref":"Bonfire.Common.Types.html#object_type_display/1"},{"type":"function","title":"Bonfire.Common.Types.sanitise_name/1","doc":"Used for mapping schema types to user-friendly names.\n\nGiven a string representing a schema type name, returns a sanitised version of it, or nil for object types (or mixins) that shouldn't be displayed.","ref":"Bonfire.Common.Types.html#sanitise_name/1"},{"type":"function","title":"Examples - Bonfire.Common.Types.sanitise_name/1","doc":"iex> sanitise_name(\"Apactivity\")\n \"Federated Object\"","ref":"Bonfire.Common.Types.html#sanitise_name/1-examples"},{"type":"function","title":"Bonfire.Common.Types.table_id/1","doc":"Given a schema module, returns its table ID (i.e. Pointable ULID).","ref":"Bonfire.Common.Types.html#table_id/1"},{"type":"function","title":"Examples - Bonfire.Common.Types.table_id/1","doc":"iex> table_id(Bonfire.Data.Social.APActivity)\n \"30NF1REAPACTTAB1ENVMBER0NE\"","ref":"Bonfire.Common.Types.html#table_id/1-examples"},{"type":"function","title":"Bonfire.Common.Types.table_type/1","doc":"Given an object or module name, returns its respective table table ID (i.e. Pointable ULID).","ref":"Bonfire.Common.Types.html#table_type/1"},{"type":"function","title":"Examples - Bonfire.Common.Types.table_type/1","doc":"iex> table_type(%Bonfire.Data.Social.APActivity{})\n \"30NF1REAPACTTAB1ENVMBER0NE\"\n \n iex> table_type(%Needle.Pointer{table_id: \"30NF1REAPACTTAB1ENVMBER0NE\"})\n \"30NF1REAPACTTAB1ENVMBER0NE\"\n\n iex> table_type(Bonfire.Data.Social.APActivity)\n \"30NF1REAPACTTAB1ENVMBER0NE\"","ref":"Bonfire.Common.Types.html#table_type/1-examples"},{"type":"function","title":"Bonfire.Common.Types.table_types/1","doc":"Given a list of schema types, returns a list of their respective table types. Filters out any empty values.","ref":"Bonfire.Common.Types.html#table_types/1"},{"type":"function","title":"Examples - Bonfire.Common.Types.table_types/1","doc":"iex> table_types([:activity, :person])\n [\"activities\", \"people\"]\n\nGiven a single schema type, returns its respective table type.","ref":"Bonfire.Common.Types.html#table_types/1-examples"},{"type":"function","title":"Examples - Bonfire.Common.Types.table_types/1","doc":"iex> table_types(:activity)\n \"activities\"","ref":"Bonfire.Common.Types.html#table_types/1-examples"},{"type":"function","title":"Bonfire.Common.Types.typeof/1","doc":"Takes an object and returns its data type as a module name or atom","ref":"Bonfire.Common.Types.html#typeof/1"},{"type":"function","title":"Bonfire.Common.Types.ulid/1","doc":"Takes an object or list of objects and returns the ULID (Universally Unique Lexicographically Sortable Identifier) ID(s) if present in the object.","ref":"Bonfire.Common.Types.html#ulid/1"},{"type":"function","title":"Bonfire.Common.Types.ulid!/1","doc":"Takes an object and returns the ULID (Universally Unique Lexicographically Sortable Identifier) ID if present in the object. Throws an error if the ULID ID is not present.","ref":"Bonfire.Common.Types.html#ulid!/1"},{"type":"function","title":"Bonfire.Common.Types.ulids/1","doc":"","ref":"Bonfire.Common.Types.html#ulids/1"},{"type":"function","title":"Bonfire.Common.Types.ulids_or/2","doc":"","ref":"Bonfire.Common.Types.html#ulids_or/2"},{"type":"module","title":"Bonfire.Common.URIs","doc":"","ref":"Bonfire.Common.URIs.html"},{"type":"function","title":"Bonfire.Common.URIs.base_domain/1","doc":"","ref":"Bonfire.Common.URIs.html#base_domain/1"},{"type":"function","title":"Bonfire.Common.URIs.base_uri/1","doc":"Return the homepage URI (as struct) of the local instance","ref":"Bonfire.Common.URIs.html#base_uri/1"},{"type":"function","title":"Bonfire.Common.URIs.base_url/1","doc":"Return the homepage URL (as string) of the local instance","ref":"Bonfire.Common.URIs.html#base_url/1"},{"type":"function","title":"Bonfire.Common.URIs.canonical_url/1","doc":"Returns the canonical URL (i.e. the one used for ActivityPub federation) of an object","ref":"Bonfire.Common.URIs.html#canonical_url/1"},{"type":"function","title":"Bonfire.Common.URIs.fallback/1","doc":"","ref":"Bonfire.Common.URIs.html#fallback/1"},{"type":"function","title":"Bonfire.Common.URIs.fallback/2","doc":"","ref":"Bonfire.Common.URIs.html#fallback/2"},{"type":"function","title":"Bonfire.Common.URIs.fallback/3","doc":"","ref":"Bonfire.Common.URIs.html#fallback/3"},{"type":"function","title":"Bonfire.Common.URIs.is_uri?/1","doc":"Returns true if the given string is a valid URI.","ref":"Bonfire.Common.URIs.html#is_uri?/1"},{"type":"function","title":"Bonfire.Common.URIs.maybe_generate_canonical_url/1","doc":"","ref":"Bonfire.Common.URIs.html#maybe_generate_canonical_url/1"},{"type":"function","title":"Bonfire.Common.URIs.path/3","doc":"Returns the path (URL on the local instance) for the given object/struct (eg. a User), view or schema module, or path name (atom defined in routes), along with optional arguments.","ref":"Bonfire.Common.URIs.html#path/3"},{"type":"function","title":"Bonfire.Common.URIs.path_by_id/4","doc":"","ref":"Bonfire.Common.URIs.html#path_by_id/4"},{"type":"function","title":"Bonfire.Common.URIs.remote_canonical_url/1","doc":"","ref":"Bonfire.Common.URIs.html#remote_canonical_url/1"},{"type":"function","title":"Bonfire.Common.URIs.url_path/2","doc":"Returns the full URL (including domain and path) for a given object, module, or path name.","ref":"Bonfire.Common.URIs.html#url_path/2"},{"type":"function","title":"Bonfire.Common.URIs.validate_uri/1","doc":"Validates a URI string.","ref":"Bonfire.Common.URIs.html#validate_uri/1"},{"type":"module","title":"Bonfire.Common.Utils","doc":"Various very commonly used utility functions for the Bonfire application.","ref":"Bonfire.Common.Utils.html"},{"type":"function","title":"Bonfire.Common.Utils.apply_error/3","doc":"","ref":"Bonfire.Common.Utils.html#apply_error/3"},{"type":"function","title":"Bonfire.Common.Utils.apply_task/3","doc":"Runs a function asynchronously in a Task. Simply a shorthand for calling functions in `Task` and `Task.Supervisor` but with support for multi-tenancy in the spawned process. \n\n- `Task.async/1` the caller creates a new process links and monitors it. Once the task action finishes, a message is sent to the caller with the result. `Task.await/2` is used to read the message sent by the task. When using `async`, you *must* `await` a reply as they are always sent. \n\n- `Task.start_link/1` is suggested instead if you are not expecting a reply. It starts a statically supervised task as part of a supervision tree, linked to the calling process (meaning it will be stopped when the caller stops). \n\n- `Task.start/1` can be used for fire-and-forget tasks, like side-effects, when you have no interest on its results nor if it completes successfully (because if the server is shut down it won't be restarted).\n\nFor more serious tasks, consider using `Oban` or `apply_task_supervised/3` for supervised tasks when possible:\n\n- `Task.Supervisor.start_child/2` allows you to start a fire-and-forget task when you don't care about its results or if it completes successfully or not.\n\n- `Task.Supervisor.async/2` + `Task.await/2` allows you to execute tasks concurrently and retrieve its result. If the task fails, the caller will also fail.","ref":"Bonfire.Common.Utils.html#apply_task/3"},{"type":"function","title":"Bonfire.Common.Utils.apply_task_supervised/3","doc":"","ref":"Bonfire.Common.Utils.html#apply_task_supervised/3"},{"type":"function","title":"Bonfire.Common.Utils.current_account/2","doc":"Returns the current account from socket, assigns, or options.","ref":"Bonfire.Common.Utils.html#current_account/2"},{"type":"function","title":"Bonfire.Common.Utils.current_account_and_or_user_ids/1","doc":"","ref":"Bonfire.Common.Utils.html#current_account_and_or_user_ids/1"},{"type":"function","title":"Bonfire.Common.Utils.current_account_auth!/2","doc":"","ref":"Bonfire.Common.Utils.html#current_account_auth!/2"},{"type":"function","title":"Bonfire.Common.Utils.current_account_id/2","doc":"","ref":"Bonfire.Common.Utils.html#current_account_id/2"},{"type":"function","title":"Bonfire.Common.Utils.current_user/2","doc":"Returns the current user from socket, assigns, or options.","ref":"Bonfire.Common.Utils.html#current_user/2"},{"type":"function","title":"Bonfire.Common.Utils.current_user_auth!/2","doc":"","ref":"Bonfire.Common.Utils.html#current_user_auth!/2"},{"type":"function","title":"Bonfire.Common.Utils.current_user_id/2","doc":"Returns the current user ID from socket, assigns, or options.","ref":"Bonfire.Common.Utils.html#current_user_id/2"},{"type":"function","title":"Bonfire.Common.Utils.current_user_required!/1","doc":"","ref":"Bonfire.Common.Utils.html#current_user_required!/1"},{"type":"function","title":"Bonfire.Common.Utils.e/2","doc":"Returns a value, or a fallback if nil/false","ref":"Bonfire.Common.Utils.html#e/2"},{"type":"function","title":"Bonfire.Common.Utils.e/3","doc":"Extracts a value from a map (and various other data structures), or returns a fallback if not present or empty. If more arguments are provided it looks for nested data (with the last argument always being the fallback).","ref":"Bonfire.Common.Utils.html#e/3"},{"type":"function","title":"Bonfire.Common.Utils.e/4","doc":"Returns a value from a nested map, or a fallback if not present","ref":"Bonfire.Common.Utils.html#e/4"},{"type":"function","title":"Bonfire.Common.Utils.e/5","doc":"","ref":"Bonfire.Common.Utils.html#e/5"},{"type":"function","title":"Bonfire.Common.Utils.e/6","doc":"","ref":"Bonfire.Common.Utils.html#e/6"},{"type":"function","title":"Bonfire.Common.Utils.e/7","doc":"","ref":"Bonfire.Common.Utils.html#e/7"},{"type":"function","title":"Bonfire.Common.Utils.e/8","doc":"","ref":"Bonfire.Common.Utils.html#e/8"},{"type":"function","title":"Bonfire.Common.Utils.empty?/1","doc":"Returns true if the given value is nil, an empty map, an empty list, or an empty string.","ref":"Bonfire.Common.Utils.html#empty?/1"},{"type":"function","title":"Bonfire.Common.Utils.maybe/2","doc":"Applies change_fn if the first parameter is not nil.","ref":"Bonfire.Common.Utils.html#maybe/2"},{"type":"function","title":"Bonfire.Common.Utils.maybe_apply/4","doc":"Helpers for calling hypothetical functions in other modules. Returns the result of calling a function with the given arguments, or the result of fallback function if the primary function is not defined (by default just logging an error message).","ref":"Bonfire.Common.Utils.html#maybe_apply/4"},{"type":"function","title":"Bonfire.Common.Utils.maybe_from_opts/3","doc":"Returns the value of a key from options keyword list or map, or a fallback if not present or empty.","ref":"Bonfire.Common.Utils.html#maybe_from_opts/3"},{"type":"function","title":"Bonfire.Common.Utils.ok_unwrap/2","doc":"Unwraps an `{:ok, val}` tuple, returning the value, or returns a fallback value (nil by default) if the tuple is `{:error, _}` or `:error`.","ref":"Bonfire.Common.Utils.html#ok_unwrap/2"},{"type":"function","title":"Bonfire.Common.Utils.round_nearest/1","doc":"","ref":"Bonfire.Common.Utils.html#round_nearest/1"},{"type":"function","title":"Bonfire.Common.Utils.round_nearest/2","doc":"","ref":"Bonfire.Common.Utils.html#round_nearest/2"},{"type":"function","title":"Bonfire.Common.Utils.socket_connected?/1","doc":"","ref":"Bonfire.Common.Utils.html#socket_connected?/1"},{"type":"function","title":"Bonfire.Common.Utils.to_options/1","doc":"Converts a map, user, socket, tuple, etc, to a keyword list for standardised use as function options.","ref":"Bonfire.Common.Utils.html#to_options/1"},{"type":"module","title":"Bonfire.Ecto","doc":"`Bonfire.Epics` helpers for working with `Ecto`","ref":"Bonfire.Ecto.html"},{"type":"module","title":"Bonfire.Ecto.Acts.Begin","doc":"An Act that enters a transaction unless it senses that it would be futile.","ref":"Bonfire.Ecto.Acts.Begin.html"},{"type":"function","title":"Bonfire.Ecto.Acts.Begin.run/2","doc":"","ref":"Bonfire.Ecto.Acts.Begin.html#run/2"},{"type":"module","title":"Bonfire.Ecto.Acts.Commit","doc":"A placeholder marker used by Begin to identify when to commit the transaction.","ref":"Bonfire.Ecto.Acts.Commit.html"},{"type":"function","title":"Bonfire.Ecto.Acts.Commit.run/2","doc":"","ref":"Bonfire.Ecto.Acts.Commit.html#run/2"},{"type":"module","title":"Bonfire.Ecto.Acts.Delete","doc":"An act that marks a changeset or struct for deletion","ref":"Bonfire.Ecto.Acts.Delete.html"},{"type":"function","title":"Bonfire.Ecto.Acts.Delete.maybe_delete/2","doc":"","ref":"Bonfire.Ecto.Acts.Delete.html#maybe_delete/2"},{"type":"function","title":"Bonfire.Ecto.Acts.Delete.run/2","doc":"","ref":"Bonfire.Ecto.Acts.Delete.html#run/2"},{"type":"module","title":"Bonfire.Ecto.Acts.Work","doc":"An act that performs queued up work in a transaction.\n\nWork is queued up with calls to `add/2` in earlier acts and when run, this act will apply the\nappropriate actions.\n\nOnly runs if there are no epic or changesets errors.","ref":"Bonfire.Ecto.Acts.Work.html"},{"type":"function","title":"Bonfire.Ecto.Acts.Work.add/2","doc":"Records that a particular key contains a changeset for processing.\n\nUse in earlier acts, to schedule work for in-transaction.\n\nIf you wish to delete, you must ensure you set the changeset's `:action` key to `:delete`.","ref":"Bonfire.Ecto.Acts.Work.html#add/2"},{"type":"module","title":"Bonfire.Epics","doc":"","ref":"Bonfire.Epics.html"},{"type":"macro","title":"Bonfire.Epics.maybe_debug/3","doc":"","ref":"Bonfire.Epics.html#maybe_debug/3"},{"type":"macro","title":"Bonfire.Epics.maybe_debug/4","doc":"","ref":"Bonfire.Epics.html#maybe_debug/4"},{"type":"macro","title":"Bonfire.Epics.smart/4","doc":"Like `debug`, but will omit fully outputting the inspectable thing\nand still print the message if only `:debug` is set","ref":"Bonfire.Epics.html#smart/4"},{"type":"behaviour","title":"Bonfire.Epics.Act","doc":"","ref":"Bonfire.Epics.Act.html"},{"type":"macro","title":"Bonfire.Epics.Act.debug/3","doc":"","ref":"Bonfire.Epics.Act.html#debug/3"},{"type":"function","title":"Bonfire.Epics.Act.new/1","doc":"","ref":"Bonfire.Epics.Act.html#new/1"},{"type":"function","title":"Bonfire.Epics.Act.new/2","doc":"","ref":"Bonfire.Epics.Act.html#new/2"},{"type":"function","title":"Bonfire.Epics.Act.new/3","doc":"","ref":"Bonfire.Epics.Act.html#new/3"},{"type":"callback","title":"Bonfire.Epics.Act.run/2","doc":"","ref":"Bonfire.Epics.Act.html#c:run/2"},{"type":"type","title":"Bonfire.Epics.Act.ret/0","doc":"","ref":"Bonfire.Epics.Act.html#t:ret/0"},{"type":"type","title":"Bonfire.Epics.Act.t/0","doc":"","ref":"Bonfire.Epics.Act.html#t:t/0"},{"type":"module","title":"Bonfire.Epics.Debug","doc":"","ref":"Bonfire.Epics.Debug.html"},{"type":"function","title":"Bonfire.Epics.Debug.do_maybe_debug/4","doc":"","ref":"Bonfire.Epics.Debug.html#do_maybe_debug/4"},{"type":"function","title":"Bonfire.Epics.Debug.opts/2","doc":"","ref":"Bonfire.Epics.Debug.html#opts/2"},{"type":"module","title":"Bonfire.Epics.Epic","doc":"","ref":"Bonfire.Epics.Epic.html"},{"type":"function","title":"Bonfire.Epics.Epic.add_error/2","doc":"","ref":"Bonfire.Epics.Epic.html#add_error/2"},{"type":"function","title":"Bonfire.Epics.Epic.add_error/5","doc":"","ref":"Bonfire.Epics.Epic.html#add_error/5"},{"type":"function","title":"Bonfire.Epics.Epic.append/2","doc":"","ref":"Bonfire.Epics.Epic.html#append/2"},{"type":"function","title":"Bonfire.Epics.Epic.assign/2","doc":"","ref":"Bonfire.Epics.Epic.html#assign/2"},{"type":"function","title":"Bonfire.Epics.Epic.assign/3","doc":"","ref":"Bonfire.Epics.Epic.html#assign/3"},{"type":"macro","title":"Bonfire.Epics.Epic.debug/3","doc":"","ref":"Bonfire.Epics.Epic.html#debug/3"},{"type":"function","title":"Bonfire.Epics.Epic.from_config!/2","doc":"Loads an epic from the app's config","ref":"Bonfire.Epics.Epic.html#from_config!/2"},{"type":"function","title":"Bonfire.Epics.Epic.from_spec!/1","doc":"Loads an epic from a specification of steps","ref":"Bonfire.Epics.Epic.html#from_spec!/1"},{"type":"macro","title":"Bonfire.Epics.Epic.maybe_debug/3","doc":"","ref":"Bonfire.Epics.Epic.html#maybe_debug/3"},{"type":"function","title":"Bonfire.Epics.Epic.new/1","doc":"","ref":"Bonfire.Epics.Epic.html#new/1"},{"type":"function","title":"Bonfire.Epics.Epic.prepend/2","doc":"","ref":"Bonfire.Epics.Epic.html#prepend/2"},{"type":"function","title":"Bonfire.Epics.Epic.render_errors/1","doc":"","ref":"Bonfire.Epics.Epic.html#render_errors/1"},{"type":"function","title":"Bonfire.Epics.Epic.run/1","doc":"","ref":"Bonfire.Epics.Epic.html#run/1"},{"type":"function","title":"Bonfire.Epics.Epic.update/4","doc":"","ref":"Bonfire.Epics.Epic.html#update/4"},{"type":"type","title":"Bonfire.Epics.Epic.t/0","doc":"","ref":"Bonfire.Epics.Epic.html#t:t/0"},{"type":"exception","title":"Bonfire.Epics.Error","doc":"","ref":"Bonfire.Epics.Error.html"},{"type":"function","title":"Bonfire.Epics.Error.message/1","doc":"","ref":"Bonfire.Epics.Error.html#message/1"},{"type":"module","title":"Bonfire.Epics.Test","doc":"","ref":"Bonfire.Epics.Test.html"},{"type":"macro","title":"Bonfire.Epics.Test.assert_epic_ok/1","doc":"","ref":"Bonfire.Epics.Test.html#assert_epic_ok/1"},{"type":"function","title":"Bonfire.Epics.Test.debug_error/1","doc":"","ref":"Bonfire.Epics.Test.html#debug_error/1"},{"type":"module","title":"Bonfire.Files","doc":"This module contains general functions for handling files, and also an Ecto schema which is a multimixin for storing one or more media attached to a Pointable object.\n\nAn uploader definition must be provided for each new upload, or will be automatically chosen based on the file type.\n\nA few definitions exist as defaults inside of this namespace, but you can also define\nyour own - a `Bonfire.Files.Definition` is an extension of `Waffle.Definition`,\nhowever the `allowed_media_types/0` and `max_file_size/0` callback are added, \nwith which you need to define what media types are accepted for these types of uploads.\n(You can also return `:all` to accept all media types).\n\nTo use the uploader:\n\n```\niex> {:ok, media} = Bonfire.Files.upload(MyUploader, context, %{path: \"./150.png\"})\niex> media.media_type\n\"image/png\"\niex> Bonfire.Files.remote_url(MyUploader, media)\n\"/uploads/my/01F3AY6JV30G06BY4DR9BTW5EH\"\n```","ref":"Bonfire.Files.html"},{"type":"function","title":"Bonfire.Files.ap_publish_activity/1","doc":"","ref":"Bonfire.Files.html#ap_publish_activity/1"},{"type":"function","title":"Bonfire.Files.ap_receive_attachments/2","doc":"","ref":"Bonfire.Files.html#ap_receive_attachments/2"},{"type":"function","title":"Bonfire.Files.data_url/2","doc":"","ref":"Bonfire.Files.html#data_url/2"},{"type":"function","title":"Bonfire.Files.extract_metadata/1","doc":"","ref":"Bonfire.Files.html#extract_metadata/1"},{"type":"function","title":"Bonfire.Files.file_extension/1","doc":"","ref":"Bonfire.Files.html#file_extension/1"},{"type":"function","title":"Bonfire.Files.file_extension_only/1","doc":"","ref":"Bonfire.Files.html#file_extension_only/1"},{"type":"function","title":"Bonfire.Files.full_url/2","doc":"","ref":"Bonfire.Files.html#full_url/2"},{"type":"function","title":"Bonfire.Files.normalise_size/2","doc":"","ref":"Bonfire.Files.html#normalise_size/2"},{"type":"function","title":"Bonfire.Files.remote_url/3","doc":"Return the URL that a local file has.","ref":"Bonfire.Files.html#remote_url/3"},{"type":"function","title":"Bonfire.Files.upload/5","doc":"Attempt to store a file, returning an upload, for any parent item that\nparticipates in the meta abstraction, providing the user/context of\nthe upload.","ref":"Bonfire.Files.html#upload/5"},{"type":"function","title":"Bonfire.Files.validate/3","doc":"","ref":"Bonfire.Files.html#validate/3"},{"type":"module","title":"Bonfire.Files.Acts.AttachMedia","doc":"Saves uploaded files as attachments to the post.\n\nAct Options:\n * `:changeset` - key in assigns to find changeset, required\n * `:attrs` - epic options key to find the attributes at, default: `:post_attrs`.\n * `:uploads` - epic options key to find the uploaded media objects at, default: `:uploaded_media`.","ref":"Bonfire.Files.Acts.AttachMedia.html"},{"type":"function","title":"Bonfire.Files.Acts.AttachMedia.cast/2","doc":"","ref":"Bonfire.Files.Acts.AttachMedia.html#cast/2"},{"type":"function","title":"Bonfire.Files.Acts.AttachMedia.run/2","doc":"","ref":"Bonfire.Files.Acts.AttachMedia.html#run/2"},{"type":"module","title":"Bonfire.Files.Acts.URLPreviews","doc":"Fetch and save metadata of URLs\n\nAct Options:\n * `:changeset` - key in assigns to find changeset, required\n * `:attrs` - epic options key to find the attributes at, default: `:post_attrs`.\n * `:uploads` - epic options key to find the uploaded media objects at, default: `:urls`.","ref":"Bonfire.Files.Acts.URLPreviews.html"},{"type":"function","title":"Bonfire.Files.Acts.URLPreviews.maybe_fetch_and_save/2","doc":"","ref":"Bonfire.Files.Acts.URLPreviews.html#maybe_fetch_and_save/2"},{"type":"function","title":"Bonfire.Files.Acts.URLPreviews.run/2","doc":"","ref":"Bonfire.Files.Acts.URLPreviews.html#run/2"},{"type":"module","title":"Bonfire.Files.BannerUploader","doc":"Uploader for larger images, for example, a profile page banner.\n\nDoes not do any type of image resizing/thumbnailing.","ref":"Bonfire.Files.BannerUploader.html"},{"type":"function","title":"Bonfire.Files.BannerUploader.acl/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#acl/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.allowed_media_types/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.asset_host/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.async/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#async/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.attach/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#attach/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.blurhash/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.blurred/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#blurred/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.bucket/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#bucket/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.bucket/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#bucket/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.default_url/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#default_url/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.default_url/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#default_url/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.delete/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#delete/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.filename/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#filename/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.max_file_size/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.prefix_dir/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.prepare/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#prepare/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.remote_file_headers/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.remote_url/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.s3_object_headers/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.storage_dir/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.store/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#store/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.transform/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#transform/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.upload/4","doc":"","ref":"Bonfire.Files.BannerUploader.html#upload/4"},{"type":"function","title":"Bonfire.Files.BannerUploader.url/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#url/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.url/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#url/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.url/3","doc":"","ref":"Bonfire.Files.BannerUploader.html#url/3"},{"type":"function","title":"Bonfire.Files.BannerUploader.urls/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#urls/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.validate/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#validate/1"},{"type":"module","title":"Bonfire.Files.Blurred","doc":"","ref":"Bonfire.Files.Blurred.html"},{"type":"function","title":"Bonfire.Files.Blurred.blurhash/2","doc":"","ref":"Bonfire.Files.Blurred.html#blurhash/2"},{"type":"function","title":"Bonfire.Files.Blurred.blurred/2","doc":"Create a blurred JPEG (deprecated in favour of blurhash)","ref":"Bonfire.Files.Blurred.html#blurred/2"},{"type":"module","title":"Bonfire.Files.CapsuleIntegration.Attacher","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html"},{"type":"function","title":"Bonfire.Files.CapsuleIntegration.Attacher.attach/3","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html#attach/3"},{"type":"function","title":"Bonfire.Files.CapsuleIntegration.Attacher.storages/2","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html#storages/2"},{"type":"function","title":"Bonfire.Files.CapsuleIntegration.Attacher.store/3","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html#store/3"},{"type":"function","title":"Bonfire.Files.CapsuleIntegration.Attacher.upload/3","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html#upload/3"},{"type":"behaviour","title":"Bonfire.Files.Definition","doc":"Extension to Waffle.Definition, adding support for checking against media types\nparsed through magic bytes instead of file extensions, which can be modified by the user.\n\nYou can still use validate/2 and other waffle callbacks.","ref":"Bonfire.Files.Definition.html"},{"type":"callback","title":"Bonfire.Files.Definition.allowed_media_types/0","doc":"","ref":"Bonfire.Files.Definition.html#c:allowed_media_types/0"},{"type":"module","title":"Bonfire.Files.DocumentUploader","doc":"","ref":"Bonfire.Files.DocumentUploader.html"},{"type":"function","title":"Bonfire.Files.DocumentUploader.acl/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#acl/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.allowed_media_types/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.asset_host/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.async/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#async/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.attach/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#attach/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.blurhash/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.blurred/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#blurred/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.bucket/0","doc":"Definition for any type of document, allows most media types\nthat support documents, archives, video and audio.","ref":"Bonfire.Files.DocumentUploader.html#bucket/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.bucket/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#bucket/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.default_url/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#default_url/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.default_url/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#default_url/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.delete/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#delete/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.filename/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#filename/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.max_file_size/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.prefix_dir/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.prepare/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#prepare/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.remote_file_headers/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.remote_url/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.s3_object_headers/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.storage_dir/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.store/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#store/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.transform/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#transform/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.upload/4","doc":"","ref":"Bonfire.Files.DocumentUploader.html#upload/4"},{"type":"function","title":"Bonfire.Files.DocumentUploader.url/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#url/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.url/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#url/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.url/3","doc":"","ref":"Bonfire.Files.DocumentUploader.html#url/3"},{"type":"function","title":"Bonfire.Files.DocumentUploader.urls/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#urls/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.validate/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#validate/1"},{"type":"module","title":"Bonfire.Files.FaviconStore","doc":"","ref":"Bonfire.Files.FaviconStore.html"},{"type":"function","title":"Bonfire.Files.FaviconStore.acl/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#acl/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.allowed_media_types/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.asset_host/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.async/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#async/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.attach/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#attach/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.blurhash/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.blurred/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#blurred/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.bucket/0","doc":"Definition for storing media types for a URL","ref":"Bonfire.Files.FaviconStore.html#bucket/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.bucket/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#bucket/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.cached_or_async_fetch_url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#cached_or_async_fetch_url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.cached_or_fetch/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#cached_or_fetch/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.default_url/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#default_url/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.default_url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#default_url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.delete/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#delete/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.favicon_url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#favicon_url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.filename/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#filename/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.max_file_size/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.prefix_dir/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.prepare/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#prepare/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.remote_file_headers/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.remote_url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.s3_object_headers/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.storage_dir/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.store/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#store/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.transform/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#transform/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.upload/4","doc":"","ref":"Bonfire.Files.FaviconStore.html#upload/4"},{"type":"function","title":"Bonfire.Files.FaviconStore.url/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#url/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.url/3","doc":"","ref":"Bonfire.Files.FaviconStore.html#url/3"},{"type":"function","title":"Bonfire.Files.FaviconStore.urls/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#urls/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.validate/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#validate/1"},{"type":"module","title":"Bonfire.Files.FileDenied","doc":"","ref":"Bonfire.Files.FileDenied.html"},{"type":"function","title":"Bonfire.Files.FileDenied.new/1","doc":"","ref":"Bonfire.Files.FileDenied.html#new/1"},{"type":"type","title":"Bonfire.Files.FileDenied.t/0","doc":"","ref":"Bonfire.Files.FileDenied.html#t:t/0"},{"type":"module","title":"Bonfire.Files.IconUploader","doc":"","ref":"Bonfire.Files.IconUploader.html"},{"type":"function","title":"Bonfire.Files.IconUploader.acl/2","doc":"","ref":"Bonfire.Files.IconUploader.html#acl/2"},{"type":"function","title":"Bonfire.Files.IconUploader.allowed_media_types/0","doc":"","ref":"Bonfire.Files.IconUploader.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.IconUploader.asset_host/0","doc":"","ref":"Bonfire.Files.IconUploader.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.IconUploader.async/0","doc":"","ref":"Bonfire.Files.IconUploader.html#async/0"},{"type":"function","title":"Bonfire.Files.IconUploader.attach/2","doc":"","ref":"Bonfire.Files.IconUploader.html#attach/2"},{"type":"function","title":"Bonfire.Files.IconUploader.blurhash/1","doc":"","ref":"Bonfire.Files.IconUploader.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.IconUploader.blurred/1","doc":"","ref":"Bonfire.Files.IconUploader.html#blurred/1"},{"type":"function","title":"Bonfire.Files.IconUploader.bucket/0","doc":"Uploader for smaller image icons, usually used as avatars.\n\nTODO: Support resizing.","ref":"Bonfire.Files.IconUploader.html#bucket/0"},{"type":"function","title":"Bonfire.Files.IconUploader.bucket/1","doc":"","ref":"Bonfire.Files.IconUploader.html#bucket/1"},{"type":"function","title":"Bonfire.Files.IconUploader.default_url/1","doc":"","ref":"Bonfire.Files.IconUploader.html#default_url/1"},{"type":"function","title":"Bonfire.Files.IconUploader.default_url/2","doc":"","ref":"Bonfire.Files.IconUploader.html#default_url/2"},{"type":"function","title":"Bonfire.Files.IconUploader.delete/1","doc":"","ref":"Bonfire.Files.IconUploader.html#delete/1"},{"type":"function","title":"Bonfire.Files.IconUploader.filename/2","doc":"","ref":"Bonfire.Files.IconUploader.html#filename/2"},{"type":"function","title":"Bonfire.Files.IconUploader.max_file_size/0","doc":"","ref":"Bonfire.Files.IconUploader.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.IconUploader.prefix_dir/0","doc":"","ref":"Bonfire.Files.IconUploader.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.IconUploader.prepare/1","doc":"","ref":"Bonfire.Files.IconUploader.html#prepare/1"},{"type":"function","title":"Bonfire.Files.IconUploader.remote_file_headers/1","doc":"","ref":"Bonfire.Files.IconUploader.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.IconUploader.remote_url/2","doc":"","ref":"Bonfire.Files.IconUploader.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.IconUploader.s3_object_headers/2","doc":"","ref":"Bonfire.Files.IconUploader.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.IconUploader.storage_dir/2","doc":"","ref":"Bonfire.Files.IconUploader.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.IconUploader.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.IconUploader.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.IconUploader.store/1","doc":"","ref":"Bonfire.Files.IconUploader.html#store/1"},{"type":"function","title":"Bonfire.Files.IconUploader.transform/2","doc":"","ref":"Bonfire.Files.IconUploader.html#transform/2"},{"type":"function","title":"Bonfire.Files.IconUploader.upload/4","doc":"","ref":"Bonfire.Files.IconUploader.html#upload/4"},{"type":"function","title":"Bonfire.Files.IconUploader.url/1","doc":"","ref":"Bonfire.Files.IconUploader.html#url/1"},{"type":"function","title":"Bonfire.Files.IconUploader.url/2","doc":"","ref":"Bonfire.Files.IconUploader.html#url/2"},{"type":"function","title":"Bonfire.Files.IconUploader.url/3","doc":"","ref":"Bonfire.Files.IconUploader.html#url/3"},{"type":"function","title":"Bonfire.Files.IconUploader.urls/2","doc":"","ref":"Bonfire.Files.IconUploader.html#urls/2"},{"type":"function","title":"Bonfire.Files.IconUploader.validate/1","doc":"","ref":"Bonfire.Files.IconUploader.html#validate/1"},{"type":"module","title":"Bonfire.Files.Image.Edit","doc":"","ref":"Bonfire.Files.Image.Edit.html"},{"type":"function","title":"Bonfire.Files.Image.Edit.banner/3","doc":"","ref":"Bonfire.Files.Image.Edit.html#banner/3"},{"type":"function","title":"Bonfire.Files.Image.Edit.blur/2","doc":"","ref":"Bonfire.Files.Image.Edit.html#blur/2"},{"type":"function","title":"Bonfire.Files.Image.Edit.dominant_color/3","doc":"Returns the dominant color of an image (given as path, binary, or stream) as HEX value.\n\n`bins` is an integer number of color frequency bins the image is divided into. The default is 10.","ref":"Bonfire.Files.Image.Edit.html#dominant_color/3"},{"type":"function","title":"Bonfire.Files.Image.Edit.image/3","doc":"","ref":"Bonfire.Files.Image.Edit.html#image/3"},{"type":"function","title":"Bonfire.Files.Image.Edit.thumbnail/1","doc":"","ref":"Bonfire.Files.Image.Edit.html#thumbnail/1"},{"type":"function","title":"Bonfire.Files.Image.Edit.thumbnail_image/2","doc":"","ref":"Bonfire.Files.Image.Edit.html#thumbnail_image/2"},{"type":"function","title":"Bonfire.Files.Image.Edit.thumbnail_pdf/1","doc":"","ref":"Bonfire.Files.Image.Edit.html#thumbnail_pdf/1"},{"type":"module","title":"Bonfire.Files.ImageUploader","doc":"Uploader for larger images, for example, a profile page banner.\n\nDoes not do any type of image resizing/thumbnailing.","ref":"Bonfire.Files.ImageUploader.html"},{"type":"function","title":"Bonfire.Files.ImageUploader.acl/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#acl/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.allowed_media_types/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.asset_host/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.async/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#async/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.attach/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#attach/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.blurhash/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.blurred/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#blurred/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.bucket/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#bucket/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.bucket/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#bucket/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.default_url/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#default_url/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.default_url/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#default_url/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.delete/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#delete/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.filename/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#filename/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.max_file_size/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.prefix_dir/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.prepare/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#prepare/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.remote_file_headers/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.remote_url/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.s3_object_headers/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.storage_dir/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.store/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#store/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.transform/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#transform/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.upload/4","doc":"","ref":"Bonfire.Files.ImageUploader.html#upload/4"},{"type":"function","title":"Bonfire.Files.ImageUploader.url/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#url/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.url/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#url/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.url/3","doc":"","ref":"Bonfire.Files.ImageUploader.html#url/3"},{"type":"function","title":"Bonfire.Files.ImageUploader.urls/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#urls/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.validate/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#validate/1"},{"type":"module","title":"Bonfire.Files.LiveHandler","doc":"","ref":"Bonfire.Files.LiveHandler.html"},{"type":"function","title":"Bonfire.Files.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Files.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Files.LiveHandler.handle_progress/3","doc":"","ref":"Bonfire.Files.LiveHandler.html#handle_progress/3"},{"type":"function","title":"Bonfire.Files.LiveHandler.set_fallback/5","doc":"","ref":"Bonfire.Files.LiveHandler.html#set_fallback/5"},{"type":"macro","title":"Bonfire.Files.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Files.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Files.Media","doc":"","ref":"Bonfire.Files.Media.html"},{"type":"function","title":"Bonfire.Files.Media.hard_delete/2","doc":"Delete an upload, removing any associated files.","ref":"Bonfire.Files.Media.html#hard_delete/2"},{"type":"function","title":"Bonfire.Files.Media.insert/4","doc":"","ref":"Bonfire.Files.Media.html#insert/4"},{"type":"function","title":"Bonfire.Files.Media.many/1","doc":"","ref":"Bonfire.Files.Media.html#many/1"},{"type":"function","title":"Bonfire.Files.Media.one/1","doc":"","ref":"Bonfire.Files.Media.html#one/1"},{"type":"function","title":"Bonfire.Files.Media.soft_delete/1","doc":"Delete an upload, removing it from indexing, but the files remain available.","ref":"Bonfire.Files.Media.html#soft_delete/1"},{"type":"function","title":"Bonfire.Files.Media.update_by/2","doc":"","ref":"Bonfire.Files.Media.html#update_by/2"},{"type":"type","title":"Bonfire.Files.Media.t/0","doc":"","ref":"Bonfire.Files.Media.html#t:t/0"},{"type":"module","title":"Bonfire.Files.Media.Queries","doc":"","ref":"Bonfire.Files.Media.Queries.html"},{"type":"function","title":"Bonfire.Files.Media.Queries.filter/2","doc":"Filter the query according to arbitrary criteria","ref":"Bonfire.Files.Media.Queries.html#filter/2"},{"type":"function","title":"Bonfire.Files.Media.Queries.query/1","doc":"","ref":"Bonfire.Files.Media.Queries.html#query/1"},{"type":"function","title":"Bonfire.Files.Media.Queries.query/2","doc":"","ref":"Bonfire.Files.Media.Queries.html#query/2"},{"type":"module","title":"Bonfire.Files.Prepare","doc":"","ref":"Bonfire.Files.Prepare.html"},{"type":"function","title":"Bonfire.Files.Prepare.prepare/2","doc":"","ref":"Bonfire.Files.Prepare.html#prepare/2"},{"type":"module","title":"Bonfire.Files.ResponsiveImage","doc":"Resizes images at compile time (when possible) or runtime:\n\n```\nuse Bonfire.Files.ResponsiveImage\n\n~H( )\nor\n~H( )\n\nor for paths only known at runtime:\n~H( )\nor\n~H( )\n```","ref":"Bonfire.Files.ResponsiveImage.html"},{"type":"macro","title":"Bonfire.Files.ResponsiveImage.compile_src/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#compile_src/2"},{"type":"macro","title":"Bonfire.Files.ResponsiveImage.compile_srcset/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#compile_srcset/2"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.resize/1","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#resize/1"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.resize/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#resize/2"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.resize_timed/1","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#resize_timed/1"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.src/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#src/2"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.srcset/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#srcset/2"},{"type":"module","title":"Bonfire.Files.Routes","doc":"","ref":"Bonfire.Files.Routes.html"},{"type":"module","title":"Bonfire.Files.RuntimeConfig","doc":"","ref":"Bonfire.Files.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Files.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Files.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Files.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Files.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Files.Simulation","doc":"","ref":"Bonfire.Files.Simulation.html"},{"type":"function","title":"Bonfire.Files.Simulation.cleanup/1","doc":"","ref":"Bonfire.Files.Simulation.html#cleanup/1"},{"type":"function","title":"Bonfire.Files.Simulation.fake_upload/2","doc":"","ref":"Bonfire.Files.Simulation.html#fake_upload/2"},{"type":"function","title":"Bonfire.Files.Simulation.geometry/1","doc":"","ref":"Bonfire.Files.Simulation.html#geometry/1"},{"type":"function","title":"Bonfire.Files.Simulation.icon_file/0","doc":"","ref":"Bonfire.Files.Simulation.html#icon_file/0"},{"type":"function","title":"Bonfire.Files.Simulation.image_file/0","doc":"","ref":"Bonfire.Files.Simulation.html#image_file/0"},{"type":"function","title":"Bonfire.Files.Simulation.pdf_file/0","doc":"","ref":"Bonfire.Files.Simulation.html#pdf_file/0"},{"type":"function","title":"Bonfire.Files.Simulation.text_file/0","doc":"","ref":"Bonfire.Files.Simulation.html#text_file/0"},{"type":"module","title":"Bonfire.Files.Versions","doc":"","ref":"Bonfire.Files.Versions.html"},{"type":"module","title":"Bonfire.Mailer","doc":"","ref":"Bonfire.Mailer.html"},{"type":"function","title":"Bonfire.Mailer.config/0","doc":"","ref":"Bonfire.Mailer.html#config/0"},{"type":"function","title":"Bonfire.Mailer.deliver/1","doc":"","ref":"Bonfire.Mailer.html#deliver/1"},{"type":"function","title":"Bonfire.Mailer.deliver_later/2","doc":"","ref":"Bonfire.Mailer.html#deliver_later/2"},{"type":"function","title":"Bonfire.Mailer.deliver_later!/2","doc":"","ref":"Bonfire.Mailer.html#deliver_later!/2"},{"type":"function","title":"Bonfire.Mailer.deliver_now/2","doc":"","ref":"Bonfire.Mailer.html#deliver_now/2"},{"type":"function","title":"Bonfire.Mailer.deliver_now!/2","doc":"","ref":"Bonfire.Mailer.html#deliver_now!/2"},{"type":"function","title":"Bonfire.Mailer.do_send/2","doc":"","ref":"Bonfire.Mailer.html#do_send/2"},{"type":"function","title":"Bonfire.Mailer.handle_error/2","doc":"","ref":"Bonfire.Mailer.html#handle_error/2"},{"type":"function","title":"Bonfire.Mailer.send/4","doc":"","ref":"Bonfire.Mailer.html#send/4"},{"type":"function","title":"Bonfire.Mailer.send_app_feedback/3","doc":"","ref":"Bonfire.Mailer.html#send_app_feedback/3"},{"type":"function","title":"Bonfire.Mailer.send_async/3","doc":"","ref":"Bonfire.Mailer.html#send_async/3"},{"type":"function","title":"Bonfire.Mailer.send_now/3","doc":"","ref":"Bonfire.Mailer.html#send_now/3"},{"type":"module","title":"Bonfire.Mailer.Checker","doc":"Functions for checking the validity of email addresses and domains","ref":"Bonfire.Mailer.Checker.html"},{"type":"function","title":"Bonfire.Mailer.Checker.validate_domain/1","doc":"Checks whether an email domain is valid, returns a reason if not","ref":"Bonfire.Mailer.Checker.html#validate_domain/1"},{"type":"function","title":"Bonfire.Mailer.Checker.validate_email/1","doc":"Checks whether an email is valid, returns a reason if not","ref":"Bonfire.Mailer.Checker.html#validate_email/1"},{"type":"type","title":"Bonfire.Mailer.Checker.error_reason/0","doc":"","ref":"Bonfire.Mailer.Checker.html#t:error_reason/0"},{"type":"module","title":"Bonfire.Mailer.RuntimeConfig","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Mailer.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Mailer.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html#config_module/0"},{"type":"function","title":"Bonfire.Mailer.RuntimeConfig.mail_blackhole/1","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html#mail_blackhole/1"},{"type":"function","title":"Bonfire.Mailer.RuntimeConfig.mail_service/2","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html#mail_service/2"},{"type":"module","title":"Bonfire.Web.Endpoint","doc":"","ref":"Bonfire.Web.Endpoint.html"},{"type":"function","title":"Bonfire.Web.Endpoint.broadcast/3","doc":"","ref":"Bonfire.Web.Endpoint.html#broadcast/3"},{"type":"function","title":"Bonfire.Web.Endpoint.broadcast!/3","doc":"","ref":"Bonfire.Web.Endpoint.html#broadcast!/3"},{"type":"function","title":"Bonfire.Web.Endpoint.broadcast_from/4","doc":"","ref":"Bonfire.Web.Endpoint.html#broadcast_from/4"},{"type":"function","title":"Bonfire.Web.Endpoint.broadcast_from!/4","doc":"","ref":"Bonfire.Web.Endpoint.html#broadcast_from!/4"},{"type":"function","title":"Bonfire.Web.Endpoint.call/2","doc":"","ref":"Bonfire.Web.Endpoint.html#call/2"},{"type":"function","title":"Bonfire.Web.Endpoint.child_spec/1","doc":"Returns the child specification to start the endpoint\nunder a supervision tree.","ref":"Bonfire.Web.Endpoint.html#child_spec/1"},{"type":"function","title":"Bonfire.Web.Endpoint.config/2","doc":"Returns the endpoint configuration for `key`\n\nReturns `default` if the key does not exist.","ref":"Bonfire.Web.Endpoint.html#config/2"},{"type":"function","title":"Bonfire.Web.Endpoint.config_change/2","doc":"Reloads the configuration given the application environment changes.","ref":"Bonfire.Web.Endpoint.html#config_change/2"},{"type":"function","title":"Bonfire.Web.Endpoint.generate_reverse_router!/1","doc":"(re)generates the reverse router (useful so it can be re-generated when extensions are enabled/disabled)","ref":"Bonfire.Web.Endpoint.html#generate_reverse_router!/1"},{"type":"function","title":"Bonfire.Web.Endpoint.host/0","doc":"Returns the host for the given endpoint.","ref":"Bonfire.Web.Endpoint.html#host/0"},{"type":"function","title":"Bonfire.Web.Endpoint.include_assets/1","doc":"","ref":"Bonfire.Web.Endpoint.html#include_assets/1"},{"type":"function","title":"Bonfire.Web.Endpoint.include_assets/2","doc":"","ref":"Bonfire.Web.Endpoint.html#include_assets/2"},{"type":"function","title":"Bonfire.Web.Endpoint.init/1","doc":"","ref":"Bonfire.Web.Endpoint.html#init/1"},{"type":"function","title":"Bonfire.Web.Endpoint.local_broadcast/3","doc":"","ref":"Bonfire.Web.Endpoint.html#local_broadcast/3"},{"type":"function","title":"Bonfire.Web.Endpoint.local_broadcast_from/4","doc":"","ref":"Bonfire.Web.Endpoint.html#local_broadcast_from/4"},{"type":"function","title":"Bonfire.Web.Endpoint.path/1","doc":"Generates the path information when routing to this endpoint.","ref":"Bonfire.Web.Endpoint.html#path/1"},{"type":"function","title":"Bonfire.Web.Endpoint.reload!/1","doc":"","ref":"Bonfire.Web.Endpoint.html#reload!/1"},{"type":"function","title":"Bonfire.Web.Endpoint.script_name/0","doc":"Generates the script name.","ref":"Bonfire.Web.Endpoint.html#script_name/0"},{"type":"function","title":"Bonfire.Web.Endpoint.server_info/1","doc":"Returns the address and port that the server is running on","ref":"Bonfire.Web.Endpoint.html#server_info/1"},{"type":"function","title":"Bonfire.Web.Endpoint.start_link/1","doc":"Starts the endpoint supervision tree.\n\nAll other options are merged into the endpoint configuration.","ref":"Bonfire.Web.Endpoint.html#start_link/1"},{"type":"function","title":"Bonfire.Web.Endpoint.static_integrity/1","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":"Bonfire.Web.Endpoint.html#static_integrity/1"},{"type":"function","title":"Bonfire.Web.Endpoint.static_lookup/1","doc":"Returns a two item tuple with the first item being the `static_path`\nand the second item being the `static_integrity`.","ref":"Bonfire.Web.Endpoint.html#static_lookup/1"},{"type":"function","title":"Bonfire.Web.Endpoint.static_path/1","doc":"Generates a route to a static file in `priv/static`.","ref":"Bonfire.Web.Endpoint.html#static_path/1"},{"type":"function","title":"Bonfire.Web.Endpoint.static_url/0","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":"Bonfire.Web.Endpoint.html#static_url/0"},{"type":"function","title":"Bonfire.Web.Endpoint.struct_url/0","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":"Bonfire.Web.Endpoint.html#struct_url/0"},{"type":"function","title":"Bonfire.Web.Endpoint.subscribe/2","doc":"","ref":"Bonfire.Web.Endpoint.html#subscribe/2"},{"type":"function","title":"Bonfire.Web.Endpoint.unsubscribe/1","doc":"","ref":"Bonfire.Web.Endpoint.html#unsubscribe/1"},{"type":"function","title":"Bonfire.Web.Endpoint.url/0","doc":"Generates the endpoint base URL without any path information.\n\nIt uses the configuration under `:url` to generate such.","ref":"Bonfire.Web.Endpoint.html#url/0"},{"type":"module","title":"Bonfire.Web.FakeRemoteEndpoint","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.broadcast/3","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#broadcast/3"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.broadcast!/3","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#broadcast!/3"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.broadcast_from/4","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#broadcast_from/4"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.broadcast_from!/4","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#broadcast_from!/4"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.call/2","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#call/2"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.child_spec/1","doc":"Returns the child specification to start the endpoint\nunder a supervision tree.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#child_spec/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.config/2","doc":"Returns the endpoint configuration for `key`\n\nReturns `default` if the key does not exist.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#config/2"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.config_change/2","doc":"Reloads the configuration given the application environment changes.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#config_change/2"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.host/0","doc":"Returns the host for the given endpoint.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#host/0"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.init/1","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#init/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.local_broadcast/3","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#local_broadcast/3"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.local_broadcast_from/4","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#local_broadcast_from/4"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.path/1","doc":"Generates the path information when routing to this endpoint.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#path/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.script_name/0","doc":"Generates the script name.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#script_name/0"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.server_info/1","doc":"Returns the address and port that the server is running on","ref":"Bonfire.Web.FakeRemoteEndpoint.html#server_info/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.start_link/1","doc":"Starts the endpoint supervision tree.\n\nAll other options are merged into the endpoint configuration.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#start_link/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.static_integrity/1","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":"Bonfire.Web.FakeRemoteEndpoint.html#static_integrity/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.static_lookup/1","doc":"Returns a two item tuple with the first item being the `static_path`\nand the second item being the `static_integrity`.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#static_lookup/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.static_path/1","doc":"Generates a route to a static file in `priv/static`.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#static_path/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.static_url/0","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":"Bonfire.Web.FakeRemoteEndpoint.html#static_url/0"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.struct_url/0","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":"Bonfire.Web.FakeRemoteEndpoint.html#struct_url/0"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.subscribe/2","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#subscribe/2"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.unsubscribe/1","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#unsubscribe/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.url/0","doc":"Generates the endpoint base URL without any path information.\n\nIt uses the configuration under `:url` to generate such.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#url/0"},{"type":"module","title":"Bonfire.Web.Router","doc":"","ref":"Bonfire.Web.Router.html"},{"type":"function","title":"Bonfire.Web.Router.account_required/2","doc":"","ref":"Bonfire.Web.Router.html#account_required/2"},{"type":"function","title":"Bonfire.Web.Router.activity_json/2","doc":"","ref":"Bonfire.Web.Router.html#activity_json/2"},{"type":"function","title":"Bonfire.Web.Router.activity_json_or_html/2","doc":"","ref":"Bonfire.Web.Router.html#activity_json_or_html/2"},{"type":"function","title":"Bonfire.Web.Router.admin_required/2","doc":"","ref":"Bonfire.Web.Router.html#admin_required/2"},{"type":"function","title":"Bonfire.Web.Router.basic/2","doc":"","ref":"Bonfire.Web.Router.html#basic/2"},{"type":"function","title":"Bonfire.Web.Router.basic_html/2","doc":"","ref":"Bonfire.Web.Router.html#basic_html/2"},{"type":"function","title":"Bonfire.Web.Router.browser/2","doc":"","ref":"Bonfire.Web.Router.html#browser/2"},{"type":"function","title":"Bonfire.Web.Router.browser_unsafe/2","doc":"","ref":"Bonfire.Web.Router.html#browser_unsafe/2"},{"type":"function","title":"Bonfire.Web.Router.call/2","doc":"Callback invoked by Plug on every request.","ref":"Bonfire.Web.Router.html#call/2"},{"type":"function","title":"Bonfire.Web.Router.guest_only/2","doc":"","ref":"Bonfire.Web.Router.html#guest_only/2"},{"type":"function","title":"Bonfire.Web.Router.html_only/2","doc":"","ref":"Bonfire.Web.Router.html#html_only/2"},{"type":"function","title":"Bonfire.Web.Router.init/1","doc":"Callback required by Plug that initializes the router\nfor serving web requests.","ref":"Bonfire.Web.Router.html#init/1"},{"type":"function","title":"Bonfire.Web.Router.load_current_auth/2","doc":"","ref":"Bonfire.Web.Router.html#load_current_auth/2"},{"type":"function","title":"Bonfire.Web.Router.require_authenticated_user/2","doc":"","ref":"Bonfire.Web.Router.html#require_authenticated_user/2"},{"type":"function","title":"Bonfire.Web.Router.signed_activity_pub/2","doc":"","ref":"Bonfire.Web.Router.html#signed_activity_pub/2"},{"type":"function","title":"Bonfire.Web.Router.static/2","doc":"","ref":"Bonfire.Web.Router.html#static/2"},{"type":"function","title":"Bonfire.Web.Router.throttle_plug_attacks/2","doc":"","ref":"Bonfire.Web.Router.html#throttle_plug_attacks/2"},{"type":"function","title":"Bonfire.Web.Router.user_required/2","doc":"","ref":"Bonfire.Web.Router.html#user_required/2"},{"type":"function","title":"Bonfire.Web.Router.webfinger/2","doc":"","ref":"Bonfire.Web.Router.html#webfinger/2"},{"type":"function","title":"Bonfire.Web.Router.well_known_nodeinfo/2","doc":"","ref":"Bonfire.Web.Router.html#well_known_nodeinfo/2"},{"type":"module","title":"Bonfire.Web.Router.Reverse","doc":"","ref":"Bonfire.Web.Router.Reverse.html"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/2","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/2"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/3","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/3"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/4","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/4"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/5","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/5"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/6","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/6"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/7","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/7"},{"type":"module","title":"Bonfire.Web.Routes","doc":"","ref":"Bonfire.Web.Routes.html"},{"type":"module","title":"Bonfire.Web.Telemetry","doc":"","ref":"Bonfire.Web.Telemetry.html"},{"type":"function","title":"Bonfire.Web.Telemetry.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Web.Telemetry.html#child_spec/1"},{"type":"function","title":"Bonfire.Web.Telemetry.metrics/0","doc":"","ref":"Bonfire.Web.Telemetry.html#metrics/0"},{"type":"function","title":"Bonfire.Web.Telemetry.start_link/1","doc":"","ref":"Bonfire.Web.Telemetry.html#start_link/1"},{"type":"module","title":"Bonfire.Federate.ActivityPub","doc":"","ref":"Bonfire.Federate.ActivityPub.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.disable/1","doc":"","ref":"Bonfire.Federate.ActivityPub.html#disable/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.federating?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.html#federating?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.federating_default?/0","doc":"","ref":"Bonfire.Federate.ActivityPub.html#federating_default?/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.repo/0","doc":"","ref":"Bonfire.Federate.ActivityPub.html#repo/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.set_federating/2","doc":"","ref":"Bonfire.Federate.ActivityPub.html#set_federating/2"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Adapter","doc":"Adapter functions delegated from the `ActivityPub` Library","ref":"Bonfire.Federate.ActivityPub.Adapter.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.base_url/0","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#base_url/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.external_followers_for_activity/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#external_followers_for_activity/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.federate_actor?/3","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#federate_actor?/3"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_actor_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_actor_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_actor_by_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_actor_by_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_actor_by_username/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_actor_by_username/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_follower_local_ids/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_follower_local_ids/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_following_local_ids/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_following_local_ids/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_locale/0","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_locale/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_or_create_service_actor/0","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_or_create_service_actor/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_redirect_url/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_redirect_url/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.handle_activity/1","doc":"Process incoming activities","ref":"Bonfire.Federate.ActivityPub.Adapter.html#handle_activity/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.maybe_create_remote_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#maybe_create_remote_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.maybe_publish_object/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#maybe_publish_object/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.redirect_to_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#redirect_to_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.update_local_actor/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#update_local_actor/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.update_local_actor_cache/1","doc":"For updating an Actor in cache after a User/etc is updated","ref":"Bonfire.Federate.ActivityPub.Adapter.html#update_local_actor_cache/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.update_remote_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#update_remote_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.update_remote_actor/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#update_remote_actor/2"},{"type":"module","title":"Bonfire.Federate.ActivityPub.AdapterUtils","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.all_actors/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#all_actors/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.all_recipients/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#all_recipients/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.ap_base_url/0","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#ap_base_url/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.character_module/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#character_module/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.character_to_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#character_to_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.create_author_object/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#create_author_object/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.create_remote_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#create_remote_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.create_service_character/0","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#create_service_character/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.determine_recipients/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#determine_recipients/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.determine_recipients/3","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#determine_recipients/3"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.determine_recipients/4","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#determine_recipients/4"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.format_actor/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#format_actor/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_actor_by_ap_id/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_actor_by_ap_id/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_actor_username/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_actor_username/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_author/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_author/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_by_url_ap_id_or_username/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_by_url_ap_id_or_username/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character_by_ap_id!/1","doc":"without :ok / :error tuple","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character_by_ap_id!/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character_by_id/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character_by_id/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character_by_username/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character_by_username/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_context_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_context_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_creator_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_creator_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_different_creator_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_different_creator_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_in_reply_to/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_in_reply_to/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_local_actor_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_local_actor_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_local_character_by_ap_id/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_local_character_by_ap_id/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_object_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_object_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_object_ap_id!/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_object_ap_id!/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_object_or_actor_by_ap_id!/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_object_or_actor_by_ap_id!/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_or_create_service_character/0","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_or_create_service_character/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_or_fetch_and_create_by_uri/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_or_fetch_and_create_by_uri/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_or_fetch_and_create_by_username/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_or_fetch_and_create_by_username/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_or_fetch_character_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_or_fetch_character_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_pointer_id_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_pointer_id_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.id_or_object_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#id_or_object_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.is_follow?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#is_follow?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.is_local?/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#is_local?/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.is_local_collection?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#is_local_collection?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.is_local_collection_or_built_in?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#is_local_collection_or_built_in?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.local_actor_ids/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#local_actor_ids/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.log/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#log/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_add_aliases/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_add_aliases/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_apply_or/4","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_apply_or/4"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_attach_property_value/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_attach_property_value/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_create_banner_object/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_create_banner_object/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_create_icon_object/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_create_icon_object/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_create_image_object/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_create_image_object/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_fix_image_object/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_fix_image_object/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_format_image_object_from_path/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_format_image_object_from_path/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_pointer_id_for_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_pointer_id_for_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.preload_peered/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#preload_peered/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.public_uri/0","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#public_uri/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.return_pointable/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#return_pointable/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.return_pointer/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#return_pointer/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.the_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#the_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.validate_url/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#validate_url/1"},{"type":"module","title":"Bonfire.Federate.ActivityPub.BoundariesMRF","doc":"Filter activities depending on their origin instance, actor, or other criteria","ref":"Bonfire.Federate.ActivityPub.BoundariesMRF.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.BoundariesMRF.actor_blocked?/3","doc":"","ref":"Bonfire.Federate.ActivityPub.BoundariesMRF.html#actor_blocked?/3"},{"type":"behaviour","title":"Bonfire.Federate.ActivityPub.FederationModules","doc":"A automatically-generated global list of federation modules which can queried by activity and/or object type.\n\nTo add a module to this list, you should declare `@behaviour Bonfire.Federate.ActivityPub.FederationModules` in it and define a `federation_module/0` function which returns a list of object and/or activity types which that module handles.\n\nExample:\n```\n@behaviour Bonfire.Federate.ActivityPub.FederationModules\ndef federation_module,\n do: [\n \"Announce\",\n {\"Create\", \"Announce\"},\n {\"Undo\", \"Announce\"},\n {\"Delete\", \"Announce\"}\n ]\n```\n\nYou should also then implement these two functions:\n- for outgoing federation: `ap_publish_activity(subject_struct, verb, object_struct)`\n- for incoming federation: `ap_receive_activity(subject_struct, activity_json, object_json)`","ref":"Bonfire.Federate.ActivityPub.FederationModules.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.app_modules/0","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#app_modules/0"},{"type":"callback","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_module/0","doc":"Get a Federation Module identified by activity and/or object type, given a activity and/or object (string or {activity, object} tuple).","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#c:federation_module/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_module/2","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#federation_module/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_module!/2","doc":"Look up a Federation Module, throw :not_found if not found.","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#federation_module!/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_modules/1","doc":"Look up many types at once, throw :not_found if any of them are not found","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#federation_modules/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_modules_data_types/0","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#federation_modules_data_types/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.maybe_federation_module/2","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#maybe_federation_module/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.modules/0","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#modules/0"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Incoming","doc":"","ref":"Bonfire.Federate.ActivityPub.Incoming.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Incoming.no_federation_module_match/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Incoming.html#no_federation_module_match/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Incoming.receive_activity/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Incoming.html#receive_activity/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Incoming.receive_activity/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Incoming.html#receive_activity/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Incoming.receive_object/2","doc":"Create an object without an activity","ref":"Bonfire.Federate.ActivityPub.Incoming.html#receive_object/2"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Instances","doc":"Federated instances\nContext for `Bonfire.Data.ActivityPub.Peer`","ref":"Bonfire.Federate.ActivityPub.Instances.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Instances.get/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Instances.html#get/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Instances.get_or_create/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Instances.html#get_or_create/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Instances.get_or_create_instance_circle/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Instances.html#get_or_create_instance_circle/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Instances.is_blocked?/3","doc":"","ref":"Bonfire.Federate.ActivityPub.Instances.html#is_blocked?/3"},{"type":"module","title":"Bonfire.Federate.ActivityPub.NodeinfoAdapter","doc":"","ref":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.base_url/0","doc":"","ref":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.html#base_url/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.gather_nodeinfo_data/0","doc":"","ref":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.html#gather_nodeinfo_data/0"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Outgoing","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.ap_activity!/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#ap_activity!/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.federate_outgoing?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#federate_outgoing?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.maybe_federate/4","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#maybe_federate/4"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.preparation_error/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#preparation_error/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.push_now!/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#push_now!/1"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Peered","doc":"Federated actors or objects\nContext for `Bonfire.Data.ActivityPub.Peered`","ref":"Bonfire.Federate.ActivityPub.Peered.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.create/3","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#create/3"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.get/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#get/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.get_canonical_uri/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#get_canonical_uri/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.is_blocked?/3","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#is_blocked?/3"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.save_canonical_uri/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#save_canonical_uri/2"},{"type":"module","title":"Bonfire.Federate.ActivityPub.RuntimeConfig","doc":"","ref":"Bonfire.Federate.ActivityPub.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Federate.ActivityPub.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Federate.ActivityPub.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Simulate","doc":"","ref":"Bonfire.Federate.ActivityPub.Simulate.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Simulate.actor_json/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Simulate.html#actor_json/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Simulate.fake_remote_user/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Simulate.html#fake_remote_user/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Simulate.webfingered/0","doc":"","ref":"Bonfire.Federate.ActivityPub.Simulate.html#webfingered/0"},{"type":"module","title":"Bonfire.Invite.Links","doc":"","ref":"Bonfire.Invite.Links.html"},{"type":"function","title":"Bonfire.Invite.Links.create/2","doc":"","ref":"Bonfire.Invite.Links.html#create/2"},{"type":"function","title":"Bonfire.Invite.Links.date_expires/1","doc":"","ref":"Bonfire.Invite.Links.html#date_expires/1"},{"type":"function","title":"Bonfire.Invite.Links.expired?/1","doc":"","ref":"Bonfire.Invite.Links.html#expired?/1"},{"type":"function","title":"Bonfire.Invite.Links.get/2","doc":"","ref":"Bonfire.Invite.Links.html#get/2"},{"type":"function","title":"Bonfire.Invite.Links.list_paginated/2","doc":"","ref":"Bonfire.Invite.Links.html#list_paginated/2"},{"type":"function","title":"Bonfire.Invite.Links.one/2","doc":"","ref":"Bonfire.Invite.Links.html#one/2"},{"type":"function","title":"Bonfire.Invite.Links.query/2","doc":"","ref":"Bonfire.Invite.Links.html#query/2"},{"type":"function","title":"Bonfire.Invite.Links.redeem/1","doc":"","ref":"Bonfire.Invite.Links.html#redeem/1"},{"type":"function","title":"Bonfire.Invite.Links.redeemable?/1","doc":"","ref":"Bonfire.Invite.Links.html#redeemable?/1"},{"type":"module","title":"Bonfire.Invite.Links.Fake","doc":"","ref":"Bonfire.Invite.Links.Fake.html"},{"type":"module","title":"Bonfire.Invite.Links.Integration","doc":"","ref":"Bonfire.Invite.Links.Integration.html"},{"type":"function","title":"Bonfire.Invite.Links.Integration.repo/0","doc":"","ref":"Bonfire.Invite.Links.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Invite.Links.LiveHandler","doc":"","ref":"Bonfire.Invite.Links.LiveHandler.html"},{"type":"function","title":"Bonfire.Invite.Links.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Invite.Links.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Invite.Links.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Invite.Links.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Invite.Links.Web.Routes","doc":"","ref":"Bonfire.Invite.Links.Web.Routes.html"},{"type":"function","title":"Bonfire.Invite.Links.Web.Routes.declare_routes/0","doc":"","ref":"Bonfire.Invite.Links.Web.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.InviteLink","doc":"","ref":"Bonfire.InviteLink.html"},{"type":"function","title":"Bonfire.InviteLink.changeset/2","doc":"","ref":"Bonfire.InviteLink.html#changeset/2"},{"type":"module","title":"Bonfire.Localise","doc":"Runs at compile-time to include dynamic strings (like verb names and object types) in localisation string extraction.","ref":"Bonfire.Localise.html"},{"type":"module","title":"Bonfire.Logging","doc":"","ref":"Bonfire.Logging.html"},{"type":"function","title":"Bonfire.Logging.handle_event/4","doc":"","ref":"Bonfire.Logging.html#handle_event/4"},{"type":"function","title":"Bonfire.Logging.setup/2","doc":"","ref":"Bonfire.Logging.html#setup/2"},{"type":"function","title":"Bonfire.Logging.setup_oban/0","doc":"","ref":"Bonfire.Logging.html#setup_oban/0"},{"type":"function","title":"Bonfire.Logging.setup_opentelemetry/2","doc":"","ref":"Bonfire.Logging.html#setup_opentelemetry/2"},{"type":"module","title":"Bonfire.Me.Accounts","doc":"","ref":"Bonfire.Me.Accounts.html"},{"type":"function","title":"Bonfire.Me.Accounts.allow_signup?/1","doc":"","ref":"Bonfire.Me.Accounts.html#allow_signup?/1"},{"type":"function","title":"Bonfire.Me.Accounts.change_email/3","doc":"","ref":"Bonfire.Me.Accounts.html#change_email/3"},{"type":"function","title":"Bonfire.Me.Accounts.change_password/3","doc":"","ref":"Bonfire.Me.Accounts.html#change_password/3"},{"type":"function","title":"Bonfire.Me.Accounts.change_password/4","doc":"","ref":"Bonfire.Me.Accounts.html#change_password/4"},{"type":"function","title":"Bonfire.Me.Accounts.changeset/3","doc":"","ref":"Bonfire.Me.Accounts.html#changeset/3"},{"type":"function","title":"Bonfire.Me.Accounts.confirm_email/2","doc":"","ref":"Bonfire.Me.Accounts.html#confirm_email/2"},{"type":"function","title":"Bonfire.Me.Accounts.count/0","doc":"","ref":"Bonfire.Me.Accounts.html#count/0"},{"type":"function","title":"Bonfire.Me.Accounts.delete/2","doc":"Use `enqueue_delete/1` instead","ref":"Bonfire.Me.Accounts.html#delete/2"},{"type":"function","title":"Bonfire.Me.Accounts.do_signup/2","doc":"","ref":"Bonfire.Me.Accounts.html#do_signup/2"},{"type":"function","title":"Bonfire.Me.Accounts.enqueue_delete/1","doc":"","ref":"Bonfire.Me.Accounts.html#enqueue_delete/1"},{"type":"function","title":"Bonfire.Me.Accounts.fetch_current/1","doc":"","ref":"Bonfire.Me.Accounts.html#fetch_current/1"},{"type":"function","title":"Bonfire.Me.Accounts.get_by_email/1","doc":"","ref":"Bonfire.Me.Accounts.html#get_by_email/1"},{"type":"function","title":"Bonfire.Me.Accounts.get_current/1","doc":"","ref":"Bonfire.Me.Accounts.html#get_current/1"},{"type":"function","title":"Bonfire.Me.Accounts.instance_is_invite_only?/0","doc":"","ref":"Bonfire.Me.Accounts.html#instance_is_invite_only?/0"},{"type":"function","title":"Bonfire.Me.Accounts.is_admin?/1","doc":"","ref":"Bonfire.Me.Accounts.html#is_admin?/1"},{"type":"function","title":"Bonfire.Me.Accounts.is_first_account?/0","doc":"","ref":"Bonfire.Me.Accounts.html#is_first_account?/0"},{"type":"function","title":"Bonfire.Me.Accounts.login/2","doc":"Attempts to log in by password and either username or email.\n\nAccepts a map of parameters or a `LoginFields` changeset.\n\nOn success, returns `{:ok, account, user}` if a username was\nprovided and `{:ok, account, nil}` otherwise.\nOn error, returns `{:error, changeset}`","ref":"Bonfire.Me.Accounts.html#login/2"},{"type":"function","title":"Bonfire.Me.Accounts.login_valid?/2","doc":"","ref":"Bonfire.Me.Accounts.html#login_valid?/2"},{"type":"function","title":"Bonfire.Me.Accounts.maybe_redeem_invite/2","doc":"","ref":"Bonfire.Me.Accounts.html#maybe_redeem_invite/2"},{"type":"function","title":"Bonfire.Me.Accounts.redeemable_invite?/1","doc":"","ref":"Bonfire.Me.Accounts.html#redeemable_invite?/1"},{"type":"function","title":"Bonfire.Me.Accounts.request_confirm_email/2","doc":"","ref":"Bonfire.Me.Accounts.html#request_confirm_email/2"},{"type":"function","title":"Bonfire.Me.Accounts.request_forgot_password/1","doc":"","ref":"Bonfire.Me.Accounts.html#request_forgot_password/1"},{"type":"function","title":"Bonfire.Me.Accounts.signup/2","doc":"","ref":"Bonfire.Me.Accounts.html#signup/2"},{"type":"function","title":"Bonfire.Me.Accounts.update_is_admin/3","doc":"","ref":"Bonfire.Me.Accounts.html#update_is_admin/3"},{"type":"type","title":"Bonfire.Me.Accounts.changeset_name/0","doc":"","ref":"Bonfire.Me.Accounts.html#t:changeset_name/0"},{"type":"module","title":"Bonfire.Me.Accounts.ChangeEmailFields","doc":"","ref":"Bonfire.Me.Accounts.ChangeEmailFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.ChangeEmailFields.changeset/2","doc":"","ref":"Bonfire.Me.Accounts.ChangeEmailFields.html#changeset/2"},{"type":"module","title":"Bonfire.Me.Accounts.ChangePasswordFields","doc":"","ref":"Bonfire.Me.Accounts.ChangePasswordFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.ChangePasswordFields.changeset/3","doc":"","ref":"Bonfire.Me.Accounts.ChangePasswordFields.html#changeset/3"},{"type":"module","title":"Bonfire.Me.Accounts.ConfirmEmailFields","doc":"","ref":"Bonfire.Me.Accounts.ConfirmEmailFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.ConfirmEmailFields.changeset/2","doc":"","ref":"Bonfire.Me.Accounts.ConfirmEmailFields.html#changeset/2"},{"type":"module","title":"Bonfire.Me.Accounts.ForgotPasswordFields","doc":"","ref":"Bonfire.Me.Accounts.ForgotPasswordFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.ForgotPasswordFields.changeset/2","doc":"","ref":"Bonfire.Me.Accounts.ForgotPasswordFields.html#changeset/2"},{"type":"module","title":"Bonfire.Me.Accounts.LoginFields","doc":"","ref":"Bonfire.Me.Accounts.LoginFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.LoginFields.changeset/2","doc":"","ref":"Bonfire.Me.Accounts.LoginFields.html#changeset/2"},{"type":"module","title":"Bonfire.Me.Accounts.Queries","doc":"","ref":"Bonfire.Me.Accounts.Queries.html"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.by_email/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#by_email/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.confirm_email/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#confirm_email/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.count/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#count/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.current/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#current/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.login_by_account_id/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#login_by_account_id/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.login_by_email/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#login_by_email/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.login_by_username/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#login_by_username/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.request_confirm_email/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#request_confirm_email/1"},{"type":"module","title":"Bonfire.Me.Accounts.SecondFactors","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.changeset/3","doc":"Sets or updates the TOTP secret.\nThe secret is a random 20 bytes binary that is used to generate the QR Code to\nenable 2FA using auth applications. It will only be updated if the OTP code\nsent is valid.","ref":"Bonfire.Me.Accounts.SecondFactors.html#changeset/3"},{"type":"function","title":"Examples - Bonfire.Me.Accounts.SecondFactors.changeset/3","doc":"iex> changeset(%AuthSecondFactor{secret: >}, code: \"123456\")\n %Ecto.Changeset{data: %AuthSecondFactor{}}","ref":"Bonfire.Me.Accounts.SecondFactors.html#changeset/3-examples"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.delete_account_totp/1","doc":"Disables the TOTP configuration for the given account.","ref":"Bonfire.Me.Accounts.SecondFactors.html#delete_account_totp/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.enabled?/0","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#enabled?/0"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.format_secret/1","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#format_secret/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.get_account_totp/1","doc":"Gets the %AuthSecondFactor{} entry, if any.","ref":"Bonfire.Me.Accounts.SecondFactors.html#get_account_totp/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.maybe_authenticate/2","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#maybe_authenticate/2"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.maybe_cast_totp_changeset/3","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#maybe_cast_totp_changeset/3"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.new/0","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#new/0"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.new_qrcode/1","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#new_qrcode/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.new_struct/1","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#new_struct/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.new_uri/1","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#new_uri/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.validate_account_totp/2","doc":"Validates if the given TOTP code is valid.","ref":"Bonfire.Me.Accounts.SecondFactors.html#validate_account_totp/2"},{"type":"module","title":"Bonfire.Me.Acts.Caretaker","doc":"An act that deals with maintaining a `Caretaker` record for a changeset.\n\nDuring insertion, adds an associated insert if a caretaker can be found in the epic options.\n\nDuring deletion, ensures that the related record will be cleaned up.\n\nEpic Options (insert):\n * `:caretaker` - user that will take care of the post, falls back to `:current_user`\n * `:current_user` - user that will taker care of the post, fallback if `:caretaker` is not set.\n\nAct Options:\n * `:on` - key to find changeset, required.","ref":"Bonfire.Me.Acts.Caretaker.html"},{"type":"function","title":"Bonfire.Me.Acts.Caretaker.run/2","doc":"","ref":"Bonfire.Me.Acts.Caretaker.html#run/2"},{"type":"module","title":"Bonfire.Me.Acts.Creator","doc":"An act that deals with maintaining a `Created` record for a changeset.\n\nDuring insertion, adds an associated insert if a creator can be found in the epic options.\n\nDuring deletion, ensures that the related record will be cleaned up.\n\nEpic Options (insert):\n * `:creator` - user that will create the post, falls back to `:current_user`\n * `:current_user` - user that will create the post, fallback if `:creator` is not set.\n\nAct Options:\n * `:on` - key to find changeset, required.","ref":"Bonfire.Me.Acts.Creator.html"},{"type":"module","title":"Bonfire.Me.Characters","doc":"","ref":"Bonfire.Me.Characters.html"},{"type":"function","title":"Bonfire.Me.Characters.by_username/1","doc":"","ref":"Bonfire.Me.Characters.html#by_username/1"},{"type":"function","title":"Bonfire.Me.Characters.by_username!/1","doc":"","ref":"Bonfire.Me.Characters.html#by_username!/1"},{"type":"function","title":"Bonfire.Me.Characters.by_username_q/1","doc":"","ref":"Bonfire.Me.Characters.html#by_username_q/1"},{"type":"function","title":"Bonfire.Me.Characters.changeset/3","doc":"","ref":"Bonfire.Me.Characters.html#changeset/3"},{"type":"function","title":"Bonfire.Me.Characters.character_mention_prefix/1","doc":"","ref":"Bonfire.Me.Characters.html#character_mention_prefix/1"},{"type":"function","title":"Bonfire.Me.Characters.character_url/1","doc":"","ref":"Bonfire.Me.Characters.html#character_url/1"},{"type":"function","title":"Bonfire.Me.Characters.clean_username/1","doc":"","ref":"Bonfire.Me.Characters.html#clean_username/1"},{"type":"function","title":"Bonfire.Me.Characters.display_username/4","doc":"","ref":"Bonfire.Me.Characters.html#display_username/4"},{"type":"function","title":"Bonfire.Me.Characters.get/1","doc":"","ref":"Bonfire.Me.Characters.html#get/1"},{"type":"function","title":"Bonfire.Me.Characters.hash_available?/1","doc":"","ref":"Bonfire.Me.Characters.html#hash_available?/1"},{"type":"function","title":"Bonfire.Me.Characters.hash_delete/1","doc":"","ref":"Bonfire.Me.Characters.html#hash_delete/1"},{"type":"function","title":"Bonfire.Me.Characters.indexing_object_format/1","doc":"","ref":"Bonfire.Me.Characters.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Me.Characters.q_by_id/1","doc":"","ref":"Bonfire.Me.Characters.html#q_by_id/1"},{"type":"function","title":"Bonfire.Me.Characters.remote_changeset/2","doc":"","ref":"Bonfire.Me.Characters.html#remote_changeset/2"},{"type":"function","title":"Bonfire.Me.Characters.schema_module/0","doc":"","ref":"Bonfire.Me.Characters.html#schema_module/0"},{"type":"function","title":"Bonfire.Me.Characters.update/2","doc":"","ref":"Bonfire.Me.Characters.html#update/2"},{"type":"function","title":"Bonfire.Me.Characters.username_available?/1","doc":"","ref":"Bonfire.Me.Characters.html#username_available?/1"},{"type":"module","title":"Bonfire.Me.DeleteWorker","doc":"","ref":"Bonfire.Me.DeleteWorker.html"},{"type":"function","title":"Bonfire.Me.DeleteWorker.care_taken/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#care_taken/1"},{"type":"function","title":"Bonfire.Me.DeleteWorker.closures/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#closures/1"},{"type":"function","title":"Bonfire.Me.DeleteWorker.delete/2","doc":"","ref":"Bonfire.Me.DeleteWorker.html#delete/2"},{"type":"function","title":"Bonfire.Me.DeleteWorker.delete_now/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#delete_now/1"},{"type":"function","title":"Bonfire.Me.DeleteWorker.enqueue_delete/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#enqueue_delete/1"},{"type":"function","title":"Bonfire.Me.DeleteWorker.perform/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#perform/1"},{"type":"module","title":"Bonfire.Me.Fake","doc":"","ref":"Bonfire.Me.Fake.html"},{"type":"function","title":"Bonfire.Me.Fake.fake_account!/2","doc":"","ref":"Bonfire.Me.Fake.html#fake_account!/2"},{"type":"function","title":"Bonfire.Me.Fake.fake_user!/3","doc":"","ref":"Bonfire.Me.Fake.html#fake_user!/3"},{"type":"module","title":"Bonfire.Me.Fake.Helpers","doc":"","ref":"Bonfire.Me.Fake.Helpers.html"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.atusername/0","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#atusername/0"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.avatar_url/0","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#avatar_url/0"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.avatar_url/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#avatar_url/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.character_subform/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#character_subform/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.confirm_token/0","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#confirm_token/0"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.create_user_form/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#create_user_form/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.credential_subform/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#credential_subform/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.email_subform/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#email_subform/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.icon_url/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#icon_url/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.image/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#image/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.image_url/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#image_url/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.profile_subform/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#profile_subform/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.signup_form/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#signup_form/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.user_live/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#user_live/1"},{"type":"module","title":"Bonfire.Me.Integration","doc":"","ref":"Bonfire.Me.Integration.html"},{"type":"function","title":"Bonfire.Me.Integration.indexing_format_created/2","doc":"","ref":"Bonfire.Me.Integration.html#indexing_format_created/2"},{"type":"function","title":"Bonfire.Me.Integration.indexing_format_creator/2","doc":"","ref":"Bonfire.Me.Integration.html#indexing_format_creator/2"},{"type":"function","title":"Bonfire.Me.Integration.is_local?/1","doc":"","ref":"Bonfire.Me.Integration.html#is_local?/1"},{"type":"function","title":"Bonfire.Me.Integration.mailer/0","doc":"","ref":"Bonfire.Me.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Me.Integration.maybe_index/1","doc":"","ref":"Bonfire.Me.Integration.html#maybe_index/1"},{"type":"function","title":"Bonfire.Me.Integration.repo/0","doc":"","ref":"Bonfire.Me.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Me.Mails","doc":"","ref":"Bonfire.Me.Mails.html"},{"type":"function","title":"Bonfire.Me.Mails.confirm_email/2","doc":"","ref":"Bonfire.Me.Mails.html#confirm_email/2"},{"type":"function","title":"Bonfire.Me.Mails.forgot_password/1","doc":"","ref":"Bonfire.Me.Mails.html#forgot_password/1"},{"type":"function","title":"Bonfire.Me.Mails.render/3","doc":"","ref":"Bonfire.Me.Mails.html#render/3"},{"type":"function","title":"Bonfire.Me.Mails.signup_confirm_email/1","doc":"","ref":"Bonfire.Me.Mails.html#signup_confirm_email/1"},{"type":"module","title":"Bonfire.Me.Mails.EmailView","doc":"","ref":"Bonfire.Me.Mails.EmailView.html"},{"type":"function","title":"Bonfire.Me.Mails.EmailView.render_template/2","doc":"","ref":"Bonfire.Me.Mails.EmailView.html#render_template/2"},{"type":"module","title":"Bonfire.Me.Profiles","doc":"","ref":"Bonfire.Me.Profiles.html"},{"type":"function","title":"Bonfire.Me.Profiles.changeset/2","doc":"","ref":"Bonfire.Me.Profiles.html#changeset/2"},{"type":"function","title":"Bonfire.Me.Profiles.changeset_simple/2","doc":"","ref":"Bonfire.Me.Profiles.html#changeset_simple/2"},{"type":"function","title":"Bonfire.Me.Profiles.indexing_object_format/1","doc":"","ref":"Bonfire.Me.Profiles.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Me.Profiles.schema_module/0","doc":"","ref":"Bonfire.Me.Profiles.html#schema_module/0"},{"type":"module","title":"Bonfire.Me.Profiles.LiveHandler","doc":"","ref":"Bonfire.Me.Profiles.LiveHandler.html"},{"type":"function","title":"Bonfire.Me.Profiles.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Me.Profiles.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Me.Profiles.LiveHandler.set_profile_image/5","doc":"","ref":"Bonfire.Me.Profiles.LiveHandler.html#set_profile_image/5"},{"type":"macro","title":"Bonfire.Me.Profiles.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Me.Profiles.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Me.RuntimeConfig","doc":"","ref":"Bonfire.Me.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Me.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Me.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Me.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Me.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Me.SharedUsers","doc":"","ref":"Bonfire.Me.SharedUsers.html"},{"type":"function","title":"Bonfire.Me.SharedUsers.add_account/3","doc":"","ref":"Bonfire.Me.SharedUsers.html#add_account/3"},{"type":"function","title":"Bonfire.Me.SharedUsers.add_accounts/3","doc":"","ref":"Bonfire.Me.SharedUsers.html#add_accounts/3"},{"type":"function","title":"Bonfire.Me.SharedUsers.by_account/1","doc":"","ref":"Bonfire.Me.SharedUsers.html#by_account/1"},{"type":"function","title":"Bonfire.Me.SharedUsers.by_username_and_account_query/2","doc":"","ref":"Bonfire.Me.SharedUsers.html#by_username_and_account_query/2"},{"type":"function","title":"Bonfire.Me.SharedUsers.federation_module/0","doc":"","ref":"Bonfire.Me.SharedUsers.html#federation_module/0"},{"type":"function","title":"Bonfire.Me.SharedUsers.init_shared_user/2","doc":"","ref":"Bonfire.Me.SharedUsers.html#init_shared_user/2"},{"type":"module","title":"Bonfire.Me.Users","doc":"","ref":"Bonfire.Me.Users.html"},{"type":"function","title":"Bonfire.Me.Users.ap_receive_activity/3","doc":"","ref":"Bonfire.Me.Users.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Me.Users.by_account/1","doc":"","ref":"Bonfire.Me.Users.html#by_account/1"},{"type":"function","title":"Bonfire.Me.Users.by_ap_id/1","doc":"","ref":"Bonfire.Me.Users.html#by_ap_id/1"},{"type":"function","title":"Bonfire.Me.Users.by_ap_id!/1","doc":"","ref":"Bonfire.Me.Users.html#by_ap_id!/1"},{"type":"function","title":"Bonfire.Me.Users.by_canonical_uri/1","doc":"","ref":"Bonfire.Me.Users.html#by_canonical_uri/1"},{"type":"function","title":"Bonfire.Me.Users.by_id/2","doc":"","ref":"Bonfire.Me.Users.html#by_id/2"},{"type":"function","title":"Bonfire.Me.Users.by_username/2","doc":"","ref":"Bonfire.Me.Users.html#by_username/2"},{"type":"function","title":"Bonfire.Me.Users.by_username!/1","doc":"","ref":"Bonfire.Me.Users.html#by_username!/1"},{"type":"function","title":"Bonfire.Me.Users.by_username_and_account/2","doc":"Used for switch-user functionality","ref":"Bonfire.Me.Users.html#by_username_and_account/2"},{"type":"function","title":"Bonfire.Me.Users.changeset/4","doc":"","ref":"Bonfire.Me.Users.html#changeset/4"},{"type":"function","title":"Bonfire.Me.Users.check_active/1","doc":"","ref":"Bonfire.Me.Users.html#check_active/1"},{"type":"function","title":"Bonfire.Me.Users.check_active!/1","doc":"","ref":"Bonfire.Me.Users.html#check_active!/1"},{"type":"function","title":"Bonfire.Me.Users.count/1","doc":"","ref":"Bonfire.Me.Users.html#count/1"},{"type":"function","title":"Bonfire.Me.Users.create/2","doc":"","ref":"Bonfire.Me.Users.html#create/2"},{"type":"function","title":"Bonfire.Me.Users.create_remote/1","doc":"Creates a remote user","ref":"Bonfire.Me.Users.html#create_remote/1"},{"type":"function","title":"Bonfire.Me.Users.delete/2","doc":"Use `enqueue_delete/1` instead","ref":"Bonfire.Me.Users.html#delete/2"},{"type":"function","title":"Bonfire.Me.Users.enqueue_delete/1","doc":"","ref":"Bonfire.Me.Users.html#enqueue_delete/1"},{"type":"function","title":"Bonfire.Me.Users.federation_module/0","doc":"","ref":"Bonfire.Me.Users.html#federation_module/0"},{"type":"function","title":"Bonfire.Me.Users.fetch_current/1","doc":"","ref":"Bonfire.Me.Users.html#fetch_current/1"},{"type":"function","title":"Bonfire.Me.Users.flatten/1","doc":"","ref":"Bonfire.Me.Users.html#flatten/1"},{"type":"function","title":"Bonfire.Me.Users.format_actor/1","doc":"","ref":"Bonfire.Me.Users.html#format_actor/1"},{"type":"function","title":"Bonfire.Me.Users.get_current/1","doc":"","ref":"Bonfire.Me.Users.html#get_current/1"},{"type":"function","title":"Bonfire.Me.Users.get_current/2","doc":"","ref":"Bonfire.Me.Users.html#get_current/2"},{"type":"function","title":"Bonfire.Me.Users.get_only_in_account/1","doc":"","ref":"Bonfire.Me.Users.html#get_only_in_account/1"},{"type":"function","title":"Bonfire.Me.Users.indexing_object_format/1","doc":"","ref":"Bonfire.Me.Users.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Me.Users.is_active?/1","doc":"","ref":"Bonfire.Me.Users.html#is_active?/1"},{"type":"function","title":"Bonfire.Me.Users.is_first_user?/0","doc":"","ref":"Bonfire.Me.Users.html#is_first_user?/0"},{"type":"function","title":"Bonfire.Me.Users.list/1","doc":"","ref":"Bonfire.Me.Users.html#list/1"},{"type":"function","title":"Bonfire.Me.Users.list_admins/0","doc":"","ref":"Bonfire.Me.Users.html#list_admins/0"},{"type":"function","title":"Bonfire.Me.Users.list_all/1","doc":"","ref":"Bonfire.Me.Users.html#list_all/1"},{"type":"function","title":"Bonfire.Me.Users.list_paginated/2","doc":"","ref":"Bonfire.Me.Users.html#list_paginated/2"},{"type":"function","title":"Bonfire.Me.Users.make_admin/1","doc":"Grants a user superpowers.","ref":"Bonfire.Me.Users.html#make_admin/1"},{"type":"function","title":"Bonfire.Me.Users.maybe_count/1","doc":"","ref":"Bonfire.Me.Users.html#maybe_count/1"},{"type":"function","title":"Bonfire.Me.Users.maybe_index_user/1","doc":"","ref":"Bonfire.Me.Users.html#maybe_index_user/1"},{"type":"function","title":"Bonfire.Me.Users.query/2","doc":"","ref":"Bonfire.Me.Users.html#query/2"},{"type":"function","title":"Bonfire.Me.Users.query_module/0","doc":"","ref":"Bonfire.Me.Users.html#query_module/0"},{"type":"function","title":"Bonfire.Me.Users.remote_fetcher/0","doc":"","ref":"Bonfire.Me.Users.html#remote_fetcher/0"},{"type":"function","title":"Bonfire.Me.Users.revoke_admin/1","doc":"Revokes a user's superpowers.","ref":"Bonfire.Me.Users.html#revoke_admin/1"},{"type":"function","title":"Bonfire.Me.Users.schema_module/0","doc":"A User is a logical identity within the system belonging to an Account.","ref":"Bonfire.Me.Users.html#schema_module/0"},{"type":"function","title":"Bonfire.Me.Users.search/1","doc":"","ref":"Bonfire.Me.Users.html#search/1"},{"type":"function","title":"Bonfire.Me.Users.search_db/1","doc":"","ref":"Bonfire.Me.Users.html#search_db/1"},{"type":"function","title":"Bonfire.Me.Users.update/3","doc":"","ref":"Bonfire.Me.Users.html#update/3"},{"type":"function","title":"Bonfire.Me.Users.update_local_actor/2","doc":"","ref":"Bonfire.Me.Users.html#update_local_actor/2"},{"type":"function","title":"Bonfire.Me.Users.update_remote_actor/2","doc":"Updates a remote user","ref":"Bonfire.Me.Users.html#update_remote_actor/2"},{"type":"type","title":"Bonfire.Me.Users.changeset_extra/0","doc":"","ref":"Bonfire.Me.Users.html#t:changeset_extra/0"},{"type":"type","title":"Bonfire.Me.Users.changeset_name/0","doc":"","ref":"Bonfire.Me.Users.html#t:changeset_name/0"},{"type":"module","title":"Bonfire.Me.Users.LiveHandler","doc":"","ref":"Bonfire.Me.Users.LiveHandler.html"},{"type":"function","title":"Bonfire.Me.Users.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Me.Users.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Me.Users.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Me.Users.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Me.Users.LiveHandler.to_tuple/1","doc":"","ref":"Bonfire.Me.Users.LiveHandler.html#to_tuple/1"},{"type":"module","title":"Bonfire.Me.Users.Queries","doc":"","ref":"Bonfire.Me.Users.Queries.html"},{"type":"function","title":"Bonfire.Me.Users.Queries.admins/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#admins/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.base_by_id/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#base_by_id/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_account/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_account/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_canonical_uri/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_canonical_uri/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_id/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_id/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_username_and_account/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_username_and_account/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_username_or_id/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_username_or_id/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_username_query/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_username_query/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.count/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#count/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.current/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#current/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.current/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#current/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.join_peered/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#join_peered/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.list/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#list/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.query/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#query/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.schema_module/0","doc":"","ref":"Bonfire.Me.Users.Queries.html#schema_module/0"},{"type":"function","title":"Bonfire.Me.Users.Queries.search/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#search/1"},{"type":"module","title":"Bonfire.Messages","doc":"","ref":"Bonfire.Messages.html"},{"type":"function","title":"Bonfire.Messages.ap_publish_activity/3","doc":"","ref":"Bonfire.Messages.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Messages.ap_receive_activity/3","doc":"","ref":"Bonfire.Messages.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Messages.changeset/4","doc":"","ref":"Bonfire.Messages.html#changeset/4"},{"type":"function","title":"Bonfire.Messages.draft/2","doc":"","ref":"Bonfire.Messages.html#draft/2"},{"type":"function","title":"Bonfire.Messages.federation_module/0","doc":"","ref":"Bonfire.Messages.html#federation_module/0"},{"type":"function","title":"Bonfire.Messages.filter/3","doc":"","ref":"Bonfire.Messages.html#filter/3"},{"type":"function","title":"Bonfire.Messages.list/3","doc":"List posts created by the user and which are in their outbox, which are not replies","ref":"Bonfire.Messages.html#list/3"},{"type":"function","title":"Bonfire.Messages.list/4","doc":"","ref":"Bonfire.Messages.html#list/4"},{"type":"function","title":"Bonfire.Messages.read/2","doc":"","ref":"Bonfire.Messages.html#read/2"},{"type":"function","title":"Bonfire.Messages.schema_module/0","doc":"","ref":"Bonfire.Messages.html#schema_module/0"},{"type":"function","title":"Bonfire.Messages.send/3","doc":"TODO: check boundaries, right now anyone can message anyone :/","ref":"Bonfire.Messages.html#send/3"},{"type":"module","title":"Bonfire.Messages.Fake","doc":"","ref":"Bonfire.Messages.Fake.html"},{"type":"function","title":"Bonfire.Messages.Fake.fake_comment!/4","doc":"","ref":"Bonfire.Messages.Fake.html#fake_comment!/4"},{"type":"function","title":"Bonfire.Messages.Fake.fake_post!/4","doc":"","ref":"Bonfire.Messages.Fake.html#fake_post!/4"},{"type":"function","title":"Bonfire.Messages.Fake.fake_remote_user!/0","doc":"","ref":"Bonfire.Messages.Fake.html#fake_remote_user!/0"},{"type":"module","title":"Bonfire.Messages.Integration","doc":"","ref":"Bonfire.Messages.Integration.html"},{"type":"function","title":"Bonfire.Messages.Integration.mailer/0","doc":"","ref":"Bonfire.Messages.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Messages.Integration.repo/0","doc":"","ref":"Bonfire.Messages.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Posts","doc":"","ref":"Bonfire.Posts.html"},{"type":"function","title":"Bonfire.Posts.ap_publish_activity/3","doc":"","ref":"Bonfire.Posts.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Posts.ap_receive_activity/4","doc":"record an incoming ActivityPub post","ref":"Bonfire.Posts.html#ap_receive_activity/4"},{"type":"function","title":"Bonfire.Posts.changeset/4","doc":"","ref":"Bonfire.Posts.html#changeset/4"},{"type":"function","title":"Bonfire.Posts.count_total/0","doc":"","ref":"Bonfire.Posts.html#count_total/0"},{"type":"function","title":"Bonfire.Posts.delete/2","doc":"You should call `Objects.delete/2` instead","ref":"Bonfire.Posts.html#delete/2"},{"type":"function","title":"Bonfire.Posts.draft/2","doc":"","ref":"Bonfire.Posts.html#draft/2"},{"type":"function","title":"Bonfire.Posts.federation_module/0","doc":"","ref":"Bonfire.Posts.html#federation_module/0"},{"type":"function","title":"Bonfire.Posts.filter/3","doc":"","ref":"Bonfire.Posts.html#filter/3"},{"type":"function","title":"Bonfire.Posts.indexing_object_format/2","doc":"","ref":"Bonfire.Posts.html#indexing_object_format/2"},{"type":"function","title":"Bonfire.Posts.list_by/2","doc":"List posts created by the user and which are in their outbox, which are not replies","ref":"Bonfire.Posts.html#list_by/2"},{"type":"function","title":"Bonfire.Posts.list_paginated/2","doc":"List posts with pagination","ref":"Bonfire.Posts.html#list_paginated/2"},{"type":"function","title":"Bonfire.Posts.prepare_post_attrs/1","doc":"","ref":"Bonfire.Posts.html#prepare_post_attrs/1"},{"type":"function","title":"Bonfire.Posts.publish/1","doc":"","ref":"Bonfire.Posts.html#publish/1"},{"type":"function","title":"Bonfire.Posts.query/2","doc":"","ref":"Bonfire.Posts.html#query/2"},{"type":"function","title":"Bonfire.Posts.query_module/0","doc":"","ref":"Bonfire.Posts.html#query_module/0"},{"type":"function","title":"Bonfire.Posts.query_paginated/2","doc":"Query posts with pagination","ref":"Bonfire.Posts.html#query_paginated/2"},{"type":"function","title":"Bonfire.Posts.read/2","doc":"","ref":"Bonfire.Posts.html#read/2"},{"type":"function","title":"Bonfire.Posts.run_epic/3","doc":"","ref":"Bonfire.Posts.html#run_epic/3"},{"type":"function","title":"Bonfire.Posts.schema_module/0","doc":"","ref":"Bonfire.Posts.html#schema_module/0"},{"type":"module","title":"Bonfire.Posts.Acts.Posts.Publish","doc":"Creates a changeset for publishing a post\n\nEpic Options:\n * `:current_user` - user that will create the post, required.\n * `:post_attrs` (configurable) - attrs to create the post from, required.\n * `:post_id` (configurable) - id to use for the created post (handy for creating\n activitypub objects with an id representing their reported creation time)\n\nAct Options:\n * `:id` - epic options key to find an id to force override with at, default: `:post_id`\n * `:as` - key to assign changeset to, default: `:post`.\n * `:attrs` - epic options key to find the attributes at, default: `:post_attrs`.","ref":"Bonfire.Posts.Acts.Posts.Publish.html"},{"type":"module","title":"Bonfire.Posts.Fake","doc":"","ref":"Bonfire.Posts.Fake.html"},{"type":"function","title":"Bonfire.Posts.Fake.fake_comment!/4","doc":"","ref":"Bonfire.Posts.Fake.html#fake_comment!/4"},{"type":"function","title":"Bonfire.Posts.Fake.fake_post!/4","doc":"","ref":"Bonfire.Posts.Fake.html#fake_post!/4"},{"type":"function","title":"Bonfire.Posts.Fake.fake_remote_user!/0","doc":"","ref":"Bonfire.Posts.Fake.html#fake_remote_user!/0"},{"type":"module","title":"Bonfire.Posts.Integration","doc":"","ref":"Bonfire.Posts.Integration.html"},{"type":"function","title":"Bonfire.Posts.Integration.mailer/0","doc":"","ref":"Bonfire.Posts.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Posts.Integration.repo/0","doc":"","ref":"Bonfire.Posts.Integration.html#repo/0"},{"type":"module","title":"Bonfire.RuntimeConfig","doc":"","ref":"Bonfire.RuntimeConfig.html"},{"type":"function","title":"Bonfire.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs` line","ref":"Bonfire.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Search","doc":"","ref":"Bonfire.Search.html"},{"type":"function","title":"Bonfire.Search.adapter/0","doc":"","ref":"Bonfire.Search.html#adapter/0"},{"type":"function","title":"Bonfire.Search.facet_from_map/1","doc":"","ref":"Bonfire.Search.html#facet_from_map/1"},{"type":"function","title":"Bonfire.Search.public_index/0","doc":"","ref":"Bonfire.Search.html#public_index/0"},{"type":"function","title":"Bonfire.Search.search/2","doc":"","ref":"Bonfire.Search.html#search/2"},{"type":"function","title":"Bonfire.Search.search/4","doc":"","ref":"Bonfire.Search.html#search/4"},{"type":"function","title":"Bonfire.Search.search_by_type/2","doc":"","ref":"Bonfire.Search.html#search_by_type/2"},{"type":"module","title":"Bonfire.Search.Acts.Queue","doc":"An act that enqueues publish/update/delete requests to meilisearch via an oban job queue.","ref":"Bonfire.Search.Acts.Queue.html"},{"type":"function","title":"Bonfire.Search.Acts.Queue.maybe_indexable_object/2","doc":"","ref":"Bonfire.Search.Acts.Queue.html#maybe_indexable_object/2"},{"type":"function","title":"Bonfire.Search.Acts.Queue.maybe_unindex/1","doc":"","ref":"Bonfire.Search.Acts.Queue.html#maybe_unindex/1"},{"type":"function","title":"Bonfire.Search.Acts.Queue.prepare_object/1","doc":"","ref":"Bonfire.Search.Acts.Queue.html#prepare_object/1"},{"type":"module","title":"Bonfire.Search.Fuzzy","doc":"","ref":"Bonfire.Search.Fuzzy.html"},{"type":"function","title":"Bonfire.Search.Fuzzy.do_search/4","doc":"","ref":"Bonfire.Search.Fuzzy.html#do_search/4"},{"type":"function","title":"Bonfire.Search.Fuzzy.search/4","doc":"","ref":"Bonfire.Search.Fuzzy.html#search/4"},{"type":"function","title":"Bonfire.Search.Fuzzy.search_filtered/2","doc":"","ref":"Bonfire.Search.Fuzzy.html#search_filtered/2"},{"type":"module","title":"Bonfire.Search.HTTP","doc":"","ref":"Bonfire.Search.HTTP.html"},{"type":"function","title":"Bonfire.Search.HTTP.http_adapter/0","doc":"","ref":"Bonfire.Search.HTTP.html#http_adapter/0"},{"type":"function","title":"Bonfire.Search.HTTP.http_error/5","doc":"","ref":"Bonfire.Search.HTTP.html#http_error/5"},{"type":"function","title":"Bonfire.Search.HTTP.http_request/4","doc":"","ref":"Bonfire.Search.HTTP.html#http_request/4"},{"type":"module","title":"Bonfire.Search.Indexer","doc":"","ref":"Bonfire.Search.Indexer.html"},{"type":"function","title":"Bonfire.Search.Indexer.host/1","doc":"","ref":"Bonfire.Search.Indexer.html#host/1"},{"type":"function","title":"Bonfire.Search.Indexer.index_public_object/1","doc":"","ref":"Bonfire.Search.Indexer.html#index_public_object/1"},{"type":"function","title":"Bonfire.Search.Indexer.init_index/2","doc":"","ref":"Bonfire.Search.Indexer.html#init_index/2"},{"type":"function","title":"Bonfire.Search.Indexer.maybe_delete_object/2","doc":"","ref":"Bonfire.Search.Indexer.html#maybe_delete_object/2"},{"type":"function","title":"Bonfire.Search.Indexer.maybe_index_object/1","doc":"","ref":"Bonfire.Search.Indexer.html#maybe_index_object/1"},{"type":"function","title":"Bonfire.Search.Indexer.maybe_indexable_and_discoverable/2","doc":"","ref":"Bonfire.Search.Indexer.html#maybe_indexable_and_discoverable/2"},{"type":"function","title":"Bonfire.Search.Indexer.maybe_indexable_object/1","doc":"","ref":"Bonfire.Search.Indexer.html#maybe_indexable_object/1"},{"type":"module","title":"Bonfire.Search.LiveHandler","doc":"","ref":"Bonfire.Search.LiveHandler.html"},{"type":"function","title":"Bonfire.Search.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Search.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Search.LiveHandler.live_search/4","doc":"","ref":"Bonfire.Search.LiveHandler.html#live_search/4"},{"type":"macro","title":"Bonfire.Search.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Search.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Search.Meili","doc":"","ref":"Bonfire.Search.Meili.html"},{"type":"function","title":"Bonfire.Search.Meili.api/4","doc":"","ref":"Bonfire.Search.Meili.html#api/4"},{"type":"function","title":"Bonfire.Search.Meili.create_index/2","doc":"","ref":"Bonfire.Search.Meili.html#create_index/2"},{"type":"function","title":"Bonfire.Search.Meili.delete/3","doc":"","ref":"Bonfire.Search.Meili.html#delete/3"},{"type":"function","title":"Bonfire.Search.Meili.get/1","doc":"","ref":"Bonfire.Search.Meili.html#get/1"},{"type":"function","title":"Bonfire.Search.Meili.get/3","doc":"","ref":"Bonfire.Search.Meili.html#get/3"},{"type":"function","title":"Bonfire.Search.Meili.index_exists/1","doc":"","ref":"Bonfire.Search.Meili.html#index_exists/1"},{"type":"function","title":"Bonfire.Search.Meili.list_facets/1","doc":"","ref":"Bonfire.Search.Meili.html#list_facets/1"},{"type":"function","title":"Bonfire.Search.Meili.patch/3","doc":"","ref":"Bonfire.Search.Meili.html#patch/3"},{"type":"function","title":"Bonfire.Search.Meili.post/3","doc":"","ref":"Bonfire.Search.Meili.html#post/3"},{"type":"function","title":"Bonfire.Search.Meili.put/3","doc":"","ref":"Bonfire.Search.Meili.html#put/3"},{"type":"function","title":"Bonfire.Search.Meili.search/2","doc":"","ref":"Bonfire.Search.Meili.html#search/2"},{"type":"function","title":"Bonfire.Search.Meili.set_facets/2","doc":"","ref":"Bonfire.Search.Meili.html#set_facets/2"},{"type":"function","title":"Bonfire.Search.Meili.set_searchable_fields/2","doc":"","ref":"Bonfire.Search.Meili.html#set_searchable_fields/2"},{"type":"function","title":"Bonfire.Search.Meili.settings/2","doc":"","ref":"Bonfire.Search.Meili.html#settings/2"},{"type":"module","title":"Bonfire.Search.RuntimeConfig","doc":"","ref":"Bonfire.Search.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Search.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Search.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Search.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Search.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Search.Stopwords","doc":"Handles matching of needs & offers","ref":"Bonfire.Search.Stopwords.html"},{"type":"function","title":"Bonfire.Search.Stopwords.filter/2","doc":"Filters out pre-defined stop words.","ref":"Bonfire.Search.Stopwords.html#filter/2"},{"type":"function","title":"Bonfire.Search.Stopwords.split_sentences/1","doc":"","ref":"Bonfire.Search.Stopwords.html#split_sentences/1"},{"type":"function","title":"Bonfire.Search.Stopwords.split_words/1","doc":"","ref":"Bonfire.Search.Stopwords.html#split_words/1"},{"type":"function","title":"Bonfire.Search.Stopwords.stop_words/1","doc":"","ref":"Bonfire.Search.Stopwords.html#stop_words/1"},{"type":"module","title":"Bonfire.Search.Web.Routes","doc":"","ref":"Bonfire.Search.Web.Routes.html"},{"type":"function","title":"Bonfire.Search.Web.Routes.declare_routes/0","doc":"","ref":"Bonfire.Search.Web.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.Seeder","doc":"A way to have data seeds that work similarly to migrations.\n\nTo generate a new seed: `mix phil_columns.gen.seed my_seed_name` will create a new module in `priv/repo/seeds`\n\nTo actually insert the seeds into your app, if that's not configured to be done automatically in your mix aliases, run `mix phil_columns.seed`\n\nTo roll-back: `mix phil_columns.rollback`","ref":"Bonfire.Seeder.html"},{"type":"module","title":"Bonfire.Social.APActivities","doc":"","ref":"Bonfire.Social.APActivities.html"},{"type":"function","title":"Bonfire.Social.APActivities.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.APActivities.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.APActivities.create/4","doc":"","ref":"Bonfire.Social.APActivities.html#create/4"},{"type":"function","title":"Bonfire.Social.APActivities.insert/3","doc":"","ref":"Bonfire.Social.APActivities.html#insert/3"},{"type":"function","title":"Bonfire.Social.APActivities.maybe_attach_video_oembed/3","doc":"","ref":"Bonfire.Social.APActivities.html#maybe_attach_video_oembed/3"},{"type":"module","title":"Bonfire.Social.Activities","doc":"","ref":"Bonfire.Social.Activities.html"},{"type":"function","title":"Bonfire.Social.Activities.activity_preloads/2","doc":"","ref":"Bonfire.Social.Activities.html#activity_preloads/2"},{"type":"function","title":"Bonfire.Social.Activities.activity_preloads/3","doc":"","ref":"Bonfire.Social.Activities.html#activity_preloads/3"},{"type":"function","title":"Bonfire.Social.Activities.activity_under_object/1","doc":"","ref":"Bonfire.Social.Activities.html#activity_under_object/1"},{"type":"function","title":"Bonfire.Social.Activities.activity_under_object/2","doc":"","ref":"Bonfire.Social.Activities.html#activity_under_object/2"},{"type":"function","title":"Bonfire.Social.Activities.activity_with_object_from_assigns/1","doc":"","ref":"Bonfire.Social.Activities.html#activity_with_object_from_assigns/1"},{"type":"function","title":"Bonfire.Social.Activities.all_verb_names/0","doc":"Outputs the names all object verbs, for the purpose of adding to the localisation strings, as long as the output is piped through to localise_strings/1 at compile time.","ref":"Bonfire.Social.Activities.html#all_verb_names/0"},{"type":"function","title":"Bonfire.Social.Activities.all_verb_names_extra/0","doc":"","ref":"Bonfire.Social.Activities.html#all_verb_names_extra/0"},{"type":"function","title":"Bonfire.Social.Activities.as_permitted_for/3","doc":"","ref":"Bonfire.Social.Activities.html#as_permitted_for/3"},{"type":"function","title":"Bonfire.Social.Activities.build_assoc/3","doc":"","ref":"Bonfire.Social.Activities.html#build_assoc/3"},{"type":"function","title":"Bonfire.Social.Activities.build_assoc/4","doc":"","ref":"Bonfire.Social.Activities.html#build_assoc/4"},{"type":"function","title":"Bonfire.Social.Activities.by_subject_verb_object_q/3","doc":"","ref":"Bonfire.Social.Activities.html#by_subject_verb_object_q/3"},{"type":"function","title":"Bonfire.Social.Activities.cast/4","doc":"","ref":"Bonfire.Social.Activities.html#cast/4"},{"type":"function","title":"Bonfire.Social.Activities.count_total/0","doc":"","ref":"Bonfire.Social.Activities.html#count_total/0"},{"type":"function","title":"Bonfire.Social.Activities.create/4","doc":"Create an Activity\nNOTE: you will usually want to use `cast/3` instead","ref":"Bonfire.Social.Activities.html#create/4"},{"type":"function","title":"Bonfire.Social.Activities.delete/1","doc":"Delete activities, using specific filters","ref":"Bonfire.Social.Activities.html#delete/1"},{"type":"function","title":"Bonfire.Social.Activities.delete_by_subject_verb_object/3","doc":"Delete an activity (usage by things like unlike)","ref":"Bonfire.Social.Activities.html#delete_by_subject_verb_object/3"},{"type":"function","title":"Bonfire.Social.Activities.delete_object/1","doc":"","ref":"Bonfire.Social.Activities.html#delete_object/1"},{"type":"function","title":"Bonfire.Social.Activities.fetch_cursor_value_fun/2","doc":"","ref":"Bonfire.Social.Activities.html#fetch_cursor_value_fun/2"},{"type":"function","title":"Bonfire.Social.Activities.get/2","doc":"Get an activity by its ID","ref":"Bonfire.Social.Activities.html#get/2"},{"type":"function","title":"Bonfire.Social.Activities.load_object/2","doc":"","ref":"Bonfire.Social.Activities.html#load_object/2"},{"type":"function","title":"Bonfire.Social.Activities.maybe_join_creator/2","doc":"query optimisation: only includes the subject if different from subject or current_user","ref":"Bonfire.Social.Activities.html#maybe_join_creator/2"},{"type":"function","title":"Bonfire.Social.Activities.maybe_join_subject/2","doc":"","ref":"Bonfire.Social.Activities.html#maybe_join_subject/2"},{"type":"function","title":"Bonfire.Social.Activities.maybe_remove_for_deleters_feeds/1","doc":"","ref":"Bonfire.Social.Activities.html#maybe_remove_for_deleters_feeds/1"},{"type":"function","title":"Bonfire.Social.Activities.object_from_activity/1","doc":"","ref":"Bonfire.Social.Activities.html#object_from_activity/1"},{"type":"function","title":"Bonfire.Social.Activities.object_preload_activity/2","doc":"","ref":"Bonfire.Social.Activities.html#object_preload_activity/2"},{"type":"function","title":"Bonfire.Social.Activities.object_preload_create_activity/1","doc":"","ref":"Bonfire.Social.Activities.html#object_preload_create_activity/1"},{"type":"function","title":"Bonfire.Social.Activities.object_under_activity/2","doc":"","ref":"Bonfire.Social.Activities.html#object_under_activity/2"},{"type":"function","title":"Bonfire.Social.Activities.order_cursor_fields/2","doc":"","ref":"Bonfire.Social.Activities.html#order_cursor_fields/2"},{"type":"function","title":"Bonfire.Social.Activities.order_pagination_opts/2","doc":"","ref":"Bonfire.Social.Activities.html#order_pagination_opts/2"},{"type":"function","title":"Bonfire.Social.Activities.put_assoc/3","doc":"","ref":"Bonfire.Social.Activities.html#put_assoc/3"},{"type":"function","title":"Bonfire.Social.Activities.put_assoc/4","doc":"","ref":"Bonfire.Social.Activities.html#put_assoc/4"},{"type":"function","title":"Bonfire.Social.Activities.query/2","doc":"","ref":"Bonfire.Social.Activities.html#query/2"},{"type":"function","title":"Bonfire.Social.Activities.query_module/0","doc":"","ref":"Bonfire.Social.Activities.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Activities.query_object_preload_activity/4","doc":"","ref":"Bonfire.Social.Activities.html#query_object_preload_activity/4"},{"type":"function","title":"Bonfire.Social.Activities.query_object_preload_create_activity/2","doc":"","ref":"Bonfire.Social.Activities.html#query_object_preload_create_activity/2"},{"type":"function","title":"Bonfire.Social.Activities.query_order/3","doc":"","ref":"Bonfire.Social.Activities.html#query_order/3"},{"type":"function","title":"Bonfire.Social.Activities.read/2","doc":"Get an activity by its object ID (usually a create activity)","ref":"Bonfire.Social.Activities.html#read/2"},{"type":"function","title":"Bonfire.Social.Activities.read_query/2","doc":"","ref":"Bonfire.Social.Activities.html#read_query/2"},{"type":"function","title":"Bonfire.Social.Activities.reply_to_as_permitted_for/3","doc":"","ref":"Bonfire.Social.Activities.html#reply_to_as_permitted_for/3"},{"type":"function","title":"Bonfire.Social.Activities.schema_module/0","doc":"","ref":"Bonfire.Social.Activities.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Activities.verb_congugate/1","doc":"","ref":"Bonfire.Social.Activities.html#verb_congugate/1"},{"type":"function","title":"Bonfire.Social.Activities.verb_display/1","doc":"","ref":"Bonfire.Social.Activities.html#verb_display/1"},{"type":"function","title":"Bonfire.Social.Activities.verb_id/1","doc":"","ref":"Bonfire.Social.Activities.html#verb_id/1"},{"type":"function","title":"Bonfire.Social.Activities.verb_maybe_modify/2","doc":"","ref":"Bonfire.Social.Activities.html#verb_maybe_modify/2"},{"type":"function","title":"Bonfire.Social.Activities.verb_name/1","doc":"","ref":"Bonfire.Social.Activities.html#verb_name/1"},{"type":"module","title":"Bonfire.Social.Acts.Activity","doc":"","ref":"Bonfire.Social.Acts.Activity.html"},{"type":"function","title":"Bonfire.Social.Acts.Activity.run/2","doc":"","ref":"Bonfire.Social.Acts.Activity.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Activity.UnderObject","doc":"","ref":"Bonfire.Social.Acts.Activity.UnderObject.html"},{"type":"function","title":"Bonfire.Social.Acts.Activity.UnderObject.run/2","doc":"","ref":"Bonfire.Social.Acts.Activity.UnderObject.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Federate","doc":"An Act that translates a post or changeset into some jobs for the\nAP publish worker. Handles creation, update and delete\n\nAct Options:\n * `on` - key in assigns to find the post, default: `:post`\n * `as` - key in assigns to assign indexable object, default: `:post_index`","ref":"Bonfire.Social.Acts.Federate.html"},{"type":"function","title":"Bonfire.Social.Acts.Federate.run/2","doc":"","ref":"Bonfire.Social.Acts.Federate.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Feeds","doc":"NOT USED - Finds a list of appropriate feeds into which to post.\n\nEpic Options:\n * `:current_user` - current user. required.\n * `:boundary` - preset string or custom boundaries. default: nil\n\nAct Options:\n * `:changeset` - key in assigns to find changeset, required","ref":"Bonfire.Social.Acts.Feeds.html"},{"type":"function","title":"Bonfire.Social.Acts.Feeds.run/2","doc":"","ref":"Bonfire.Social.Acts.Feeds.html#run/2"},{"type":"function","title":"Bonfire.Social.Acts.Feeds.thread_id/1","doc":"","ref":"Bonfire.Social.Acts.Feeds.html#thread_id/1"},{"type":"module","title":"Bonfire.Social.Acts.LivePush","doc":"","ref":"Bonfire.Social.Acts.LivePush.html"},{"type":"function","title":"Bonfire.Social.Acts.LivePush.run/2","doc":"","ref":"Bonfire.Social.Acts.LivePush.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Objects.Delete","doc":"Delete something + specified associations with a changeset","ref":"Bonfire.Social.Acts.Objects.Delete.html"},{"type":"module","title":"Bonfire.Social.Acts.PostContents","doc":"","ref":"Bonfire.Social.Acts.PostContents.html"},{"type":"function","title":"Bonfire.Social.Acts.PostContents.run/2","doc":"","ref":"Bonfire.Social.Acts.PostContents.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Sensitivity","doc":"","ref":"Bonfire.Social.Acts.Sensitivity.html"},{"type":"function","title":"Bonfire.Social.Acts.Sensitivity.run/2","doc":"","ref":"Bonfire.Social.Acts.Sensitivity.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Threaded","doc":"","ref":"Bonfire.Social.Acts.Threaded.html"},{"type":"function","title":"Bonfire.Social.Acts.Threaded.run/2","doc":"","ref":"Bonfire.Social.Acts.Threaded.html#run/2"},{"type":"module","title":"Bonfire.Social.Bookmarks","doc":"","ref":"Bonfire.Social.Bookmarks.html"},{"type":"function","title":"Bonfire.Social.Bookmarks.bookmark/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#bookmark/3"},{"type":"function","title":"Bonfire.Social.Bookmarks.bookmarked?/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#bookmarked?/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.by_bookmarked/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#by_bookmarked/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.by_bookmarker/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#by_bookmarker/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.count/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#count/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.get/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#get/3"},{"type":"function","title":"Bonfire.Social.Bookmarks.get!/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#get!/3"},{"type":"function","title":"Bonfire.Social.Bookmarks.insert/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#insert/3"},{"type":"function","title":"Bonfire.Social.Bookmarks.list_by/2","doc":"List bookmarks by a user","ref":"Bonfire.Social.Bookmarks.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.list_my/1","doc":"List the current user's bookmarks","ref":"Bonfire.Social.Bookmarks.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Bookmarks.list_of/2","doc":"List bookmarkers of something(s)","ref":"Bonfire.Social.Bookmarks.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.query/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#query/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.query_module/0","doc":"","ref":"Bonfire.Social.Bookmarks.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Bookmarks.schema_module/0","doc":"","ref":"Bonfire.Social.Bookmarks.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Bookmarks.unbookmark/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#unbookmark/3"},{"type":"module","title":"Bonfire.Social.Boosts","doc":"","ref":"Bonfire.Social.Boosts.html"},{"type":"function","title":"Bonfire.Social.Boosts.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Boosts.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Boosts.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Boosts.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Boosts.boost/3","doc":"","ref":"Bonfire.Social.Boosts.html#boost/3"},{"type":"function","title":"Bonfire.Social.Boosts.boosted?/2","doc":"","ref":"Bonfire.Social.Boosts.html#boosted?/2"},{"type":"function","title":"Bonfire.Social.Boosts.count/2","doc":"","ref":"Bonfire.Social.Boosts.html#count/2"},{"type":"function","title":"Bonfire.Social.Boosts.date_last_boosted/2","doc":"","ref":"Bonfire.Social.Boosts.html#date_last_boosted/2"},{"type":"function","title":"Bonfire.Social.Boosts.federation_module/0","doc":"","ref":"Bonfire.Social.Boosts.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Boosts.get/3","doc":"","ref":"Bonfire.Social.Boosts.html#get/3"},{"type":"function","title":"Bonfire.Social.Boosts.get!/3","doc":"","ref":"Bonfire.Social.Boosts.html#get!/3"},{"type":"function","title":"Bonfire.Social.Boosts.list_by/2","doc":"List boosts by the user","ref":"Bonfire.Social.Boosts.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Boosts.list_my/1","doc":"List current user's boosts","ref":"Bonfire.Social.Boosts.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Boosts.list_of/2","doc":"List boost of an object","ref":"Bonfire.Social.Boosts.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Boosts.list_paginated/2","doc":"","ref":"Bonfire.Social.Boosts.html#list_paginated/2"},{"type":"function","title":"Bonfire.Social.Boosts.maybe_boost/3","doc":"","ref":"Bonfire.Social.Boosts.html#maybe_boost/3"},{"type":"function","title":"Bonfire.Social.Boosts.query/2","doc":"","ref":"Bonfire.Social.Boosts.html#query/2"},{"type":"function","title":"Bonfire.Social.Boosts.query_module/0","doc":"","ref":"Bonfire.Social.Boosts.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Boosts.schema_module/0","doc":"","ref":"Bonfire.Social.Boosts.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Boosts.unboost/3","doc":"","ref":"Bonfire.Social.Boosts.html#unboost/3"},{"type":"module","title":"Bonfire.Social.Edges","doc":"","ref":"Bonfire.Social.Edges.html"},{"type":"function","title":"Bonfire.Social.Edges.changeset/5","doc":"","ref":"Bonfire.Social.Edges.html#changeset/5"},{"type":"function","title":"Bonfire.Social.Edges.changeset_base/4","doc":"","ref":"Bonfire.Social.Edges.html#changeset_base/4"},{"type":"function","title":"Bonfire.Social.Edges.count/3","doc":"","ref":"Bonfire.Social.Edges.html#count/3"},{"type":"function","title":"Bonfire.Social.Edges.count_for_subject/4","doc":"","ref":"Bonfire.Social.Edges.html#count_for_subject/4"},{"type":"function","title":"Bonfire.Social.Edges.delete_by_both/3","doc":"","ref":"Bonfire.Social.Edges.html#delete_by_both/3"},{"type":"function","title":"Bonfire.Social.Edges.delete_by_object/1","doc":"","ref":"Bonfire.Social.Edges.html#delete_by_object/1"},{"type":"function","title":"Bonfire.Social.Edges.delete_by_subject/1","doc":"","ref":"Bonfire.Social.Edges.html#delete_by_subject/1"},{"type":"function","title":"Bonfire.Social.Edges.edge_module_query/2","doc":"","ref":"Bonfire.Social.Edges.html#edge_module_query/2"},{"type":"function","title":"Bonfire.Social.Edges.exists?/4","doc":"","ref":"Bonfire.Social.Edges.html#exists?/4"},{"type":"function","title":"Bonfire.Social.Edges.filters_from_opts/1","doc":"","ref":"Bonfire.Social.Edges.html#filters_from_opts/1"},{"type":"function","title":"Bonfire.Social.Edges.get/4","doc":"","ref":"Bonfire.Social.Edges.html#get/4"},{"type":"function","title":"Bonfire.Social.Edges.get!/4","doc":"","ref":"Bonfire.Social.Edges.html#get!/4"},{"type":"function","title":"Bonfire.Social.Edges.insert/3","doc":"","ref":"Bonfire.Social.Edges.html#insert/3"},{"type":"function","title":"Bonfire.Social.Edges.insert/5","doc":"","ref":"Bonfire.Social.Edges.html#insert/5"},{"type":"function","title":"Bonfire.Social.Edges.last/4","doc":"retrieves the last edge of a given type, subject, and object from the database","ref":"Bonfire.Social.Edges.html#last/4"},{"type":"function","title":"Bonfire.Social.Edges.last_date/4","doc":"retrieves the date of the last edge of a given type, subject, and object from the database","ref":"Bonfire.Social.Edges.html#last_date/4"},{"type":"function","title":"Bonfire.Social.Edges.put_edge_assoc/3","doc":"","ref":"Bonfire.Social.Edges.html#put_edge_assoc/3"},{"type":"function","title":"Bonfire.Social.Edges.put_edge_assoc/4","doc":"","ref":"Bonfire.Social.Edges.html#put_edge_assoc/4"},{"type":"function","title":"Bonfire.Social.Edges.query/2","doc":"","ref":"Bonfire.Social.Edges.html#query/2"},{"type":"function","title":"Bonfire.Social.Edges.query_parent/3","doc":"","ref":"Bonfire.Social.Edges.html#query_parent/3"},{"type":"module","title":"Bonfire.Social.Fake","doc":"","ref":"Bonfire.Social.Fake.html"},{"type":"function","title":"Bonfire.Social.Fake.fake_remote_user!/0","doc":"","ref":"Bonfire.Social.Fake.html#fake_remote_user!/0"},{"type":"module","title":"Bonfire.Social.FeedActivities","doc":"","ref":"Bonfire.Social.FeedActivities.html"},{"type":"function","title":"Bonfire.Social.FeedActivities.cast/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#cast/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.cast/3","doc":"","ref":"Bonfire.Social.FeedActivities.html#cast/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.count/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#count/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.count_subjects/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#count_subjects/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.count_total/0","doc":"","ref":"Bonfire.Social.FeedActivities.html#count_total/0"},{"type":"function","title":"Bonfire.Social.FeedActivities.delete/1","doc":"Remove activities from feeds, using specific filters","ref":"Bonfire.Social.FeedActivities.html#delete/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.delete/2","doc":"Remove one or more activities from all feeds","ref":"Bonfire.Social.FeedActivities.html#delete/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed/2","doc":"Gets a feed by id or ids or a thing/things containing an id/ids.","ref":"Bonfire.Social.FeedActivities.html#feed/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_contains?/3","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_contains?/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_ids_and_opts/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_ids_and_opts/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_many_paginated/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_many_paginated/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_name/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_name/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_paginated/2","doc":"Return a page of Feed Activities (reverse chronological) + pagination metadata\nTODO: consolidate with `feed/2`","ref":"Bonfire.Social.FeedActivities.html#feed_paginated/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_paginated/3","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_paginated/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_with_object/3","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_with_object/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.feeds_for_activity/1","doc":"Gets a list of feed ids this activity was published to from the database.\n\nCurrently only used by the ActivityPub integration.","ref":"Bonfire.Social.FeedActivities.html#feeds_for_activity/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.filters_from_opts/1","doc":"","ref":"Bonfire.Social.FeedActivities.html#filters_from_opts/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.get_feed_ids/1","doc":"Computes the feed ids for `get_feed_publishes/2`.\n\nOptions:\n* `:inbox` - list of objects whose inbox we should attempt to insert into.\n* `:outbox` - list of objects whose outbox we should attempt to insert into.\n* `:notifications` - list of objects whose notifications we should attempt to insert into.\n* `:feeds` - list of ids (or objects containing IDs of feeds to post to.","ref":"Bonfire.Social.FeedActivities.html#get_feed_ids/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.get_feed_publishes/1","doc":"Creates the underlying data for `put_feed_publishes/2`.","ref":"Bonfire.Social.FeedActivities.html#get_feed_publishes/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.mark_all_seen/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#mark_all_seen/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.maybe_feed_publish/5","doc":"Creates a new local activity or takes an existing one and publishes to specified feeds","ref":"Bonfire.Social.FeedActivities.html#maybe_feed_publish/5"},{"type":"function","title":"Bonfire.Social.FeedActivities.my_feed/2","doc":"Gets a user's home feed, a combination of all feeds the user is subscribed to.","ref":"Bonfire.Social.FeedActivities.html#my_feed/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.publish/4","doc":"Creates a new local activity and publishes to appropriate feeds\nTODO: make this re-use the changeset-based code like in Epics instead of duplicating logic (currently it is only used in VF extension anyway)","ref":"Bonfire.Social.FeedActivities.html#publish/4"},{"type":"function","title":"Bonfire.Social.FeedActivities.put_feed_publishes/2","doc":"Arranges for an insert changeset to also publish to feeds related to some objects.\n\nOptions: see `get_feed_ids/1`","ref":"Bonfire.Social.FeedActivities.html#put_feed_publishes/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.query/3","doc":"Return a boundarised query for a feed","ref":"Bonfire.Social.FeedActivities.html#query/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.query_module/0","doc":"","ref":"Bonfire.Social.FeedActivities.html#query_module/0"},{"type":"function","title":"Bonfire.Social.FeedActivities.schema_module/0","doc":"","ref":"Bonfire.Social.FeedActivities.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.FeedActivities.skip_verbs_default/0","doc":"","ref":"Bonfire.Social.FeedActivities.html#skip_verbs_default/0"},{"type":"function","title":"Bonfire.Social.FeedActivities.the_object/1","doc":"","ref":"Bonfire.Social.FeedActivities.html#the_object/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.to_feed_options/1","doc":"","ref":"Bonfire.Social.FeedActivities.html#to_feed_options/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.unseen_count/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#unseen_count/2"},{"type":"module","title":"Bonfire.Social.Feeds","doc":"","ref":"Bonfire.Social.Feeds.html"},{"type":"function","title":"Bonfire.Social.Feeds.admin_notifications/1","doc":"","ref":"Bonfire.Social.Feeds.html#admin_notifications/1"},{"type":"function","title":"Bonfire.Social.Feeds.admins_notifications/0","doc":"","ref":"Bonfire.Social.Feeds.html#admins_notifications/0"},{"type":"function","title":"Bonfire.Social.Feeds.admins_notifications/1","doc":"","ref":"Bonfire.Social.Feeds.html#admins_notifications/1"},{"type":"function","title":"Bonfire.Social.Feeds.do_target_feeds/5","doc":"","ref":"Bonfire.Social.Feeds.html#do_target_feeds/5"},{"type":"function","title":"Bonfire.Social.Feeds.feed_id/2","doc":"","ref":"Bonfire.Social.Feeds.html#feed_id/2"},{"type":"function","title":"Bonfire.Social.Feeds.feed_id!/2","doc":"","ref":"Bonfire.Social.Feeds.html#feed_id!/2"},{"type":"function","title":"Bonfire.Social.Feeds.feed_ids/2","doc":"","ref":"Bonfire.Social.Feeds.html#feed_ids/2"},{"type":"function","title":"Bonfire.Social.Feeds.feed_ids_to_publish/3","doc":"","ref":"Bonfire.Social.Feeds.html#feed_ids_to_publish/3"},{"type":"function","title":"Bonfire.Social.Feeds.feed_ids_to_publish/4","doc":"","ref":"Bonfire.Social.Feeds.html#feed_ids_to_publish/4"},{"type":"function","title":"Bonfire.Social.Feeds.inbox_of_obj_creator/1","doc":"","ref":"Bonfire.Social.Feeds.html#inbox_of_obj_creator/1"},{"type":"function","title":"Bonfire.Social.Feeds.maybe_create_feed/2","doc":"","ref":"Bonfire.Social.Feeds.html#maybe_create_feed/2"},{"type":"function","title":"Bonfire.Social.Feeds.maybe_creator_notification/3","doc":"","ref":"Bonfire.Social.Feeds.html#maybe_creator_notification/3"},{"type":"function","title":"Bonfire.Social.Feeds.maybe_custom_feeds/1","doc":"","ref":"Bonfire.Social.Feeds.html#maybe_custom_feeds/1"},{"type":"function","title":"Bonfire.Social.Feeds.maybe_my_outbox_feed_id/2","doc":"","ref":"Bonfire.Social.Feeds.html#maybe_my_outbox_feed_id/2"},{"type":"function","title":"Bonfire.Social.Feeds.my_feed_id/2","doc":"","ref":"Bonfire.Social.Feeds.html#my_feed_id/2"},{"type":"function","title":"Bonfire.Social.Feeds.my_home_feed_ids/2","doc":"","ref":"Bonfire.Social.Feeds.html#my_home_feed_ids/2"},{"type":"function","title":"Bonfire.Social.Feeds.named_feed_id/2","doc":"","ref":"Bonfire.Social.Feeds.html#named_feed_id/2"},{"type":"function","title":"Bonfire.Social.Feeds.reply_and_or_mentions_notifications_feeds/5","doc":"","ref":"Bonfire.Social.Feeds.html#reply_and_or_mentions_notifications_feeds/5"},{"type":"function","title":"Bonfire.Social.Feeds.schema_module/0","doc":"","ref":"Bonfire.Social.Feeds.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Feeds.target_feeds/3","doc":"","ref":"Bonfire.Social.Feeds.html#target_feeds/3"},{"type":"type","title":"Bonfire.Social.Feeds.feed_name/0","doc":"Names a predefined feed attached to a user","ref":"Bonfire.Social.Feeds.html#t:feed_name/0"},{"type":"module","title":"Bonfire.Social.Feeds.LiveHandler","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.actions_update_many/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#actions_update_many/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.activity_update_many/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#activity_update_many/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.assign_feed/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#assign_feed/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.feed_assigns_maybe_async/4","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#feed_assigns_maybe_async/4"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.feed_default_assigns/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#feed_default_assigns/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.feed_extra_preloads_list/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#feed_extra_preloads_list/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.feed_live_update_many_preloads?/0","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#feed_live_update_many_preloads?/0"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.handle_info/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#handle_info/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.handle_params/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#handle_params/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.insert_feed/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#insert_feed/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.load_user_feed_assigns/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#load_user_feed_assigns/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.load_user_feed_assigns/4","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#load_user_feed_assigns/4"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.object_preloads/0","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#object_preloads/0"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.paginate_feed/4","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#paginate_feed/4"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.paginate_fetch_assign_default/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#paginate_fetch_assign_default/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.paginate_opts/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#paginate_opts/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.preload_activity_and_object_assocs/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#preload_activity_and_object_assocs/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.remove_activity/1","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#remove_activity/1"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.reply_to_activity/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#reply_to_activity/2"},{"type":"macro","title":"Bonfire.Social.Feeds.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.user_feed_assign_or_load_async/4","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#user_feed_assign_or_load_async/4"},{"type":"module","title":"Bonfire.Social.Flags","doc":"","ref":"Bonfire.Social.Flags.html"},{"type":"function","title":"Bonfire.Social.Flags.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Flags.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Flags.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Flags.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Flags.by_flagged/1","doc":"","ref":"Bonfire.Social.Flags.html#by_flagged/1"},{"type":"function","title":"Bonfire.Social.Flags.by_flagger/1","doc":"","ref":"Bonfire.Social.Flags.html#by_flagger/1"},{"type":"function","title":"Bonfire.Social.Flags.federation_module/0","doc":"","ref":"Bonfire.Social.Flags.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Flags.flag/3","doc":"","ref":"Bonfire.Social.Flags.html#flag/3"},{"type":"function","title":"Bonfire.Social.Flags.flagged?/2","doc":"","ref":"Bonfire.Social.Flags.html#flagged?/2"},{"type":"function","title":"Bonfire.Social.Flags.get/3","doc":"","ref":"Bonfire.Social.Flags.html#get/3"},{"type":"function","title":"Bonfire.Social.Flags.get!/3","doc":"","ref":"Bonfire.Social.Flags.html#get!/3"},{"type":"function","title":"Bonfire.Social.Flags.instance_moderators/0","doc":"","ref":"Bonfire.Social.Flags.html#instance_moderators/0"},{"type":"function","title":"Bonfire.Social.Flags.list/1","doc":"","ref":"Bonfire.Social.Flags.html#list/1"},{"type":"function","title":"Bonfire.Social.Flags.list_by/2","doc":"List flags by the user and which are in their outbox","ref":"Bonfire.Social.Flags.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Flags.list_my/1","doc":"List current user's flags, which are in their outbox","ref":"Bonfire.Social.Flags.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Flags.list_of/2","doc":"List flag of an object and which are in a feed","ref":"Bonfire.Social.Flags.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Flags.list_paginated/2","doc":"","ref":"Bonfire.Social.Flags.html#list_paginated/2"},{"type":"function","title":"Bonfire.Social.Flags.list_preloaded/1","doc":"","ref":"Bonfire.Social.Flags.html#list_preloaded/1"},{"type":"function","title":"Bonfire.Social.Flags.moderators/1","doc":"","ref":"Bonfire.Social.Flags.html#moderators/1"},{"type":"function","title":"Bonfire.Social.Flags.query/2","doc":"","ref":"Bonfire.Social.Flags.html#query/2"},{"type":"function","title":"Bonfire.Social.Flags.query_module/0","doc":"","ref":"Bonfire.Social.Flags.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Flags.schema_module/0","doc":"","ref":"Bonfire.Social.Flags.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Flags.unflag/2","doc":"","ref":"Bonfire.Social.Flags.html#unflag/2"},{"type":"module","title":"Bonfire.Social.Graph","doc":"","ref":"Bonfire.Social.Graph.html"},{"type":"function","title":"Bonfire.Social.Graph.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Social.Graph.html#child_spec/1"},{"type":"function","title":"Bonfire.Social.Graph.graph_add/3","doc":"","ref":"Bonfire.Social.Graph.html#graph_add/3"},{"type":"function","title":"Bonfire.Social.Graph.graph_clear/0","doc":"","ref":"Bonfire.Social.Graph.html#graph_clear/0"},{"type":"function","title":"Bonfire.Social.Graph.graph_conn/0","doc":"","ref":"Bonfire.Social.Graph.html#graph_conn/0"},{"type":"function","title":"Bonfire.Social.Graph.graph_distance/2","doc":"","ref":"Bonfire.Social.Graph.html#graph_distance/2"},{"type":"function","title":"Bonfire.Social.Graph.graph_distances/1","doc":"","ref":"Bonfire.Social.Graph.html#graph_distances/1"},{"type":"function","title":"Bonfire.Social.Graph.graph_meta/1","doc":"","ref":"Bonfire.Social.Graph.html#graph_meta/1"},{"type":"function","title":"Bonfire.Social.Graph.graph_query/2","doc":"","ref":"Bonfire.Social.Graph.html#graph_query/2"},{"type":"function","title":"Bonfire.Social.Graph.graph_remove/3","doc":"","ref":"Bonfire.Social.Graph.html#graph_remove/3"},{"type":"function","title":"Bonfire.Social.Graph.init/1","doc":"","ref":"Bonfire.Social.Graph.html#init/1"},{"type":"function","title":"Bonfire.Social.Graph.init_and_load/0","doc":"","ref":"Bonfire.Social.Graph.html#init_and_load/0"},{"type":"function","title":"Bonfire.Social.Graph.load_from_db/0","doc":"","ref":"Bonfire.Social.Graph.html#load_from_db/0"},{"type":"function","title":"Bonfire.Social.Graph.maybe_applications/0","doc":"","ref":"Bonfire.Social.Graph.html#maybe_applications/0"},{"type":"function","title":"Bonfire.Social.Graph.start_link/1","doc":"","ref":"Bonfire.Social.Graph.html#start_link/1"},{"type":"module","title":"Bonfire.Social.Graph.Aliases","doc":"","ref":"Bonfire.Social.Graph.Aliases.html"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.add/3","doc":"Alias someone/something.","ref":"Bonfire.Social.Graph.Aliases.html#add/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.all_by_object/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#all_by_object/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.all_by_subject/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#all_by_subject/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.all_objects_by_subject/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#all_objects_by_subject/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.all_subjects_by_object/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#all_subjects_by_object/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.exists?/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#exists?/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.federation_module/0","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.get/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#get/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.get!/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#get!/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.insert/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#insert/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.list_aliased/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#list_aliased/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.list_aliases/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#list_aliases/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.list_my_aliased/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#list_my_aliased/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.list_my_aliases/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#list_my_aliases/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.move/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#move/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.move_following/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#move_following/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.query/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#query/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.query_module/0","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.remove/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#remove/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.schema_module/0","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#schema_module/0"},{"type":"module","title":"Bonfire.Social.Graph.Fake","doc":"","ref":"Bonfire.Social.Graph.Fake.html"},{"type":"function","title":"Bonfire.Social.Graph.Fake.fake_follow!/0","doc":"","ref":"Bonfire.Social.Graph.Fake.html#fake_follow!/0"},{"type":"function","title":"Bonfire.Social.Graph.Fake.fake_incoming_follow!/0","doc":"","ref":"Bonfire.Social.Graph.Fake.html#fake_incoming_follow!/0"},{"type":"function","title":"Bonfire.Social.Graph.Fake.fake_outgoing_follow!/0","doc":"","ref":"Bonfire.Social.Graph.Fake.html#fake_outgoing_follow!/0"},{"type":"function","title":"Bonfire.Social.Graph.Fake.fake_remote_user!/0","doc":"","ref":"Bonfire.Social.Graph.Fake.html#fake_remote_user!/0"},{"type":"module","title":"Bonfire.Social.Graph.Follows","doc":"","ref":"Bonfire.Social.Graph.Follows.html"},{"type":"function","title":"Bonfire.Social.Graph.Follows.accept/2","doc":"Accepts a follow request, publishes to feeds and federates.\nParameter are a Request (or its ID) plus the subject as current_user","ref":"Bonfire.Social.Graph.Follows.html#accept/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.accept_from/2","doc":"Accepts a follow request, publishes to feeds and federates.\nParameters are the requester plus the subject as current_user","ref":"Bonfire.Social.Graph.Follows.html#accept_from/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_by_object/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_by_object/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_by_subject/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_by_subject/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_followed_outboxes/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_followed_outboxes/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_objects_by_subject/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_objects_by_subject/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_subjects_by_object/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_subjects_by_object/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.federation_module/0","doc":"","ref":"Bonfire.Social.Graph.Follows.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Follows.follow/3","doc":"Follow someone/something. In case of success, publishes to feeds and federates.\n\nIf the user is not permitted to follow the object, or the object is\na remote actor, will instead request to follow.","ref":"Bonfire.Social.Graph.Follows.html#follow/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.following?/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#following?/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.get/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#get/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.get!/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#get!/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.ignore/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#ignore/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.invalidate_followed_outboxes_cache/1","doc":"","ref":"Bonfire.Social.Graph.Follows.html#invalidate_followed_outboxes_cache/1"},{"type":"function","title":"Bonfire.Social.Graph.Follows.list_followed/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#list_followed/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.list_followers/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#list_followers/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.list_my_followed/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#list_my_followed/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.list_my_followers/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#list_my_followers/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.query/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#query/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.query_module/0","doc":"","ref":"Bonfire.Social.Graph.Follows.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Follows.requested?/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#requested?/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.schema_module/0","doc":"","ref":"Bonfire.Social.Graph.Follows.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Follows.unfollow/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#unfollow/3"},{"type":"module","title":"Bonfire.Social.Graph.Import","doc":"","ref":"Bonfire.Social.Graph.Import.html"},{"type":"function","title":"Bonfire.Social.Graph.Import.blocks_from_csv/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#blocks_from_csv/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.blocks_from_csv_file/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#blocks_from_csv_file/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.follows_from_csv/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#follows_from_csv/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.follows_from_csv_file/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#follows_from_csv_file/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.ghosts_from_csv/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#ghosts_from_csv/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.ghosts_from_csv_file/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#ghosts_from_csv_file/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.import_from_csv_file/3","doc":"","ref":"Bonfire.Social.Graph.Import.html#import_from_csv_file/3"},{"type":"function","title":"Bonfire.Social.Graph.Import.perform/1","doc":"","ref":"Bonfire.Social.Graph.Import.html#perform/1"},{"type":"function","title":"Bonfire.Social.Graph.Import.perform/3","doc":"","ref":"Bonfire.Social.Graph.Import.html#perform/3"},{"type":"function","title":"Bonfire.Social.Graph.Import.silences_from_csv/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#silences_from_csv/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.silences_from_csv_file/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#silences_from_csv_file/2"},{"type":"module","title":"Bonfire.Social.Graph.Integration","doc":"","ref":"Bonfire.Social.Graph.Integration.html"},{"type":"function","title":"Bonfire.Social.Graph.Integration.mailer/0","doc":"","ref":"Bonfire.Social.Graph.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Social.Graph.Integration.repo/0","doc":"","ref":"Bonfire.Social.Graph.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Social.Graph.Requests","doc":"","ref":"Bonfire.Social.Graph.Requests.html"},{"type":"function","title":"Bonfire.Social.Graph.Requests.accept/2","doc":"Request someone/something, and federate it","ref":"Bonfire.Social.Graph.Requests.html#accept/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_by_object/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_by_object/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_by_subject/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_by_subject/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_objects_by_subject/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_objects_by_subject/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_requested_outboxes/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_requested_outboxes/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_subjects_by_object/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_subjects_by_object/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.exists?/4","doc":"","ref":"Bonfire.Social.Graph.Requests.html#exists?/4"},{"type":"function","title":"Bonfire.Social.Graph.Requests.get/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#get/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.get/4","doc":"","ref":"Bonfire.Social.Graph.Requests.html#get/4"},{"type":"function","title":"Bonfire.Social.Graph.Requests.get!/4","doc":"","ref":"Bonfire.Social.Graph.Requests.html#get!/4"},{"type":"function","title":"Bonfire.Social.Graph.Requests.ignore/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#ignore/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.list_my_requested/1","doc":"","ref":"Bonfire.Social.Graph.Requests.html#list_my_requested/1"},{"type":"function","title":"Bonfire.Social.Graph.Requests.list_my_requesters/1","doc":"","ref":"Bonfire.Social.Graph.Requests.html#list_my_requesters/1"},{"type":"function","title":"Bonfire.Social.Graph.Requests.list_requested/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#list_requested/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.list_requesters/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#list_requesters/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.many/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#many/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.query/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#query/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.query_module/0","doc":"","ref":"Bonfire.Social.Graph.Requests.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Requests.request/4","doc":"Request someone/something, and federate it","ref":"Bonfire.Social.Graph.Requests.html#request/4"},{"type":"function","title":"Bonfire.Social.Graph.Requests.requested/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#requested/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.requested?/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#requested?/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.schema_module/0","doc":"","ref":"Bonfire.Social.Graph.Requests.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Requests.unrequest/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#unrequest/3"},{"type":"module","title":"Bonfire.Social.Integration","doc":"","ref":"Bonfire.Social.Integration.html"},{"type":"function","title":"Bonfire.Social.Integration.federate_outgoing?/1","doc":"","ref":"Bonfire.Social.Integration.html#federate_outgoing?/1"},{"type":"function","title":"Bonfire.Social.Integration.federating?/1","doc":"","ref":"Bonfire.Social.Integration.html#federating?/1"},{"type":"function","title":"Bonfire.Social.Integration.is_local?/1","doc":"","ref":"Bonfire.Social.Integration.html#is_local?/1"},{"type":"function","title":"Bonfire.Social.Integration.mailer/0","doc":"","ref":"Bonfire.Social.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Social.Integration.many/3","doc":"","ref":"Bonfire.Social.Integration.html#many/3"},{"type":"function","title":"Bonfire.Social.Integration.maybe_federate/5","doc":"","ref":"Bonfire.Social.Integration.html#maybe_federate/5"},{"type":"function","title":"Bonfire.Social.Integration.maybe_federate_and_gift_wrap_activity/4","doc":"","ref":"Bonfire.Social.Integration.html#maybe_federate_and_gift_wrap_activity/4"},{"type":"function","title":"Bonfire.Social.Integration.repo/0","doc":"","ref":"Bonfire.Social.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Social.Likes","doc":"","ref":"Bonfire.Social.Likes.html"},{"type":"function","title":"Bonfire.Social.Likes.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Likes.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Likes.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Likes.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Likes.by_liked/2","doc":"","ref":"Bonfire.Social.Likes.html#by_liked/2"},{"type":"function","title":"Bonfire.Social.Likes.by_liker/2","doc":"","ref":"Bonfire.Social.Likes.html#by_liker/2"},{"type":"function","title":"Bonfire.Social.Likes.count/2","doc":"","ref":"Bonfire.Social.Likes.html#count/2"},{"type":"function","title":"Bonfire.Social.Likes.do_like/3","doc":"","ref":"Bonfire.Social.Likes.html#do_like/3"},{"type":"function","title":"Bonfire.Social.Likes.federation_module/0","doc":"","ref":"Bonfire.Social.Likes.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Likes.get/3","doc":"","ref":"Bonfire.Social.Likes.html#get/3"},{"type":"function","title":"Bonfire.Social.Likes.get!/3","doc":"","ref":"Bonfire.Social.Likes.html#get!/3"},{"type":"function","title":"Bonfire.Social.Likes.like/3","doc":"","ref":"Bonfire.Social.Likes.html#like/3"},{"type":"function","title":"Bonfire.Social.Likes.liked?/2","doc":"","ref":"Bonfire.Social.Likes.html#liked?/2"},{"type":"function","title":"Bonfire.Social.Likes.list_by/2","doc":"List likes by a user","ref":"Bonfire.Social.Likes.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Likes.list_my/1","doc":"List the current user's likes","ref":"Bonfire.Social.Likes.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Likes.list_of/2","doc":"List likers of something(s)","ref":"Bonfire.Social.Likes.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Likes.list_paginated/2","doc":"","ref":"Bonfire.Social.Likes.html#list_paginated/2"},{"type":"function","title":"Bonfire.Social.Likes.query/2","doc":"","ref":"Bonfire.Social.Likes.html#query/2"},{"type":"function","title":"Bonfire.Social.Likes.query_module/0","doc":"","ref":"Bonfire.Social.Likes.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Likes.schema_module/0","doc":"","ref":"Bonfire.Social.Likes.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Likes.unlike/3","doc":"","ref":"Bonfire.Social.Likes.html#unlike/3"},{"type":"module","title":"Bonfire.Social.LivePush","doc":"","ref":"Bonfire.Social.LivePush.html"},{"type":"function","title":"Bonfire.Social.LivePush.hide_activity/2","doc":"","ref":"Bonfire.Social.LivePush.html#hide_activity/2"},{"type":"function","title":"Bonfire.Social.LivePush.notify/2","doc":"","ref":"Bonfire.Social.LivePush.html#notify/2"},{"type":"function","title":"Bonfire.Social.LivePush.notify/4","doc":"","ref":"Bonfire.Social.LivePush.html#notify/4"},{"type":"function","title":"Bonfire.Social.LivePush.notify_of_message/4","doc":"","ref":"Bonfire.Social.LivePush.html#notify_of_message/4"},{"type":"function","title":"Bonfire.Social.LivePush.notify_users/4","doc":"Sends a notification about an activity to a list of users, excluding the author/subject","ref":"Bonfire.Social.LivePush.html#notify_users/4"},{"type":"function","title":"Bonfire.Social.LivePush.prepare_activity/2","doc":"","ref":"Bonfire.Social.LivePush.html#prepare_activity/2"},{"type":"function","title":"Bonfire.Social.LivePush.push_activity/3","doc":"Receives an activity with a nested object, or vice versa, uses PubSub to pushes to feeds and optionally notifications","ref":"Bonfire.Social.LivePush.html#push_activity/3"},{"type":"function","title":"Bonfire.Social.LivePush.push_activity_object/4","doc":"Receives an activity *and* object, uses PubSub to pushes to feeds and optionally notifications, and returns an Activity.","ref":"Bonfire.Social.LivePush.html#push_activity_object/4"},{"type":"module","title":"Bonfire.Social.Objects","doc":"","ref":"Bonfire.Social.Objects.html"},{"type":"function","title":"Bonfire.Social.Objects.ap_maybe_delete/2","doc":"","ref":"Bonfire.Social.Objects.html#ap_maybe_delete/2"},{"type":"function","title":"Bonfire.Social.Objects.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Objects.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Objects.as_permitted_for/3","doc":"","ref":"Bonfire.Social.Objects.html#as_permitted_for/3"},{"type":"function","title":"Bonfire.Social.Objects.cast/4","doc":"Handles casting:\n* Creator\n* Caretaker\n* Threaded replies (when present)\n* Tags/Mentions (when present)\n* Acls\n* Activity","ref":"Bonfire.Social.Objects.html#cast/4"},{"type":"function","title":"Bonfire.Social.Objects.cast_acl/3","doc":"","ref":"Bonfire.Social.Objects.html#cast_acl/3"},{"type":"function","title":"Bonfire.Social.Objects.cast_basic/4","doc":"Handles casting:\n* Creator\n* Caretaker\n* Acls","ref":"Bonfire.Social.Objects.html#cast_basic/4"},{"type":"function","title":"Bonfire.Social.Objects.cast_caretaker/2","doc":"","ref":"Bonfire.Social.Objects.html#cast_caretaker/2"},{"type":"function","title":"Bonfire.Social.Objects.cast_creator/2","doc":"","ref":"Bonfire.Social.Objects.html#cast_creator/2"},{"type":"function","title":"Bonfire.Social.Objects.cast_creator_caretaker/2","doc":"","ref":"Bonfire.Social.Objects.html#cast_creator_caretaker/2"},{"type":"function","title":"Bonfire.Social.Objects.cast_mini/4","doc":"Handles casting:\n* Acls","ref":"Bonfire.Social.Objects.html#cast_mini/4"},{"type":"function","title":"Bonfire.Social.Objects.cast_publish/4","doc":"Handles casting:\n* Acls\n* Activity\n* Feed Publishes","ref":"Bonfire.Social.Objects.html#cast_publish/4"},{"type":"function","title":"Bonfire.Social.Objects.cast_sensitivity/2","doc":"","ref":"Bonfire.Social.Objects.html#cast_sensitivity/2"},{"type":"function","title":"Bonfire.Social.Objects.changeset_named/2","doc":"","ref":"Bonfire.Social.Objects.html#changeset_named/2"},{"type":"function","title":"Bonfire.Social.Objects.delete/2","doc":"","ref":"Bonfire.Social.Objects.html#delete/2"},{"type":"function","title":"Bonfire.Social.Objects.delete_apply_error/2","doc":"","ref":"Bonfire.Social.Objects.html#delete_apply_error/2"},{"type":"function","title":"Bonfire.Social.Objects.do_delete/2","doc":"","ref":"Bonfire.Social.Objects.html#do_delete/2"},{"type":"function","title":"Bonfire.Social.Objects.federation_module/0","doc":"","ref":"Bonfire.Social.Objects.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Objects.list_query/2","doc":"","ref":"Bonfire.Social.Objects.html#list_query/2"},{"type":"function","title":"Bonfire.Social.Objects.maybe_generic_delete/3","doc":"","ref":"Bonfire.Social.Objects.html#maybe_generic_delete/3"},{"type":"function","title":"Bonfire.Social.Objects.maybe_preload_activity_object/2","doc":"","ref":"Bonfire.Social.Objects.html#maybe_preload_activity_object/2"},{"type":"function","title":"Bonfire.Social.Objects.object_creator/1","doc":"","ref":"Bonfire.Social.Objects.html#object_creator/1"},{"type":"function","title":"Bonfire.Social.Objects.preload_creator/1","doc":"","ref":"Bonfire.Social.Objects.html#preload_creator/1"},{"type":"function","title":"Bonfire.Social.Objects.preload_reply_creator/1","doc":"","ref":"Bonfire.Social.Objects.html#preload_reply_creator/1"},{"type":"function","title":"Bonfire.Social.Objects.publish/5","doc":"","ref":"Bonfire.Social.Objects.html#publish/5"},{"type":"function","title":"Bonfire.Social.Objects.query_base/1","doc":"Returns a basic query over undeleted pointable objects in the system,\noptionally limited to one or more types.","ref":"Bonfire.Social.Objects.html#query_base/1"},{"type":"function","title":"Bonfire.Social.Objects.read/2","doc":"","ref":"Bonfire.Social.Objects.html#read/2"},{"type":"function","title":"Bonfire.Social.Objects.reset_preset_boundary/5","doc":"","ref":"Bonfire.Social.Objects.html#reset_preset_boundary/5"},{"type":"function","title":"Bonfire.Social.Objects.run_epic/3","doc":"","ref":"Bonfire.Social.Objects.html#run_epic/3"},{"type":"function","title":"Bonfire.Social.Objects.set_boundaries/4","doc":"","ref":"Bonfire.Social.Objects.html#set_boundaries/4"},{"type":"function","title":"Bonfire.Social.Objects.set_name/3","doc":"","ref":"Bonfire.Social.Objects.html#set_name/3"},{"type":"function","title":"Bonfire.Social.Objects.set_sensitivity/2","doc":"","ref":"Bonfire.Social.Objects.html#set_sensitivity/2"},{"type":"module","title":"Bonfire.Social.Objects.LiveHandler","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Objects.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Social.Objects.LiveHandler.load_object_assigns/1","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#load_object_assigns/1"},{"type":"function","title":"Bonfire.Social.Objects.LiveHandler.load_object_assigns/2","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#load_object_assigns/2"},{"type":"function","title":"Bonfire.Social.Objects.LiveHandler.not_found_fallback/3","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#not_found_fallback/3"},{"type":"macro","title":"Bonfire.Social.Objects.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Social.Pins","doc":"","ref":"Bonfire.Social.Pins.html"},{"type":"function","title":"Bonfire.Social.Pins.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Pins.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Pins.by_pinned/2","doc":"","ref":"Bonfire.Social.Pins.html#by_pinned/2"},{"type":"function","title":"Bonfire.Social.Pins.by_pinner/2","doc":"","ref":"Bonfire.Social.Pins.html#by_pinner/2"},{"type":"function","title":"Bonfire.Social.Pins.federation_module/0","doc":"","ref":"Bonfire.Social.Pins.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Pins.get/3","doc":"","ref":"Bonfire.Social.Pins.html#get/3"},{"type":"function","title":"Bonfire.Social.Pins.get!/3","doc":"","ref":"Bonfire.Social.Pins.html#get!/3"},{"type":"function","title":"Bonfire.Social.Pins.list_by/2","doc":"List pins by a user","ref":"Bonfire.Social.Pins.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Pins.list_instance_pins/1","doc":"","ref":"Bonfire.Social.Pins.html#list_instance_pins/1"},{"type":"function","title":"Bonfire.Social.Pins.list_my/1","doc":"List the current user's pins","ref":"Bonfire.Social.Pins.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Pins.list_of/2","doc":"List pinners of something(s)","ref":"Bonfire.Social.Pins.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Pins.pin/4","doc":"","ref":"Bonfire.Social.Pins.html#pin/4"},{"type":"function","title":"Bonfire.Social.Pins.pinned?/2","doc":"","ref":"Bonfire.Social.Pins.html#pinned?/2"},{"type":"function","title":"Bonfire.Social.Pins.query/2","doc":"","ref":"Bonfire.Social.Pins.html#query/2"},{"type":"function","title":"Bonfire.Social.Pins.query_module/0","doc":"","ref":"Bonfire.Social.Pins.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Pins.rank_pin/3","doc":"","ref":"Bonfire.Social.Pins.html#rank_pin/3"},{"type":"function","title":"Bonfire.Social.Pins.schema_module/0","doc":"","ref":"Bonfire.Social.Pins.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Pins.unpin/3","doc":"","ref":"Bonfire.Social.Pins.html#unpin/3"},{"type":"module","title":"Bonfire.Social.PostContents","doc":"Query and manipulate post contents","ref":"Bonfire.Social.PostContents.html"},{"type":"function","title":"Bonfire.Social.PostContents.all_text_content/1","doc":"","ref":"Bonfire.Social.PostContents.html#all_text_content/1"},{"type":"function","title":"Bonfire.Social.PostContents.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.PostContents.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.PostContents.ap_receive_attrs_prepare/4","doc":"","ref":"Bonfire.Social.PostContents.html#ap_receive_attrs_prepare/4"},{"type":"function","title":"Bonfire.Social.PostContents.cast/5","doc":"Given a changeset, post content attributes, creator, boundary and options, returns a changeset prepared with relevant attributes and associations","ref":"Bonfire.Social.PostContents.html#cast/5"},{"type":"function","title":"Bonfire.Social.PostContents.changeset/2","doc":"","ref":"Bonfire.Social.PostContents.html#changeset/2"},{"type":"function","title":"Bonfire.Social.PostContents.diff/2","doc":"","ref":"Bonfire.Social.PostContents.html#diff/2"},{"type":"function","title":"Bonfire.Social.PostContents.edit/3","doc":"","ref":"Bonfire.Social.PostContents.html#edit/3"},{"type":"function","title":"Bonfire.Social.PostContents.editor_output_content_type/1","doc":"","ref":"Bonfire.Social.PostContents.html#editor_output_content_type/1"},{"type":"function","title":"Bonfire.Social.PostContents.federation_module/0","doc":"","ref":"Bonfire.Social.PostContents.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.PostContents.get/2","doc":"Given a post content ID, returns the corresponding post content","ref":"Bonfire.Social.PostContents.html#get/2"},{"type":"function","title":"Bonfire.Social.PostContents.get_versions/1","doc":"","ref":"Bonfire.Social.PostContents.html#get_versions/1"},{"type":"function","title":"Bonfire.Social.PostContents.get_versions_diffed/1","doc":"","ref":"Bonfire.Social.PostContents.html#get_versions_diffed/1"},{"type":"function","title":"Bonfire.Social.PostContents.indexing_object_format/1","doc":"","ref":"Bonfire.Social.PostContents.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Social.PostContents.maybe_detect_languages/2","doc":"","ref":"Bonfire.Social.PostContents.html#maybe_detect_languages/2"},{"type":"function","title":"Bonfire.Social.PostContents.maybe_prepare_contents/4","doc":"Given post content attributes, creator, boundary, and options, prepares the post contents for processing by detecting languages, mentions, hashtags, and urls.","ref":"Bonfire.Social.PostContents.html#maybe_prepare_contents/4"},{"type":"function","title":"Bonfire.Social.PostContents.merge_with_body_or_nil/2","doc":"","ref":"Bonfire.Social.PostContents.html#merge_with_body_or_nil/2"},{"type":"function","title":"Bonfire.Social.PostContents.no_known_output/2","doc":"","ref":"Bonfire.Social.PostContents.html#no_known_output/2"},{"type":"function","title":"Bonfire.Social.PostContents.one/2","doc":"Given a set of filters, returns a single post content matching those filters","ref":"Bonfire.Social.PostContents.html#one/2"},{"type":"function","title":"Bonfire.Social.PostContents.prepare_text/3","doc":"","ref":"Bonfire.Social.PostContents.html#prepare_text/3"},{"type":"function","title":"Bonfire.Social.PostContents.query/2","doc":"Given a set of filters, returns an Ecto.Query for matching post contents.","ref":"Bonfire.Social.PostContents.html#query/2"},{"type":"function","title":"Bonfire.Social.PostContents.query_base/0","doc":"","ref":"Bonfire.Social.PostContents.html#query_base/0"},{"type":"module","title":"Bonfire.Social.Seen","doc":"Track seen/unseen (similar to read/unread, but only indicates that it was displayed in a feed or other listing for the user, not that they actually read it) status of things (usually `Activities`)","ref":"Bonfire.Social.Seen.html"},{"type":"function","title":"Bonfire.Social.Seen.get/3","doc":"","ref":"Bonfire.Social.Seen.html#get/3"},{"type":"function","title":"Bonfire.Social.Seen.get!/3","doc":"","ref":"Bonfire.Social.Seen.html#get!/3"},{"type":"function","title":"Bonfire.Social.Seen.mark_seen/2","doc":"","ref":"Bonfire.Social.Seen.html#mark_seen/2"},{"type":"function","title":"Bonfire.Social.Seen.mark_unseen/2","doc":"","ref":"Bonfire.Social.Seen.html#mark_unseen/2"},{"type":"function","title":"Bonfire.Social.Seen.query/2","doc":"","ref":"Bonfire.Social.Seen.html#query/2"},{"type":"function","title":"Bonfire.Social.Seen.query_module/0","doc":"","ref":"Bonfire.Social.Seen.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Seen.schema_module/0","doc":"","ref":"Bonfire.Social.Seen.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Seen.seen?/2","doc":"","ref":"Bonfire.Social.Seen.html#seen?/2"},{"type":"module","title":"Bonfire.Social.Tags","doc":"","ref":"Bonfire.Social.Tags.html"},{"type":"function","title":"Bonfire.Social.Tags.auto_boost/2","doc":"","ref":"Bonfire.Social.Tags.html#auto_boost/2"},{"type":"function","title":"Bonfire.Social.Tags.cast/4","doc":"","ref":"Bonfire.Social.Tags.html#cast/4"},{"type":"function","title":"Bonfire.Social.Tags.indexing_format_tags/1","doc":"","ref":"Bonfire.Social.Tags.html#indexing_format_tags/1"},{"type":"function","title":"Bonfire.Social.Tags.maybe_auto_boost/3","doc":"","ref":"Bonfire.Social.Tags.html#maybe_auto_boost/3"},{"type":"function","title":"Bonfire.Social.Tags.maybe_boostable_categories/2","doc":"","ref":"Bonfire.Social.Tags.html#maybe_boostable_categories/2"},{"type":"function","title":"Bonfire.Social.Tags.maybe_process/3","doc":"","ref":"Bonfire.Social.Tags.html#maybe_process/3"},{"type":"function","title":"Bonfire.Social.Tags.maybe_tag/4","doc":"","ref":"Bonfire.Social.Tags.html#maybe_tag/4"},{"type":"module","title":"Bonfire.Social.Threads","doc":"","ref":"Bonfire.Social.Threads.html"},{"type":"function","title":"Bonfire.Social.Threads.ap_prepare/2","doc":"Key can be for eg. :thread_id or :reply_to_id","ref":"Bonfire.Social.Threads.html#ap_prepare/2"},{"type":"function","title":"Bonfire.Social.Threads.arrange_replies/2","doc":"","ref":"Bonfire.Social.Threads.html#arrange_replies/2"},{"type":"function","title":"Bonfire.Social.Threads.arrange_replies_tree/2","doc":"","ref":"Bonfire.Social.Threads.html#arrange_replies_tree/2"},{"type":"function","title":"Bonfire.Social.Threads.base_query/0","doc":"","ref":"Bonfire.Social.Threads.html#base_query/0"},{"type":"function","title":"Bonfire.Social.Threads.cast/4","doc":"Handles casting related to the reply and threading.\nIf it's not a reply or the user is not permitted to reply to the thing, a new thread will be created.","ref":"Bonfire.Social.Threads.html#cast/4"},{"type":"function","title":"Bonfire.Social.Threads.changeset/2","doc":"","ref":"Bonfire.Social.Threads.html#changeset/2"},{"type":"function","title":"Bonfire.Social.Threads.count_participants/2","doc":"Count participants in a thread (depending on user's boundaries)","ref":"Bonfire.Social.Threads.html#count_participants/2"},{"type":"function","title":"Bonfire.Social.Threads.fetch_participants/2","doc":"List participants in a thread (depending on user's boundaries)","ref":"Bonfire.Social.Threads.html#fetch_participants/2"},{"type":"function","title":"Bonfire.Social.Threads.filter/3","doc":"Group per-thread","ref":"Bonfire.Social.Threads.html#filter/3"},{"type":"function","title":"Bonfire.Social.Threads.find_reply_to/2","doc":"Returns `{:ok, reply}` or `{:error, reason}`, where `reason` may be:\n* `:not_found` - we could not find the object you are replying to.\n* `:not_permitted` - you do not have permission to reply to this.","ref":"Bonfire.Social.Threads.html#find_reply_to/2"},{"type":"function","title":"Bonfire.Social.Threads.find_thread/2","doc":"","ref":"Bonfire.Social.Threads.html#find_thread/2"},{"type":"function","title":"Bonfire.Social.Threads.list_participants/3","doc":"List participants of an activity or thread (depending on user's boundaries)","ref":"Bonfire.Social.Threads.html#list_participants/3"},{"type":"function","title":"Bonfire.Social.Threads.list_replies/2","doc":"","ref":"Bonfire.Social.Threads.html#list_replies/2"},{"type":"function","title":"Bonfire.Social.Threads.mark_all_seen/2","doc":"","ref":"Bonfire.Social.Threads.html#mark_all_seen/2"},{"type":"function","title":"Bonfire.Social.Threads.maybe_re_order_result/2","doc":"re-order distinct threads after DISTINCT ON ordered them by thread_id - Note: does not support pagination","ref":"Bonfire.Social.Threads.html#maybe_re_order_result/2"},{"type":"function","title":"Bonfire.Social.Threads.query/2","doc":"","ref":"Bonfire.Social.Threads.html#query/2"},{"type":"function","title":"Bonfire.Social.Threads.query_module/0","doc":"","ref":"Bonfire.Social.Threads.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Threads.re_order_using_subquery/2","doc":"re-order distinct threads after DISTINCT ON ordered them by thread_id - Note: this results in (Ecto.QueryError) cannot preload associations in subquery in query","ref":"Bonfire.Social.Threads.html#re_order_using_subquery/2"},{"type":"function","title":"Bonfire.Social.Threads.read/2","doc":"","ref":"Bonfire.Social.Threads.html#read/2"},{"type":"function","title":"Bonfire.Social.Threads.schema_module/0","doc":"","ref":"Bonfire.Social.Threads.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Threads.unseen_count/2","doc":"","ref":"Bonfire.Social.Threads.html#unseen_count/2"},{"type":"function","title":"Bonfire.Social.Threads.unseen_query/2","doc":"","ref":"Bonfire.Social.Threads.html#unseen_query/2"},{"type":"module","title":"Bonfire.Social.Threads.LiveHandler","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.handle_info/2","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#handle_info/2"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.handle_params/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#handle_params/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.insert_comments/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#insert_comments/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.live_more/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#live_more/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.load_thread/1","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#load_thread/1"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.load_thread_assigns/1","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#load_thread_assigns/1"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.load_thread_maybe_async/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#load_thread_maybe_async/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.max_depth/1","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#max_depth/1"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.maybe_subscribe/2","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#maybe_subscribe/2"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.reply/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#reply/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.send_thread_updates/4","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#send_thread_updates/4"},{"type":"macro","title":"Bonfire.Social.Threads.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.thread_init/1","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#thread_init/1"},{"type":"module","title":"Bonfire.System.OS.Monitor","doc":"","ref":"Bonfire.System.OS.Monitor.html"},{"type":"function","title":"Bonfire.System.OS.Monitor.format_bytes/1","doc":"Formats bytes.","ref":"Bonfire.System.OS.Monitor.html#format_bytes/1"},{"type":"function","title":"Bonfire.System.OS.Monitor.format_percent/1","doc":"Formats percent.","ref":"Bonfire.System.OS.Monitor.html#format_percent/1"},{"type":"function","title":"Bonfire.System.OS.Monitor.handle_alarm/2","doc":"","ref":"Bonfire.System.OS.Monitor.html#handle_alarm/2"},{"type":"function","title":"Bonfire.System.OS.Monitor.handle_event/2","doc":"","ref":"Bonfire.System.OS.Monitor.html#handle_event/2"},{"type":"function","title":"Bonfire.System.OS.Monitor.init/1","doc":"","ref":"Bonfire.System.OS.Monitor.html#init/1"},{"type":"module","title":"Bonfire.Tag","doc":"","ref":"Bonfire.Tag.html"},{"type":"function","title":"Bonfire.Tag.context_module/0","doc":"","ref":"Bonfire.Tag.html#context_module/0"},{"type":"function","title":"Bonfire.Tag.query_module/0","doc":"","ref":"Bonfire.Tag.html#query_module/0"},{"type":"function","title":"Bonfire.Tag.tag_things_changeset/2","doc":"Add things (Pointer objects) to a tag. You usually want to add tags to a thing instead, see `thing_tags_changeset`","ref":"Bonfire.Tag.html#tag_things_changeset/2"},{"type":"function","title":"Bonfire.Tag.thing_tags_changeset/2","doc":"Add tags to a thing (any Pointer object which defines a many_to_many relation to tag). This function applies to your object schema but is here for convenience.","ref":"Bonfire.Tag.html#thing_tags_changeset/2"},{"type":"function","title":"Bonfire.Tag.thing_tags_insert/2","doc":"","ref":"Bonfire.Tag.html#thing_tags_insert/2"},{"type":"module","title":"Bonfire.Tag.Autocomplete","doc":"","ref":"Bonfire.Tag.Autocomplete.html"},{"type":"function","title":"Bonfire.Tag.Autocomplete.api_tag_lookup/3","doc":"","ref":"Bonfire.Tag.Autocomplete.html#api_tag_lookup/3"},{"type":"function","title":"Bonfire.Tag.Autocomplete.api_tag_lookup_public/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#api_tag_lookup_public/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.filter_results/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#filter_results/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.find_all_tags/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#find_all_tags/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.maybe_find_tags/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#maybe_find_tags/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.maybe_search/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#maybe_search/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.prefix_index/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#prefix_index/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.search_or_lookup/3","doc":"","ref":"Bonfire.Tag.Autocomplete.html#search_or_lookup/3"},{"type":"function","title":"Bonfire.Tag.Autocomplete.search_prefix/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#search_prefix/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.search_type/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#search_type/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_add_field/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_add_field/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_hit_prepare/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_hit_prepare/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_lookup_public/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_lookup_public/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_search/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_search/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_search_from_tags/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_search_from_tags/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_search_from_text/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_search_from_text/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tags_split/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tags_split/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.try_all_prefixes/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#try_all_prefixes/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.try_prefixes/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#try_prefixes/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.try_tag_search/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#try_tag_search/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.try_tag_search/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#try_tag_search/2"},{"type":"module","title":"Bonfire.Tag.Hashtag","doc":"","ref":"Bonfire.Tag.Hashtag.html"},{"type":"function","title":"Bonfire.Tag.Hashtag.changeset/2","doc":"","ref":"Bonfire.Tag.Hashtag.html#changeset/2"},{"type":"function","title":"Bonfire.Tag.Hashtag.get_or_create_by_name/1","doc":"","ref":"Bonfire.Tag.Hashtag.html#get_or_create_by_name/1"},{"type":"function","title":"Bonfire.Tag.Hashtag.normalize_name/1","doc":"","ref":"Bonfire.Tag.Hashtag.html#normalize_name/1"},{"type":"module","title":"Bonfire.Tag.Queries","doc":"","ref":"Bonfire.Tag.Queries.html"},{"type":"function","title":"Bonfire.Tag.Queries.filter/2","doc":"Filter the query according to arbitrary criteria","ref":"Bonfire.Tag.Queries.html#filter/2"},{"type":"function","title":"Bonfire.Tag.Queries.join_to/3","doc":"","ref":"Bonfire.Tag.Queries.html#join_to/3"},{"type":"function","title":"Bonfire.Tag.Queries.list_trending/3","doc":"","ref":"Bonfire.Tag.Queries.html#list_trending/3"},{"type":"function","title":"Bonfire.Tag.Queries.queries/4","doc":"","ref":"Bonfire.Tag.Queries.html#queries/4"},{"type":"function","title":"Bonfire.Tag.Queries.query/1","doc":"","ref":"Bonfire.Tag.Queries.html#query/1"},{"type":"function","title":"Bonfire.Tag.Queries.query/2","doc":"","ref":"Bonfire.Tag.Queries.html#query/2"},{"type":"module","title":"Bonfire.Tag.Simulate","doc":"","ref":"Bonfire.Tag.Simulate.html"},{"type":"module","title":"Bonfire.Tag.Tagged","doc":"","ref":"Bonfire.Tag.Tagged.html"},{"type":"function","title":"Bonfire.Tag.Tagged.all/0","doc":"","ref":"Bonfire.Tag.Tagged.html#all/0"},{"type":"function","title":"Bonfire.Tag.Tagged.changeset/2","doc":"","ref":"Bonfire.Tag.Tagged.html#changeset/2"},{"type":"function","title":"Bonfire.Tag.Tagged.latest/1","doc":"Get the latest tag added to a thing","ref":"Bonfire.Tag.Tagged.html#latest/1"},{"type":"function","title":"Bonfire.Tag.Tagged.q_with_tag/1","doc":"List the things tagged with a certain tag","ref":"Bonfire.Tag.Tagged.html#q_with_tag/1"},{"type":"function","title":"Bonfire.Tag.Tagged.q_with_thing/1","doc":"List the tags of a thing","ref":"Bonfire.Tag.Tagged.html#q_with_thing/1"},{"type":"function","title":"Bonfire.Tag.Tagged.q_with_type/1","doc":"List by type of tagged thing","ref":"Bonfire.Tag.Tagged.html#q_with_type/1"},{"type":"function","title":"Bonfire.Tag.Tagged.with_tag/1","doc":"","ref":"Bonfire.Tag.Tagged.html#with_tag/1"},{"type":"function","title":"Bonfire.Tag.Tagged.with_thing/1","doc":"","ref":"Bonfire.Tag.Tagged.html#with_thing/1"},{"type":"function","title":"Bonfire.Tag.Tagged.with_type/1","doc":"","ref":"Bonfire.Tag.Tagged.html#with_type/1"},{"type":"module","title":"Bonfire.Tag.Tags","doc":"","ref":"Bonfire.Tag.Tags.html"},{"type":"function","title":"Bonfire.Tag.Tags.find/2","doc":"","ref":"Bonfire.Tag.Tags.html#find/2"},{"type":"function","title":"Bonfire.Tag.Tags.get/2","doc":"","ref":"Bonfire.Tag.Tags.html#get/2"},{"type":"function","title":"Bonfire.Tag.Tags.indexing_object_format/1","doc":"","ref":"Bonfire.Tag.Tags.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Tag.Tags.indexing_object_format_name/1","doc":"","ref":"Bonfire.Tag.Tags.html#indexing_object_format_name/1"},{"type":"function","title":"Bonfire.Tag.Tags.list_trending/2","doc":"","ref":"Bonfire.Tag.Tags.html#list_trending/2"},{"type":"function","title":"Bonfire.Tag.Tags.list_trending_reset/2","doc":"","ref":"Bonfire.Tag.Tags.html#list_trending_reset/2"},{"type":"function","title":"Bonfire.Tag.Tags.many/2","doc":"Retrieves a list of tags by arbitrary filters.\nUsed by:\n* Various parts of the codebase that need to query for tags (inc. tests)","ref":"Bonfire.Tag.Tags.html#many/2"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_find_tag/3","doc":"Try to find one (best-match) tag","ref":"Bonfire.Tag.Tags.html#maybe_find_tag/3"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_find_tags/3","doc":"Search / autocomplete for tags by name","ref":"Bonfire.Tag.Tags.html#maybe_find_tags/3"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_lookup_tag/2","doc":"Lookup a single for a tag by its name/username","ref":"Bonfire.Tag.Tags.html#maybe_lookup_tag/2"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_tag/4","doc":"Maybe tag something","ref":"Bonfire.Tag.Tags.html#maybe_tag/4"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_taxonomy_tag/2","doc":"","ref":"Bonfire.Tag.Tags.html#maybe_taxonomy_tag/2"},{"type":"function","title":"Bonfire.Tag.Tags.one/2","doc":"Retrieves a single tag by arbitrary filters.\nUsed by:\n* GraphQL Item queries\n* ActivityPub integration\n* Various parts of the codebase that need to query for tags (inc. tests)","ref":"Bonfire.Tag.Tags.html#one/2"},{"type":"function","title":"Bonfire.Tag.Tags.tag_ids/1","doc":"","ref":"Bonfire.Tag.Tags.html#tag_ids/1"},{"type":"function","title":"Bonfire.Tag.Tags.tag_something/4","doc":"tag existing thing with one or multiple Tags, Needle, or anything that can be made into a tag","ref":"Bonfire.Tag.Tags.html#tag_something/4"},{"type":"module","title":"Bonfire.Tag.TextContent.Formatter","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.escape_mention_handler/4","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html#escape_mention_handler/4"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.linkify/2","doc":"Parses a text and replace plain text links with HTML. Returns a tuple with a result text, mentions, and hashtags.\n\nIf the 'safe_mention' option is given, only consecutive mentions at the start the post are actually mentioned.","ref":"Bonfire.Tag.TextContent.Formatter.html#linkify/2"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.nothing_handler/3","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html#nothing_handler/3"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.tag_handler/4","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html#tag_handler/4"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.url_handler/3","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html#url_handler/3"},{"type":"module","title":"Bonfire.Tag.TextContent.Process","doc":"","ref":"Bonfire.Tag.TextContent.Process.html"},{"type":"function","title":"Bonfire.Tag.TextContent.Process.html_escape/2","doc":"","ref":"Bonfire.Tag.TextContent.Process.html#html_escape/2"},{"type":"function","title":"Bonfire.Tag.TextContent.Process.process/3","doc":"For use for things like a bio, where we want links but not to actually trigger mentions.","ref":"Bonfire.Tag.TextContent.Process.html#process/3"},{"type":"module","title":"Bonfire.Tag.Web.Routes","doc":"","ref":"Bonfire.Tag.Web.Routes.html"},{"type":"function","title":"Bonfire.Tag.Web.Routes.declare_routes/0","doc":"","ref":"Bonfire.Tag.Web.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.Tags.Acts.AutoBoost","doc":"","ref":"Bonfire.Tags.Acts.AutoBoost.html"},{"type":"function","title":"Bonfire.Tags.Acts.AutoBoost.run/2","doc":"","ref":"Bonfire.Tags.Acts.AutoBoost.html#run/2"},{"type":"module","title":"Bonfire.Tags.Acts.Tag","doc":"","ref":"Bonfire.Tags.Acts.Tag.html"},{"type":"function","title":"Bonfire.Tags.Acts.Tag.run/2","doc":"","ref":"Bonfire.Tags.Acts.Tag.html#run/2"},{"type":"module","title":"Bonfire.Telemetry.Storage","doc":"","ref":"Bonfire.Telemetry.Storage.html"},{"type":"function","title":"Bonfire.Telemetry.Storage.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Telemetry.Storage.html#child_spec/1"},{"type":"function","title":"Bonfire.Telemetry.Storage.handle_event/4","doc":"","ref":"Bonfire.Telemetry.Storage.html#handle_event/4"},{"type":"function","title":"Bonfire.Telemetry.Storage.metrics_history/1","doc":"","ref":"Bonfire.Telemetry.Storage.html#metrics_history/1"},{"type":"function","title":"Bonfire.Telemetry.Storage.start_link/1","doc":"","ref":"Bonfire.Telemetry.Storage.html#start_link/1"},{"type":"module","title":"ActivityPub","doc":"Entrypoint to the ActivityPub API for processing incoming and outgoing federated objects (normalising, saving the the Object storage, passing them to the adapter, and queueing outgoing activities to be pushed out).\n\nIn general, the functions in this module take object-like map.\nThat includes a struct as the input for actor parameters. Use the functions in the `ActivityPub.Actor` module (`ActivityPub.Actor.get_cached/1` for example) to retrieve those.","ref":"ActivityPub.html"},{"type":"function","title":"ActivityPub.accept/1","doc":"Generates and federates an Accept activity via the data passed through `params`.","ref":"ActivityPub.html#accept/1"},{"type":"function","title":"ActivityPub.accept_activity/1","doc":"","ref":"ActivityPub.html#accept_activity/1"},{"type":"function","title":"ActivityPub.announce/1","doc":"","ref":"ActivityPub.html#announce/1"},{"type":"function","title":"ActivityPub.block/1","doc":"","ref":"ActivityPub.html#block/1"},{"type":"function","title":"ActivityPub.create/1","doc":"Generates and federates a Create activity via the data passed through `params`.","ref":"ActivityPub.html#create/1"},{"type":"function","title":"ActivityPub.delete/3","doc":"","ref":"ActivityPub.html#delete/3"},{"type":"function","title":"ActivityPub.flag/1","doc":"","ref":"ActivityPub.html#flag/1"},{"type":"function","title":"ActivityPub.follow/1","doc":"Generates and federates a Follow activity.\n\nNote: the follow should be reflected as a Follow on the host database side only after receiving an `Accept` activity in response (though you could register it as a Request if your app has that concept)","ref":"ActivityPub.html#follow/1"},{"type":"function","title":"ActivityPub.like/1","doc":"Record a Like","ref":"ActivityPub.html#like/1"},{"type":"function","title":"ActivityPub.move/4","doc":"","ref":"ActivityPub.html#move/4"},{"type":"function","title":"ActivityPub.reject/1","doc":"Generates and federates a Reject activity via the data passed through `params`.","ref":"ActivityPub.html#reject/1"},{"type":"function","title":"ActivityPub.unannounce/1","doc":"","ref":"ActivityPub.html#unannounce/1"},{"type":"function","title":"ActivityPub.unblock/1","doc":"","ref":"ActivityPub.html#unblock/1"},{"type":"function","title":"ActivityPub.unfollow/1","doc":"Generates and federates an Unfollow activity.","ref":"ActivityPub.html#unfollow/1"},{"type":"function","title":"ActivityPub.unlike/1","doc":"","ref":"ActivityPub.html#unlike/1"},{"type":"function","title":"ActivityPub.update/1","doc":"","ref":"ActivityPub.html#update/1"},{"type":"module","title":"ActivityPub.Actor","doc":"An ActivityPub Actor type and functions for dealing with actors.","ref":"ActivityPub.Actor.html"},{"type":"function","title":"ActivityPub.Actor.actor?/1","doc":"","ref":"ActivityPub.Actor.html#actor?/1"},{"type":"function","title":"ActivityPub.Actor.actor_url/1","doc":"","ref":"ActivityPub.Actor.html#actor_url/1"},{"type":"function","title":"ActivityPub.Actor.check_actor_is_active/1","doc":"","ref":"ActivityPub.Actor.html#check_actor_is_active/1"},{"type":"function","title":"ActivityPub.Actor.deactivate/1","doc":"","ref":"ActivityPub.Actor.html#deactivate/1"},{"type":"function","title":"ActivityPub.Actor.delete/1","doc":"","ref":"ActivityPub.Actor.html#delete/1"},{"type":"function","title":"ActivityPub.Actor.fetch_by_username/2","doc":"Fetches a remote actor by username in `username@domain.tld` format","ref":"ActivityPub.Actor.html#fetch_by_username/2"},{"type":"function","title":"ActivityPub.Actor.format_remote_actor/1","doc":"","ref":"ActivityPub.Actor.html#format_remote_actor/1"},{"type":"function","title":"ActivityPub.Actor.format_username/1","doc":"","ref":"ActivityPub.Actor.html#format_username/1"},{"type":"function","title":"ActivityPub.Actor.format_username/2","doc":"","ref":"ActivityPub.Actor.html#format_username/2"},{"type":"function","title":"ActivityPub.Actor.get_cached/1","doc":"","ref":"ActivityPub.Actor.html#get_cached/1"},{"type":"function","title":"ActivityPub.Actor.get_cached!/1","doc":"","ref":"ActivityPub.Actor.html#get_cached!/1"},{"type":"function","title":"ActivityPub.Actor.get_cached_or_fetch/1","doc":"Tries to get a local actor by username or tries to fetch it remotely if username is provided in `username@domain.tld` format.","ref":"ActivityPub.Actor.html#get_cached_or_fetch/1"},{"type":"function","title":"ActivityPub.Actor.get_external_followers/1","doc":"","ref":"ActivityPub.Actor.html#get_external_followers/1"},{"type":"function","title":"ActivityPub.Actor.get_followers/1","doc":"","ref":"ActivityPub.Actor.html#get_followers/1"},{"type":"function","title":"ActivityPub.Actor.get_followings/1","doc":"","ref":"ActivityPub.Actor.html#get_followings/1"},{"type":"function","title":"ActivityPub.Actor.invalidate_cache/1","doc":"","ref":"ActivityPub.Actor.html#invalidate_cache/1"},{"type":"function","title":"ActivityPub.Actor.maybe_create_actor_from_object/1","doc":"","ref":"ActivityPub.Actor.html#maybe_create_actor_from_object/1"},{"type":"function","title":"ActivityPub.Actor.reactivate/1","doc":"","ref":"ActivityPub.Actor.html#reactivate/1"},{"type":"function","title":"ActivityPub.Actor.save_actor_tombstone/2","doc":"","ref":"ActivityPub.Actor.html#save_actor_tombstone/2"},{"type":"function","title":"ActivityPub.Actor.set_cache/1","doc":"","ref":"ActivityPub.Actor.html#set_cache/1"},{"type":"function","title":"ActivityPub.Actor.swap_or_create_actor_tombstone/1","doc":"","ref":"ActivityPub.Actor.html#swap_or_create_actor_tombstone/1"},{"type":"function","title":"ActivityPub.Actor.update_actor/1","doc":"Updates an existing actor struct by its AP ID.","ref":"ActivityPub.Actor.html#update_actor/1"},{"type":"function","title":"ActivityPub.Actor.update_actor/2","doc":"","ref":"ActivityPub.Actor.html#update_actor/2"},{"type":"type","title":"ActivityPub.Actor.t/0","doc":"","ref":"ActivityPub.Actor.html#t:t/0"},{"type":"module","title":"ActivityPub.Config","doc":"","ref":"ActivityPub.Config.html"},{"type":"function","title":"ActivityPub.Config.actors_and_collections/0","doc":"","ref":"ActivityPub.Config.html#actors_and_collections/0"},{"type":"function","title":"ActivityPub.Config.collection_types/0","doc":"","ref":"ActivityPub.Config.html#collection_types/0"},{"type":"function","title":"ActivityPub.Config.delete/1","doc":"","ref":"ActivityPub.Config.html#delete/1"},{"type":"function","title":"ActivityPub.Config.env/0","doc":"","ref":"ActivityPub.Config.html#env/0"},{"type":"function","title":"ActivityPub.Config.federating?/0","doc":"","ref":"ActivityPub.Config.html#federating?/0"},{"type":"function","title":"ActivityPub.Config.get/1","doc":"","ref":"ActivityPub.Config.html#get/1"},{"type":"function","title":"ActivityPub.Config.get/2","doc":"","ref":"ActivityPub.Config.html#get/2"},{"type":"function","title":"ActivityPub.Config.get!/1","doc":"","ref":"ActivityPub.Config.html#get!/1"},{"type":"macro","title":"ActivityPub.Config.is_in/2","doc":"For matching against the above list in guards TODO: use runtime config","ref":"ActivityPub.Config.html#is_in/2"},{"type":"function","title":"ActivityPub.Config.public_uri/0","doc":"","ref":"ActivityPub.Config.html#public_uri/0"},{"type":"function","title":"ActivityPub.Config.public_uris/0","doc":"","ref":"ActivityPub.Config.html#public_uris/0"},{"type":"function","title":"ActivityPub.Config.put/2","doc":"","ref":"ActivityPub.Config.html#put/2"},{"type":"function","title":"ActivityPub.Config.supported_activity_types/0","doc":"","ref":"ActivityPub.Config.html#supported_activity_types/0"},{"type":"function","title":"ActivityPub.Config.supported_actor_types/0","doc":"","ref":"ActivityPub.Config.html#supported_actor_types/0"},{"type":"exception","title":"ActivityPub.Config.Error","doc":"","ref":"ActivityPub.Config.Error.html"},{"type":"module","title":"ActivityPub.Federator","doc":"","ref":"ActivityPub.Federator.html"},{"type":"function","title":"ActivityPub.Federator.enqueue_incoming_ap_doc/1","doc":"","ref":"ActivityPub.Federator.html#enqueue_incoming_ap_doc/1"},{"type":"function","title":"ActivityPub.Federator.perform/2","doc":"","ref":"ActivityPub.Federator.html#perform/2"},{"type":"function","title":"ActivityPub.Federator.perform/3","doc":"","ref":"ActivityPub.Federator.html#perform/3"},{"type":"function","title":"ActivityPub.Federator.publish/1","doc":"","ref":"ActivityPub.Federator.html#publish/1"},{"type":"module","title":"ActivityPub.Federator.APPublisher","doc":"","ref":"ActivityPub.Federator.APPublisher.html"},{"type":"function","title":"ActivityPub.Federator.APPublisher.determine_inbox/4","doc":"Determine a user inbox to use based on heuristics. These heuristics\nare based on an approximation of the ``sharedInbox`` rules in the\n[ActivityPub specification][ap-sharedinbox].\n\n [ap-sharedinbox]: https://www.w3.org/TR/activitypub/#shared-inbox-delivery","ref":"ActivityPub.Federator.APPublisher.html#determine_inbox/4"},{"type":"function","title":"ActivityPub.Federator.APPublisher.gather_webfinger_links/1","doc":"","ref":"ActivityPub.Federator.APPublisher.html#gather_webfinger_links/1"},{"type":"function","title":"ActivityPub.Federator.APPublisher.is_representable?/1","doc":"","ref":"ActivityPub.Federator.APPublisher.html#is_representable?/1"},{"type":"function","title":"ActivityPub.Federator.APPublisher.maybe_federate_to_search_index/2","doc":"If you put the URL of the shared inbox of an ActivityPub instance in the following env variable, all public content will be pushed there via AP federation for search indexing purposes: PUSH_ALL_PUBLIC_CONTENT_TO_INSTANCE\n#TODO: move to adapter","ref":"ActivityPub.Federator.APPublisher.html#maybe_federate_to_search_index/2"},{"type":"function","title":"ActivityPub.Federator.APPublisher.publish/2","doc":"","ref":"ActivityPub.Federator.APPublisher.html#publish/2"},{"type":"function","title":"ActivityPub.Federator.APPublisher.publish_one/1","doc":"Publish a single message to a peer. Takes a struct with the following\nparameters set:\n\n* `inbox`: the inbox to publish to\n* `json`: the JSON message body representing the ActivityPub message\n* `actor`: the actor which is signing the message\n* `id`: the ActivityStreams URI of the message","ref":"ActivityPub.Federator.APPublisher.html#publish_one/1"},{"type":"behaviour","title":"ActivityPub.Federator.Adapter","doc":"Contract for ActivityPub module adapters","ref":"ActivityPub.Federator.Adapter.html"},{"type":"function","title":"ActivityPub.Federator.Adapter.adapter/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#adapter/0"},{"type":"function","title":"ActivityPub.Federator.Adapter.base_url/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#base_url/0"},{"type":"callback","title":"ActivityPub.Federator.Adapter.base_url/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:base_url/0"},{"type":"function","title":"ActivityPub.Federator.Adapter.call_or/3","doc":"Run function from adapter if defined, otherwise return fallback value","ref":"ActivityPub.Federator.Adapter.html#call_or/3"},{"type":"function","title":"ActivityPub.Federator.Adapter.external_followers_for_activity/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#external_followers_for_activity/2"},{"type":"callback","title":"ActivityPub.Federator.Adapter.external_followers_for_activity/2","doc":"Compute and return a subset of followers that should receive a specific activity (optional)","ref":"ActivityPub.Federator.Adapter.html#c:external_followers_for_activity/2"},{"type":"function","title":"ActivityPub.Federator.Adapter.federate_actor?/3","doc":"Whether this (local or remote) actor has federation enabled and/or is blocked on this instance\n\nactor: the actor to check (eg. Alice)\ndirection: :in or :out - whether we're dealing with incoming federation or outgoing (optional)\nby_actor: optionally another actor (eg. if Alice is sending something to Bob, this would be Bob)","ref":"ActivityPub.Federator.Adapter.html#federate_actor?/3"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_actor_by_ap_id/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_actor_by_ap_id/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_actor_by_ap_id/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_actor_by_ap_id/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_actor_by_id/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_actor_by_id/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_actor_by_id/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_actor_by_id/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_actor_by_username/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_actor_by_username/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_actor_by_username/1","doc":"Fetch an actor given its preferred username","ref":"ActivityPub.Federator.Adapter.html#c:get_actor_by_username/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_follower_local_ids/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_follower_local_ids/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_follower_local_ids/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_follower_local_ids/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_following_local_ids/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_following_local_ids/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_following_local_ids/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_following_local_ids/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_locale/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_locale/0"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_locale/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_locale/0"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_or_create_service_actor/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_or_create_service_actor/0"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_or_create_service_actor/0","doc":"Creates an internal service actor by username, if missing.","ref":"ActivityPub.Federator.Adapter.html#c:get_or_create_service_actor/0"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_redirect_url/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_redirect_url/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_redirect_url/1","doc":"Gets local url of an AP object to redirect in browser. Can take pointer id or an actor username.","ref":"ActivityPub.Federator.Adapter.html#c:get_redirect_url/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.handle_activity/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#handle_activity/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.handle_activity/1","doc":"Passes data to be handled by the host application","ref":"ActivityPub.Federator.Adapter.html#c:handle_activity/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.maybe_create_remote_actor/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#maybe_create_remote_actor/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.maybe_create_remote_actor/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:maybe_create_remote_actor/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.maybe_handle_activity/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#maybe_handle_activity/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.maybe_publish_object/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#maybe_publish_object/2"},{"type":"callback","title":"ActivityPub.Federator.Adapter.maybe_publish_object/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:maybe_publish_object/2"},{"type":"function","title":"ActivityPub.Federator.Adapter.update_local_actor/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#update_local_actor/2"},{"type":"callback","title":"ActivityPub.Federator.Adapter.update_local_actor/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:update_local_actor/2"},{"type":"function","title":"ActivityPub.Federator.Adapter.update_remote_actor/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#update_remote_actor/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.update_remote_actor/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:update_remote_actor/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.update_remote_actor/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#update_remote_actor/2"},{"type":"module","title":"ActivityPub.Federator.Fetcher","doc":"Handles fetching AS2 objects from remote instances.","ref":"ActivityPub.Federator.Fetcher.html"},{"type":"function","title":"ActivityPub.Federator.Fetcher.allowed_recursion?/2","doc":"Returns `true` if the distance to target object does not exceed max configured value.\nServes to prevent fetching of very long threads, especially useful on smaller instances.\nAddresses memory leaks on recursive replies fetching.\nApplies to fetching of both ancestor (reply-to) and child (reply) objects.","ref":"ActivityPub.Federator.Fetcher.html#allowed_recursion?/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.enqueue_fetch/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#enqueue_fetch/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_collection/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_collection/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_fresh_object_from_id/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_fresh_object_from_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_object_from_id/2","doc":"Checks if an object exists in the AP and Adapter databases and fetches and creates it if not.","ref":"ActivityPub.Federator.Fetcher.html#fetch_object_from_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_objects_from_id/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_objects_from_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_outbox/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_outbox/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_remote_object_from_id/2","doc":"Fetches an AS2 object from remote AP ID.","ref":"ActivityPub.Federator.Fetcher.html#fetch_remote_object_from_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_replies/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_replies/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.get_cached_object_or_fetch_ap_id/2","doc":"Checks if an object exists in the AP database and fetches it if not (but does not send to Adapter).","ref":"ActivityPub.Federator.Fetcher.html#get_cached_object_or_fetch_ap_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.get_cached_object_or_fetch_pointer_id/2","doc":"Checks if an object exists in the AP database and prepares it if not (local objects only).","ref":"ActivityPub.Federator.Fetcher.html#get_cached_object_or_fetch_pointer_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.maybe_fetch/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#maybe_fetch/2"},{"type":"module","title":"ActivityPub.Federator.HTTP","doc":"Module for building and performing HTTP requests.","ref":"ActivityPub.Federator.HTTP.html"},{"type":"function","title":"ActivityPub.Federator.HTTP.delete/4","doc":"Makes a DELETE request\n\nsee `ActivityPub.Federator.HTTP.http_request/5`","ref":"ActivityPub.Federator.HTTP.html#delete/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.get/3","doc":"Makes a GET request\n\nsee `ActivityPub.Federator.HTTP.http_request/5`","ref":"ActivityPub.Federator.HTTP.html#get/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.http_request/5","doc":"Builds and perform http request.\n\n# Arguments:\n`method` - :get, :post, :put, :delete\n`url`\n`body`\n`headers` - a keyworld list of headers, e.g. `[{\"content-type\", \"text/plain\"}]`\n`options` - custom, per-request middleware or adapter options\n\n# Returns:\n`{:ok, %Tesla.Env{}}` or `{:error, error}`","ref":"ActivityPub.Federator.HTTP.html#http_request/5"},{"type":"function","title":"ActivityPub.Federator.HTTP.post/4","doc":"Makes a POST request\n\nsee `ActivityPub.Federator.HTTP.http_request/5`","ref":"ActivityPub.Federator.HTTP.html#post/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.put/4","doc":"Makes a PUT request\n\nsee `ActivityPub.Federator.HTTP.http_request/5`","ref":"ActivityPub.Federator.HTTP.html#put/4"},{"type":"type","title":"ActivityPub.Federator.HTTP.t/0","doc":"","ref":"ActivityPub.Federator.HTTP.html#t:t/0"},{"type":"module","title":"ActivityPub.Federator.HTTP.Connection","doc":"Specifies connection options for HTTP requests","ref":"ActivityPub.Federator.HTTP.Connection.html"},{"type":"function","title":"ActivityPub.Federator.HTTP.Connection.adapter_options/2","doc":"","ref":"ActivityPub.Federator.HTTP.Connection.html#adapter_options/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.Connection.new/1","doc":"","ref":"ActivityPub.Federator.HTTP.Connection.html#new/1"},{"type":"module","title":"ActivityPub.Federator.HTTP.RateLimit","doc":"Rate limit middleware for Tesla using Hammer\nBased on `TeslaExtra.RateLimit` and `TeslaExtra.RetryAfter`","ref":"ActivityPub.Federator.HTTP.RateLimit.html"},{"type":"module","title":"ActivityPub.Federator.HTTP.RequestBuilder","doc":"Helper functions for building HTTP requests","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.add_param/4","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#add_param/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.headers/2","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#headers/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.method/2","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#method/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.opts/2","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#opts/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.url/2","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#url/2"},{"type":"module","title":"ActivityPub.Federator.HTTP.RetryAfter","doc":"Takes into account the Retry-After header returned by the server when the rate limit is exceeded.\n\nBased on `TeslaExtra.RetryAfter`","ref":"ActivityPub.Federator.HTTP.RetryAfter.html"},{"type":"module","title":"ActivityPub.Federator.HTTP.Tesla","doc":"","ref":"ActivityPub.Federator.HTTP.Tesla.html"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.delete/3","doc":"Perform a DELETE request.\n\nSee `request/1` or `request/2` for options definition.\n\n delete(\"/users\")\n delete(\"/users\", query: [scope: \"admin\"])\n delete(client, \"/users\")\n delete(client, \"/users\", query: [scope: \"admin\"])\n delete(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#delete/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.delete!/3","doc":"Perform a DELETE request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n delete!(\"/users\")\n delete!(\"/users\", query: [scope: \"admin\"])\n delete!(client, \"/users\")\n delete!(client, \"/users\", query: [scope: \"admin\"])\n delete!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#delete!/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.get/3","doc":"Perform a GET request.\n\nSee `request/1` or `request/2` for options definition.\n\n get(\"/users\")\n get(\"/users\", query: [scope: \"admin\"])\n get(client, \"/users\")\n get(client, \"/users\", query: [scope: \"admin\"])\n get(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#get/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.get!/3","doc":"Perform a GET request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n get!(\"/users\")\n get!(\"/users\", query: [scope: \"admin\"])\n get!(client, \"/users\")\n get!(client, \"/users\", query: [scope: \"admin\"])\n get!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#get!/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.head/3","doc":"Perform a HEAD request.\n\nSee `request/1` or `request/2` for options definition.\n\n head(\"/users\")\n head(\"/users\", query: [scope: \"admin\"])\n head(client, \"/users\")\n head(client, \"/users\", query: [scope: \"admin\"])\n head(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#head/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.head!/3","doc":"Perform a HEAD request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n head!(\"/users\")\n head!(\"/users\", query: [scope: \"admin\"])\n head!(client, \"/users\")\n head!(client, \"/users\", query: [scope: \"admin\"])\n head!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#head!/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.options/3","doc":"Perform a OPTIONS request.\n\nSee `request/1` or `request/2` for options definition.\n\n options(\"/users\")\n options(\"/users\", query: [scope: \"admin\"])\n options(client, \"/users\")\n options(client, \"/users\", query: [scope: \"admin\"])\n options(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#options/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.options!/3","doc":"Perform a OPTIONS request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n options!(\"/users\")\n options!(\"/users\", query: [scope: \"admin\"])\n options!(client, \"/users\")\n options!(client, \"/users\", query: [scope: \"admin\"])\n options!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#options!/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.patch/4","doc":"Perform a PATCH request.\n\nSee `request/1` or `request/2` for options definition.\n\n patch(\"/users\", %{name: \"Jon\"})\n patch(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n patch(client, \"/users\", %{name: \"Jon\"})\n patch(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#patch/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.patch!/4","doc":"Perform a PATCH request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n patch!(\"/users\", %{name: \"Jon\"})\n patch!(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n patch!(client, \"/users\", %{name: \"Jon\"})\n patch!(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#patch!/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.post/4","doc":"Perform a POST request.\n\nSee `request/1` or `request/2` for options definition.\n\n post(\"/users\", %{name: \"Jon\"})\n post(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n post(client, \"/users\", %{name: \"Jon\"})\n post(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#post/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.post!/4","doc":"Perform a POST request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n post!(\"/users\", %{name: \"Jon\"})\n post!(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n post!(client, \"/users\", %{name: \"Jon\"})\n post!(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#post!/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.put/4","doc":"Perform a PUT request.\n\nSee `request/1` or `request/2` for options definition.\n\n put(\"/users\", %{name: \"Jon\"})\n put(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n put(client, \"/users\", %{name: \"Jon\"})\n put(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#put/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.put!/4","doc":"Perform a PUT request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n put!(\"/users\", %{name: \"Jon\"})\n put!(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n put!(client, \"/users\", %{name: \"Jon\"})\n put!(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#put!/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.request/2","doc":"Perform a request.","ref":"ActivityPub.Federator.HTTP.Tesla.html#request/2"},{"type":"function","title":"Options - ActivityPub.Federator.HTTP.Tesla.request/2","doc":"- `:method` - the request method, one of [`:head`, `:get`, `:delete`, `:trace`, `:options`, `:post`, `:put`, `:patch`]\n- `:url` - either full url e.g. \"http://example.com/some/path\" or just \"/some/path\" if using `Tesla.Middleware.BaseUrl`\n- `:query` - a keyword list of query params, e.g. `[page: 1, per_page: 100]`\n- `:headers` - a keyworld list of headers, e.g. `[{\"content-type\", \"text/plain\"}]`\n- `:body` - depends on used middleware:\n - by default it can be a binary\n - if using e.g. JSON encoding middleware it can be a nested map\n - if adapter supports it it can be a Stream with any of the above\n- `:opts` - custom, per-request middleware or adapter options","ref":"ActivityPub.Federator.HTTP.Tesla.html#request/2-options"},{"type":"function","title":"Examples - ActivityPub.Federator.HTTP.Tesla.request/2","doc":"ExampleApi.request(method: :get, url: \"/users/path\")\n\n # use shortcut methods\n ExampleApi.get(\"/users/1\")\n ExampleApi.post(client, \"/users\", %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#request/2-examples"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.request!/2","doc":"Perform request and raise in case of error.\n\nThis is similar to `request/2` behaviour from Tesla 0.x\n\nSee `request/2` for list of available options.","ref":"ActivityPub.Federator.HTTP.Tesla.html#request!/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.trace/3","doc":"Perform a TRACE request.\n\nSee `request/1` or `request/2` for options definition.\n\n trace(\"/users\")\n trace(\"/users\", query: [scope: \"admin\"])\n trace(client, \"/users\")\n trace(client, \"/users\", query: [scope: \"admin\"])\n trace(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#trace/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.trace!/3","doc":"Perform a TRACE request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n trace!(\"/users\")\n trace!(\"/users\", query: [scope: \"admin\"])\n trace!(client, \"/users\")\n trace!(client, \"/users\", query: [scope: \"admin\"])\n trace!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#trace!/3"},{"type":"type","title":"ActivityPub.Federator.HTTP.Tesla.option/0","doc":"Options that may be passed to a request function. See `request/2` for detailed descriptions.","ref":"ActivityPub.Federator.HTTP.Tesla.html#t:option/0"},{"type":"behaviour","title":"ActivityPub.Federator.Publisher","doc":"Defines the contract used by federation implementations to publish messages to\ntheir peers.\n# TODO: why not use `APPublisher` directly instead?","ref":"ActivityPub.Federator.Publisher.html"},{"type":"function","title":"ActivityPub.Federator.Publisher.enqueue_one/2","doc":"Enqueue publishing a single activity.","ref":"ActivityPub.Federator.Publisher.html#enqueue_one/2"},{"type":"function","title":"ActivityPub.Federator.Publisher.gather_webfinger_links/1","doc":"","ref":"ActivityPub.Federator.Publisher.html#gather_webfinger_links/1"},{"type":"callback","title":"ActivityPub.Federator.Publisher.gather_webfinger_links/1","doc":"Gathers links used by an outgoing federation module for WebFinger output.","ref":"ActivityPub.Federator.Publisher.html#c:gather_webfinger_links/1"},{"type":"callback","title":"ActivityPub.Federator.Publisher.is_representable?/1","doc":"Determine whether an activity can be relayed using the federation module.","ref":"ActivityPub.Federator.Publisher.html#c:is_representable?/1"},{"type":"function","title":"ActivityPub.Federator.Publisher.publish/2","doc":"","ref":"ActivityPub.Federator.Publisher.html#publish/2"},{"type":"callback","title":"ActivityPub.Federator.Publisher.publish/2","doc":"Relays an activity to all specified peers.","ref":"ActivityPub.Federator.Publisher.html#c:publish/2"},{"type":"callback","title":"ActivityPub.Federator.Publisher.publish_one/1","doc":"Relays an activity to a specified peer, determined by the parameters. The\nparameters used are controlled by the federation module.","ref":"ActivityPub.Federator.Publisher.html#c:publish_one/1"},{"type":"module","title":"ActivityPub.Federator.Transformer","doc":"This module normalises outgoing data to conform with AS2/AP specs\nand handles incoming objects and activities","ref":"ActivityPub.Federator.Transformer.html"},{"type":"function","title":"ActivityPub.Federator.Transformer.add_emoji_tags/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#add_emoji_tags/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.determine_explicit_mentions/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#determine_explicit_mentions/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_actor/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_actor/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_addressing/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_addressing/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_addressing_list/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_addressing_list/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_attachments/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_attachments/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_content_map/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_content_map/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_context/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_context/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_emoji/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_emoji/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_explicit_addressing/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_explicit_addressing/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_in_reply_to/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_in_reply_to/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_object/2","doc":"Modifies an incoming AP object (mastodon format) to our internal format.","ref":"ActivityPub.Federator.Transformer.html#fix_object/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_quote_url/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_quote_url/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_replies/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_replies/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_summary/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_summary/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_tag/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_tag/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_url/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_url/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.format_input/3","doc":"","ref":"ActivityPub.Federator.Transformer.html#format_input/3"},{"type":"function","title":"ActivityPub.Federator.Transformer.handle_incoming/1","doc":"Handles incoming data, inserts it into the database and triggers side effects if the data is a supported activity type.","ref":"ActivityPub.Federator.Transformer.html#handle_incoming/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.maybe_handle_other_activity/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#maybe_handle_other_activity/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.maybe_handle_other_object/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#maybe_handle_other_object/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.prepare_outgoing/1","doc":"Translates MN Entity to an AP compatible format","ref":"ActivityPub.Federator.Transformer.html#prepare_outgoing/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.preserve_privacy_of_outgoing/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#preserve_privacy_of_outgoing/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.replies/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#replies/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.set_replies/1","doc":"Serialized Mastodon-compatible `replies` collection containing _self-replies_.\nBased on Mastodon's ActivityPub::NoteSerializer#replies.","ref":"ActivityPub.Federator.Transformer.html#set_replies/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.take_emoji_tags/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#take_emoji_tags/1"},{"type":"module","title":"ActivityPub.Federator.WebFinger","doc":"Serves and fetches data (mainly actor URI) necessary for federation when only the username and host is known.","ref":"ActivityPub.Federator.WebFinger.html"},{"type":"function","title":"ActivityPub.Federator.WebFinger.base_url/1","doc":"","ref":"ActivityPub.Federator.WebFinger.html#base_url/1"},{"type":"function","title":"ActivityPub.Federator.WebFinger.finger/1","doc":"Fetches webfinger data for an account given in \"@username@domain.tld\" format.","ref":"ActivityPub.Federator.WebFinger.html#finger/1"},{"type":"function","title":"ActivityPub.Federator.WebFinger.output/1","doc":"Serves a webfinger response for the requested username.","ref":"ActivityPub.Federator.WebFinger.html#output/1"},{"type":"function","title":"ActivityPub.Federator.WebFinger.represent_user/1","doc":"Formats gathered data into a JRD format.","ref":"ActivityPub.Federator.WebFinger.html#represent_user/1"},{"type":"function","title":"ActivityPub.Federator.WebFinger.webfinger_from_json/1","doc":"","ref":"ActivityPub.Federator.WebFinger.html#webfinger_from_json/1"},{"type":"module","title":"ActivityPub.Federator.Worker","doc":"Helpers for workers to `use`","ref":"ActivityPub.Federator.Worker.html"},{"type":"function","title":"ActivityPub.Federator.Worker.worker_args/1","doc":"","ref":"ActivityPub.Federator.Worker.html#worker_args/1"},{"type":"module","title":"ActivityPub.Federator.Workers.PublisherWorker","doc":"","ref":"ActivityPub.Federator.Workers.PublisherWorker.html"},{"type":"function","title":"ActivityPub.Federator.Workers.PublisherWorker.enqueue/3","doc":"","ref":"ActivityPub.Federator.Workers.PublisherWorker.html#enqueue/3"},{"type":"function","title":"ActivityPub.Federator.Workers.PublisherWorker.enqueueable/3","doc":"","ref":"ActivityPub.Federator.Workers.PublisherWorker.html#enqueueable/3"},{"type":"module","title":"ActivityPub.Federator.Workers.ReceiverWorker","doc":"","ref":"ActivityPub.Federator.Workers.ReceiverWorker.html"},{"type":"function","title":"ActivityPub.Federator.Workers.ReceiverWorker.enqueue/3","doc":"","ref":"ActivityPub.Federator.Workers.ReceiverWorker.html#enqueue/3"},{"type":"function","title":"ActivityPub.Federator.Workers.ReceiverWorker.enqueueable/3","doc":"","ref":"ActivityPub.Federator.Workers.ReceiverWorker.html#enqueueable/3"},{"type":"module","title":"ActivityPub.Federator.Workers.RemoteFetcherWorker","doc":"","ref":"ActivityPub.Federator.Workers.RemoteFetcherWorker.html"},{"type":"function","title":"ActivityPub.Federator.Workers.RemoteFetcherWorker.enqueue/3","doc":"","ref":"ActivityPub.Federator.Workers.RemoteFetcherWorker.html#enqueue/3"},{"type":"function","title":"ActivityPub.Federator.Workers.RemoteFetcherWorker.enqueueable/3","doc":"","ref":"ActivityPub.Federator.Workers.RemoteFetcherWorker.html#enqueueable/3"},{"type":"module","title":"ActivityPub.Fixtures","doc":"","ref":"ActivityPub.Fixtures.html"},{"type":"function","title":"ActivityPub.Fixtures.file/1","doc":"","ref":"ActivityPub.Fixtures.html#file/1"},{"type":"function","title":"ActivityPub.Fixtures.fixtures/0","doc":"","ref":"ActivityPub.Fixtures.html#fixtures/0"},{"type":"function","title":"ActivityPub.Fixtures.fixtures_generic/0","doc":"","ref":"ActivityPub.Fixtures.html#fixtures_generic/0"},{"type":"function","title":"ActivityPub.Fixtures.fixtures_get/0","doc":"","ref":"ActivityPub.Fixtures.html#fixtures_get/0"},{"type":"function","title":"ActivityPub.Fixtures.get/4","doc":"","ref":"ActivityPub.Fixtures.html#get/4"},{"type":"function","title":"ActivityPub.Fixtures.head/4","doc":"","ref":"ActivityPub.Fixtures.html#head/4"},{"type":"function","title":"ActivityPub.Fixtures.insert/1","doc":"","ref":"ActivityPub.Fixtures.html#insert/1"},{"type":"function","title":"ActivityPub.Fixtures.insert_all/0","doc":"","ref":"ActivityPub.Fixtures.html#insert_all/0"},{"type":"function","title":"ActivityPub.Fixtures.maybe_get_local/4","doc":"","ref":"ActivityPub.Fixtures.html#maybe_get_local/4"},{"type":"function","title":"ActivityPub.Fixtures.mock_global/1","doc":"","ref":"ActivityPub.Fixtures.html#mock_global/1"},{"type":"function","title":"ActivityPub.Fixtures.none/4","doc":"","ref":"ActivityPub.Fixtures.html#none/4"},{"type":"function","title":"ActivityPub.Fixtures.post/4","doc":"","ref":"ActivityPub.Fixtures.html#post/4"},{"type":"function","title":"ActivityPub.Fixtures.request/1","doc":"","ref":"ActivityPub.Fixtures.html#request/1"},{"type":"module","title":"ActivityPub.Instances","doc":"Instances context.","ref":"ActivityPub.Instances.html"},{"type":"function","title":"ActivityPub.Instances.filter_reachable/1","doc":"","ref":"ActivityPub.Instances.html#filter_reachable/1"},{"type":"function","title":"ActivityPub.Instances.host/1","doc":"","ref":"ActivityPub.Instances.html#host/1"},{"type":"function","title":"ActivityPub.Instances.reachability_datetime_threshold/0","doc":"","ref":"ActivityPub.Instances.html#reachability_datetime_threshold/0"},{"type":"function","title":"ActivityPub.Instances.reachable?/1","doc":"","ref":"ActivityPub.Instances.html#reachable?/1"},{"type":"function","title":"ActivityPub.Instances.set_consistently_unreachable/1","doc":"","ref":"ActivityPub.Instances.html#set_consistently_unreachable/1"},{"type":"function","title":"ActivityPub.Instances.set_reachable/1","doc":"","ref":"ActivityPub.Instances.html#set_reachable/1"},{"type":"function","title":"ActivityPub.Instances.set_unreachable/2","doc":"","ref":"ActivityPub.Instances.html#set_unreachable/2"},{"type":"module","title":"ActivityPub.Instances.Instance","doc":"Instance.","ref":"ActivityPub.Instances.Instance.html"},{"type":"function","title":"ActivityPub.Instances.Instance.changeset/2","doc":"","ref":"ActivityPub.Instances.Instance.html#changeset/2"},{"type":"function","title":"ActivityPub.Instances.Instance.do_set_reachable/1","doc":"","ref":"ActivityPub.Instances.Instance.html#do_set_reachable/1"},{"type":"function","title":"ActivityPub.Instances.Instance.filter_reachable/1","doc":"","ref":"ActivityPub.Instances.Instance.html#filter_reachable/1"},{"type":"function","title":"ActivityPub.Instances.Instance.host/1","doc":"","ref":"ActivityPub.Instances.Instance.html#host/1"},{"type":"function","title":"ActivityPub.Instances.Instance.reachable?/1","doc":"","ref":"ActivityPub.Instances.Instance.html#reachable?/1"},{"type":"function","title":"ActivityPub.Instances.Instance.set_reachable/1","doc":"","ref":"ActivityPub.Instances.Instance.html#set_reachable/1"},{"type":"function","title":"ActivityPub.Instances.Instance.set_unreachable/2","doc":"","ref":"ActivityPub.Instances.Instance.html#set_unreachable/2"},{"type":"behaviour","title":"ActivityPub.MRF","doc":"","ref":"ActivityPub.MRF.html"},{"type":"function","title":"ActivityPub.MRF.filter/2","doc":"","ref":"ActivityPub.MRF.html#filter/2"},{"type":"callback","title":"ActivityPub.MRF.filter/2","doc":"","ref":"ActivityPub.MRF.html#c:filter/2"},{"type":"function","title":"ActivityPub.MRF.filter/3","doc":"","ref":"ActivityPub.MRF.html#filter/3"},{"type":"function","title":"ActivityPub.MRF.get_policies/0","doc":"","ref":"ActivityPub.MRF.html#get_policies/0"},{"type":"function","title":"ActivityPub.MRF.subdomain_match?/2","doc":"","ref":"ActivityPub.MRF.html#subdomain_match?/2"},{"type":"function","title":"ActivityPub.MRF.subdomains_regex/1","doc":"","ref":"ActivityPub.MRF.html#subdomains_regex/1"},{"type":"module","title":"ActivityPub.MRF.SimplePolicy","doc":"Filter activities depending on their origin instance","ref":"ActivityPub.MRF.SimplePolicy.html"},{"type":"function","title":"ActivityPub.MRF.SimplePolicy.check_reject/2","doc":"","ref":"ActivityPub.MRF.SimplePolicy.html#check_reject/2"},{"type":"module","title":"ActivityPub.Object","doc":"","ref":"ActivityPub.Object.html"},{"type":"function","title":"ActivityPub.Object.actor_from_data/1","doc":"","ref":"ActivityPub.Object.html#actor_from_data/1"},{"type":"function","title":"ActivityPub.Object.actor_id_from_data/1","doc":"","ref":"ActivityPub.Object.html#actor_id_from_data/1"},{"type":"function","title":"ActivityPub.Object.changeset/1","doc":"","ref":"ActivityPub.Object.html#changeset/1"},{"type":"function","title":"ActivityPub.Object.changeset/2","doc":"","ref":"ActivityPub.Object.html#changeset/2"},{"type":"function","title":"ActivityPub.Object.common_changeset/1","doc":"","ref":"ActivityPub.Object.html#common_changeset/1"},{"type":"function","title":"ActivityPub.Object.delete/1","doc":"","ref":"ActivityPub.Object.html#delete/1"},{"type":"function","title":"ActivityPub.Object.do_insert/1","doc":"","ref":"ActivityPub.Object.html#do_insert/1"},{"type":"function","title":"ActivityPub.Object.do_update_existing/2","doc":"","ref":"ActivityPub.Object.html#do_update_existing/2"},{"type":"function","title":"ActivityPub.Object.fetch_latest_block/2","doc":"","ref":"ActivityPub.Object.html#fetch_latest_block/2"},{"type":"function","title":"ActivityPub.Object.fetch_latest_follow/2","doc":"","ref":"ActivityPub.Object.html#fetch_latest_follow/2"},{"type":"function","title":"ActivityPub.Object.get_activity_for_object_ap_id/2","doc":"","ref":"ActivityPub.Object.html#get_activity_for_object_ap_id/2"},{"type":"function","title":"ActivityPub.Object.get_ap_id/1","doc":"","ref":"ActivityPub.Object.html#get_ap_id/1"},{"type":"function","title":"ActivityPub.Object.get_cached/1","doc":"","ref":"ActivityPub.Object.html#get_cached/1"},{"type":"function","title":"ActivityPub.Object.get_cached!/1","doc":"","ref":"ActivityPub.Object.html#get_cached!/1"},{"type":"function","title":"ActivityPub.Object.get_existing_announce/2","doc":"Retruns an existing announce activity if the notice has already been announced","ref":"ActivityPub.Object.html#get_existing_announce/2"},{"type":"function","title":"ActivityPub.Object.get_existing_like/2","doc":"Returns an existing like if a user already liked an object","ref":"ActivityPub.Object.html#get_existing_like/2"},{"type":"function","title":"ActivityPub.Object.get_follow_activity/2","doc":"","ref":"ActivityPub.Object.html#get_follow_activity/2"},{"type":"function","title":"ActivityPub.Object.get_outbox_for_actor/2","doc":"","ref":"ActivityPub.Object.html#get_outbox_for_actor/2"},{"type":"function","title":"ActivityPub.Object.get_outbox_for_instance/0","doc":"","ref":"ActivityPub.Object.html#get_outbox_for_instance/0"},{"type":"function","title":"ActivityPub.Object.get_uncached/1","doc":"","ref":"ActivityPub.Object.html#get_uncached/1"},{"type":"function","title":"ActivityPub.Object.hard_delete/1","doc":"","ref":"ActivityPub.Object.html#hard_delete/1"},{"type":"function","title":"ActivityPub.Object.hashtags/1","doc":"","ref":"ActivityPub.Object.html#hashtags/1"},{"type":"function","title":"ActivityPub.Object.invalidate_cache/1","doc":"","ref":"ActivityPub.Object.html#invalidate_cache/1"},{"type":"function","title":"ActivityPub.Object.make_tombstone/2","doc":"","ref":"ActivityPub.Object.html#make_tombstone/2"},{"type":"function","title":"ActivityPub.Object.maybe_fetch/2","doc":"","ref":"ActivityPub.Object.html#maybe_fetch/2"},{"type":"function","title":"ActivityPub.Object.maybe_upsert/3","doc":"","ref":"ActivityPub.Object.html#maybe_upsert/3"},{"type":"function","title":"ActivityPub.Object.normalize/3","doc":"","ref":"ActivityPub.Object.html#normalize/3"},{"type":"function","title":"ActivityPub.Object.normalize_actors/1","doc":"","ref":"ActivityPub.Object.html#normalize_actors/1"},{"type":"function","title":"ActivityPub.Object.normalize_params/3","doc":"","ref":"ActivityPub.Object.html#normalize_params/3"},{"type":"function","title":"ActivityPub.Object.object_url/1","doc":"","ref":"ActivityPub.Object.html#object_url/1"},{"type":"function","title":"ActivityPub.Object.prepare_data/4","doc":"Prepares a struct to be inserted into the objects table","ref":"ActivityPub.Object.html#prepare_data/4"},{"type":"function","title":"ActivityPub.Object.self_replies_ids/2","doc":"","ref":"ActivityPub.Object.html#self_replies_ids/2"},{"type":"function","title":"ActivityPub.Object.set_cache/1","doc":"","ref":"ActivityPub.Object.html#set_cache/1"},{"type":"function","title":"ActivityPub.Object.swap_object_with_tombstone/1","doc":"","ref":"ActivityPub.Object.html#swap_object_with_tombstone/1"},{"type":"function","title":"ActivityPub.Object.update_and_set_cache/1","doc":"","ref":"ActivityPub.Object.html#update_and_set_cache/1"},{"type":"function","title":"ActivityPub.Object.update_changeset/2","doc":"","ref":"ActivityPub.Object.html#update_changeset/2"},{"type":"function","title":"ActivityPub.Object.update_existing/2","doc":"","ref":"ActivityPub.Object.html#update_existing/2"},{"type":"function","title":"ActivityPub.Object.update_state/3","doc":"Updates a follow activity's state (for locked accounts).","ref":"ActivityPub.Object.html#update_state/3"},{"type":"type","title":"ActivityPub.Object.t/0","doc":"","ref":"ActivityPub.Object.html#t:t/0"},{"type":"module","title":"ActivityPub.Pruner","doc":"Prunes objects from the database.","ref":"ActivityPub.Pruner.html"},{"type":"function","title":"ActivityPub.Pruner.prune_all/1","doc":"","ref":"ActivityPub.Pruner.html#prune_all/1"},{"type":"function","title":"ActivityPub.Pruner.prune_deletes/1","doc":"","ref":"ActivityPub.Pruner.html#prune_deletes/1"},{"type":"function","title":"ActivityPub.Pruner.prune_objects/1","doc":"","ref":"ActivityPub.Pruner.html#prune_objects/1"},{"type":"function","title":"ActivityPub.Pruner.prune_orphaned_activities/0","doc":"","ref":"ActivityPub.Pruner.html#prune_orphaned_activities/0"},{"type":"function","title":"ActivityPub.Pruner.prune_removes/1","doc":"","ref":"ActivityPub.Pruner.html#prune_removes/1"},{"type":"function","title":"ActivityPub.Pruner.prune_stale_follow_requests/1","doc":"","ref":"ActivityPub.Pruner.html#prune_stale_follow_requests/1"},{"type":"function","title":"ActivityPub.Pruner.prune_tombstones/1","doc":"","ref":"ActivityPub.Pruner.html#prune_tombstones/1"},{"type":"function","title":"ActivityPub.Pruner.prune_undos/1","doc":"","ref":"ActivityPub.Pruner.html#prune_undos/1"},{"type":"function","title":"ActivityPub.Pruner.remove_embedded_objects/0","doc":"","ref":"ActivityPub.Pruner.html#remove_embedded_objects/0"},{"type":"module","title":"ActivityPub.Pruner.PruneDatabaseWorker","doc":"The worker to prune old data from the database.","ref":"ActivityPub.Pruner.PruneDatabaseWorker.html"},{"type":"module","title":"ActivityPub.Queries","doc":"Contains queries for Object.","ref":"ActivityPub.Queries.html"},{"type":"function","title":"ActivityPub.Queries.activity_by_object_ap_id/2","doc":"","ref":"ActivityPub.Queries.html#activity_by_object_ap_id/2"},{"type":"function","title":"ActivityPub.Queries.by_actor/2","doc":"","ref":"ActivityPub.Queries.html#by_actor/2"},{"type":"function","title":"ActivityPub.Queries.by_ap_id/2","doc":"","ref":"ActivityPub.Queries.html#by_ap_id/2"},{"type":"function","title":"ActivityPub.Queries.by_id/2","doc":"","ref":"ActivityPub.Queries.html#by_id/2"},{"type":"function","title":"ActivityPub.Queries.by_object_id/2","doc":"","ref":"ActivityPub.Queries.html#by_object_id/2"},{"type":"function","title":"ActivityPub.Queries.by_object_in_reply_to_id/3","doc":"","ref":"ActivityPub.Queries.html#by_object_in_reply_to_id/3"},{"type":"function","title":"ActivityPub.Queries.by_type/2","doc":"","ref":"ActivityPub.Queries.html#by_type/2"},{"type":"function","title":"ActivityPub.Queries.exclude_type/2","doc":"","ref":"ActivityPub.Queries.html#exclude_type/2"},{"type":"function","title":"ActivityPub.Queries.find_by_object_ap_id/2","doc":"","ref":"ActivityPub.Queries.html#find_by_object_ap_id/2"},{"type":"function","title":"ActivityPub.Queries.last_follow/2","doc":"","ref":"ActivityPub.Queries.html#last_follow/2"},{"type":"function","title":"ActivityPub.Queries.replies/2","doc":"","ref":"ActivityPub.Queries.html#replies/2"},{"type":"function","title":"ActivityPub.Queries.self_replies/1","doc":"","ref":"ActivityPub.Queries.html#self_replies/1"},{"type":"function","title":"ActivityPub.Queries.with_joined_activity/3","doc":"","ref":"ActivityPub.Queries.html#with_joined_activity/3"},{"type":"function","title":"ActivityPub.Queries.with_joined_object/2","doc":"","ref":"ActivityPub.Queries.html#with_joined_object/2"},{"type":"function","title":"ActivityPub.Queries.with_preloaded_object/2","doc":"","ref":"ActivityPub.Queries.html#with_preloaded_object/2"},{"type":"type","title":"ActivityPub.Queries.query/0","doc":"","ref":"ActivityPub.Queries.html#t:query/0"},{"type":"module","title":"ActivityPub.Safety.Containment","doc":"This module contains some useful functions for containing objects to specific\norigins and determining those origins. They previously lived in the\nActivityPub `Transformer` module.\n\nObject containment is an important step in validating remote objects to prevent\nspoofing, therefore removal of object containment functions is NOT recommended.","ref":"ActivityPub.Safety.Containment.html"},{"type":"function","title":"ActivityPub.Safety.Containment.contain_child/1","doc":"","ref":"ActivityPub.Safety.Containment.html#contain_child/1"},{"type":"function","title":"ActivityPub.Safety.Containment.contain_origin/2","doc":"Checks that an imported AP object's actor matches the host it came from.","ref":"ActivityPub.Safety.Containment.html#contain_origin/2"},{"type":"function","title":"ActivityPub.Safety.Containment.contain_origin_from_id/2","doc":"","ref":"ActivityPub.Safety.Containment.html#contain_origin_from_id/2"},{"type":"function","title":"ActivityPub.Safety.Containment.contain_uri/2","doc":"","ref":"ActivityPub.Safety.Containment.html#contain_uri/2"},{"type":"function","title":"ActivityPub.Safety.Containment.get_object/1","doc":"","ref":"ActivityPub.Safety.Containment.html#get_object/1"},{"type":"function","title":"ActivityPub.Safety.Containment.is_public?/1","doc":"","ref":"ActivityPub.Safety.Containment.html#is_public?/1"},{"type":"function","title":"ActivityPub.Safety.Containment.restrict_unauthenticated_access?/1","doc":"","ref":"ActivityPub.Safety.Containment.html#restrict_unauthenticated_access?/1"},{"type":"function","title":"ActivityPub.Safety.Containment.restrict_unauthenticated_access?/2","doc":"","ref":"ActivityPub.Safety.Containment.html#restrict_unauthenticated_access?/2"},{"type":"function","title":"ActivityPub.Safety.Containment.visible_for_user?/2","doc":"","ref":"ActivityPub.Safety.Containment.html#visible_for_user?/2"},{"type":"module","title":"ActivityPub.Safety.Keys","doc":"Handles RSA keys for Actors & helpers for HTTP signatures","ref":"ActivityPub.Safety.Keys.html"},{"type":"function","title":"ActivityPub.Safety.Keys.add_public_key/2","doc":"","ref":"ActivityPub.Safety.Keys.html#add_public_key/2"},{"type":"function","title":"ActivityPub.Safety.Keys.cast_uri/1","doc":"","ref":"ActivityPub.Safety.Keys.html#cast_uri/1"},{"type":"function","title":"ActivityPub.Safety.Keys.ensure_keys_present/1","doc":"Checks if an actor struct has a non-nil keys field and generates a PEM if it doesn't.","ref":"ActivityPub.Safety.Keys.html#ensure_keys_present/1"},{"type":"function","title":"ActivityPub.Safety.Keys.generate_rsa_pem/0","doc":"","ref":"ActivityPub.Safety.Keys.html#generate_rsa_pem/0"},{"type":"function","title":"ActivityPub.Safety.Keys.get_public_key_for_ap_id/1","doc":"Fetches the public key for given actor AP ID.","ref":"ActivityPub.Safety.Keys.html#get_public_key_for_ap_id/1"},{"type":"function","title":"ActivityPub.Safety.Keys.http_host/1","doc":"","ref":"ActivityPub.Safety.Keys.html#http_host/1"},{"type":"function","title":"ActivityPub.Safety.Keys.key_id_to_actor_id/1","doc":"","ref":"ActivityPub.Safety.Keys.html#key_id_to_actor_id/1"},{"type":"function","title":"ActivityPub.Safety.Keys.keypair_from_pem/1","doc":"","ref":"ActivityPub.Safety.Keys.html#keypair_from_pem/1"},{"type":"function","title":"ActivityPub.Safety.Keys.maybe_add_fetch_signature_headers/3","doc":"","ref":"ActivityPub.Safety.Keys.html#maybe_add_fetch_signature_headers/3"},{"type":"function","title":"ActivityPub.Safety.Keys.public_key_decode/1","doc":"","ref":"ActivityPub.Safety.Keys.html#public_key_decode/1"},{"type":"function","title":"ActivityPub.Safety.Keys.public_key_from_data/1","doc":"","ref":"ActivityPub.Safety.Keys.html#public_key_from_data/1"},{"type":"function","title":"ActivityPub.Safety.Keys.sign/2","doc":"","ref":"ActivityPub.Safety.Keys.html#sign/2"},{"type":"module","title":"ActivityPub.Safety.Signatures","doc":"Implementation for behaviour from `HTTPSignatures` library","ref":"ActivityPub.Safety.Signatures.html"},{"type":"function","title":"ActivityPub.Safety.Signatures.fetch_public_key/1","doc":"","ref":"ActivityPub.Safety.Signatures.html#fetch_public_key/1"},{"type":"function","title":"ActivityPub.Safety.Signatures.refetch_public_key/1","doc":"","ref":"ActivityPub.Safety.Signatures.html#refetch_public_key/1"},{"type":"module","title":"ActivityPub.Utils","doc":"Misc functions used for federation","ref":"ActivityPub.Utils.html"},{"type":"function","title":"ActivityPub.Utils.activitypub_object_headers/0","doc":"","ref":"ActivityPub.Utils.html#activitypub_object_headers/0"},{"type":"function","title":"ActivityPub.Utils.adapter_fallback/0","doc":"","ref":"ActivityPub.Utils.html#adapter_fallback/0"},{"type":"function","title":"ActivityPub.Utils.ap_base_url/0","doc":"","ref":"ActivityPub.Utils.html#ap_base_url/0"},{"type":"function","title":"ActivityPub.Utils.ap_id/1","doc":"","ref":"ActivityPub.Utils.html#ap_id/1"},{"type":"function","title":"ActivityPub.Utils.as_local_public/0","doc":"","ref":"ActivityPub.Utils.html#as_local_public/0"},{"type":"function","title":"ActivityPub.Utils.cache_clear/0","doc":"","ref":"ActivityPub.Utils.html#cache_clear/0"},{"type":"function","title":"ActivityPub.Utils.cachex_fetch/4","doc":"","ref":"ActivityPub.Utils.html#cachex_fetch/4"},{"type":"function","title":"ActivityPub.Utils.error_json/3","doc":"","ref":"ActivityPub.Utils.html#error_json/3"},{"type":"function","title":"ActivityPub.Utils.format_date/1","doc":"","ref":"ActivityPub.Utils.html#format_date/1"},{"type":"function","title":"ActivityPub.Utils.generate_id/1","doc":"","ref":"ActivityPub.Utils.html#generate_id/1"},{"type":"function","title":"ActivityPub.Utils.generate_object_id/0","doc":"","ref":"ActivityPub.Utils.html#generate_object_id/0"},{"type":"function","title":"ActivityPub.Utils.get_with_cache/4","doc":"","ref":"ActivityPub.Utils.html#get_with_cache/4"},{"type":"function","title":"ActivityPub.Utils.is_ulid?/1","doc":"","ref":"ActivityPub.Utils.html#is_ulid?/1"},{"type":"function","title":"ActivityPub.Utils.is_uuid?/1","doc":"Takes a string and returns true if it is a valid UUID (Universally Unique Identifier)","ref":"ActivityPub.Utils.html#is_uuid?/1"},{"type":"function","title":"ActivityPub.Utils.json_with_cache/6","doc":"","ref":"ActivityPub.Utils.html#json_with_cache/6"},{"type":"function","title":"ActivityPub.Utils.label_in_message?/2","doc":"","ref":"ActivityPub.Utils.html#label_in_message?/2"},{"type":"function","title":"ActivityPub.Utils.make_date/0","doc":"","ref":"ActivityPub.Utils.html#make_date/0"},{"type":"function","title":"ActivityPub.Utils.make_json_ld_header/1","doc":"","ref":"ActivityPub.Utils.html#make_json_ld_header/1"},{"type":"function","title":"ActivityPub.Utils.maybe_put/3","doc":"conditionally update a map","ref":"ActivityPub.Utils.html#maybe_put/3"},{"type":"function","title":"ActivityPub.Utils.maybe_to_atom/1","doc":"","ref":"ActivityPub.Utils.html#maybe_to_atom/1"},{"type":"function","title":"ActivityPub.Utils.maybe_to_string/1","doc":"Handles multiple cases where the input value is of a different type (atom, list, tuple, etc.) and returns a string representation of it.","ref":"ActivityPub.Utils.html#maybe_to_string/1"},{"type":"function","title":"ActivityPub.Utils.ok_unwrap/2","doc":"","ref":"ActivityPub.Utils.html#ok_unwrap/2"},{"type":"function","title":"ActivityPub.Utils.public?/1","doc":"","ref":"ActivityPub.Utils.html#public?/1"},{"type":"function","title":"ActivityPub.Utils.public?/2","doc":"Determines if an object or an activity is public.","ref":"ActivityPub.Utils.html#public?/2"},{"type":"function","title":"ActivityPub.Utils.put_if_present/4","doc":"","ref":"ActivityPub.Utils.html#put_if_present/4"},{"type":"function","title":"ActivityPub.Utils.repo/0","doc":"","ref":"ActivityPub.Utils.html#repo/0"},{"type":"function","title":"ActivityPub.Utils.request_ip/1","doc":"","ref":"ActivityPub.Utils.html#request_ip/1"},{"type":"function","title":"ActivityPub.Utils.return_json/4","doc":"","ref":"ActivityPub.Utils.html#return_json/4"},{"type":"function","title":"ActivityPub.Utils.safe_put_in/3","doc":"","ref":"ActivityPub.Utils.html#safe_put_in/3"},{"type":"function","title":"ActivityPub.Utils.service_actor/0","doc":"","ref":"ActivityPub.Utils.html#service_actor/0"},{"type":"function","title":"ActivityPub.Utils.set_repo/1","doc":"","ref":"ActivityPub.Utils.html#set_repo/1"},{"type":"function","title":"ActivityPub.Utils.single_ap_id/1","doc":"","ref":"ActivityPub.Utils.html#single_ap_id/1"},{"type":"function","title":"ActivityPub.Utils.single_ap_id_or_object/1","doc":"","ref":"ActivityPub.Utils.html#single_ap_id_or_object/1"},{"type":"function","title":"ActivityPub.Utils.stringify_keys/2","doc":"Takes a map or keyword list, and returns a map with any atom keys converted to string keys. It can optionally do so recursively.","ref":"ActivityPub.Utils.html#stringify_keys/2"},{"type":"function","title":"ActivityPub.Utils.ulid/1","doc":"","ref":"ActivityPub.Utils.html#ulid/1"},{"type":"module","title":"ActivityPub.Web","doc":"The entrypoint for defining your web interface, such\nas controllers, views, channels and so on.\n\nThis can be used in your application as:\n\n use ActivityPub.Web, :controller\n use ActivityPub.Web, :view\n\nThe definitions below will be executed for every view,\ncontroller, etc, so keep them short and clean, focused\non imports, uses and aliases.\n\nDo NOT define functions inside the quoted expressions\nbelow. Instead, define any helper function in modules\nand import those modules here.","ref":"ActivityPub.Web.html"},{"type":"macro","title":"ActivityPub.Web.__using__/1","doc":"When used, dispatch to the appropriate controller/view/etc.","ref":"ActivityPub.Web.html#__using__/1"},{"type":"function","title":"ActivityPub.Web.base_url/0","doc":"","ref":"ActivityPub.Web.html#base_url/0"},{"type":"function","title":"ActivityPub.Web.channel/0","doc":"","ref":"ActivityPub.Web.html#channel/0"},{"type":"function","title":"ActivityPub.Web.controller/0","doc":"","ref":"ActivityPub.Web.html#controller/0"},{"type":"function","title":"ActivityPub.Web.rate_limit_reached/2","doc":"","ref":"ActivityPub.Web.html#rate_limit_reached/2"},{"type":"function","title":"ActivityPub.Web.router/0","doc":"","ref":"ActivityPub.Web.html#router/0"},{"type":"function","title":"ActivityPub.Web.view/0","doc":"","ref":"ActivityPub.Web.html#view/0"},{"type":"module","title":"ActivityPub.Web.ActivityPubController","doc":"Endpoints for serving objects and collections, so the ActivityPub API can be used to read information from the server.\n\nEven though we store the data in AS format, some changes need to be applied to the entity before serving it in the AP REST response. This is done in `ActivityPub.Web.ActivityPubView`.","ref":"ActivityPub.Web.ActivityPubController.html"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.actor/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#actor/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.ap_route_helper/1","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#ap_route_helper/1"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.followers/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#followers/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.following/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#following/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.inbox/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#inbox/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.inbox_info/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#inbox_info/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.json_object_with_cache/3","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#json_object_with_cache/3"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.noop/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#noop/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.object/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#object/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.outbox/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#outbox/2"},{"type":"module","title":"ActivityPub.Web.ActorView","doc":"","ref":"ActivityPub.Web.ActorView.html"},{"type":"function","title":"ActivityPub.Web.ActorView.actor_json/1","doc":"","ref":"ActivityPub.Web.ActorView.html#actor_json/1"},{"type":"function","title":"ActivityPub.Web.ActorView.collection/4","doc":"","ref":"ActivityPub.Web.ActorView.html#collection/4"},{"type":"function","title":"ActivityPub.Web.ActorView.render/2","doc":"","ref":"ActivityPub.Web.ActorView.html#render/2"},{"type":"module","title":"ActivityPub.Web.Endpoint","doc":"","ref":"ActivityPub.Web.Endpoint.html"},{"type":"function","title":"ActivityPub.Web.Endpoint.broadcast/3","doc":"","ref":"ActivityPub.Web.Endpoint.html#broadcast/3"},{"type":"function","title":"ActivityPub.Web.Endpoint.broadcast!/3","doc":"","ref":"ActivityPub.Web.Endpoint.html#broadcast!/3"},{"type":"function","title":"ActivityPub.Web.Endpoint.broadcast_from/4","doc":"","ref":"ActivityPub.Web.Endpoint.html#broadcast_from/4"},{"type":"function","title":"ActivityPub.Web.Endpoint.broadcast_from!/4","doc":"","ref":"ActivityPub.Web.Endpoint.html#broadcast_from!/4"},{"type":"function","title":"ActivityPub.Web.Endpoint.call/2","doc":"","ref":"ActivityPub.Web.Endpoint.html#call/2"},{"type":"function","title":"ActivityPub.Web.Endpoint.child_spec/1","doc":"Returns the child specification to start the endpoint\nunder a supervision tree.","ref":"ActivityPub.Web.Endpoint.html#child_spec/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.config/2","doc":"Returns the endpoint configuration for `key`\n\nReturns `default` if the key does not exist.","ref":"ActivityPub.Web.Endpoint.html#config/2"},{"type":"function","title":"ActivityPub.Web.Endpoint.config_change/2","doc":"Reloads the configuration given the application environment changes.","ref":"ActivityPub.Web.Endpoint.html#config_change/2"},{"type":"function","title":"ActivityPub.Web.Endpoint.host/0","doc":"Returns the host for the given endpoint.","ref":"ActivityPub.Web.Endpoint.html#host/0"},{"type":"function","title":"ActivityPub.Web.Endpoint.init/1","doc":"","ref":"ActivityPub.Web.Endpoint.html#init/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.local_broadcast/3","doc":"","ref":"ActivityPub.Web.Endpoint.html#local_broadcast/3"},{"type":"function","title":"ActivityPub.Web.Endpoint.local_broadcast_from/4","doc":"","ref":"ActivityPub.Web.Endpoint.html#local_broadcast_from/4"},{"type":"function","title":"ActivityPub.Web.Endpoint.path/1","doc":"Generates the path information when routing to this endpoint.","ref":"ActivityPub.Web.Endpoint.html#path/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.script_name/0","doc":"Generates the script name.","ref":"ActivityPub.Web.Endpoint.html#script_name/0"},{"type":"function","title":"ActivityPub.Web.Endpoint.server_info/1","doc":"Returns the address and port that the server is running on","ref":"ActivityPub.Web.Endpoint.html#server_info/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.start_link/1","doc":"Starts the endpoint supervision tree.\n\nAll other options are merged into the endpoint configuration.","ref":"ActivityPub.Web.Endpoint.html#start_link/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.static_integrity/1","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":"ActivityPub.Web.Endpoint.html#static_integrity/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.static_lookup/1","doc":"Returns a two item tuple with the first item being the `static_path`\nand the second item being the `static_integrity`.","ref":"ActivityPub.Web.Endpoint.html#static_lookup/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.static_path/1","doc":"Generates a route to a static file in `priv/static`.","ref":"ActivityPub.Web.Endpoint.html#static_path/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.static_url/0","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":"ActivityPub.Web.Endpoint.html#static_url/0"},{"type":"function","title":"ActivityPub.Web.Endpoint.struct_url/0","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":"ActivityPub.Web.Endpoint.html#struct_url/0"},{"type":"function","title":"ActivityPub.Web.Endpoint.subscribe/2","doc":"","ref":"ActivityPub.Web.Endpoint.html#subscribe/2"},{"type":"function","title":"ActivityPub.Web.Endpoint.unsubscribe/1","doc":"","ref":"ActivityPub.Web.Endpoint.html#unsubscribe/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.url/0","doc":"Generates the endpoint base URL without any path information.\n\nIt uses the configuration under `:url` to generate such.","ref":"ActivityPub.Web.Endpoint.html#url/0"},{"type":"module","title":"ActivityPub.Web.ErrorHelpers","doc":"Conveniences for translating and building error messages.","ref":"ActivityPub.Web.ErrorHelpers.html"},{"type":"function","title":"ActivityPub.Web.ErrorHelpers.error_tag/2","doc":"Generates tag for inlined form input errors.","ref":"ActivityPub.Web.ErrorHelpers.html#error_tag/2"},{"type":"module","title":"ActivityPub.Web.ErrorView","doc":"Standard error view","ref":"ActivityPub.Web.ErrorView.html"},{"type":"function","title":"ActivityPub.Web.ErrorView.render/2","doc":"","ref":"ActivityPub.Web.ErrorView.html#render/2"},{"type":"function","title":"ActivityPub.Web.ErrorView.template_not_found/2","doc":"By default, Phoenix returns the status message from the template name. For example, \"404.html\" becomes \"Not Found\".","ref":"ActivityPub.Web.ErrorView.html#template_not_found/2"},{"type":"module","title":"ActivityPub.Web.LayoutView","doc":"","ref":"ActivityPub.Web.LayoutView.html"},{"type":"function","title":"ActivityPub.Web.LayoutView.render/2","doc":"","ref":"ActivityPub.Web.LayoutView.html#render/2"},{"type":"module","title":"ActivityPub.Web.ObjectView","doc":"","ref":"ActivityPub.Web.ObjectView.html"},{"type":"function","title":"ActivityPub.Web.ObjectView.collection/4","doc":"","ref":"ActivityPub.Web.ObjectView.html#collection/4"},{"type":"function","title":"ActivityPub.Web.ObjectView.render/2","doc":"","ref":"ActivityPub.Web.ObjectView.html#render/2"},{"type":"module","title":"ActivityPub.Web.Plugs.DigestPlug","doc":"","ref":"ActivityPub.Web.Plugs.DigestPlug.html"},{"type":"function","title":"ActivityPub.Web.Plugs.DigestPlug.read_body/2","doc":"","ref":"ActivityPub.Web.Plugs.DigestPlug.html#read_body/2"},{"type":"module","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug","doc":"Ensures HTTP signature has been validated by previous plugs on ActivityPub requests.","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.call/2","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#call/2"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.ignore/1","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#ignore/1"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.init/1","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#init/1"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.maybe_reject!/2","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#maybe_reject!/2"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.unauthorized/1","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#unauthorized/1"},{"type":"module","title":"ActivityPub.Web.Plugs.HTTPSignaturePlug","doc":"","ref":"ActivityPub.Web.Plugs.HTTPSignaturePlug.html"},{"type":"function","title":"ActivityPub.Web.Plugs.HTTPSignaturePlug.call/2","doc":"","ref":"ActivityPub.Web.Plugs.HTTPSignaturePlug.html#call/2"},{"type":"function","title":"ActivityPub.Web.Plugs.HTTPSignaturePlug.init/1","doc":"","ref":"ActivityPub.Web.Plugs.HTTPSignaturePlug.html#init/1"},{"type":"module","title":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug","doc":"","ref":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html"},{"type":"function","title":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.call/2","doc":"","ref":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html#call/2"},{"type":"function","title":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.init/1","doc":"","ref":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html#init/1"},{"type":"module","title":"ActivityPub.Web.RedirectController","doc":"","ref":"ActivityPub.Web.RedirectController.html"},{"type":"function","title":"ActivityPub.Web.RedirectController.actor/2","doc":"","ref":"ActivityPub.Web.RedirectController.html#actor/2"},{"type":"function","title":"ActivityPub.Web.RedirectController.object/2","doc":"","ref":"ActivityPub.Web.RedirectController.html#object/2"},{"type":"function","title":"ActivityPub.Web.RedirectController.remote_interaction/2","doc":"","ref":"ActivityPub.Web.RedirectController.html#remote_interaction/2"},{"type":"module","title":"ActivityPub.Web.Router","doc":"","ref":"ActivityPub.Web.Router.html"},{"type":"module","title":"ActivityPub.Web.Telemetry","doc":"","ref":"ActivityPub.Web.Telemetry.html"},{"type":"function","title":"ActivityPub.Web.Telemetry.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"ActivityPub.Web.Telemetry.html#child_spec/1"},{"type":"function","title":"ActivityPub.Web.Telemetry.metrics/0","doc":"","ref":"ActivityPub.Web.Telemetry.html#metrics/0"},{"type":"function","title":"ActivityPub.Web.Telemetry.start_link/1","doc":"","ref":"ActivityPub.Web.Telemetry.html#start_link/1"},{"type":"module","title":"ActivityPub.Web.UserSocket","doc":"","ref":"ActivityPub.Web.UserSocket.html"},{"type":"module","title":"ActivityPub.Web.WebFingerController","doc":"","ref":"ActivityPub.Web.WebFingerController.html"},{"type":"function","title":"ActivityPub.Web.WebFingerController.webfinger/2","doc":"","ref":"ActivityPub.Web.WebFingerController.html#webfinger/2"},{"type":"module","title":"AnimalAvatarGenerator","doc":"Generate SVG avatars from a string seed. It should always return the same avatar for the corresponding seed.\n\nBased on https://www.npmjs.com/package/animal-avatar-generator (translated to Elixir, mostly by ChatGPT)","ref":"AnimalAvatarGenerator.html"},{"type":"function","title":"AnimalAvatarGenerator.avatar/2","doc":"","ref":"AnimalAvatarGenerator.html#avatar/2"},{"type":"function","title":"AnimalAvatarGenerator.avatar_face/2","doc":"","ref":"AnimalAvatarGenerator.html#avatar_face/2"},{"type":"function","title":"AnimalAvatarGenerator.brows/0","doc":"","ref":"AnimalAvatarGenerator.html#brows/0"},{"type":"function","title":"AnimalAvatarGenerator.clamp/3","doc":"","ref":"AnimalAvatarGenerator.html#clamp/3"},{"type":"function","title":"AnimalAvatarGenerator.create_background/3","doc":"","ref":"AnimalAvatarGenerator.html#create_background/3"},{"type":"function","title":"AnimalAvatarGenerator.create_blackout/1","doc":"","ref":"AnimalAvatarGenerator.html#create_blackout/1"},{"type":"function","title":"AnimalAvatarGenerator.create_svg/2","doc":"","ref":"AnimalAvatarGenerator.html#create_svg/2"},{"type":"function","title":"AnimalAvatarGenerator.darken/2","doc":"","ref":"AnimalAvatarGenerator.html#darken/2"},{"type":"function","title":"AnimalAvatarGenerator.ears/0","doc":"","ref":"AnimalAvatarGenerator.html#ears/0"},{"type":"function","title":"AnimalAvatarGenerator.empty_shape/0","doc":"","ref":"AnimalAvatarGenerator.html#empty_shape/0"},{"type":"function","title":"AnimalAvatarGenerator.eyes/0","doc":"","ref":"AnimalAvatarGenerator.html#eyes/0"},{"type":"function","title":"AnimalAvatarGenerator.faces/0","doc":"","ref":"AnimalAvatarGenerator.html#faces/0"},{"type":"function","title":"AnimalAvatarGenerator.hairs/0","doc":"","ref":"AnimalAvatarGenerator.html#hairs/0"},{"type":"function","title":"AnimalAvatarGenerator.muzzles/0","doc":"","ref":"AnimalAvatarGenerator.html#muzzles/0"},{"type":"function","title":"AnimalAvatarGenerator.patterns/0","doc":"","ref":"AnimalAvatarGenerator.html#patterns/0"},{"type":"module","title":"Arrows","doc":"A handful of (mostly) arrow macros with superpowers.","ref":"Arrows.html"},{"type":"macro","title":"Arrows.<|>/2","doc":"Like `||`, except only defaults if the left is nil (i.e. false is valid)","ref":"Arrows.html#%3C%7C%3E/2"},{"type":"macro","title":"Arrows.<~>/2","doc":"Like `||`, except with the logic applied by `~>`","ref":"Arrows.html#%3C~%3E/2"},{"type":"function","title":"Arrows.from_ok/1","doc":"","ref":"Arrows.html#from_ok/1"},{"type":"function","title":"Arrows.ok/1","doc":"","ref":"Arrows.html#ok/1"},{"type":"function","title":"Arrows.ok_or/2","doc":"","ref":"Arrows.html#ok_or/2"},{"type":"function","title":"Arrows.to_ok/1","doc":"","ref":"Arrows.html#to_ok/1"},{"type":"macro","title":"Arrows.|>/2","doc":"A more flexible drop-in replacement for the standard elixir pipe operator.\n\nSpecial features are unlocked when using the `...` (ellipsis) on the right hand side:\n\n* The right hand side need not be a function, it can be any expression containing the ellipsis.\n* The ellipsis will be replaced with the result of evaluating the hand side expression.\n* You may use the ellipsis multiple times and the left hand side will be calculated exactly once.\n\nYou can do crazy stuff with the ellipsis, but remember that people have to read it!","ref":"Arrows.html#%7C%3E/2"},{"type":"macro","title":"Arrows.~>/2","doc":"Like `OK.~>`","ref":"Arrows.html#~%3E/2"},{"type":"module","title":"ConsoleHelpers","doc":"","ref":"ConsoleHelpers.html"},{"type":"module","title":"DaisyTheme","doc":"","ref":"DaisyTheme.html"},{"type":"function","title":"DaisyTheme.adjust/5","doc":"","ref":"DaisyTheme.html#adjust/5"},{"type":"function","title":"DaisyTheme.clamp/3","doc":"","ref":"DaisyTheme.html#clamp/3"},{"type":"function","title":"DaisyTheme.darken/2","doc":"","ref":"DaisyTheme.html#darken/2"},{"type":"function","title":"DaisyTheme.darker/5","doc":"","ref":"DaisyTheme.html#darker/5"},{"type":"function","title":"DaisyTheme.default_theme/0","doc":"","ref":"DaisyTheme.html#default_theme/0"},{"type":"function","title":"DaisyTheme.generate/1","doc":"","ref":"DaisyTheme.html#generate/1"},{"type":"function","title":"DaisyTheme.is_dark?/1","doc":"","ref":"DaisyTheme.html#is_dark?/1"},{"type":"function","title":"DaisyTheme.keys/0","doc":"","ref":"DaisyTheme.html#keys/0"},{"type":"function","title":"DaisyTheme.lighten/2","doc":"","ref":"DaisyTheme.html#lighten/2"},{"type":"function","title":"DaisyTheme.style_attr/1","doc":"","ref":"DaisyTheme.html#style_attr/1"},{"type":"function","title":"DaisyTheme.theme/1","doc":"","ref":"DaisyTheme.html#theme/1"},{"type":"module","title":"DummyAdapter","doc":"","ref":"DummyAdapter.html"},{"type":"module","title":"EctoSparkles","doc":"`query_filter` brings convenience and shortens the boilterplate of ecto queries\n\nCommon filters available include:\n\n- `preload` - Preloads fields onto the query results\n- `start_date` - Query for items inserted after this date\n- `end_date` - Query for items inserted before this date\n- `before` - Get items with IDs before this value\n- `after` - Get items with IDs after this value\n- `ids` - Get items with a list of ids\n- `first` - Gets the first n items\n- `last` - Gets the last n items\n- `limit` - Gets the first n items\n- `offset` - Offsets limit by n items\n- `search` - ***Warning:*** This requires schemas using this to have a `&by_search(query, val)` function\n\nYou are also able to filter on any natural field of a model, as well as use\n\n- gte/gt\n- lte/lt\n- like/ilike\n- is_nil/not(is_nil)\n\n```elixir\nquery_filter(User, %{name: %{ilike: \"steve\"}})\nquery_filter(User, %{name: %{ilike: \"steve\"}}, :last_name, :asc)\nquery_filter(User, %{name: %{age: %{gte: 18, lte: 30}}})\nquery_filter(User, %{name: %{is_banned: %{!=: nil}}})\nquery_filter(User, %{name: %{is_banned: %{==: nil}}})\n\nmy_query = query_filter(User, %{name: \"Billy\"})\nquery_filter(my_query, %{last_name: \"Joe\"})\n```","ref":"EctoSparkles.html"},{"type":"macro","title":"EctoSparkles.join_preload/2","doc":"`join_preload` is a helper for preloading associations using joins.\n\nBy default, Ecto preloads associations using a separate query for each association, which can degrade performance.\nYou could make it run faster by using a combination of join/preload, but that requires a bit of boilerplate (see example below).\n\nWith `EctoSparkles`, you can accomplish this with just one line of code.","ref":"EctoSparkles.html#join_preload/2"},{"type":"macro","title":"Example using just Ecto - EctoSparkles.join_preload/2","doc":"```\nimport Ecto.Query\nInvoice\n|> join(:left, [i], assoc(i, :customer), as: :customer)\n|> join(:left, [i, c], assoc(c, :account), as: :account)\n|> join(:left, [i], assoc(i, :lines), as: :lines)\n|> preload([lines: v, customers: c, account: a], lines: v, customer: {c, [a: account]})\n|> Repo.all()\n```","ref":"EctoSparkles.html#join_preload/2-example-using-just-ecto"},{"type":"macro","title":"Example using `join_preload` - EctoSparkles.join_preload/2","doc":"```\nimport EctoSparkles\nInvoice\n|> join_preload([:customer, :account])\n|> join_preload([:lines])\n|> Repo.all()\n```","ref":"EctoSparkles.html#join_preload/2-example-using-join_preload"},{"type":"macro","title":"EctoSparkles.proload/3","doc":"AKA `join_preload++`. It's more powerful, but it does it with more (and different!) syntax.\n\ne.g.\n```\nproload(query, activity: [\n :verb, :boost_count, :like_count, :replied,\n # relations under object will have their aliases prefixed with object_, i.e.\n # :object_message, :object_post, :object_post_content\n # the original names will still be used for the associations.\n object: {\"object_\", [:message, :post, :post_content]}\n])\n```","ref":"EctoSparkles.html#proload/3"},{"type":"function","title":"EctoSparkles.query_filter/4","doc":"","ref":"EctoSparkles.html#query_filter/4"},{"type":"macro","title":"EctoSparkles.reusable_join/5","doc":"`reusable_join` is similar to `Ecto.Query.join/{4,5}`, but can be called multiple times with the same alias.\n\nNote that only the first join operation is performed, the subsequent ones that use the same alias\nare just ignored. Also note that because of this behaviour, it is mandatory to specify an alias when\nusing this function.\n\nThis is helpful when you need to perform a join while building queries one filter at a time,\nbecause the same filter could be used multiple times or you could have multiple filters that\nrequire the same join, which poses a problem with how the `filter/3` callback work, as you\nneed to return a dynamic with the filtering, which means that the join must have an alias,\nand by default Ecto raises an error when you add multiple joins with the same alias.\n\nTo solve this, it is recommended to use this macro instead of the default `Ecto.Query.join/{4,5}`,\nin which case there will be only one join in the query that can be reused by multiple filters.","ref":"EctoSparkles.html#reusable_join/5"},{"type":"module","title":"EctoSparkles.AutoMigrator","doc":"Runs ecto migrations automatically on startup (add this to your app's supervision tree)","ref":"EctoSparkles.AutoMigrator.html"},{"type":"function","title":"EctoSparkles.AutoMigrator.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"EctoSparkles.AutoMigrator.html#child_spec/1"},{"type":"function","title":"EctoSparkles.AutoMigrator.init/1","doc":"","ref":"EctoSparkles.AutoMigrator.html#init/1"},{"type":"function","title":"EctoSparkles.AutoMigrator.start_link/1","doc":"","ref":"EctoSparkles.AutoMigrator.html#start_link/1"},{"type":"function","title":"EctoSparkles.AutoMigrator.startup_migrations/0","doc":"","ref":"EctoSparkles.AutoMigrator.html#startup_migrations/0"},{"type":"module","title":"EctoSparkles.Changesets","doc":"Helper functions for changesets","ref":"EctoSparkles.Changesets.html"},{"type":"function","title":"EctoSparkles.Changesets.change_synced_timestamp/3","doc":"If a changeset includes a change to `bool_field`, we ensure that the\n`timestamp` field is updated if required. In the case of true, this\nmeans setting it to now if it is null and in the case of false, this\nmeans setting it to null if it is not null.","ref":"EctoSparkles.Changesets.html#change_synced_timestamp/3"},{"type":"function","title":"EctoSparkles.Changesets.change_synced_timestamps/5","doc":"If a changeset includes a change to `bool_field`, we change two\ntimestamps columns (representing activated and deactivated) so that\nonly one is set to a non-null value at a time.","ref":"EctoSparkles.Changesets.html#change_synced_timestamps/5"},{"type":"function","title":"EctoSparkles.Changesets.validate_exactly_one/3","doc":"","ref":"EctoSparkles.Changesets.html#validate_exactly_one/3"},{"type":"function","title":"EctoSparkles.Changesets.validate_http_url/2","doc":"Validates that a URL uses HTTP(S) and has a correct format.","ref":"EctoSparkles.Changesets.html#validate_http_url/2"},{"type":"function","title":"EctoSparkles.Changesets.validate_not_expired/4","doc":"Validates that the entity has not expired","ref":"EctoSparkles.Changesets.html#validate_not_expired/4"},{"type":"module","title":"EctoSparkles.Changesets.Errors","doc":"","ref":"EctoSparkles.Changesets.Errors.html"},{"type":"function","title":"EctoSparkles.Changesets.Errors.changeset_errors_string/2","doc":"","ref":"EctoSparkles.Changesets.Errors.html#changeset_errors_string/2"},{"type":"function","title":"EctoSparkles.Changesets.Errors.error/2","doc":"","ref":"EctoSparkles.Changesets.Errors.html#error/2"},{"type":"behaviour","title":"EctoSparkles.DataMigration","doc":"A behaviour implemented by our data migrations (generally backfills).\n\nBased on [A microframework for backfill migrations in Elixir's Ecto](https://tylerayoung.com/2023/08/13/migrations/), in turn based on David Bernheisel's [template for deterministic backfills](https://fly.io/phoenix-files/backfilling-data/#batching-deterministic-data).\n\nA data migration using this behaviour may look like this (which you can put simply put in Ecto migrations, eg. `priv/repo/migrations/priv/repo/migrations/20231019004944_data_onboarding_step.exs`):\n\n```elixir\ndefmodule MyApp.Repo.Migrations.BackfillOnboardingStep do\n alias EctoSparkles.DataMigration\n use DataMigration\n \n @impl DataMigration\n def base_query do\n # NOTE: This works in cases where:\n # 1. The data can be queried with a condition that not longer applies after the migration ran, so you can repeatedly query the data and update the data until the query result is empty. For example, if a column is currently null and will be updated to not be null, then you can query for the null records and pick up where you left off.\n # 2. The migration is written in such a way that it can be ran several times on the same data without causing data loss or duplication (or crashing).\n\n from(u in \"users\", # Notice how we do not use Ecto schemas here.\n where: is_nil(u.onboarding_step),\n select: %{id: u.id}\n )\n end\n\n @impl DataMigration\n def config do\n %DataMigration.Config{batch_size: 100, throttle_ms: 1_000, repo: MyApp.Repo}\n end\n\n @impl DataMigration\n def migrate(results) do\n Enum.each(results, fn %{id: user_id} ->\n # hooks into a context module, which is more likely to be kept up to date as the app evolves, to avoid having to update old migrations\n user_id\n |> MyApp.Users.set_onboarding_step!()\n end)\n end\nend\n```","ref":"EctoSparkles.DataMigration.html"},{"type":"callback","title":"EctoSparkles.DataMigration.base_query/0","doc":"The core of the query you want to use to SELECT a map of your data.\nThe `DataMigration.Runner` will take care of limiting this to a batch size, ordering\nit by row ID, and restricting it to rows you haven't yet handled.\nThe query *must* select a map, and that map must have an `:id` key for the\nmigration runner to reference as the last-modified row in your table.","ref":"EctoSparkles.DataMigration.html#c:base_query/0"},{"type":"callback","title":"EctoSparkles.DataMigration.config/0","doc":"","ref":"EctoSparkles.DataMigration.html#c:config/0"},{"type":"callback","title":"EctoSparkles.DataMigration.migrate/1","doc":"The callback to operate on a result set from your query.\nImplementers should `raise` an error if you're unable to process the batch.","ref":"EctoSparkles.DataMigration.html#c:migrate/1"},{"type":"module","title":"EctoSparkles.DataMigration.Config","doc":"Configuration for a `DataMigration` behaviour module, used by the `DataMigration.Runner`.\n\nbatch size: how many elements from your table to migrate at a time. \n\nthrottle time: the amount of downtime the runner should sleep between batches.\n\nasync: Whether to run the migration in an async process, meaning the execution of the rest of the migrations (and the app startup if you're auto-migrating on start) won't be delayed. WARNING: this means the migration will be marked as done as soon as it starts, so if the process is interrupted it won't be re-run automatically.\n\nfirst_id: The very first ID when sorting UUIDs in ascending order. If you use integer IDs instead, this would be 0.","ref":"EctoSparkles.DataMigration.Config.html"},{"type":"module","title":"EctoSparkles.DataMigration.Runner","doc":"Runs a `DataMigration`","ref":"EctoSparkles.DataMigration.Runner.html"},{"type":"function","title":"EctoSparkles.DataMigration.Runner.run/1","doc":"","ref":"EctoSparkles.DataMigration.Runner.html#run/1"},{"type":"module","title":"EctoSparkles.ErlangTermBinary","doc":"A custom Ecto type for handling the serialization of arbitrary\ndata types stored as binary data in the database. Requires the\nunderlying DB field to be a binary.","ref":"EctoSparkles.ErlangTermBinary.html"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.cast/1","doc":"","ref":"EctoSparkles.ErlangTermBinary.html#cast/1"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.cast/2","doc":"Provides custom casting rules for params. Nothing changes here.\nWe only need to handle deserialization.","ref":"EctoSparkles.ErlangTermBinary.html#cast/2"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.dump/1","doc":"Converting the data structure to binary for storage.","ref":"EctoSparkles.ErlangTermBinary.html#dump/1"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.embed_as/1","doc":"","ref":"EctoSparkles.ErlangTermBinary.html#embed_as/1"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.equal?/2","doc":"","ref":"EctoSparkles.ErlangTermBinary.html#equal?/2"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.load/1","doc":"Convert the raw binary value from the database back to\nthe desired term.\n\nUses `Plug.Crypto.non_executable_binary_to_term/2` - a restricted version of `:erlang.binary_to_term/2` that forbids executable terms, such as anonymous functions.\n\nBy default this function does not restrict atoms, except if compiled in prod env, then the [:safe] option is set, so only existing (and loaded) atoms will be deserialized.","ref":"EctoSparkles.ErlangTermBinary.html#load/1"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.type/0","doc":"","ref":"EctoSparkles.ErlangTermBinary.html#type/0"},{"type":"module","title":"EctoSparkles.Log","doc":"Log slow Ecto queries","ref":"EctoSparkles.Log.html"},{"type":"function","title":"EctoSparkles.Log.check_if_n_plus_1/1","doc":"","ref":"EctoSparkles.Log.html#check_if_n_plus_1/1"},{"type":"function","title":"EctoSparkles.Log.format_log/4","doc":"","ref":"EctoSparkles.Log.html#format_log/4"},{"type":"function","title":"EctoSparkles.Log.format_stacktrace_sliced/3","doc":"","ref":"EctoSparkles.Log.html#format_stacktrace_sliced/3"},{"type":"function","title":"EctoSparkles.Log.handle_event/4","doc":"","ref":"EctoSparkles.Log.html#handle_event/4"},{"type":"function","title":"EctoSparkles.Log.inline_params/3","doc":"","ref":"EctoSparkles.Log.html#inline_params/3"},{"type":"function","title":"EctoSparkles.Log.log_query/4","doc":"","ref":"EctoSparkles.Log.html#log_query/4"},{"type":"function","title":"EctoSparkles.Log.setup/1","doc":"","ref":"EctoSparkles.Log.html#setup/1"},{"type":"module","title":"EctoSparkles.Migrator","doc":"","ref":"EctoSparkles.Migrator.html"},{"type":"function","title":"EctoSparkles.Migrator.create/0","doc":"","ref":"EctoSparkles.Migrator.html#create/0"},{"type":"function","title":"EctoSparkles.Migrator.create/2","doc":"","ref":"EctoSparkles.Migrator.html#create/2"},{"type":"function","title":"EctoSparkles.Migrator.migrate/0","doc":"","ref":"EctoSparkles.Migrator.html#migrate/0"},{"type":"function","title":"EctoSparkles.Migrator.migrate/1","doc":"","ref":"EctoSparkles.Migrator.html#migrate/1"},{"type":"function","title":"EctoSparkles.Migrator.rollback/2","doc":"","ref":"EctoSparkles.Migrator.html#rollback/2"},{"type":"function","title":"EctoSparkles.Migrator.rollback_all/0","doc":"","ref":"EctoSparkles.Migrator.html#rollback_all/0"},{"type":"function","title":"EctoSparkles.Migrator.rollback_all/1","doc":"","ref":"EctoSparkles.Migrator.html#rollback_all/1"},{"type":"function","title":"EctoSparkles.Migrator.rollback_to/1","doc":"","ref":"EctoSparkles.Migrator.html#rollback_to/1"},{"type":"function","title":"EctoSparkles.Migrator.rollback_to/2","doc":"","ref":"EctoSparkles.Migrator.html#rollback_to/2"},{"type":"function","title":"EctoSparkles.Migrator.status/0","doc":"Print the migration status for configured Repos' migrations.","ref":"EctoSparkles.Migrator.html#status/0"},{"type":"module","title":"EctoSparkles.NPlus1Detector","doc":"Checks a query against the previous one and increments counter of collisions or swaps previous query with the last one.","ref":"EctoSparkles.NPlus1Detector.html"},{"type":"function","title":"EctoSparkles.NPlus1Detector.check/1","doc":"","ref":"EctoSparkles.NPlus1Detector.html#check/1"},{"type":"function","title":"EctoSparkles.NPlus1Detector.do_check/2","doc":"","ref":"EctoSparkles.NPlus1Detector.html#do_check/2"},{"type":"module","title":"EctoSparkles.SanitiseStrings","doc":"Provides functions for sanitising input on `Ecto.Changeset` string fields.","ref":"EctoSparkles.SanitiseStrings.html"},{"type":"function","title":"EctoSparkles.SanitiseStrings.clean_html/2","doc":"","ref":"EctoSparkles.SanitiseStrings.html#clean_html/2"},{"type":"function","title":"EctoSparkles.SanitiseStrings.sanitise_strings/2","doc":"","ref":"EctoSparkles.SanitiseStrings.html#sanitise_strings/2"},{"type":"function","title":"EctoSparkles.SanitiseStrings.strip_all_tags/2","doc":"Sanitises all changes in the given changeset that apply to field which are of the `:string` `Ecto` type.\n\nBy default it uses the `HtmlSanitizeEx.strip_tags/1` function on any change that satisfies all of the following conditions:\n1. The field associated with the change is of the type `:string`.\n2. The field associated with the change is not in the blacklisted_fields list of `opts` as defined using the `:except` key in `opts`.\nNote that this function will change the value in the `:changes` map of an\n`%Ecto.Changeset{}` struct if the given changes are sanitized.","ref":"EctoSparkles.SanitiseStrings.html#strip_all_tags/2"},{"type":"function","title":"Examples - EctoSparkles.SanitiseStrings.strip_all_tags/2","doc":"iex> attrs = %{string_field: \" Bad \"}\n iex> result_changeset =\n ...> attrs\n ...> |> FakeEctoSchema.changeset()\n ...> |> EctoSparkles.SanitiseStrings.strip_all_tags()\n iex> result_changeset.changes\n %{string_field: \"Bad\"}\nFields can be exempted from sanitization via the `:except` option.\n iex> attrs = %{string_field: \" Bad \"}\n iex> result_changeset =\n ...> attrs\n ...> |> FakeEctoSchema.changeset()\n ...> |> EctoSparkles.SanitiseStrings.strip_all_tags(except: [:string_field])\n iex> result_changeset.changes\n %{string_field: \" Bad \"}\n\n#","ref":"EctoSparkles.SanitiseStrings.html#strip_all_tags/2-examples"},{"type":"function","title":"You can also specify a specific scrubber (by passing a function as reference): - EctoSparkles.SanitiseStrings.strip_all_tags/2","doc":"ies> attrs\n ...> |> FakeEctoSchema.changeset()\n ...> |> EctoSparkles.SanitiseStrings.sanitise_strings(scrubber: HtmlSanitizeEx.Scrubber.html5/1)","ref":"EctoSparkles.SanitiseStrings.html#strip_all_tags/2-you-can-also-specify-a-specific-scrubber-by-passing-a-function-as-reference"},{"type":"module","title":"Exto","doc":"Configuration-driven Ecto Schemata.","ref":"Exto.html"},{"type":"macro","title":"Exto.flex_schema/1","doc":"Adds additional associations dynamically from app config.\n\nReads config for the given OTP application, under the name of the\ncurrent module. Each key maps to an Ecto.Schema function:\n\n* `belongs_to`\n* `field`\n* `has_many`\n* `has_one`\n* `many_to_many`\n\nEach of these keys should map to a keyword list where the key is the\nname of the field or association and the value is one of:\n\n* A type\n* A tuple of type and options (keyword list)\n\nExample Schema:\n\n```\ndefmodule My.Schema do\n use Ecto.Schema\n import Exto, only: [flex_schema: 1]\n\n schema \"my_table\" do\n field :name, :string # just normal schema things\n flex_schema(:my_app) # boom! give me the stuff\n end\nend\n```\n\nExample configuration:\n\n```\nconfig :my_app, My.Schema,\n belongs_to: [\n foo: Foo, # belongs_to :foo, Foo\n bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer\n ],\n field: [\n foo: :string, # field :foo, :string\n bar: {:integer, default: 4}, # field :foo, :integer, default: 4\n ],\n has_one: [\n foo: Foo, # has_one :foo, Foo\n bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id\n ]\n has_many: [\n foo: Foo, # has_many :foo, Foo\n bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id\n ]\n many_to_many: [\n foo: Foo, # many_to_many :foo, Foo\n bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar\n ]\n```\n\nThis one won't work very well because we define `foo` and `bar` 5\ntimes each, but I think you get the point.\n\nReading of configuration is done during compile time. The relations\nwill be baked in during compilation, thus:\n\n* Do not expect this to work in runtime config.\n* You will need to rebuild all dependencies which use this macro\n when you change their configuration.","ref":"Exto.html#flex_schema/1"},{"type":"module","title":"Import2Alias","doc":"","ref":"Import2Alias.html"},{"type":"function","title":"Import2Alias.import2alias/2","doc":"","ref":"Import2Alias.html#import2alias/2"},{"type":"module","title":"Import2Alias.CallerTracer","doc":"","ref":"Import2Alias.CallerTracer.html"},{"type":"function","title":"Import2Alias.CallerTracer.trace/2","doc":"","ref":"Import2Alias.CallerTracer.html#trace/2"},{"type":"module","title":"Import2Alias.Server","doc":"","ref":"Import2Alias.Server.html"},{"type":"function","title":"Import2Alias.Server.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Import2Alias.Server.html#child_spec/1"},{"type":"function","title":"Import2Alias.Server.entries/0","doc":"","ref":"Import2Alias.Server.html#entries/0"},{"type":"function","title":"Import2Alias.Server.record/6","doc":"","ref":"Import2Alias.Server.html#record/6"},{"type":"function","title":"Import2Alias.Server.start_link/1","doc":"","ref":"Import2Alias.Server.html#start_link/1"},{"type":"module","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive","doc":"","ref":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html"},{"type":"function","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.class_tree/1","doc":"","ref":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html#class_tree/1"},{"type":"module","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView","doc":"","ref":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html"},{"type":"function","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.class_tree/1","doc":"","ref":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html#class_tree/1"},{"type":"task","title":"mix bonfire.account.new","doc":"Creates an account in the database, automatically activated","ref":"Mix.Tasks.Bonfire.Account.New.html"},{"type":"task","title":"Usage - mix bonfire.account.new","doc":"```\nmix bonfire.account.new [email@address]\n```\n\nYou will be prompted for a password and an email if it was not provided.","ref":"Mix.Tasks.Bonfire.Account.New.html#module-usage"},{"type":"function","title":"Mix.Tasks.Bonfire.Account.New.run/1","doc":"","ref":"Mix.Tasks.Bonfire.Account.New.html#run/1"},{"type":"task","title":"mix bonfire.deps.compile","doc":"(re)compiles dependencies.\n\nTODO: check if we still need this now that we treat extensions as umbrella apps in dev...\n\nThis is a modified version of Elixir's `Mix.Tasks.Deps.Compile` which was needed to compile dependencies and extract localisable strings in `Mix.Tasks.Bonfire.Localise.Extract`\n\nBy default, compile all dependencies. A list of dependencies\ncan be given compile multiple dependencies in order.\n\nThis task attempts to detect if the project contains one of\nthe following files and act accordingly:\n\n * `mix.exs` - invokes `mix compile`\n * otherwise skip\n\nIf a list of dependencies is given, Mix will attempt to compile\nthem as is. For example, if project `a` depends on `b`, calling\n`mix deps.compile a` will compile `a` even if `b` is out of\ndate. This is to allow parts of the dependency tree to be\nrecompiled without propagating those changes upstream. To ensure\n`b` is included in the compilation step, pass `--include-children`.","ref":"Mix.Tasks.Bonfire.Deps.Compile.html"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.force_compile/2","doc":"","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#force_compile/2"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.loaded_by_name/3","doc":"Receives a list of dependency names and returns loaded `Mix.Dep`s.\nLogs a message if the dependency could not be found.","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#loaded_by_name/3"},{"type":"function","title":"Exceptions - Mix.Tasks.Bonfire.Deps.Compile.loaded_by_name/3","doc":"This function raises an exception if any of the dependencies\nprovided in the project are in the wrong format.","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#loaded_by_name/3-exceptions"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.run/1","doc":"","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#run/1"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.touch_manifests/0","doc":"","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#touch_manifests/0"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.try_compile/2","doc":"","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#try_compile/2"},{"type":"task","title":"mix bonfire.localise.extract","doc":"Extracts translations by recompiling the Elixir source code.\n\n mix gettext.extract [OPTIONS]\n\nTranslations are extracted into POT (Portable Object Template) files (with a\n`.pot` extension). The location of these files is determined by the `:otp_app`\nand `:priv` options given by Gettext modules when they call `use Gettext`. One\nPOT file is generated for each translation domain.\n\nIt is possible to give the `--merge` option to perform merging\nfor every Gettext backend updated during merge:\n\n mix gettext.extract --merge\n\nAll other options passed to `gettext.extract` are forwarded to the\n`gettext.merge` task (`Mix.Tasks.Gettext.Merge`), which is called internally\nby this task. For example:\n\n mix gettext.extract --merge --no-fuzzy","ref":"Mix.Tasks.Bonfire.Localise.Extract.html"},{"type":"function","title":"Mix.Tasks.Bonfire.Localise.Extract.run/1","doc":"","ref":"Mix.Tasks.Bonfire.Localise.Extract.html#run/1"},{"type":"task","title":"mix bonfire.release","doc":"","ref":"Mix.Tasks.Bonfire.Release.html"},{"type":"function","title":"Mix.Tasks.Bonfire.Release.main/1","doc":"","ref":"Mix.Tasks.Bonfire.Release.html#main/1"},{"type":"function","title":"Mix.Tasks.Bonfire.Release.run/1","doc":"","ref":"Mix.Tasks.Bonfire.Release.html#run/1"},{"type":"task","title":"mix bonfire.secrets","doc":"Generates secrets and prints to the terminal.\n mix bonfire.secrets [length]\nBy default, it generates keys 64 characters long.\nThe minimum value for `length` is 32.","ref":"Mix.Tasks.Bonfire.Secrets.html"},{"type":"function","title":"Mix.Tasks.Bonfire.Secrets.main/1","doc":"","ref":"Mix.Tasks.Bonfire.Secrets.html#main/1"},{"type":"task","title":"mix bonfire.user.admin.promote","doc":"Creates an account in the database, automatically activated","ref":"Mix.Tasks.Bonfire.User.Admin.Promote.html"},{"type":"task","title":"Usage - mix bonfire.user.admin.promote","doc":"```\nmix bonfire.user.admin.promote username\n```","ref":"Mix.Tasks.Bonfire.User.Admin.Promote.html#module-usage"},{"type":"function","title":"Mix.Tasks.Bonfire.User.Admin.Promote.run/1","doc":"","ref":"Mix.Tasks.Bonfire.User.Admin.Promote.html#run/1"},{"type":"task","title":"mix docs.deps","doc":"`mix docs.deps`","ref":"Mix.Tasks.Docs.Deps.html"},{"type":"task","title":"Command line options - mix docs.deps","doc":"* `--only` - the environment to include dependencies for\n * `--target` - the target to include dependencies for\n * `--exclude` - exclude dependencies which you do not want to see in docs.\n * any arguments supported by `mix docs` will be passed along","ref":"Mix.Tasks.Docs.Deps.html#module-command-line-options"},{"type":"task","title":"mix import2alias","doc":"","ref":"Mix.Tasks.Import2alias.html"},{"type":"behaviour","title":"Paginator","doc":"Defines a paginator.\n\nThis module adds a `paginate/3` function to your `Ecto.Repo` so that you can\npaginate through results using opaque cursors.","ref":"Paginator.html"},{"type":"behaviour","title":"Usage - Paginator","doc":"defmodule MyApp.Repo do\n use Ecto.Repo, otp_app: :my_app\n use Paginator\n end","ref":"Paginator.html#module-usage"},{"type":"behaviour","title":"Options - Paginator","doc":"`Paginator` can take any options accepted by `paginate/3`. This is useful when\nyou want to enforce some options globally across your project.\n\n#","ref":"Paginator.html#module-options"},{"type":"behaviour","title":"Example - Paginator","doc":"defmodule MyApp.Repo do\n use Ecto.Repo, otp_app: :my_app\n use Paginator,\n limit: 10, # sets the default limit to 10\n maximum_limit: 100, # sets the maximum limit to 100\n include_total_count: true, # include total count by default\n total_count_primary_key_field: :uuid # sets the total_count_primary_key_field to uuid for calculate total_count\n end\n\nNote that these values can be still be overriden when `paginate/3` is called.\n\n#","ref":"Paginator.html#module-example"},{"type":"behaviour","title":"Use without macros - Paginator","doc":"If you wish to avoid use of macros or you wish to use a different name for\nthe pagination function you can define your own function like so:\n\n defmodule MyApp.Repo do\n use Ecto.Repo, otp_app: :my_app\n\n def my_paginate_function(queryable, opts \\ [], repo_opts \\ []) do\n defaults = [limit: 10] # Default options of your choice here\n opts = Keyword.merge(defaults, opts)\n Paginator.paginate(queryable, opts, __MODULE__, repo_opts)\n end\n end","ref":"Paginator.html#module-use-without-macros"},{"type":"function","title":"Paginator.cursor_for_record/3","doc":"Generate a cursor for the supplied record, in the same manner as the\n`before` and `after` cursors generated by `paginate/3`.\n\nFor the cursor to be compatible with `paginate/3`, `cursor_fields`\nmust have the same value as the `cursor_fields` option passed to it.\n\n#","ref":"Paginator.html#cursor_for_record/3"},{"type":"function","title":"Example - Paginator.cursor_for_record/3","doc":"iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1}, [:id])\n \"g3QAAAABZAACaWRhAQ==\"\n\n iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1, name: \"Alice\"}, [id: :asc, name: :desc])\n \"g3QAAAACZAACaWRhAWQABG5hbWVtAAAABUFsaWNl\"","ref":"Paginator.html#cursor_for_record/3-example"},{"type":"function","title":"Paginator.default_fetch_cursor_value/2","doc":"Default function used to get the value of a cursor field from the supplied\nmap. This function can be overriden in the `Paginator.Config` using the\n`fetch_cursor_value_fun` key.\n\nWhen using named bindings to sort on joined columns it will attempt to get\nthe value of joined column by using the named binding as the name of the\nrelationship on the original Ecto.Schema.\n\n#","ref":"Paginator.html#default_fetch_cursor_value/2"},{"type":"function","title":"Example - Paginator.default_fetch_cursor_value/2","doc":"iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1}, :id)\n 1\n\n iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1, address: %Paginator.Address{city: \"London\"}}, {:address, :city})\n \"London\"","ref":"Paginator.html#default_fetch_cursor_value/2-example"},{"type":"callback","title":"Paginator.paginate/3","doc":"Fetches all the results matching the query within the cursors.","ref":"Paginator.html#c:paginate/3"},{"type":"callback","title":"Options - Paginator.paginate/3","doc":"* `:after` - Fetch the records after this cursor.\n * `:before` - Fetch the records before this cursor.\n * `:cursor_fields` - The fields with sorting direction used to determine the\n cursor. In most cases, this should be the same fields as the ones used for sorting in the query.\n When you use named bindings in your query they can also be provided.\n * `:fetch_cursor_value_fun` function of arity 2 to lookup cursor values on returned records.\n Defaults to `Paginator.default_fetch_cursor_value/2`\n * `:include_total_count` - Set this to true to return the total number of\n records matching the query. Note that this number will be capped by\n `:total_count_limit`. Defaults to `false`.\n * `:total_count_primary_key_field` - Running count queries on specified column of the table\n * `:limit` - Limits the number of records returned per page. Note that this\n number will be capped by `:maximum_limit`. Defaults to `50`.\n * `:maximum_limit` - Sets a maximum cap for `:limit`. This option can be useful when `:limit`\n is set dynamically (e.g from a URL param set by a user) but you still want to\n enforce a maximum. Defaults to `500`.\n * `:total_count_limit` - Running count queries on tables with a large number\n of records is expensive so it is capped by default. Can be set to `:infinity`\n in order to count all the records. Defaults to `10,000`.","ref":"Paginator.html#c:paginate/3-options"},{"type":"callback","title":"Repo options - Paginator.paginate/3","doc":"This will be passed directly to `Ecto.Repo.all/2`, as such any option supported\nby this function can be used here.","ref":"Paginator.html#c:paginate/3-repo-options"},{"type":"callback","title":"Simple example - Paginator.paginate/3","doc":"query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id], select: p)\n\n Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)","ref":"Paginator.html#c:paginate/3-simple-example"},{"type":"callback","title":"Example with using custom sort directions per field - Paginator.paginate/3","doc":"query = from(p in Post, order_by: [asc: p.inserted_at, desc: p.id], select: p)\n\n Repo.paginate(query, cursor_fields: [inserted_at: :asc, id: :desc], limit: 50)","ref":"Paginator.html#c:paginate/3-example-with-using-custom-sort-directions-per-field"},{"type":"callback","title":"Example with sorting on columns in joined tables - Paginator.paginate/3","doc":"from(\n p in Post,\n as: :posts,\n join: a in assoc(p, :author),\n as: :author,\n preload: [author: a],\n select: p,\n order_by: [\n {:asc, a.name},\n {:asc, p.id}\n ]\n )\n\n Repo.paginate(query, cursor_fields: [{{:author, :name}, :asc}, id: :asc], limit: 50)\n\nWhen sorting on columns in joined tables it is necessary to use named bindings. In\nthis case we name it `author`. In the `cursor_fields` we refer to this named binding\nand its column name.\n\nTo build the cursor Paginator uses the returned Ecto.Schema. When using a joined\ncolumn the returned Ecto.Schema won't have the value of the joined column\nunless we preload it. E.g. in this case the cursor will be build up from\n`post.id` and `post.author.name`. This presupposes that the named of the\nbinding is the same as the name of the relationship on the original struct.\n\nOne level deep joins are supported out of the box but if we join on a second\nlevel, e.g. `post.author.company.name` a custom function can be supplied to\nhandle the cursor value retrieval. This also applies when the named binding\ndoes not map to the name of the relationship.","ref":"Paginator.html#c:paginate/3-example-with-sorting-on-columns-in-joined-tables"},{"type":"callback","title":"Example - Paginator.paginate/3","doc":"from(\n p in Post,\n as: :posts,\n join: a in assoc(p, :author),\n as: :author,\n join: c in assoc(a, :company),\n as: :company,\n preload: [author: a],\n select: p,\n order_by: [\n {:asc, a.name},\n {:asc, p.id}\n ]\n )\n\n Repo.paginate(query,\n cursor_fields: [{{:company, :name}, :asc}, id: :asc],\n fetch_cursor_value_fun: fn\n post, {{:company, name}, _} ->\n post.author.company.name\n\n post, field ->\n Paginator.default_fetch_cursor_value(post, field)\n end,\n limit: 50\n )","ref":"Paginator.html#c:paginate/3-example"},{"type":"function","title":"Paginator.paginated_query/2","doc":"","ref":"Paginator.html#paginated_query/2"},{"type":"module","title":"Paginator.Page","doc":"Defines a page.","ref":"Paginator.Page.html"},{"type":"module","title":"Fields - Paginator.Page","doc":"* `edges` - a list of entries contained in this page.\n* `page_info` - meta-data attached to this page.","ref":"Paginator.Page.html#module-fields"},{"type":"type","title":"Paginator.Page.t/0","doc":"","ref":"Paginator.Page.html#t:t/0"},{"type":"module","title":"Paginator.PageInfo","doc":"Defines page page_info.","ref":"Paginator.PageInfo.html"},{"type":"module","title":"Fields - Paginator.PageInfo","doc":"* `start_cursor` - an opaque cursor representing the first row of the current page, to be used with the `before` query parameter.\n* `end_cursor` - an opaque cursor representing the last row of the current page, to be used with the `after` query parameter.\n* `limit` - the maximum number of edges that can be contained in this page.\n* `page_count` - the number of edges on the current page.\n* `total_count` - the total number of edges matching the query.\n* `total_count_cap_exceeded` - a boolean indicating whether the `:total_count_limit` was exceeded.","ref":"Paginator.PageInfo.html#module-fields"},{"type":"type","title":"Paginator.PageInfo.opaque_cursor/0","doc":"","ref":"Paginator.PageInfo.html#t:opaque_cursor/0"},{"type":"type","title":"Paginator.PageInfo.t/0","doc":"","ref":"Paginator.PageInfo.html#t:t/0"},{"type":"module","title":"Releaser.Git","doc":"","ref":"Releaser.Git.html"},{"type":"function","title":"Releaser.Git.add_commit_and_tag/1","doc":"This module contains some git-specific functionality","ref":"Releaser.Git.html#add_commit_and_tag/1"},{"type":"module","title":"Releaser.Publish","doc":"","ref":"Releaser.Publish.html"},{"type":"function","title":"Releaser.Publish.publish!/0","doc":"","ref":"Releaser.Publish.html#publish!/0"},{"type":"module","title":"Releaser.Tests","doc":"","ref":"Releaser.Tests.html"},{"type":"function","title":"Releaser.Tests.run_tests!/0","doc":"","ref":"Releaser.Tests.html#run_tests!/0"},{"type":"module","title":"Releaser.VersionUtils","doc":"","ref":"Releaser.VersionUtils.html"},{"type":"function","title":"Releaser.VersionUtils.bump_major/1","doc":"Some utilities to get and set version numbers in the `mix.exs` file\nand to programmatically transform version numbers.\nMaybe the `bump_*` functions should be in the standard library?\nThis script doesn't support pre-release versions or versions with build information.","ref":"Releaser.VersionUtils.html#bump_major/1"},{"type":"function","title":"Releaser.VersionUtils.bump_minor/1","doc":"","ref":"Releaser.VersionUtils.html#bump_minor/1"},{"type":"function","title":"Releaser.VersionUtils.bump_patch/1","doc":"","ref":"Releaser.VersionUtils.html#bump_patch/1"},{"type":"function","title":"Releaser.VersionUtils.bump_pre/2","doc":"","ref":"Releaser.VersionUtils.html#bump_pre/2"},{"type":"function","title":"Releaser.VersionUtils.get_version/1","doc":"","ref":"Releaser.VersionUtils.html#get_version/1"},{"type":"function","title":"Releaser.VersionUtils.set_version/2","doc":"","ref":"Releaser.VersionUtils.html#set_version/2"},{"type":"function","title":"Releaser.VersionUtils.update_version/2","doc":"","ref":"Releaser.VersionUtils.html#update_version/2"},{"type":"function","title":"Releaser.VersionUtils.version_to_string/1","doc":"","ref":"Releaser.VersionUtils.html#version_to_string/1"},{"type":"module","title":"UserAuthLiveMount","doc":"","ref":"UserAuthLiveMount.html"},{"type":"function","title":"UserAuthLiveMount.on_mount/4","doc":"","ref":"UserAuthLiveMount.html#on_mount/4"},{"type":"module","title":"Voodoo","doc":"","ref":"Voodoo.html"},{"type":"macro","title":"Voodoo.def_reverse_router/2","doc":"Generates a reverse router function with the given name based upon a\ncompiled(!) phoenix router module.\n\nMust be used outside of the router module, or else the router won't\nbe compiled yet and we won't be able to look up the routes.\n\nGenerated function wraps the existing phoenix helpers.\n\n```\ndefmodule MyAppWeb.Router do\n use MyAppWeb, :router\n # ...\nend\ndefmodule MyAppWeb.Router.Reverse do\n import Voodoo, only: [def_reverse_router: 2]\n def_reverse_router :path, for: MyAppWeb.Router\nend\n```","ref":"Voodoo.html#def_reverse_router/2"},{"type":"function","title":"Voodoo.router/1","doc":"Turns a Conn or Socket into the name of the router that routed it.","ref":"Voodoo.html#router/1"},{"type":"module","title":"Zest","doc":"","ref":"Zest.html"},{"type":"function","title":"Zest.each/2","doc":"Iterates over a collections, calling the provided effectful\nfunction with each item.","ref":"Zest.html#each/2"},{"type":"function","title":"Zest.each/3","doc":"Iterates over two collections, calling the provided effectful\nfunction with each pair of items","ref":"Zest.html#each/3"},{"type":"function","title":"Zest.hijack/2","doc":"You take on the role of the `apply` function in this exciting\nfunction that wraps execution of a function such that your function\nis responsible for calling it.","ref":"Zest.html#hijack/2"},{"type":"function","title":"Zest.in_scope/2","doc":"Add some debug information to the context for the duration of a\nfunction's execution. If a `raise`, `throw` or `exit` occurs, the\ncontext will be pretty printed to the screen to aid with debugging.","ref":"Zest.html#in_scope/2"},{"type":"function","title":"Zest.intercept/2","doc":"Catches errors and exceptions, invoking an interceptor function","ref":"Zest.html#intercept/2"},{"type":"function","title":"Zest.rethrow/3","doc":"An interceptor function which simply rethrows/reraises/re-exits","ref":"Zest.html#rethrow/3"},{"type":"function","title":"Zest.rethrowing/1","doc":"Wraps an interceptor or nullary function into an interceptor\nfunction such that after the execution of the provided function, the\nerror or exception will be rethrown.","ref":"Zest.html#rethrowing/1"},{"type":"macro","title":"Zest.scope/2","doc":"Add some debug information to the context for the duration of a\nblock or expression. If a `raise`, `throw` or `exit` occurs, the\ncontext will be pretty printed to the screen to aid with debugging.\n\nExamples:\n \n ```scope [foo: :bar[, assert(true == false)```\n\n ```scope [foo: :bar] do\n assert true == false\n end\n ```","ref":"Zest.html#scope/2"},{"type":"function","title":"Zest.scoped/2","doc":"Wrap a function such that it is as if its body was wrapped in `scope/2`","ref":"Zest.html#scoped/2"},{"type":"type","title":"Zest.intercept_type/0","doc":"","ref":"Zest.html#t:intercept_type/0"},{"type":"type","title":"Zest.interceptor/0","doc":"","ref":"Zest.html#t:interceptor/0"},{"type":"module","title":"Zest.Faking","doc":"Helpers to make random generator functions more useful in tests","ref":"Zest.Faking.html"},{"type":"function","title":"Zest.Faking.forbid/2","doc":"Partner to `unused`. Adds a list of values to the list of used\nvalues under a key.","ref":"Zest.Faking.html#forbid/2"},{"type":"function","title":"Zest.Faking.sequential/2","doc":"Returns the next unused integer id for `name` starting from `start`.\nPermits jumping by artificially increasing start - if start is\nhigher than the last used id, it will return start and set it as the\nlast used id","ref":"Zest.Faking.html#sequential/2"},{"type":"function","title":"Zest.Faking.such_that/4","doc":"Reruns a faker until a predicate passes.\nDefault limit is 10 tries.","ref":"Zest.Faking.html#such_that/4"},{"type":"function","title":"Zest.Faking.unused/3","doc":"Reruns a faker until an unseen value has been generated.\nDefault limit is 10 tries.\nStores seen things in the process dict (yes, *that* process dict)","ref":"Zest.Faking.html#unused/3"},{"type":"extras","title":"README","doc":"# Bonfire \n\n[Bonfire](https://bonfirenetworks.org/) - tend to your digital life in community\n\nCustomise and host your own online space and control your experience at the most granular level.\n\n#","ref":"readme.html"},{"type":"extras","title":"⚠️ Warning - README","doc":"This project is in the beta stage - you're welcome to try out it out (specifically the social features in the classic flavour), but APIs may still change and no guarantees are given about stability. You can keep track of progress [in our milestones](https://github.com/bonfire-networks/bonfire-app/milestones?direction=asc&sort=due_date&state=open)\n\n#","ref":"readme.html#warning"},{"type":"extras","title":"🔥 Flavours - README","doc":"This repo includes configurations to run two main [flavours of Bonfire](https://bonfirenetworks.org/use-bonfire/) you can choose from:\n* [Classic](https://github.com/bonfire-networks/bonfire-app/tree/main/flavours/classic) for basic social networking (beta)\n* [Community](https://github.com/bonfire-networks/bonfire-app/tree/main/flavours/community) with groups and topics functionality (alpha)\n* [Cooperation](https://github.com/bonfire-networks/bonfire-app/tree/main/flavours/cooperation) with a bunch more extensions and features (pre-alpha)","ref":"readme.html#flavours"},{"type":"extras","title":"📖 Documentation - README","doc":"* [Website](https://bonfirenetworks.org) \n* [Set up an instance](docs/DEPLOY.md) - for testing and evaluation only!\n* [Hacking on Bonfire](docs/HACKING.md) \n* [Code documentation](https://doc.bonfirenetworks.org/api-reference.html#content) \n* [Community chat](https://matrix.to/#/%23bonfire-networks:matrix.org)","ref":"readme.html#documentation"},{"type":"extras","title":"Copyright and License - README","doc":"Copyright (c) 2020-2022 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"readme.html#copyright-and-license"},{"type":"extras","title":"Bonfire Spark","doc":"# Bonfire Spark\n\nAn essential Bonfire extension that sets up the other extensions and starts the app.\n\nNOTE: this extension uses top-level naming for the OTP app (`:bonfire`) and modules (`Bonfire.`).\n\nDocumentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)\nand published on [HexDocs](https://hexdocs.pm). Once published, the docs can\nbe found at .","ref":"extension-bonfire.html"},{"type":"extras","title":"Bonfire.Common","doc":"# Bonfire.Common\n\n`Bonfire.Common` is an extension for [Bonfire](https://bonfire.cafe/) that contains:\n\n- Many common functions in `Bonfire.Common.Utils`\n- Path and URL generators in `Bonfire.Common.URIs`\n- Date and time helpers in `Bonfire.Common.DatesTimes`\n- Etc","ref":"extension-bonfire_common.html"},{"type":"extras","title":"Handy commands - Bonfire.Common","doc":"","ref":"extension-bonfire_common.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Common","doc":"Copyright (c) 2020 Bonfire, VoxPublica, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_common.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Mailer","doc":"# Bonfire.Mailer\n\nAn library for [Bonfire](https://bonfire.cafe/) that contains:\n\n- Sending email (using [Bamboo](https://github.com/thoughtbot/bamboo))\n- Checking hypothetical email or domain validity","ref":"extension-bonfire_mailer.html"},{"type":"extras","title":"Handy commands - Bonfire.Mailer","doc":"","ref":"extension-bonfire_mailer.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Mailer","doc":"Copyright (c) 2020 Bonfire, VoxPublica, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_mailer.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Epics","doc":"# Bonfire.Epics\n\n`Bonfire.Epics` is a way of structuring tasks that is extension and customisability friendly.\n\n - Bonfire.Epics","doc":"0.1.0\"} -->","ref":"extension-bonfire_epics.html#installation"},{"type":"extras","title":"Copyright and License - Bonfire.Epics","doc":"Copyright (c) 2022 Bonfire Contributors\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-bonfire_epics.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Ecto","doc":"# Bonfire.Ecto\n\n`Bonfire.Ecto` contains Ecto transactional support as acts for `Bonfire.Epics`\n\n \n\n - Bonfire.Ecto","doc":"0.1.0\"} -->","ref":"extension-bonfire_ecto.html#installation"},{"type":"extras","title":"Bonfire.Search","doc":"# Bonfire.Search\n\nAn extension for [Bonfire](https://bonfire.cafe/) to handle:\n\n- Search indexing\n- Ultra-fast search\n- LiveView search UI\n\nYou can implement adapters for your prefered search backend. Currently adapters are included for:\n- [Meili Search](https://www.meilisearch.com/)","ref":"extension-bonfire_search.html"},{"type":"extras","title":"Development & Deployment Documentation - Bonfire.Search","doc":"This extension is meant to be used inside of a Bonfire app, so please refer to the main repo at: https://github.com/bonfire-networks/bonfire-app","ref":"extension-bonfire_search.html#development-deployment-documentation"},{"type":"extras","title":"Copyright and License - Bonfire.Search","doc":"Copyright (c) 2020 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_search.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.Assort","doc":"# Bonfire.Data.Assort\n\nVarious assorted database schemas for:\n- Ranked linked items\n- TODO: move schemas from bonfire_classify and bonfire_tag here?","ref":"extension-bonfire_data_assort.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.Assort","doc":"Copyright (c) 2020 Bonfire Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_assort.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Files","doc":"# Bonfire.Files\n\nFile management for bonfire apps. \n\nBonfire Files wraps [waffle][1] a file management library, \nadding support for media type checking using magic bytes inside of files, \nalong with creating a [pointable][2] table for storage of file data.\n\n[1]: https://github.com/elixir-waffle/waffle \n[2]: https://github.com/bonfire-networks/needle","ref":"extension-bonfire_files.html"},{"type":"extras","title":"Configuration - Bonfire.Files","doc":"","ref":"extension-bonfire_files.html#configuration"},{"type":"extras","title":"TODO's - Bonfire.Files","doc":"- Generate docs\n- More tests","ref":"extension-bonfire_files.html#todo-s"},{"type":"extras","title":"Bonfire.Boundaries","doc":"# Bonfire.Boundaries\n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Circles\n- Verbs\n- Accesses\n- ACLs\n- Grants\n- Queries with healthy boundaries","ref":"extension-bonfire_boundaries.html"},{"type":"extras","title":"Handy commands - Bonfire.Boundaries","doc":"","ref":"extension-bonfire_boundaries.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Boundaries","doc":"Copyright (c) 2020 Bonfire Contributors\n\nThis Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_boundaries.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Federate.ActivityPub","doc":"# Bonfire.Federate.ActivityPub\n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Extensible/configurable tools for translating Bonfire data to/from ActivityStreams\n- Bonfire Adapter for the [ActivityPub federation library ](https://github.com/bonfire-networks/activity_pub)","ref":"extension-bonfire_federate_activitypub.html"},{"type":"extras","title":"Testing - Bonfire.Federate.ActivityPub","doc":"There are unit tests both in this repo, and in the activity_pub lib, but they can't cover every possible federation case, so manual testing with e.g. `curl -H \"Accept: application/activity+json\" -v \"http://localhost:4001/pub/actors/my_username\" | jq '.'` and by trying out federation flows between instances of Bonfire and other ActivityPub implementation is a must.","ref":"extension-bonfire_federate_activitypub.html#testing"},{"type":"extras","title":"Handy commands - Bonfire.Federate.ActivityPub","doc":"","ref":"extension-bonfire_federate_activitypub.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Federate.ActivityPub","doc":"Copyright (c) 2020 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_federate_activitypub.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Invite.Links","doc":"# Bonfire.Invite.Links\n\nAn extension for [Bonfire](https://bonfire.cafe/) to generate invite links","ref":"extension-bonfire_invite_links.html"},{"type":"extras","title":"Handy commands - Bonfire.Invite.Links","doc":"","ref":"extension-bonfire_invite_links.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Invite.Links","doc":"Copyright (c) 2020 Bonfire, VoxPublica, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_invite_links.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.AccessControl","doc":"# Bonfire.Data.AccessControl\n\nSee also https://bonfirenetworks.org/docs/boundaries/ for more docs (TODO: merge/deduplicate)\n\nBonfire has a slightly unusual way of dealing with access control.\nIt's not so different from role-based access control (RBAC), but we do\na few things differently and there are quite a lot of pieces to get\nyour head around. We'll start gently.\n\nBonfire has a `Verb` table containing strings like \"comment\" and\n\"delete\" that represent actions a user might wish to perform. They are\na basic part of the bonfire vocabulary within the codebase.\n\nA permission is a decision about whether the action may be performed\nit not. There are 3 decisions we support:\n\n* `true` (permitted)\n* `false` (explicitly not permitted, never permit)\n* `null`/`nil` (not explicitly permitted)\n\nIt may seem odd to have the `null` here. We will come back to this\nafter we've introduced a few more pieces of the puzzle.\n\nA boundary is simply an unordered list or group of permissions. Each\npermission may only occur once. Any permissions that are not specified\nare assumed to be `null`. This loosely corresponds to a `role` in RBAC.\n\nA `Grant` links a `subject` (user or circle) to a boundary. It\ndetermines what permissions are considered for a given subject.\n\nA `Acl` is simply an unordered list or group of `Grant`s. Subjects may\nappear more than once in a list (with different boundaries) and the\npermissions will be merged according to the following truth table:\n\n| input | input | output |\n|-------|-------|--------|\n| false | false | false |\n| false | true | false |\n| false | null | false |\n| true | false | false |\n| true | true | true |\n| true | null | true |\n| null | false | false |\n| null | true | true |\n| null | null | null |\n\nOr in words: take the highest value where `false > true > null`.\n\nAt the end of this combination process, the user is only permitted if\nthe result is true. You can see this as requiring an affirmative\nanswer to permit something, while always allowing you a bigger `no` to\ndeny when things are combined. Null values are additionally not\nrequired to be present in the database, saving us resources. That is\nto say we default to null if there is no relevant record.\n\nFinally, an object is linked to one or more `Acl`s by the `Controlled` multimixin, which pairs an object ID with an ACL ID. Because it is a multimixin, a given object can have multiple ACLs applied. In the case of overlap, permissions are combined in the manner described earlier.","ref":"extension-bonfire_data_access_control.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.AccessControl","doc":"Copyright (c) 2020 James Laver, `bonfire_data_access_control` Contributors\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_access_control.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.ActivityPub","doc":"# Bonfire.Data.ActivityPub\n\n \n\nActor schema.","ref":"extension-bonfire_data_activity_pub.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.ActivityPub","doc":"Copyright (c) 2020 James Laver, bonfire_data_activity_pub Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_activity_pub.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.Identity","doc":"# Bonfire.Data.Identity\n\nSchemas for accounts, users, etc.","ref":"extension-bonfire_data_identity.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.Identity","doc":"Copyright (c) 2020 James Laver, bonfire_data_identity Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_identity.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.Social","doc":"# Bonfire.Data.Social\n\n \n\nSchemas for social activities, posts, feeds, etc","ref":"extension-bonfire_data_social.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.Social","doc":"Copyright (c) 2020 James Laver, bonfire_data_social Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_social.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Me","doc":"# Bonfire.Me\n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Account creation\n- Email verification\n- Authentication\n- User/Profile creation\n- User/Profile switching\n- User Profile\n- Settings","ref":"extension-bonfire_me.html"},{"type":"extras","title":"Handy commands - Bonfire.Me","doc":"","ref":"extension-bonfire_me.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Me","doc":"Copyright (c) 2020 Bonfire, VoxPublica, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_me.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Social","doc":"# Bonfire.Social \n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Feeds / Timelines\n- Activities\n- Threads\n- Boosting\n- Liking\n- Flagging\n- etc","ref":"extension-bonfire_social.html"},{"type":"extras","title":"Handy commands - Bonfire.Social","doc":"","ref":"extension-bonfire_social.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Social","doc":"Copyright (c) 2023 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_social.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Social.Graph","doc":"# Bonfire.Social.Graph \n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Following\n- Follow Requests\n- Social graph analysis","ref":"extension-bonfire_social_graph.html"},{"type":"extras","title":"Handy commands - Bonfire.Social.Graph","doc":"","ref":"extension-bonfire_social_graph.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Social.Graph","doc":"Copyright (c) 2023 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_social_graph.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Posts","doc":"# Bonfire.Posts \n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Creating and reading posts","ref":"extension-bonfire_posts.html"},{"type":"extras","title":"Handy commands - Bonfire.Posts","doc":"","ref":"extension-bonfire_posts.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Posts","doc":"Copyright (c) 2020 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_posts.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Messages","doc":"# Bonfire.Messages \n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- DM\n- Group messaging","ref":"extension-bonfire_messages.html"},{"type":"extras","title":"Handy commands - Bonfire.Messages","doc":"","ref":"extension-bonfire_messages.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Messages","doc":"Copyright (c) 2023 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_messages.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Common","doc":"# Bonfire.UI.Common\n\n`Bonfire.UI.Common` is an extension for [Bonfire](https://bonfire.cafe/) that contains:\n\n- Many common functions for web UIs in Bonfire extensions\n- Common and generic re-usable components\n- Etc","ref":"extension-bonfire_ui_common.html"},{"type":"extras","title":"Handy commands - Bonfire.UI.Common","doc":"","ref":"extension-bonfire_ui_common.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Common","doc":"Copyright (c) 2022 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_common.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Social","doc":"# Bonfire.UI.Social\n![](https://i.imgur.com/XoQvDCW.png)\n\n[Bonfire.UI.Social](http://bonfirenetworks.org/extensions/ui_social.html) is an extension that includes the main User Interfaces (routes, pages and components) required to have a fully working federated social network app.\n\nThis extension is meant to be used by other extensions like [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social), which provides logic for the UI to work with/\n\nYou can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment `Bonfire.UI.Social.Routes` from your top-level Router to use your custom routes and views instead).\n\n\n#","ref":"extension-bonfire_ui_social.html"},{"type":"extras","title":"Stack - Bonfire.UI.Social","doc":"So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:\n\n- [Phoenix](https://www.phoenixframework.org/)\n- [Elixir](https://elixir-lang.org/)\n- [TailwindCSS](https://tailwindcss.com/)\n- [Alpine.js](https://alpinejs.dev/)\n- [LiveView](https://github.com/phoenixframework/phoenix_live_view#readme)\n- [Surface](https://surface-ui.org/)\n\nSurface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.\n\n\n#","ref":"extension-bonfire_ui_social.html#stack"},{"type":"extras","title":"Scaffolding - Bonfire.UI.Social","doc":"The relevant folders are:\n- [Components](https://github.com/bonfire-networks/bonfire_ui_social/tree/main/lib/components): Surface stateless and stateful components.\n- [Views](https://github.com/bonfire-networks/bonfire_ui_social/tree/main/lib/views): The main pages that are rendered when navigating to a specific route\n- [Test](https://github.com/bonfire-networks/bonfire_ui_social/tree/main/test): All the unit tests for the specific module.\n\n#","ref":"extension-bonfire_ui_social.html#scaffolding"},{"type":"extras","title":"Other resources - Bonfire.UI.Social","doc":"- [A blog post that introduces the concept of themeable bonfire apps](https://bonfirenetworks.org/posts/let_thousand_bonfires_bloom/)","ref":"extension-bonfire_ui_social.html#other-resources"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Social","doc":"Copyright (c) 2020 Bonfire, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_social.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Me","doc":"# Bonfire.UI.Me\n![](https://i.imgur.com/XoQvDCW.png)\n\n[Bonfire.UI.Me](http://bonfirenetworks.org/extensions/ui_social.html) is an extension that includes the main User Interfaces (routes, pages and components) for functionality around accounts, users, profiles, authentication, etc.\n\nThis extension is meant to be used by other extensions like [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me), which provide logic for the UI to work with.\n\nYou can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment `Bonfire.UI.Me.Routes` from your top-level Router to use your custom routes and views instead). \n\n#","ref":"extension-bonfire_ui_me.html"},{"type":"extras","title":"Stack - Bonfire.UI.Me","doc":"So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:\n\n- [Phoenix](https://www.phoenixframework.org/)\n- [Elixir](https://elixir-lang.org/)\n- [TailwindCSS](https://tailwindcss.com/)\n- [Alpine.js](https://alpinejs.dev/)\n- [LiveView](https://github.com/phoenixframework/phoenix_live_view#readme)\n- [Surface](https://surface-ui.org/)\n\nSurface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs. \n\n#","ref":"extension-bonfire_ui_me.html#stack"},{"type":"extras","title":"Scaffolding - Bonfire.UI.Me","doc":"The relevant folders are:\n- [Components](https://github.com/bonfire-networks/bonfire_ui_me/tree/main/lib/components): Surface stateless and stateful components.\n- [Views](https://github.com/bonfire-networks/bonfire_ui_me/tree/main/lib/views): The main pages that are rendered when navigating to a specific route\n- [Test](https://github.com/bonfire-networks/bonfire_ui_me/tree/main/test): All the unit tests for the specific module.\n\n#","ref":"extension-bonfire_ui_me.html#scaffolding"},{"type":"extras","title":"Other resources - Bonfire.UI.Me","doc":"- [A blog post that introduces the concept of themeable bonfire apps](https://bonfirenetworks.org/posts/let_thousand_bonfires_bloom/)","ref":"extension-bonfire_ui_me.html#other-resources"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Me","doc":"Copyright (c) 2022 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_me.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.SharedUser","doc":"# Bonfire.Data.SharedUser","ref":"extension-bonfire_data_shared_user.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.SharedUser","doc":"Copyright (c) 2020 Bonfire Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_shared_user.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Tag","doc":"# Bonfire.Tag\n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Tagging posts or other things (i.e. with a Category from Bonfire.Classify or a location from Bonfire.Geolocate)\n- @ mentions (WIP)\n- Hashtags (WIP)","ref":"extension-bonfire_tag.html"},{"type":"extras","title":"Handy commands - Bonfire.Tag","doc":"","ref":"extension-bonfire_tag.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Tag","doc":"Copyright (c) 2020 Bonfire, Haha Academy, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_tag.html#copyright-and-license"},{"type":"extras","title":"ActivityPub","doc":"# ActivityPub\n\nActivityPub Library for elixir.\n\n**WORK IN PROGRESS, TESTING FEDERATION WITH DIFFERENT IMPLEMENTATIONS IS UNDERWAY**","ref":"extension-activity_pub.html"},{"type":"extras","title":"Installation - ActivityPub","doc":"1. Add this library to your dependencies in `mix.exs`\n\n```\ndefp deps do\n [...]\n {:activity_pub, git: \"https://github.com/bonfire-networks/activity_pub.git\", branch: \"stable\"} # branch can \"stable\", or \"develop\" for the bleeding edge\nend\n```\n\n2. Create an adapter module. To start, one created at\n `lib/my_app/adapter.ex` might look like\n\n```elixir\ndefmodule MyApp.Adapter do\n @moduledoc \"\"\"\n Adapter functions delegated from the `ActivityPub` Library\n \"\"\"\n\n @behaviour ActivityPub.Federator.Adapter\nend\n```\n\nNote that, due to the defined `@behavior`, Elixir will warn you that\nthe required functions\n\n * `base_url/0`\n * `get_actor_by_id/1`\n * `get_actor_by_username/1`\n * `get_follower_local_ids/1`\n * `get_following_local_ids/1`\n * `get_redirect_url/1`\n * `handle_activity/1`\n * `maybe_create_remote_actor/1`\n * `maybe_publish_object/2`\n * `update_local_actor/2`\n * `update_remote_actor/1`\n\nhave not yet been implemented though you will be able to start your\napp. Defining these allows `ActivityPub` to handle ActivityPub HTTP\nand database calls and operations. An example of an implemented\nadaptor can be found\n[here](https://github.com/bonfire-networks/bonfire_federate_activitypub/tree/main/lib/adapter\n\"Link to file hosted on GitHub\").\n\nThen set it in config\n\n```\nconfig :activity_pub, :adapter, MyApp.Adapter\n```\n\n3. Set your application repo in config\n\n```\nconfig :activity_pub, :repo, MyApp.Repo\n```\n\n4. Create a new ecto migration and call `ActivityPub.Migration.up/0` from it\n\n5. Inject AP routes to your router by adding `use ActivityPub.Web.Router` to your app's router module\n\n6. Copy the default AP config to your app's confix.exs\n\n```\nconfig :activity_pub, :mrf_simple,\n media_removal: [],\n media_nsfw: [],\n report_removal: [],\n accept: [],\n avatar_removal: [],\n banner_removal: []\n\nconfig :activity_pub, :instance,\n hostname: \"example.com\",\n federation_publisher_modules: [ActivityPub.Federator.APPublisher],\n federation_reachability_timeout_days: 7,\n federating: true,\n rewrite_policy: []\n\nconfig :activity_pub, :http,\n proxy_url: nil,\n user_agent: \"Your app name\",\n send_user_agent: true,\n adapter: [\n ssl_options: [\n # Workaround for remote server certificate chain issues\n partial_chain: &:hackney_connect.partial_chain/1,\n # We don't support TLS v1.3 yet\n versions: [:tlsv1, :\"tlsv1.1\", :\"tlsv1.2\"]\n ]\n ]\n ```\n\n7. Change the hostname value in the instance config block to your instance's hostname \n\n8. If you don't already have Oban set up, follow the [Oban installation intructions](https://hexdocs.pm/oban/installation.html#content) and add the AP queues:\n\n```\nconfig :my_app, Oban, queues: [federator_incoming: 50, federator_outgoing: 50, remote_fetcher: 20]\n```\n\nNow you should be able to compile and run your app and move over to integration.","ref":"extension-activity_pub.html#installation"},{"type":"extras","title":"Paginator","doc":"# Paginator\n\n[![Build status](https://github.com/duffelhq/paginator/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/duffelhq/paginator/actions?query=branch%3Amain)\n[![Inline docs](http://inch-ci.org/github/duffelhq/paginator.svg)](http://inch-ci.org/github/duffelhq/paginator)\n\n`Paginator` implements [cursor-based pagination](http://use-the-index-luke.com/no-offset) for Elixir [Ecto](https://github.com/elixir-ecto/ecto).\n\n[Documentation](https://hexdocs.pm/paginator)","ref":"extension-paginator.html"},{"type":"extras","title":"Why? - Paginator","doc":"There are several ways to implement pagination in a project and they all have pros and cons depending on your situation.\n\n#","ref":"extension-paginator.html#why"},{"type":"extras","title":"Limit-offset - Paginator","doc":"This is the easiest method to use and implement: you just have to set `LIMIT` and `OFFSET` on your queries and the\ndatabase will return records based on this two parameters. Unfortunately, it has two major drawbacks:\n\n* Inconsistent results: if the dataset changes while you are querying, the results in the page will shift and your user\nmight end seeing records they have already seen and missing new ones.\n\n* Inefficiency: `OFFSET N` instructs the database to skip the first N results of a query. However, the database must still\nfetch these rows from disk and order them before it can returns the ones requested. If the dataset you are querying is\nlarge this will result in significant slowdowns.\n\n#","ref":"extension-paginator.html#limit-offset"},{"type":"extras","title":"Cursor-based (a.k.a keyset pagination) - Paginator","doc":"This method relies on opaque cursor to figure out where to start selecting records. It is more performant than\n`LIMIT-OFFSET` because it can filter records without traversing all of them.\n\nIt's also consistent, any insertions/deletions before the current page will leave results unaffected.\n\nIt has some limitations though: for instance you can't jump directly to a specific page. This may\nnot be an issue for an API or if you use infinite scrolling on your website.\n\n#","ref":"extension-paginator.html#cursor-based-a-k-a-keyset-pagination"},{"type":"extras","title":"Learn more - Paginator","doc":"* http://use-the-index-luke.com/no-offset\n* http://use-the-index-luke.com/sql/partial-results/fetch-next-page\n* https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/\n* https://developer.twitter.com/en/docs/tweets/timelines/guides/working-with-timelines","ref":"extension-paginator.html#learn-more"},{"type":"extras","title":"Getting started - Paginator","doc":"```elixir\ndefmodule MyApp.Repo do\n use Ecto.Repo,\n otp_app: :my_app,\n adapter: Ecto.Adapters.Postgres\n\n use Paginator\nend\n\nquery = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id])\n\npage = MyApp.Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)\n\n# `page.edges` contains all the entries for this page.\n# `page.page_info` contains the meta-data associated with this page (cursors, limit, total count)\n```","ref":"extension-paginator.html#getting-started"},{"type":"extras","title":"Install - Paginator","doc":"Add `paginator` to your list of dependencies in `mix.exs`:\n\n```elixir\ndef deps do\n [{:paginator, \"~> 1.0.4\"}]\nend\n```","ref":"extension-paginator.html#install"},{"type":"extras","title":"Usage - Paginator","doc":"1. Add `Paginator` to your repo.\n\n ```elixir\n defmodule MyApp.Repo do\n use Ecto.Repo,\n otp_app: :my_app,\n adapter: Ecto.Adapters.Postgres\n\n use Paginator\n end\n ```\n\n2. Use the `paginate` function to paginate your queries.\n\n ```elixir\n query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id])\n\n # return the first 50 posts\n %{edges: edges, page_info: page_info} = Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)\n\n # assign the `after` cursor to a variable\n cursor_after = page_info.end_cursor\n\n # return the next 50 posts\n %{edges: edges, page_info: page_info} = Repo.paginate(query, after: cursor_after, cursor_fields: [{:inserted_at, :asc}, {:id, :asc}], limit: 50)\n\n # assign the `before` cursor to a variable\n cursor_before = page_info.start_cursor\n\n # return the previous 50 posts (if no post was created in between it should be the same list as in our first call to `paginate`)\n %{edges: edges, page_info: page_info} = Repo.paginate(query, before: cursor_before, cursor_fields: [:inserted_at, :id], limit: 50)\n\n # return total count\n # NOTE: this will issue a separate `SELECT COUNT(*) FROM table` query to the database.\n %{edges: edges, page_info: page_info} = Repo.paginate(query, include_total_count: true, cursor_fields: [:inserted_at, :id], limit: 50)\n\n IO.puts \"total count: #{page_info.total_count}\"\n ```","ref":"extension-paginator.html#usage"},{"type":"extras","title":"Security Considerations - Paginator","doc":"`Repo.paginate/4` will throw an ArgumentError should it detect an executable term in the cursor parameters passed to it (`before`, `after`).\nThis is done to protect you from potential side-effects of malicious user input, see [paginator_test.exs](https://github.com/duffelhq/paginator/blob/master/test/paginator_test.exs#L820).","ref":"extension-paginator.html#security-considerations"},{"type":"extras","title":"Indexes - Paginator","doc":"If you want to reap all the benefits of this method it is better that you create indexes on the columns you are using as\ncursor fields.\n\n#","ref":"extension-paginator.html#indexes"},{"type":"extras","title":"Example - Paginator","doc":"```elixir\n# If your cursor fields are: [:inserted_at, :id]\n# Add the following in a migration\n\ncreate index(\"posts\", [:inserted_at, :id])\n```","ref":"extension-paginator.html#example"},{"type":"extras","title":"Caveats - Paginator","doc":"* This method requires a deterministic sort order. If the columns you are currently using for sorting don't match that\ndefinition, just add any unique column and extend your index accordingly.\n* You need to add order_by clauses yourself before passing your query to `paginate/2`. In the future we might do that\nfor you automatically based on the fields specified in `:cursor_fields`.\n* There is an outstanding issue where Postgrex fails to properly builds the query if it includes custom PostgreSQL types.\n* This library has only be tested with PostgreSQL.","ref":"extension-paginator.html#caveats"},{"type":"extras","title":"Documentation - Paginator","doc":"Documentation is written into the library, you will find it in the source code, accessible from `iex` and of course, it\nall gets published to [hexdocs](http://hexdocs.pm/paginator).","ref":"extension-paginator.html#documentation"},{"type":"extras","title":"Contributing - Paginator","doc":"#","ref":"extension-paginator.html#contributing"},{"type":"extras","title":"Running tests - Paginator","doc":"Clone the repo and fetch its dependencies:\n\n```\n$ git clone https://github.com/duffelhq/paginator.git\n$ cd paginator\n$ mix deps.get\n$ mix test\n```\n\n#","ref":"extension-paginator.html#running-tests"},{"type":"extras","title":"Building docs - Paginator","doc":"```\n$ mix docs\n```","ref":"extension-paginator.html#building-docs"},{"type":"extras","title":"LICENSE - Paginator","doc":"See [LICENSE](https://github.com/duffelhq/paginator/blob/master/LICENSE.txt)","ref":"extension-paginator.html#license"},{"type":"extras","title":"Voodoo","doc":"# Voodoo\n\n`Voodoo` is a drop-in replacement for [Phoenix path helpers](https://hexdocs.pm/phoenix/routing.html#path-helpers) which is more convenient to use.","ref":"extension-voodoo.html"},{"type":"extras","title":"EctoSparkles","doc":"# EctoSparkles\n\nSome helpers to sparkle on top of [Ecto](https://hexdocs.pm/ecto/Ecto.html) \n\n- [`join_preload`](#join_preload-documentation)\n- [`reusable_join`](#reusablejoin-documentation)\n- `Migrator` to run migrations, rollbacks, etc in a release and `AutoMigrator` to automatically run them at startup.\n- `DataMigration`: a behaviour implemented for data migrations (generally backfills).\n- `Log` to log slow or possible N+1 queries with telemetry (showing stacktraces)\n- `Changesets` with various changeset helpers and validators and `Changesets.Errors` to handle changeset errors\n\nNOTE: you need to put something like `config :ecto_sparkles, :otp_app, :your_otp_app_name` in your app's config.\n\n\n## `join_preload` Documentation\n\nA macro which tells Ecto to perform a join and preload of (up to 5 nested levels of) associations.\n\nBy default, Ecto preloads associations using a separate query for each association, which can degrade performance.\n\nYou could make it run faster by using a combination of join/preload, but that requires a bit of boilerplate (see examples below).\n\n#","ref":"extension-ecto_sparkles.html"},{"type":"extras","title":"Examples using just Ecto - EctoSparkles","doc":"```\n query\n |> join(:left, [o, activity: activity], assoc(:object), as: :object)\n |> preload([l, activity: activity, object: object], activity: {activity, [object: object]})\n```\n\nEcto requires calling `Query.join/4`, `Query.assoc/3` and `Query.preload/2`. Here's another example:\n\n```\n Invoice\n |> join(:left, [i], assoc(i, :customer), as: :customer)\n |> join(:left, [i], assoc(i, :lines), as: :lines)\n |> preload([lines: v, customers: c], lines: v, customer: c)\n |> Repo.all()\n```","ref":"extension-ecto_sparkles.html#examples-using-just-ecto"},{"type":"extras","title":"Example using join_preload - EctoSparkles","doc":"With `join_preload`, you can accomplish this with just one line of code.\n\n```\n query\n |> join_preload([:activity, :object])\n```\n\n```\n Invoice\n |> join_preload(:customer)\n |> join_preload(:lines)\n |> Repo.all()\n```\n\nAs a bonus, `join_preload` automatically makes use of `reusable_join`\nso calling it multiple times for the same association has no ill effects.\n\n\n## `reusable_join` Documentation\n\nA macro is similar to `Ecto.Query.join/{4,5}`, but can be called multiple times \nwith the same alias.\n\nNote that only the first join operation is performed, the subsequent ones that use the same alias\nare just ignored. Also note that because of this behaviour, its mandatory to specify an alias when\nusing this function.\n\nThis is helpful when you need to perform a join while building queries one filter at a time,\nbecause the same filter could be used multiple times or you could have multiple filters that\nrequire the same join, which poses a problem with how the `filter/3` callback work, as you\nneed to return a dynamic with the filtering, which means that the join must have an alias,\nand by default Ecto raises an error when you add multiple joins with the same alias.\n\nTo solve this, it is recommended to use this macro instead of the default `Ecto.Query.join/{4,5}`,\nin which case there will be only one join in the query that can be reused by multiple filters.\n\n#","ref":"extension-ecto_sparkles.html#example-using-join_preload"},{"type":"extras","title":"Creating reusable joins - EctoSparkles","doc":"```elixir\nquery\n|> reusable_join(:left, [t1], t2 in \"other_table\", on: t1.id == t2.id, as: :other_a)\n|> reusable_join(:left, [t1], t2 in \"other_table\", on: t1.id == t2.id, as: :other_b)\n```","ref":"extension-ecto_sparkles.html#creating-reusable-joins"},{"type":"extras","title":"Copyright - EctoSparkles","doc":"- Copyright (c) 2021 Bonfire developers\n- Copyright (c) 2020 Up Learn\n- Copyright (c) 2019 Joshua Nussbaum \n\n- `join_preload` was originally forked from [Ecto.Preloader](https://github.com/joshnuss/ecto_preloader), licensed under WTFPL)\n- `reusable_join` was originally forked from [QueryElf](https://gitlab.com/up-learn-uk/query-elf), licensed under Apache License Version 2.0","ref":"extension-ecto_sparkles.html#copyright"},{"type":"extras","title":"Bonfire.Editor.Milkdown","doc":"# Bonfire.Editor.Milkdown\n\nBonfire composer based on the [Milkdown](https://milkdown.dev/) markdown editor","ref":"extension-bonfire_editor_milkdown.html"},{"type":"extras","title":"ROADMAP - Bonfire.Editor.Milkdown","doc":"- [x] Add emojis using gemoji convention\n- [x] Show emojis suggestions when typing : followed by 2 chars\n- [x] Show mentions suggestions when typing @ followed by 2 chars\n- [x] Show formatting suggestions when typing /\n- [x] Insert emojis from the suggestions list\n- [x] Insert mentions from the suggestions list\n- [ ] Insert formatting from the suggestions list\n- [x] Add placeholder when missing text\n- [ ] Upload images by dragging them in the editor","ref":"extension-bonfire_editor_milkdown.html#roadmap"},{"type":"extras","title":"Copyright and License - Bonfire.Editor.Milkdown","doc":"Copyright (c) 2023 Bonfire, Milkdown, ProseMirror and Remark Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_editor_milkdown.html#copyright-and-license"},{"type":"extras","title":"Arrows","doc":"# Arrows\n\nA handful of (mostly) arrow macros.","ref":"extension-arrows.html"},{"type":"extras","title":"Installation - Arrows","doc":"The package can be installed by adding `arrows` to your list of dependencies in `mix.exs`: -->\n\n```elixir\ndef deps do\n [\n {:arrows, \"~> 0.1.0\"}\n ]\nend\n```\n\nOr via git:\n```elixir\ndef deps do\n [\n {:arrows, git: \"https://github.com/bonfire-networks/arrows\", branch: \"main\"}\n ]\nend\n```","ref":"extension-arrows.html#installation"},{"type":"extras","title":"Documentation - Arrows","doc":"The Elixir [|> (\"pipe\") operator](https://hexdocs.pm/elixir/Kernel.html#%7C%3E/2) is one of the things that seems to get people excited about elixir. Probably in part because you then don't have to keep coming up with function names. Unfortunately it's kind of limiting. \nThe moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.\n\nNot any more! By simply inserting `...` where you would like the value to be inserted, `Arrows` will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. `Arrows` was inspired by [an existing library](https://hexdocs.pm/magritte/Magritte.html). Here is part of the test suite in lieu of examples:\n\n```elixir\ndefmodule ArrowsTest do\n use ExUnit.Case\n use Arrows\n\n def double(x), do: x * 2\n def double_fst(x, _), do: x * 2\n def double_snd(_, x), do: x * 2\n def add_snd_thd(_, x, y), do: x + y\n\n test \"|>\" do\n assert 4 == (2 |> double)\n assert 4 == (2 |> double())\n assert 4 == (2 |> double(...))\n assert 8 == (2 |> double(double(...)))\n assert 4 == (2 |> double_fst(1))\n assert 4 == (2 |> double_fst(..., 1))\n assert 8 == (2 |> double_fst(double(...), 1))\n assert 4 == (2 |> double_snd(1, ...))\n assert 8 == (2 |> double_snd(1, double(...)))\n assert 3 == (2 |> add_snd_thd(1, ..., 1))\n assert 4 == (2 |> add_snd_thd(1, ..., ...))\n assert 6 == (2 |> add_snd_thd(1, ..., double(...)))\n for x {:ok, ...})\n end\n end\nend\n```\n\nA few little extra features you might notice here:\n* You can move the parameter into a subexpression, as in `2 |> double_fst(double(...), 1)` where\n double will be called before the parameter is passed to `double_fst`.\n* You can use `...` multiple times, substituting it in multiple places.\n* The right hand side need not even be a function call, you can use any expression with `...`.\n\n#","ref":"extension-arrows.html#documentation"},{"type":"extras","title":"Ok-pipe - Arrows","doc":"`Arrows` also provides an `ok-pipe` operator, `~>`, which only pipes into the next function if the result from the last one was considered a success. It's inspired by [OK](https://hexdocs.pm/ok/readme.html), but we have chosen to do things slightly differently so it better fits with our regular pipe.\n\ninput | result |\n:----------------------- | :-------------- |\n`{:ok, x}` | `fun.(x)` |\n`{:error, e}` | `{:error, e}` |\n`nil` | `nil` |\n`x when not is_nil(x)` | `fun.(x)` |\n\nIn the case of a function returning an ok/error tuple being on the left hand side, this is straightforward to determine. In the event of `{:ok, x}`, x will be passed into the right hand side to call. In the event of `{:error, x}`, the result will be `{:error, x}`.\n\nWe also deal with a lot of functions that indicate failure by returning nil. `~>` tries to 'do what I mean' for both of these so you can have one pipe operator to rule them all. If `nil` is a valid result, you must thus be sure to wrap it in an `ok` tuple when it occurs on the left hand side of `~>`.\n\n`|>` and `~>` compose in the way you'd expect; i.e. a `~>` receiving an error tuple or nil will stop executing the rest of the chain of (mixed) pipes.\n\n\nDocumentation can be found at [https://hexdocs.pm/arrows](https://hexdocs.pm/arrows).","ref":"extension-arrows.html#ok-pipe"},{"type":"extras","title":"Needle.ULID","doc":"# Needle.ULID\n\n[![hex.pm](https://img.shields.io/hexpm/v/needle_ulid)](https://hex.pm/packages/needle_ulid)\n[hexdocs](https://hexdocs.pm/needle_ulid)\n\nA ULID datatype and some postgres support for ULID operations (`min`\nand `max` functions and aggregates)\n\nOriginally forked from\n[ecto-ulid](https://github.com/TheRealReal/ecto-ulid) but the internals have been replaced with a dependency on [ex_ulid](https://github.com/omgnetwork/ex_ulid)","ref":"extension-needle_ulid.html"},{"type":"extras","title":"Installation - Needle.ULID","doc":"```elixir\n{:needle_ulid, git: \"https://github.com/bonfire-networks/needle_ulid\", branch: \"main\"}\n```","ref":"extension-needle_ulid.html#installation"},{"type":"extras","title":"Copyright and License - Needle.ULID","doc":"Copyright (c) 2018 The RealReal, Inc.\nCopyright (c) 2020 needle_ulid contributors.\n\nLicensed under the terms of the MIT License.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","ref":"extension-needle_ulid.html#copyright-and-license"},{"type":"extras","title":"Needle","doc":"# Needle\n\n[![hex.pm](https://img.shields.io/hexpm/v/needle)](https://hex.pm/packages/needle)\n[hexdocs](https://hexdocs.pm/needle)\n\nEcto's missing universal foreign key\n\n> One foreign key to rule them all and in the darkness, bind them.\n\n-- Gandalf, paraphrased.\n\nA means of foreign keying many tables in one field. Designed for\nhighly interlinked data in highly dynamic schemata where tracking all\nthe foreign keys is neither desired nor practical.\n\nNote: a universal foreign key is actually a hard problem. Many\napproaches are on offer with a variety of tradeoffs. You should\ncarefully consider a variety of approaches rather than just blindly\nadopting the one that fitted our project's needs the best!","ref":"extension-needle.html"},{"type":"extras","title":"Background - Needle","doc":"A `Table` is a record of a table that may be linked to by a pointer.\nA `Pointer` is a pointer id and a table id.\n\nWith these two ingredients, we can construct a means of pointing to\nany table that has a `Table` entry.\n\n`Pointer` and `Table` IDs are both `Needle.ULID`, a UUID-like type\nthat combines a millisecond-precision timestamp and some randomness to\nreduce the likelihood of a clash. It naturally sorts both in binary\nand text form by time and as far as postgres is concerned, it's a UUID.","ref":"extension-needle.html#background"},{"type":"extras","title":"Installation - Needle","doc":"Aside from the hex dependency, you will also need to write a simple\nmigration to set up the database before you can start writing your\nregular migrations:\n\n```elixir\ndefmodule MyApp.Repo.Migrations.InitPointers do\n @moduledoc false\n use Ecto.Migration\n import Needle.Migration\n\n def up(), do: inits(:up)\n def down(), do: inits(:down)\n\n defp inits(dir) do\n init_pointers_ulid_extra(dir) # this one is optional but recommended\n init_pointers(dir) # this one is not optional\n end\nend\n```","ref":"extension-needle.html#installation"},{"type":"extras","title":"Defining a Pointable Type - Needle","doc":"Pointable tables require a unique sentinel ULID to identify\nthem. These must be 26 characters long and in the alphabet of\n[Crockford's Base32](https://en.wikipedia.org/wiki/Base32#Crockford's_Base32).\nThey should be easy to identify in a printout and might be silly.\n\nThere is a helper function, `synthesise!/1` in `Needle.ULID` to\nassist with this process - give it a 26-character long binary of ascii\nalphanumerics and it will give you the closest ULID that matches back.\n\nLet's look at a simple schema:\n\n```elixir\ndefmodule MyApp.Greeting do\n use Needle.Pointable,\n otp_app: :my_app,\n source: \"myapp_greeting\",\n table_id: \"GREET1NGSFR0MD0CEXAMP1E000\"\n\n pointable_schema do\n field :greeting, :string\n end\nend\n```\n\nTo declare a pointable schema, we start by using `Needle.Pointable`,\nproviding the name of our otp application, the source table's name in\nthe database and our chosen sentinel ULID.\n\nWe then call `pointable_schema` and define any fields we wish to put\ndirectly in the table. For the most part, `pointable_schema` is like\nEcto's `schema` macro, except you do not provide the table name and\nlet it handle the primary key.\n\nIf for some reason you wished to turn autogeneration off, you could\npass `autogenerate: false` to the options provided when using\n`Needle.Pointable`.\n\nNow let's define the migration for our schema:\n\n```elixir\ndefmodule MyApp.Repo.Migrations.Greeting do\n @moduledoc false\n use Ecto.Migration\n import Needle.Migration\n\n def up() do\n create_pointable_table(:greeting, \"GREET1NGSFR0MD0CEXAMP1E000\") do\n add :greeting, :text, null: false\n end\n end\n\n def down() do\n drop_pointable_table(:greeting, \"GREET1NGSFR0MD0CEXAMP1E000\")\n end\nend\n```\n\nAs you can see, it's pretty similar to defining a regular migration,\nexcept you use `create_pointable_table` and\n`drop_pointable_table`. Notice that our sentinel ULID makes an\nappearance again here. It's *very* important that these match what we\ndeclared in the schema.","ref":"extension-needle.html#defining-a-pointable-type"},{"type":"extras","title":"Referencing Needle - Needle","doc":"Ecto does not know anything about our scheme, so unless we\nspecifically want something to reference one of the pointed tables, we\ntypically `belongs_to` with `Needle.Pointer`. The table in which we\ndo this does not itself need to be pointable.\n\n```elixir\ndefmodule MyApp.Foo do\n\n use Ecto.Schema\n alias Needle.Pointer\n\n # regular ecto table, not pointable!\n schema \"hello\" do\n belongs_to :pointer, Pointer # who knows what it points to?\n end\nend\n```\n\nYou may choose to reference a specific schema rather than Pointer if it\nwill only point to a single table. If you do this, you must ensure\nthat the referenced record exists in that table in the normal\nway. There may be some performance benefit, we didn't benchmark it.\n\nThe migration is slightly more complex, we have to decide what type of\na pointer it is. Needle come in three categories:\n\n* A strong pointer is not nullable and is deleted when the object it\n points to is deleted.\n* A weak pointer is nullable and is nilified when the object it points\n to is deleted.\n* An unbreakable pointer will raise when you attempt to delete the\n object it points to.\n\n| Type | Nullable? | On Delete |\n|-------------|-----------|-------------|\n| Strong | No | Cascade |\n| Weak | Yes | Set Null |\n| Unbreakable | No | Raise |\n\nIn this case we will use a strong pointer, because we want it to be\ndeleted if the pointed object is deleted.\n\n```elixir\ndefmodule MyApp.Repo.Migrations.Hello do\n @moduledoc false\n use Ecto.Migration\n import Needle.Migration\n\n def change() do\n create_if_not_exists table(:hello) do\n add :pointer, strong_pointer(), null: false\n add :greeting, :text, null: false\n end\n end\nend\n```\n\nIf you are pointing to a specific table instead of pointer,\n`strong_pointer/1` allows you to pass the name of that module\n(`strong_pointer/0` calls this with `Needle.Pointer`).","ref":"extension-needle.html#referencing-needle"},{"type":"extras","title":"Dereferencing Needle - Needle","doc":"It is common that even though you have a universal foreign key, you\nwill want to issue different queries based upon the type that is being\npointed to. For this reason, it is up to you to decide how to perform\nan onward query.\n\n`Needle.Pointers.schema/1` turns a `Pointer` into an Ecto schema module name\nyou can switch against. `Needle.Pointers.plan` breaks down a list of Needle\ninto a map of ids keyed by schema module. It is handy to define some\nfunctions in your (non-library) application that can load any type of\npointer in given contexts.","ref":"extension-needle.html#dereferencing-needle"},{"type":"extras","title":"Querying Needle - Needle","doc":"Since `Pointer` has a table, you can use its `table_id` field to\nfilter by pointed type. `Needle.Tables.id!/1` (or `ids!/1` for a\nlist) can be used to obtain the IDs for a table or tables.\n\nThen you run into another problem, that even though you know all of\nthe tables you're working with will have a certain field, you need to\nknow which table they are to work with them! The solution to this is\nwhat we are calling 'mixin tables' for convenience.\n\nA mixin table has a `Pointer` primary key along with any other fields\nyou wish to store in this mixin. By moving fields out to mixin tables,\nyou gain knowledge of the table name to which you need to join.\n\nAn example mixin schema:\n\n```elixir\ndefmodule My.Creator do\n use Needle.Mixin,\n otp_app: :my_app,\n source: \"creator\"\n\n mixin_schema do\n belongs_to :creator, My.User\n end\nend\n```\n\nMixin tables are not themselves pointable, so there is no need to\nspecify a table id as when defining a pointable schema.\n\nThe migration for this is slightly more complicated:\n\n```elixir\ndefmodule My.Creator.Migration do\n\n import Ecto.Migration\n import Needle.Migration\n\n defp creator_table(), do: My.Creator.__schema__(:source)\n defp user_table(), do: My.User.__schema__(:source)\n\n def migrate_creator(index_opts \\\\ []),\n do: migrate_creator(index_opts, direction())\n\n defp migrate_creator(index_opts, :up) do\n create_mixin_table(creator_table()) do\n add :creator_id, strong_pointer(user_table()), null: false \n end\n create_if_not_exists(unique_index(creator_table(), [:creator_id], index_opts))\n end\n\n defp migrate_creator(index_opts, :down) do\n drop_if_exists(unique_index(creator_table(), [:creator_id], index_opts))\n drop_mixin_table(creator_table())\n end\nend\n```","ref":"extension-needle.html#querying-needle"},{"type":"extras","title":"Virtual pointables (\"virtuals\") - Needle","doc":"Virtuals are a new addition in needle 0.6.0. They behave like\npointables that you have not added any fields to.\n\nWe noticed it was very common in bonfire to create pointables with no\nextra fields just so we could use the needle system. Virtuals are\nalternative for this case that requires less typing and provides a\nreduced overhead vs pointables.\n\nVirtuals are backed by a writable view onto the `needle` table. This\nmeans that when we can save the cost of maintaining a primary key in\nthat table and the associated disk space.\n\nIn all other respects, they behave like pointables. You can have\nchangesets over them and select and insert as usual.","ref":"extension-needle.html#virtual-pointables-virtuals"},{"type":"extras","title":"Elixir-based logic - Needle","doc":"The practical result of needle is that it pushes a certain amount of\nvalidation and consistency logic back into elixir land. It is\ntherefore your elixir code's responsibility to ensure that data is\ninserted into the appropriate mixin tables when inserting a pointable\nobject and to manage deletions as appropriate.\n\nWhen assembling queries with mixin tables, pay careful attention to\nthe type of join you are performing. An inner join is explicitly\nasking not to be shown objects that do not have a record for that\nmixin. You quite possibly wanted to left join.","ref":"extension-needle.html#elixir-based-logic"},{"type":"extras","title":"Configuration and overrides - Needle","doc":"Every pointable or mixin schema is overrideable with configuration\nduring compilation (this is why using them requires an `:otp_app` to\nbe specified). For example, we could override `Needle.Table` (which\nis a pointable table) thus:\n\n```elixir\nconfig :needle, Needle.Table, source: \"my_pointers_table\"\n```\n\nThe `table_id` is also configurable, but we don't recommend you change it.\n\nIn addition, all pointable and mixin schemas permit extension with\n[Exto](https://github.com/bonfire-networks/exto). See the [Exto\ndocs](https://hexdocs.pm/exto/) for more information about how to\nextend schemas via configuration. You will probably at the very least\nwant to insert some `has_one` for mixins off your pointables.","ref":"extension-needle.html#configuration-and-overrides"},{"type":"extras","title":"Tradeoffs - Needle","doc":"All solutions to the universal primary key problem have tradeofs. Here\nare what we see as the deficiencies in our approach:\n\n1. It forces a ULID on you. This is great for us, but not\n everyone. ULID exposes a timestamp with millisecond precision. If\n the time of creation of a resource is sensitive information for\n your purposes, ULIDs are not going to be suitable for you.\n2. Ecto has no knowledge of the specialty of `Pointer`,\n e.g. `Repo.preload` does not work and you need to specify a join\n condition to join through a pointer. Use our functions or add extra\n associations with exto configuration.\n3. Dereferencing a list of needle requires a select query per table\n type that occurs in the input set.\n4. Reliance on user attention. You have to follow the instructions\n correctly to make the system work at all.\n5. There is likely some performance impact from postgres not\n understanding the relationships between the various tables\n properly. It's hard to gauge and we haven't even tried.\n\nThese are not likely to change. If you're going to pick\nthis library, do so in the full knowledge of the tradeoffs it makes.\n\nAlternatives include (I'm sure you can think of others):\n\n* Storing the table name in a second column alongside every foreign key.\n* A compound datatype of id and table name.\n* Byte/String manipulation tricks.\n* Evil SQL hacks based upon compile time configuration.\n\nWhile we have our gripes with this approach, once you've gotten the\nhang of using it, it works out pretty well for most purposes and it's\none of the simpler options to work with.","ref":"extension-needle.html#tradeoffs"},{"type":"extras","title":"Copyright and License - Needle","doc":"Copyright (c) 2020 needle Contributors\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-needle.html#copyright-and-license"},{"type":"extras","title":"Exto","doc":"# Exto\n\n[![hex.pm](https://img.shields.io/hexpm/v/exto)](https://hex.pm/packages/exto)\n[hexdocs](https://hexdocs.pm/exto)\n\n`Exto` provides configuration-driven Ecto schema extensibility","ref":"extension-exto.html"},{"type":"extras","title":"Usage - Exto","doc":"Example Schema:\n\n```elixir\ndefmodule My.Schema do\n use Ecto.Schema\n import Exto, only: [flex_schema: 1]\n\n schema \"my_table\" do\n field :name, :string # just normal schema things\n flex_schema(:my_app) # boom! give me the stuff\n end\nend\n```\n\nExample configuration\n\n```elixir\nconfig :my_app, My.Schema,\n belongs_to: [\n foo: Foo, # belongs_to :foo, Foo\n bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer\n ],\n field: [\n foo: :string, # field :foo, :string\n bar: {:integer, default: 4}, # field :foo, :integer, default: 4\n ],\n has_one: [\n foo: Foo, # has_one :foo, Foo\n bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id\n ]\n has_many: [\n foo: Foo, # has_many :foo, Foo\n bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id\n ]\n many_to_many: [\n foo: Foo, # many_to_many :foo, Foo\n bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar\n ]\n```\n\n This one won't work very well because we define `foo` and `bar` 5\n times each, but I think you get the point.\n\n Reading of configuration is done during compile time. The relations\n will be baked in during compilation, thus:\n\n * Do not expect this to work in runtime config.\n * You will need to rebuild all dependencies which use this macro\n when you change their configuration.","ref":"extension-exto.html#usage"},{"type":"extras","title":"Copyright and License - Exto","doc":"Copyright (c) 2020 Exto Contributors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-exto.html#copyright-and-license"},{"type":"extras","title":"Zest","doc":"# Zest\n\nA fresh approach to testing.","ref":"extension-zest.html"},{"type":"extras","title":"Usage - Zest","doc":"Installation:\n\n```elixir\n{:zest, \"~> 0.1.2\"}\n```\n\nExample (taken from our test suite):\n\n```elixir\ndefmodule MyTest do\n use ExUnit.Case\n import Zest\n \n test \"scope fails spectacularly\" do\n scope [this: %{is: :a}, test: :case] do\n scope [error: :this_should_not_show] do\n end\n scope [the: :order, must: :be_correct] do\n scope [to: :pass], assert(true == false)\n end\n end\n end\n\nend\n```\n\nOutput:\n\n```\nZest Context:\n* this: %{is: :a}\n* test: :case\n* the: :order\n* must: :be_correct\n* to: :pass\n\n\n 1) test scope fails spectacularly (ZestTest)\n test/zest_test.exs:7\n Assertion with == failed\n code: assert true == false\n left: true\n right: false\n stacktrace:\n (zest 0.1.0) lib/zest.ex:52: Zest.in_scope/2\n (zest 0.1.0) lib/zest.ex:47: anonymous fn/1 in Zest.in_scope/2\n (zest 0.1.0) lib/zest.ex:113: Zest.intercept/2\n test/zest_test.exs:8: (test)\n```","ref":"extension-zest.html#usage"},{"type":"extras","title":"Contributing - Zest","doc":"Contributions are welcome, even just doc fixes or suggestions.\n\nThis project has adopted a [Code of Conduct](CONDUCT.md) based on the\nContributor Covenant. Please be nice when interacting with the community.","ref":"extension-zest.html#contributing"},{"type":"extras","title":"Copyright and License - Zest","doc":"Copyright (c) 2020 James Laver\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-zest.html#copyright-and-license"},{"type":"extras","title":"Grumble","doc":"# Grumble\n\nA DSL for generating GraphQL queries","ref":"extension-grumble.html"},{"type":"extras","title":"Status: beta - Grumble","doc":"We use this in our tests at work to generate all the queries (because\nwe outgrew string concatenation). I'm not sure I'd want to depend on\nit in production yet because it's hard to feel like it's had a proper\nstress testing.\n\n* Needs (better) tests and documentation.\n* Missing support for some things we don't use.","ref":"extension-grumble.html#status-beta"},{"type":"extras","title":"Usage - Grumble","doc":"Add to your deps:\n\n```elixir\n{:grumble, \"~> 0.1.0\"}\n```\n\nSimple example:\n\n```elixir\nimport Grumble\nalias Grumble.PP\n\nIO.puts(PP.to_string(\n query(\n params: [community_id: type!(:string)],\n fields: [\n field(\n :community,\n args: [community_id: var(:community_id)],\n fields: [:id, :name]\n )\n ]\n )\n))\n```\n\nOutput:\n\n```\nquery($communityId: String!) {\n community(communityId: $communityId) {\n name\n id\n }\n}\n```","ref":"extension-grumble.html#usage"},{"type":"extras","title":"Guide - Grumble","doc":"Most of the useful functions are in the `Grumble` module. From there\nyou can read which arguments are understood by the relevant `new`\nfunction. We apologise for the poor documentation, please feel free to\ncontribute better docs!","ref":"extension-grumble.html#guide"},{"type":"extras","title":"Contributing - Grumble","doc":"Contributions are welcome, even just doc fixes or suggestions.\n\nThis project has adopted a [Code of Conduct](CONDUCT.md) based on the\nContributor Covenant. Please be nice when interacting with the community.","ref":"extension-grumble.html#contributing"},{"type":"extras","title":"Copyright and License - Grumble","doc":"Copyright (c) 2020 Grumble contributors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-grumble.html#copyright-and-license"},{"type":"extras","title":"Development guide","doc":"# Development guide\n\n_These instructions are for hacking on Bonfire. If you wish to deploy in production, please refer to our deployment guide instead._\n\nHello, potential contributor! :-)\n\nThis is a work in progress guide to getting up and running as a developer. Please ask questions in the issue tracker if something is not clear and we'll try to improve it.\n\nHappy hacking!","ref":"hacking.html"},{"type":"extras","title":"Status: beta - have fun and provide feedback 🙏 - Development guide","doc":"Bonfire is currently beta software. While it's fun to play with it, we would not recommend running any production instances (meaning not using it for your primary fediverse identity) yet because it's not quite ready for that today.","ref":"hacking.html#status-beta-have-fun-and-provide-feedback"},{"type":"extras","title":"Download - Development guide","doc":"Either way, you need to first clone this repository and change into the directory and then do some configuration:\n\n```sh\n$ git clone https://github.com/bonfire-networks/bonfire-app bonfire\n$ cd bonfire\n```","ref":"hacking.html#download"},{"type":"extras","title":"Configure - Development guide","doc":"#","ref":"hacking.html#configure"},{"type":"extras","title":"Pick a flavour - Development guide","doc":"Bonfire is a flexible platform that powers a variety of social networks. The first thing you have to choose is which app (or \"flavour\") you want to hack on:\n\n- `classic` (\"Bonfire Social\", a basic social network that interoperates with the fediverse)\n- `community` (for groups and communities)\n- `cooperation` (for building cooperative economic networks)\n\nNote that at the current time, the core team are focusing most of their efforts on the classic flavour and this is where we recommend you start.\n\nYou first need to install [just](https://github.com/casey/just#packages) which is a handy tool (a `make` alternative) to run commands defined in `./justfile`.\n\nSo for example if you want to run the `classic` flavour, with a fully-docker-managed setup (see the other options available below), run:\n\n- `export FLAVOUR=classic WITH_DOCKER=total` \n\nYou may also want to put this in the appropriate place in your system so your choice of flavour is remembered for next time (eg. `~/.bashrc` or `~/.zshrc`)\n\n- Make sure docker daemon is running if you chose a docker managed setup.\n\n- Then run `just config` to initialise some config.\n\n#","ref":"hacking.html#pick-a-flavour"},{"type":"extras","title":"Configure - Development guide","doc":"- Then edit the config (especially the secrets) for the current flavour in `./.env`\n\n#","ref":"hacking.html#configure"},{"type":"extras","title":"Option A - the entry way (fully managed via docker-compose, recommended when you're first exploring) - Development guide","doc":"- Dependencies:\n - Recent versions of Docker & [docker-compose](https://docs.docker.com/compose/install/)\n\n- Make sure you've set the environment variable to indicate your choice: `export WITH_DOCKER=total`\n\n- Make sure you've edited your .env file (see above) before getting started and proceed to Hello world!\n\n#","ref":"hacking.html#option-a-the-entry-way-fully-managed-via-docker-compose-recommended-when-you-re-first-exploring"},{"type":"extras","title":"Option B - the easy way (with bare-metal elixir, and docker-managed tooling, database & search index, recommended for active development) - Development guide","doc":"> Note: you can use a tool like [rtx](https://github.com/jdxcode/rtx) or asdf to setup the environment (run `rtx install` in the root directory).\n\n- Dependencies:\n - Recent versions of [Elixir](https://elixir-lang.org/install.html) (1.15+) and OTP/erlang (25+)\n - [yarn](https://yarnpkg.com)\n - Recent versions of Docker & [docker-compose](https://docs.docker.com/compose/install/)\n\n- Make sure you've set the env to indicate your choice: `export WITH_DOCKER=easy`\n\n- Make sure you've edited your .env file (see above) before getting started and proceed to Hello world!\n\n#","ref":"hacking.html#option-b-the-easy-way-with-bare-metal-elixir-and-docker-managed-tooling-database-search-index-recommended-for-active-development"},{"type":"extras","title":"Option C - the partial way (with bare-metal elixir and tooling, and docker-managed database & search index) - Development guide","doc":"> Note: you can use a tool like [rtx](https://github.com/jdxcode/rtx) or asdf to setup the environment (run `rtx install` in the root directory).\n\n- Dependencies:\n - Recent versions of [Elixir](https://elixir-lang.org/install.html) (1.15+) and OTP/erlang (25+)\n - Recent versions of [Rust](https://www.rust-lang.org/tools/install) and Cargo\n - [yarn](https://yarnpkg.com)\n - Recent versions of Docker & [docker-compose](https://docs.docker.com/compose/install/)\n\n- Make sure you've set the environment variable to indicate your choice: `export WITH_DOCKER=partial`\n\n- Make sure you've edited your .env file (see above) before getting started and proceed to Hello world!\n\n#","ref":"hacking.html#option-c-the-partial-way-with-bare-metal-elixir-and-tooling-and-docker-managed-database-search-index"},{"type":"extras","title":"Option D - the bare metal (if you don't use docker) - Development guide","doc":"> Note: you can use a tool like [rtx](https://github.com/jdxcode/rtx) or asdf to setup your the environment (run `rtx install` in the root directory). You will still need to install Postgres and Meili seperately though.\n\n- Dependencies:\n - Recent versions of [Elixir](https://elixir-lang.org/install.html) (1.15+) and OTP/erlang (25+)\n - Recent versions of [Rust](https://www.rust-lang.org/tools/install) and Cargo\n - [yarn](https://yarnpkg.com)\n - Postgres 12+ (or rather [Postgis](https://postgis.net/install/) if using the bonfire_geolocate extension)\n - [Meili Search](https://docs.meilisearch.com/learn/getting_started/installation.html) (optional)\n\n- You will need to set the relevant environment variables in the .env file (see above) to match your local install of Postgres.\n\n- If you want search capabilities, you'll also need to setup a Meili server and set the relevant env variables as well.\n\n- Make sure you've set the environment variable to indicate your choice: `export WITH_DOCKER=no` and proceed to Hello world!\n\n#","ref":"hacking.html#option-d-the-bare-metal-if-you-don-t-use-docker"},{"type":"extras","title":"Option E - the nix one (dev environment with Nix) - Development guide","doc":"Dependencies:\n\n- Run a recent version of Nix or NixOS: https://nixos.org/download.html\n\n- Enable Flakes: https://nixos.wiki/wiki/Flakes#Installing_flakes\n\n- Install [direnv](https://direnv.net/) through nix if you don't have the tool already: `nix profile install nixpkgs#direnv` and add it to your shell: https://direnv.net/docs/hook.html\n\n- Clone the bonfire-app repo if you haven't already and allow direnv to use environment variables:\n ```\n git clone https://github.com/bonfire-networks/bonfire-app\n cd `bonfire-app`\n direnv allow\n ```\n\nThe tool direnv is necessary for the nix setup as the nix shell environment will use variables defined on `.envrc` to set itself up.\n\nNote: when you run `direnv allow` on the bonfire-app directory for the first time, nix will automatically fetch the dependencies for bonfire. The process will take a while as it's downloading everything needed to use the development environment. Afterwards you will be able to use just fine. Proceeding times you enter the directory, the shell with automatically set up for your use without downloading the packages again.\n\nYou will need to update the db directory which is automatically created by nix the first time you initialized the shell with `direnv allow`. You can do so with the following steps:\n- Update `props.nix` to the settings you want.\n- Run `just nix-db-init` to create the database and user for postgres defined on `props.nix`.\n- Modify the `.env` file to comment out all `POSTGRES_*` variables. These are populated automatically by nix. So if the variables are set here, you may get issues with overriding your settings in `props.nix` when using bonfire.\n- You can now proceed to Hello World!\n\nNote: if you ever want to shut off the postgres server in nix, simply run the nix-db targets in just:\n\n```\n# stop postgres server running locally\njust nix-db stop\n# start postgres server running locally\njust nix-db start\n```","ref":"hacking.html#option-e-the-nix-one-dev-environment-with-nix"},{"type":"extras","title":"Hello world! - Development guide","doc":"- From a fresh checkout of this repository, this command will fetch the app's dependencies and setup the database (the same commands apply for all three options above):\n\n```\njust setup-dev\n```\n\n- You should then be able to run the app with:\n\n```\njust dev\n```\n\n- See the `just` commands below for more things you may want to do.","ref":"hacking.html#hello-world"},{"type":"extras","title":"Onboarding - Development guide","doc":"By default, the back-end listens on port 4000 (TCP), so you can access it on http://localhost:4000/\n\nYour first step will be to create an account to log in with. The\neasiest way to do this is with our mix task:\n\n```\n$ just mix bonfire.account.new\nEnter an email address: root@localhost\nEnter a password:\n```\n\nYour password must be at least 10 characters long and the output could be more helpful if you don't do that. This task seems to work most reliably if you open a second terminal window with the devserver running. We're not sure why.\n\nYou should then be able to log in and create a user through the web interface.\n\nIf you would like to become an administrator, there is a mix task for that too:\n\n```shell\njust mix bonfire.user.admin.promote your_username \n```","ref":"hacking.html#onboarding"},{"type":"extras","title":"The Bonfire Environment - Development guide","doc":"We like to think of bonfire as a comfortable way of developing software - there are a lot of\nconveniences built in once you know how they all work. The gotcha is that while you don't know them, it can be a bit overwhelming. Don't worry, we've got your back.\n\n* [Architecture](./ARCHITECTURE.md) - an overview of the stack and code structure.\n- [Bonfire-flavoured Elixir](./BONFIRE-FLAVOURED-ELIXIR.md) - an introduction to the way we write Elixir.\n- [Bonfire's Database: an Introduction](./DATABASE.md) - an overview of how our database is designed.\n- [Boundaries](./BOUNDARIES.md) - an introduction to our access control system.\n\nNote: these are still at the early draft stage, we expect to gradually improve documentation over time.","ref":"hacking.html#the-bonfire-environment"},{"type":"extras","title":"Documentation - Development guide","doc":"The code is somewhat documented inline. You can generate HTML docs (using `Exdoc`) by running `just docs`.","ref":"hacking.html#documentation"},{"type":"extras","title":"Additional information - Development guide","doc":"- messctl is a little utility for programmatically updating the .deps files from which the final elixir dependencies list is compiled by the mess script. The only use of it is in the dep-\\* tasks of the Makefile. It is used by some of the project developers and the build does not rely on it.\n\n- `./extensions/` is used to hack on local copies of Bonfire extensions. You can clone an extension from its git repo and use the local version during development, eg: `just dep-clone-local bonfire_me https://github.com/bonfire-networks/bonfire_me`\n\n- `./forks/` is used to hack on local copies of any other dependencies.\n\n- You can migrate the DB when the app is running (also runs automatically on startup): `Bonfire.Common.Repo.migrate`\n\n- You can generate a dependency graph using `just xref-graph` which will generate a DOT file at `docs/` (if Graphviz is installed it will also generate an SVG visualisation using `dot`).\n\n#","ref":"hacking.html#additional-information"},{"type":"extras","title":"Usage under Windows (WSL, MSYS or CYGWIN) - Development guide","doc":"By default, the `justfile` requires symlinks, which can be enabled with the help of [this link](https://stackoverflow.com/a/59761201).\n\nSee the [pull request adding WSL support](https://github.com/bonfire-networks/bonfire-app/pull/111) for details about usage without symlinks.\n\n## `just` commands\n\nRun `just` followed by any of these commands when appropriate rather than directly using the equivalent commands like `mix`, `docker`, `docker-compose`, etc. For example, `just setup` will get you started, and `just dev` will run the app.\n\nYou can first set an env variable to control which mode these commands will assume you're using. Here are your options:\n\n- `WITH_DOCKER=total` : use docker for everything (default)\n- `WITH_DOCKER=partial` : use docker for services like the DB\n- `WITH_DOCKER=easy` : use docker for services like the DB & compiled utilities like messctl\n- `WITH_DOCKER=no` : please no\n\nRun `just help` to see the list of possible commands and what they do.","ref":"hacking.html#usage-under-windows-wsl-msys-or-cygwin"},{"type":"extras","title":"Troubleshooting - Development guide","doc":"#","ref":"hacking.html#troubleshooting"},{"type":"extras","title":"EACCES Permissions Error - Development guide","doc":"If you get a permissions error when following any of the steps, run the following command and it should be fixed:\n\n```shell\ncd bonfire && sudo chown -R yourusername:yourusername .\n```\n\nNote that the command should be modified so your shell is pointing to wherever you have bonfire installed. If you are already in the bonfire directory then you only need to worry about running the `chown` portion of the command.\n\n#","ref":"hacking.html#eacces-permissions-error"},{"type":"extras","title":"Unable to access Postgres database - Development guide","doc":"If you are getting any `:nxdomain` errors, check if you have any firewalls that may be blocking the port on your system.\n\nFor example, if you are running UFW (a lot of Linux distros do), run the following command to allow access to port 4000:\n\n```shell\nsudo ufw allow 4000\n```\n\n### (Mix) Package fetch failed\n\nExample:\n\n```\n** (Mix) Package fetch failed and no cached copy available (https://repo.hex.pm/tarballs/distillery-2.0.12.tar)\n```\n\nIn this case, distillery (as an example of a dependency) made a new release and retired the old release from hex. The new version (`2.0.14`) is quite close to the version we were depending on (`2.0.12`), so we chose to upgrade:\n\n```shell\nmix deps.update distillery\n```\n\nThis respects the version bounds in `mix.exs` (`~> 2.0`), so increment that if required.\n\n### `(DBConnection.ConnectionError) tcp recv: closed`\n\nExample:\n\n```\n** (DBConnection.ConnectionError) tcp recv: closed (the connection was closed by the pool, possibly due to a timeout or because the pool has been terminated)\n```\n\nIn this case, the seeds were unable to complete because a query took too long to execute on your machine. You can configure the timeout to be larger in the `dev` environment:\n\n1. Open `config/dev.exs` in your editor.\n2. Find the database configuration (search for `Bonfire.Common.Repo`).\n3. Add `timeout: 60_000` to the list of options:\n\n```\nconfig :bonfire, Bonfire.Common.Repo,\n timeout: 60_000,\n [...]\n```","ref":"hacking.html#unable-to-access-postgres-database"},{"type":"extras","title":"Deployment guide","doc":"# Deployment guide\n\n#","ref":"deploy.html"},{"type":"extras","title":"WARNING: beta status - have fun but don't rely on it yet 🙏 - Deployment guide","doc":"Bonfire is currently beta software. While it's fun to play with it, we would not recommend running any production instances yet (meaning not using it for your primary fediverse identity) because it's not quite ready for that today. \n\n_These instructions are for setting up Bonfire in production. If you want to run the backend in development, please refer to our developer guide instead._","ref":"deploy.html#warning-beta-status-have-fun-but-don-t-rely-on-it-yet"},{"type":"extras","title":"Security Warning - Deployment guide","doc":"We recommend only granting an account to people you trust to minimise the attack surface. Accordingly, Bonfire ships with public registration disabled. The admin panel has an `invite` facility. \n\n---","ref":"deploy.html#security-warning"},{"type":"extras","title":"Step - 0 - Decide how you want to deploy and manage the app - Deployment guide","doc":"* Option A - Install using [Co-op Cloud](https://coopcloud.tech) (recommended) which is an alternative to corporate cloud services built by tech co-ops, and provides handy tools for setting up and managing many self-hosted free software tools using ready-to-use \"recipes\". Very useful if you'd like to host Bonfire alongside other open and/or federated projects. In this case, jump straight to step 4.\n* Option B - Install using Docker containers (easy mode)\n * Option B1 - Using pre-built Docker images \n * Option B2 - Building your own Docker image (if you want to make changes to the code)\n* Option C - Manual installation (without Docker)","ref":"deploy.html#step-0-decide-how-you-want-to-deploy-and-manage-the-app"},{"type":"extras","title":"Step 1 - Download and configure the app - Deployment guide","doc":"#","ref":"deploy.html#step-1-download-and-configure-the-app"},{"type":"extras","title":"Option A - Install using Co-op Cloud (recommended) - Deployment guide","doc":"1. Install [Abra](https://docs.coopcloud.tech/abra/) on your machine\n2. [Set up a server with co-op cloud](https://docs.coopcloud.tech/operators/) \n3. Use the [Bonfire recipe](https://recipes.coopcloud.tech/bonfire) and follow the instructions there. \n\n#","ref":"deploy.html#option-a-install-using-co-op-cloud-recommended"},{"type":"extras","title":"Options B and C - Deployment guide","doc":"1. Install dependencies. \nYou may need to install [just](https://github.com/casey/just#packages), and other requirements such as Docker (check the exact list of requirements based on the option you choose in step 2.)\n\n2. Clone this repository and change into the directory:\n\n```sh\ngit clone --depth 1 https://github.com/bonfire-networks/bonfire-app.git bonfire && cd bonfire\n```\n\n3. Specify what flavour you want to run in production:\n\nThe first thing to do is choose what flavour of Bonfire (eg. classic, community, or cooperation) you want to deploy, as each flavour uses different Docker images and set of configs. For example if you want to run the `classic` flavour:\n\n- `export MIX_ENV=prod FLAVOUR=classic` \n\nYou may also want to put this in the appropriate place in your system so your choice of flavour is remembered for next time (eg. `~/.bashrc` or `~/.zshrc`)\n\nIf you're not planning on using Docker, you'll also need:\n\n- `export WITH_DOCKER=no`\n\n## Step 2- Prepare the config\n\n* **Option A**: if deploying with co-op cloud, edit the env file at `~/.abra/servers/your_server/your_app.env` instead.\n\n* **Option B and C**: \n- Run `just config` to initialise some default config and then edit the config in the `./.env` file.\n\n#","ref":"deploy.html#options-b-and-c"},{"type":"extras","title":"Config keys you should pay special attention to: - Deployment guide","doc":"The app needs these environment variables to be configured in order to work.\n\n- `FLAVOUR` should reflect your chosen flavour\n- `HOSTNAME` (your domain name, eg: `bonfire.example.com`)\n- `PUBLIC_PORT` (usually 443)\n- `MAIL_DOMAIN` and `MAIL_KEY` and related keys to configure transactional email, for example set `MAIL_BACKEND=mailgun` and sign up at [Mailgun](https://www.mailgun.com/) and then configure the domain name and key (you may also need to set `MAIL_BASE_URI` if your domain is not setup in EU, as the default `MAIL_BASE_URI` is set as `https://api.eu.mailgun.net/v3`). \n- SMTP is supported as well, through the following env vars \n```\nMAIL_SERVER (smtp domain of the mail server)\nMAIL_DOMAIN (the bit after the @ in your email)\nMAIL_USER\nMAIL_PASSWORD\nMAIL_FROM\nMAIL_PORT (optional)\nMAIL_SSL (optional)\n```\n- `UPLOADS_S3_BUCKET` and the related API key and secret for uploads. WARNING: If you want to store uploads in an object storage rather than directly on your server (which you probably want, to not run out of space), you need to configure that up front, otherwise URLs will break if you change it later. See `config/runtime.exs` for extra variables to set if you're not using the default service and region (which is [Scaleway](https://www.scaleway.com/en/object-storage/) Paris).\n\n#","ref":"deploy.html#config-keys-you-should-pay-special-attention-to"},{"type":"extras","title":"Secret keys for which you should put random secrets. - Deployment guide","doc":"You can run `just secrets` to generate some for you.\n\n- `SECRET_KEY_BASE`\n- `SIGNING_SALT`\n- `ENCRYPTION_SALT`\n- `POSTGRES_PASSWORD`\n- `MEILI_MASTER_KEY` \n\n#","ref":"deploy.html#secret-keys-for-which-you-should-put-random-secrets"},{"type":"extras","title":"Further information on config - Deployment guide","doc":"In the `./config/` (which is a symbolic link to the config of the flavour you choose to run) directory of the codebase, there are following config files:\n\n- `config.exs`: default base configuration, which itself loads many other config files, such as one for each installed Bonfire extension.\n- `prod.exs`: default extra configuration for `MIX_ENV=prod`\n- `runtime.exs`: extra configuration which is loaded at runtime (vs the others which are only loaded once at compile time, i.e. when you build a release)\n- `bonfire_*.exs`: configs specific to different extensions, which are automatically imported by `config.exs`\n\nYou should *not* have to modify the files above. Instead, overload any settings from the above files using env variables or in `./.env`. If any settings in the `.exs` config files are not available in env or in the instance settings UI, please open an issue or PR.","ref":"deploy.html#further-information-on-config"},{"type":"extras","title":"Step 3 - Install - Deployment guide","doc":"#","ref":"deploy.html#step-3-install"},{"type":"extras","title":"Option A - Install using Co-op Cloud (recommended) - Deployment guide","doc":"Follow the instructions in the coop-cloud recipe readme.\n\n#","ref":"deploy.html#option-a-install-using-co-op-cloud-recommended"},{"type":"extras","title":"Option B - Install using Docker containers (easy mode) - Deployment guide","doc":"The easiest way to launch the docker image is using the just commands.\nThe `docker-compose.release.yml` uses `config/prod/.env` to launch a container with the necessary environment variables along with its dependencies, currently that means an extra postgres container, along with a reverse proxy (Caddy server, which you may want to replace with nginx or whatever you prefer).\n\nMake sure you have [Docker](https://www.docker.com/), with the [compose](https://docs.docker.com/compose/install/#install-compose) plugin, and [just](https://github.com/casey/just#packages) installed:\n\n```sh\n$ docker version\nDocker Engine - Community - 23.0.1\n\n$ docker compose version\nDocker Compose version v2.16.0\n\n$ just --version\njust 1.13.0\n...\n```\n\nNow that your tooling is set up, you have the choice of using pre-built images or building your own. For example if your flavour does not have a prebuilt image on Docker Hub, or if you want to customise any of the extensions, you can build one yourself - see option B2 below. \n\n##","ref":"deploy.html#option-b-install-using-docker-containers-easy-mode"},{"type":"extras","title":"Option B1 - Using pre-built Docker images (recommended to start with) - Deployment guide","doc":"- The `image` entry in `docker-compose.release.yml` will by default use the image on Docker Hub which corresponds to your chosen flavour (see step 1 above for choosing your flavour).\n\nYou can see the images available per flavour, version (we currently recommend using the `latest` tag), and architecture at https://hub.docker.com/r/bonfirenetworks/bonfire/tags \n\n- Start the docker containers with docker-compose:\n\n```\njust rel-run\n```\n\nRun this at the prompt: \n\n`bin/bonfire remote` to enter Elixir's iex environment\n`Bonfire.Common.Repo.migrate` to initialise your database\n\nThe backend should now be running at [http://localhost:4000/](http://localhost:4000/).\n\n- If that worked, start the app as a daemon next time:\n\n```\njust rel-run-bg\n```\n\n##","ref":"deploy.html#option-b1-using-pre-built-docker-images-recommended-to-start-with"},{"type":"extras","title":"Docker-related handy commands - Deployment guide","doc":"- `just update` to update to the latest release of Bonfire \n- `just rel-run` Run the app in Docker, in the foreground\n- `just rel-run-bg` Run the app in Docker, and keep running in the background\n- `just rel-stop` Stop the running release\n- `just rel-shell` Runs a simple shell inside of the container, useful to explore the image \n\nOnce in the shell, you can run `bin/bonfire` with the following commands:\nUsage: `bonfire COMMAND [ARGS]`\n\nThe known commands are:\n- `start` Starts the system\n- `start_iex` Starts the system with IEx attached\n- `daemon` Starts the system as a daemon\n- `daemon_iex` Starts the system as a daemon with IEx attached\n- `eval \"EXPR\"` Executes the given expression on a new, non-booted system\n- `rpc \"EXPR\"` Executes the given expression remotely on the running system\n- `remote` Connects to the running system via a IEx remote shell\n- `restart` Restarts the running system via a remote command\n- `stop` Stops the running system via a remote command\n- `pid` Prints the operating system PID of the running system via a remote command\n- `version` Prints the release name and version to be booted\n\nThere are some useful database-related release tasks under `EctoSparkles.Migrator.` that can be run in an `iex` console (which you get to with `just rel.shell` followed by `bin/bonfire remote`, assuming the app is already running):\n\n- `migrate` runs all up migrations\n- `rollback(step)` roll back to step X\n- `rollback_to(version)` roll back to a specific version\n- `rollback_all` rolls back all migrations back to zero (caution: this means losing all data)\n\nYou can also directly call some functions in the code from the command line, for example:\n- to migrate: `docker exec bonfire_web bin/bonfire rpc 'Bonfire.Common.Repo.migrate'`\n- to just yourself an admin: `docker exec bonfire_web bin/bonfire rpc 'Bonfire.Me.Users.make_admin(\"my_username\")'`\n\n##","ref":"deploy.html#docker-related-handy-commands"},{"type":"extras","title":"Option B2 - Building your own Docker image - Deployment guide","doc":"`Dockerfile.release` uses the [multistage build](https://docs.docker.com/develop/develop-images/multistage-build/) feature to just the image as small as possible. It generates the OTP release which is later copied into the final image packaged in an Alpine linux container.\n\nThere is a `justfile` with relevant commands (make sure set the `MIX_ENV=prod` env variable):\n\n- `just rel-build-release` which builds the docker image of the latest release\n- `just rel-build` which builds the docker image, including local changes to any cloned extensions in `./extensions/` \n- `just rel-tag` adds the \"latest\" tag to your last build, so that it will be used when running\n\nOnce you've built and tagged your image, you may need to update the `image` name in `docker-compose.release.release.yml` to match (either your local image name if running on the same machine you used for the build, or a remote image on Docker Hub if you pushed it) and then follow the same steps as for option A1.\n\nFor production, we recommend to set up a CI workflow to automate this, for an example you can look at the one [we currently use](../github/workflows/release.yaml).\n\n---\n\n#","ref":"deploy.html#option-b2-building-your-own-docker-image"},{"type":"extras","title":"Option C - Manual installation (without Docker) - Deployment guide","doc":"##","ref":"deploy.html#option-c-manual-installation-without-docker"},{"type":"extras","title":"Dependencies - Deployment guide","doc":"- Postgres (or Postgis) version 12 or newer\n- [just](https://github.com/casey/just#packages)\n- Elixir version 1.15+ with OTP 25+. If your distribution only has an old version available, check [Elixir's install page](https://elixir-lang.org/install.html) or use a tool like [rtx](https://github.com/jdxcode/rtx) (run `rtx install` in this directory).\n\n##","ref":"deploy.html#dependencies"},{"type":"extras","title":"C-1. Building the release - Deployment guide","doc":"- Make sure you have erlang and elixir installed (check `Dockerfile` for what version we're currently using)\n\n- `export WITH_DOCKER=no` OR add `WITH_DOCKER=no` to the end of `.env` and source it with `source .env`\n\n- Run `just rel-build` to create an elixir release. This will create an executable in your `_build/prod/rel/bonfire` directory. Note that you will need `just` to pass in the `.env` file to the executable, like so: `just cmd _build/prod/rel/bonfire/bin/bonfire `. Alternatively, this file can be sourced by `source .env` instead. We will be using the `bin/bonfire` executable as called from `just` from here on. \n\n##","ref":"deploy.html#c-1-building-the-release"},{"type":"extras","title":"C-2. Running the release - Deployment guide","doc":"- Create a database, and a user, fill out the `.env` with your credentials and secrets\n\n- You will need to use `just` in order to pass the `.env` file to the executable. This can be accomplished by running `just cmd _build/prod/rel/bonfire/bin/bonfire `. Just works from the root directory of the `justfile`, not your current directory.\n\n- If you’re using RDS or some other locked down DB, you may need to run `CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;` on your database with elevated privileges.\n\n- You can check if your instance is configured correctly and get to the iex console by running `bin/bonfire start`\n\n- The migrations should automatically run on first boot, but if you run into troubles the migration command is: `Bonfire.Common.Repo.migrate()` in the iex console. \n\n- To run the instance as a daemon, use `bin/bonfire start daemon`.\n\n---\n\n#","ref":"deploy.html#c-2-running-the-release"},{"type":"extras","title":"Option D - with Nix - Deployment guide","doc":"This repo is a Flake and includes a Nix module.\n\nHere are the detailed steps to deploy it:\n\n- run a recent version of Nix or NixOS: https://nixos.wiki\n- enable Flakes: https://nixos.wiki/wiki/Flakes#Installing_flakes\n- add `sandbox = false` in your nix.conf\n- fetch and build the app and dependencies: `nix run github:bonfire-networks/bonfire-app start_iex`\n- add it as an input to your system flake.\n- add an overlay to just the package available\n- add the required configuration in your system\n\nYour `flake.nix` file would look like the following. Remember to replace `myHostName` with your actual hostname or however your deployed system is called.\n\n```nix\n{\n inputs.bonfire.url = \"github:happysalada/bonfire-app/main\";\n outputs = { self, nixpkgs, bonfire }: {\n overlay = final: prev: with final;{\n # a package named bonfire already exists on nixpkgs so we put it under a different name\n elixirBonfire = bonfire.packages.x86_64-linux.default;\n };\n nixosConfigurations.myHostName = nixpkgs.lib.nixosSystem {\n system = \"x86_64-linux\";\n modules = [\n {\n environment.systemPackages = [ agenix.defaultPackage.x86_64-linux ];\n nixpkgs.overlays = [ self.overlay ];\n }\n ./myHostName.nix\n bonfire.nixosModules.bonfire\n ];\n };\n };\n}\n```\n\nThen your `myHostName.nix` would look like the following:\n\n```nix\n{ config, lib, pkgs, ... }:\n\n{\n services.bonfire = {\n # you will additionally need to expose bonfire with a reverse proxy, for example caddy\n port = 4000;\n package = pkgs.elixirBonfire;\n dbName = \"bonfire\";\n # the environment should contain a minimum of\n # SECRET_KEY_BASE\n # SIGNING_SALT\n # ENCRYPTION_SALT\n # RELEASE_COOKIE\n # have a look into nix/module.nix for more details\n # the way to deploy secrets is beyond this readme, but I would recommend agenix\n environmentFile = \"/run/secrets/bonfireEnv\";\n dbSocketDir = \"/var/run/postgresql\";\n };\n\t\n\t# this is specifically for a reverse proxy, which is primarily used for SSL certs\n\tservices.ngnix = {\n\t\tenable = true;\n\t\tforceSSL = true;\n\t\tenableACME = true;\n\t\tvirtualHosts.\"myHostName\".locations.proxyPass = \"http://localhost:4000\";\n\t};\n\t\n\t# You will need to accept ACME's terms and conditions if you haven't elsewhere in your configuration\n\tsecurity.acme.defaults.email = \"you@myHostName.com\";\n\tsecurity.acme.acceptTerms = true;\n\n # this is uniquely for database backup purposes\n # replace myBackupUserName with the user name that will do the backups\n # if you want to do backups differently, feel free to remove this part of the config\n services.postgresql = {\n ensureDatabases = [ \"bonfire\" ];\n ensureUsers = [{\n name = \"myBackupUserName\";\n ensurePermissions = { \"DATABASE bonfire\" = \"ALL PRIVILEGES\"; };\n }];\n };\n}\n```\n\n#","ref":"deploy.html#option-d-with-nix"},{"type":"extras","title":"Option C with nixos - Deployment guide","doc":"this repo is a flake and includes a nixos module.\nHere are the detailed steps to deploy it.\n\n- add it as an input to your system flake.\n- add an overlay to just the package available\n- add the required configuration in your system\n\nYour flake.nix file would look like the following. Remember to replace myHostName with your actual hostname or however your deployed system is called.\n\n```nix\n{\n inputs.bonfire.url = \"github:happysalada/bonfire-app/main\";\n outputs = { self, nixpkgs, bonfire }: {\n overlay = final: prev: with final;{\n # a package named bonfire already exists on nixpkgs so we put it under a different name\n elixirBonfire = bonfire.defaultPackage.x86_64-linux;\n };\n nixosConfigurations.myHostName = nixpkgs.lib.nixosSystem {\n system = \"x86_64-linux\";\n modules = [\n {\n environment.systemPackages = [ agenix.defaultPackage.x86_64-linux ];\n nixpkgs.overlays = [ self.overlay ];\n }\n ./myHostName.nix\n bonfire.nixosModules.bonfire\n ];\n };\n };\n}\n```\n\nthen in myHostName.nix would look like the following\n\nTODO: add the caddy config\n\n```nix\n{ config, lib, pkgs, ... }:\n\n{\n services.bonfire = {\n # you will need to expose bonfire with a reverse proxy, for example caddy\n port = 4000;\n package = pkgs.elixirBonfire;\n dbName = \"bonfire\";\n # the environment should contain a minimum of\n # SECRET_KEY_BASE\n # SIGNING_SALT\n # ENCRYPTION_SALT\n # RELEASE_COOKIE\n # have a look into nix/module.nix for more details\n # the way to deploy secrets is beyond this readme, but I would recommend agenix\n environmentFile = \"/run/secrets/bonfireEnv\";\n dbSocketDir = \"/var/run/postgresql\";\n };\n\n # this is uniquely for database backup purposes\n # replace myBackupUserName with the user name that will do the backups\n # if you want to do backups differently, feel free to remove this part of the config\n services.postgresql = {\n ensureDatabases = [ \"bonfire\" ];\n ensureUsers = [{\n name = \"myBackupUserName\";\n ensurePermissions = { \"DATABASE bonfire\" = \"ALL PRIVILEGES\"; };\n }];\n };\n}\n```","ref":"deploy.html#option-c-with-nixos"},{"type":"extras","title":"Step 4 - Run - Deployment guide","doc":"By default, the backend listens on port 4000 (TCP), so you can access it on http://localhost:4000/ (if you are on the same machine). In case of an error it will restart automatically.\n\nOnce you've signed up, you will automatically be an instance admin if you were the first to register.\n\n> NOTE: If you are running in a restricted environment such as Amazon RDS, you will need to execute some sql against the database before migrations can run: `CREATE EXTENSION IF NOT EXISTS citext;`\n\n\n##","ref":"deploy.html#step-4-run"},{"type":"extras","title":"Step 5 - Adding HTTPS - Deployment guide","doc":"The common and convenient way for adding HTTPS is by using a reverse proxy like Nginx or Caddyserver (the latter of which is bundled as part of the docker compose setup).\n\nCaddyserver and other servers can handle generating and setting up HTTPS certificates automatically, but if you need TLS/SSL certificates for nginx, you can look get some for free with [letsencrypt](https://letsencrypt.org/). The simplest way to obtain and install a certificate is to use [Certbot.](https://certbot.eff.org). Depending on your specific setup, certbot may be able to get a certificate and configure your web server automatically.\n\nIf you've built from source, you should point the nginx root directory to be `_build/prod/rel/bonfire/lib/bonfire-0.1.0-*/priv/static`","ref":"deploy.html#step-5-adding-https"},{"type":"extras","title":"Admin tools - Deployment guide","doc":"- LiveDashboard for viewing real-time metrics and logs at `/admin/system/`\n- Oban logs for viewing queued jobs (e.g. for processing federated activities) `/admin/system/oban_queues`\n- LiveAdmin for browsing data in the database at `/admin/system/data`\n- Orion for dynamic distributed performance profiling at `/admin/system/orion`\n- Web Observer as an alternative way to view metrics at `/admin/system/wobserver`","ref":"deploy.html#admin-tools"},{"type":"extras","title":"Troubleshooting - Deployment guide","doc":"Some common issues that may arise during deployment and our suggestions for resolving them.\n\n##","ref":"deploy.html#troubleshooting"},{"type":"extras","title":"WebSocket connections not establishing behind a reverse proxy - Deployment guide","doc":"If you are running Bonfire behind your own reverse proxy (e.g. nginx), you might experience issues with WebSocket connections not establishing. WebSocket connections require specific configuration to work, in nginx the following configuration is necessary for websockets to work:\n\n```\nlocation /live/websocket {\n proxy_pass http://127.0.0.1:4000;\n \n # these configurations are necessary to proxy WebSocket requests\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection \"upgrade\";\n}\n```","ref":"deploy.html#websocket-connections-not-establishing-behind-a-reverse-proxy"},{"type":"extras","title":"Bonfire Architecture","doc":"# Bonfire Architecture","ref":"architecture.html"},{"type":"extras","title":"Hacking - Bonfire Architecture","doc":"Bonfire is an unusual piece of software, developed in an unusual way. It originally started as a project to create a generic federation library/framework, while building an app for educators to share and collaborate on learning resources with their peers, and has been forked and evolved a lot since then. \n\nHacking on it is actually pretty fun. The codebase has a unique feeling to work with and we've relentlessly refactored to manage the ever-growing complexity that a distributed social networking toolkit implies. That said, it is not easy to understand without context, which is what this document is here to provide.","ref":"architecture.html#hacking"},{"type":"extras","title":"Design Decisions - Bonfire Architecture","doc":"Feature goals:\n\n- Flexibility for developers and users.\n- Extreme configurability and extensibility.\n- Integrated federation with the existing fediverse.\n\nOperational goals:\n\n- Easy to set up and run.\n- Light on resources for small deployments.\n- Scalable for large deployments.","ref":"architecture.html#design-decisions"},{"type":"extras","title":"Stack - Bonfire Architecture","doc":"Our main implementation language is [Elixir](https://www.elixir-lang.org/), which is designed for building reliable systems. We have almost [our own dialect](./BONFIRE-FLAVOURED-ELIXIR.md).\n\nWe use the [Phoenix](https://www.phoenixframework.org/) web framework with [LiveView](https://hexdocs.pm/phoenix_live_view/) and [Surface](https://surface-ui.org/documentation) for UI components and views.\n\nSurface is a different syntax for LiveView that is designed to be more convenient and understandable to frontend developers, with extra compile time checks. Surface views and components are compiled into LiveView code (so once you hit runtime, Surface in effect doesn't exist any more).\n\nSome extensions use the [Absinthe](https://absinthe-graphql.org/) GraphQL library to expose an API.","ref":"architecture.html#stack"},{"type":"extras","title":"The Bonfire Environment - Bonfire Architecture","doc":"We like to think of bonfire as a comfortable way of developing software - there are a lot of conveniences built in once you know how they all work. The gotcha is that while you don't know them, it can be a bit overwhelming. Don't worry, we've got your back.","ref":"architecture.html#the-bonfire-environment"},{"type":"extras","title":"Code Structure - Bonfire Architecture","doc":"The code is broadly composed namespaces such as these, many of which are packaged as \"extensions\" which live in separate git repositories, which are included in the app by way of mix dependencies:\n\n- `Bonfire.*` - Core application logic (very little code).\n- `Bonfire.*.*` - Bonfire extensions (eg `Bonfire.Posts`) containing mostly context modules, APIs, and routes\n- `Bonfire.Data.*` - Extensions containing database schemas and migrations \n- `Bonfire.UI.*` - UI component extensions\n- `Bonfire.*.*.LiveHandler` - Backend logic to handle events in the frontend\n- `Bonfire.Editor.*` (pluggable text editors, eg. CKEditor for WYSIWYG markdown input)\n- `Bonfire.GraphQL.*` - Optional GraphQL API\n- `Bonfire.Federate.*` - Optional Federation hooks\n- `ActivityPub` - ActivityPub S2S models, logic and various helper modules \n- `ActivityPub.Web` - ActivityPub S2S REST endpoints, activity ingestion and push federation facilities \n- `ValueFlows.*` - economic extensions implementing the [ValueFlows vocabulary](https://www.valueflo.ws)\n\n\nContexts are were we put any core logic. A context often is circumscribed to providing logic for a particular object type (e. g. `Bonfire.Posts` implements `Bonfire.Data.Social.Post`). \n\nAll Bonfire objects use an ULID as their primary key. We use the `Needle` library (with extra logic in `Bonfire.Common.Needles`) to reference any object by its primary key without knowing what type it is beforehand. This is very useful as it allows for example following or liking many different types of objects (as opposed to say only a user or a post) and this approach allows us to store the context of the like/follow by only storing its primary key (see `Bonfire.Data.Social.Follow`) for an example.\n\nContext modules usually have `one/2`, `many/2`, and `many_paginated/1` functions for fetching objects, which in turn call a `query/2` function. These take a keyword list as filters (and an optional `opts` argument) allowing objects to be fetched by arbitrary criteria.\n\nExamples:\n\n```\nUsers.one(username: \"bob\") # Fetching by username\nPosts.many_paginated(by: \"01E9TQP93S8XFSV2ZATX1FQ528\") # List a page of posts by its author\nEconomicResources.many(deleted: true) # List any deleted resources\n```\n\nContext modules also have functions for creating, updating and deleting objects, as well as hooks for federating or indexing in the search engine.\n\nHere is an incomplete sample of some of current extensions and modules:\n\n- `Bonfire.Me.Accounts` (for managing and querying local user accounts)\n- `Bonfire.Me.Users` (for managing and querying both local and remote user identities and profiles)\n- `Bonfire.Boundaries` (for managing and querying circles, ACLs, permissions...)\n- `Bonfire.Social.FeedActivities`, `Bonfire.Social.Feeds` and `Bonfire.Social.Activities` (for managing and querying activities and feeds)\n- `Bonfire.Posts` and `Bonfire.Social.PostContents` (for managing and querying posts)\n- `Bonfire.Social.Threads` (for managing and querying threads and comments)\n- `Bonfire.Social.Flags` (for managing and querying flags)\n- `Bonfire.Social.Graph.Follows` (for managing and querying follows)\n- `Bonfire.Classify` (for managing and querying categories, topics, and the like)\n- `Bonfire.Tag` (for managing and querying tags and mentions)\n- `Bonfire.Geolocate` (for managing and querying locations and geographical coordinates)\n- `Bonfire.Quantify` (for managing and querying units and measures)\n\n##","ref":"architecture.html#code-structure"},{"type":"extras","title":"Additional extensions, libraries, and modules - Bonfire Architecture","doc":"- `Bonfire.Common` and `Bonfire.Common.Utils` (stuff that gets used everywhere)\n- `Bonfire.Application` (OTP application)\n- `Bonfire.Me.Characters` (a shared abstraction over users, organisations, categories, and other objects that need to have feeds and behave as an actor in ActivityPub land)\n- `Bonfire.Federate.ActivityPub` and `ActivityPub` (ActivityPub integration)\n- `Bonfire.Search` (local search indexing and search API, powered by Meili)\n- `Bonfire.Mailer`, `Bonfire.Me.Mails`, and `Bamboo` (for rendering and sending emails)\n- `Bonfire.Files`, `Waffle`, `TreeMagic` and `TwinkleStar` (for managing uploaded content)\n- `Bonfire.GraphQL` (GraphQL API abstractions)\n- `Queery` and `Bonfire.Repo.Query` (Helpers for making queries on the database)\n- `Bonfire.Repo` (Ecto repository)\n- `Exto` (to extend DB schemas in config, especially useful for adding associations)\n- `AbsintheClient` (for querying the API from within the server)\n\n\n#","ref":"architecture.html#additional-extensions-libraries-and-modules"},{"type":"extras","title":"General structure - Bonfire Architecture","doc":"- Bonfire app\n - A [flavour](../README.md#flavours) running `Bonfire.Application` as supervisor\n - Configs assembled from extensions at `flavour/$FLAVOUR/config`\n - Phoenix at `Bonfire.Web.Endpoint`\n - Routes assembled from extensions at `Bonfire.Web.Router` \n - GraphQL schema assembled from extensions at `Bonfire.GraphQL.Schema`\n - Database migrations assembled from extensions at `flavour/$FLAVOUR/repo/migrations`\n - Data seeds assembled from extensions at `flavour/$FLAVOUR/repo/seeds`\n - Extensions and libraries as listed in `flavour/$FLAVOUR/config/deps.*`\n - Extensions defining schemas and migrations (usually `Bonfire.Data.*`)\n - Schemas\n - Migrations defined as functions in the schema modules in `lib/`\n - Migration templates calling those functions in `priv/repo/migrations` which are then copied into an app flavour's migrations\n - Extensions implementing features or groups of features (eg. `Bonfire.Me`)\n - Config template which is then copied into an app flavour's config (eg `config/bonfire_me.exs`)\n - Contexts (eg `Bonfire.Me.Users`)\n - Sometimes LiveHandlers for handling frontend events in the backend (eg `Bonfire.Me.Users.LiveHandler`)\n - Routes (eg `Bonfire.UI.Me.Routes`)\n - Controllers and/or Views (eg `Bonfire.UI.Me.CreateUserController` and `Bonfire.UI.Me.CreateUserLive`)\n - API (eg `Bonfire.Me.API.GraphQL`), refer to [GraphQL API documentation](./GRAPHQL.md)\n - Schemas\n - Resolvers\n - Sometimes Plugs (eg `Bonfire.Web.Plugs.UserRequired` and `Bonfire.Web.LivePlugs.UserRequired`)\n - Other extensions or libraries (eg `Needle` or `Bonfire.Common` which are used by most other extensions)","ref":"architecture.html#general-structure"},{"type":"extras","title":"Naming - Bonfire Architecture","doc":"It is said that naming is one of the four hard problems of computer science (along with cache management and off-by-one errors). We don't claim our scheme is the best, but we do strive for consistency.\n\n#","ref":"architecture.html#naming"},{"type":"extras","title":"Naming guidelines - Bonfire Architecture","doc":"- Module names mostly begin with `Bonfire.` unless they belong to a more generic library (eg `Needle` or `ValueFlows`)\n- Everything within an extension begins with the context name and a `.` (eg `Bonfire.Social.Migrations`)\n- Database schemas should be named in the singular (eg `Bonfire.Data.Social.Post`)\n- Context modules are named in plural where possible (eg `Bonfire.Posts`)\n- Other modules within a context begins with the context name and a `.` (eg `Bonfire.Posts.LiveHandler`)\n- Modules use UpperCamelCase while functions use snake_case\n- Acronyms in module names should be all uppercase (eg `Bonfire.Social.APActivities`)","ref":"architecture.html#naming-guidelines"},{"type":"extras","title":"Federation libraries - Bonfire Architecture","doc":"### `ActivityPub`\n\nThis namespace handles the ActivityPub logic and stores AP activities. It is largely adapted Pleroma code with some modifications, for example merging of the activity and object tables and new actor object abstraction.\n\n- `ActivityPub` contains the main API and is documented there. \n- `ActivityPub.Federator.Adapter` defines callback functions for the AP library.\n\nIt also contains some functionality that isn't part of the AP spec but is required for federation:\n- `ActivityPub.Safety.Keys` - Generating and handling RSA keys and signatures \n- `ActivityPub.Federator.WebFinger` - Implementation of the WebFinger protocol\n- `ActivityPub.Federator.HTTP` - Module for making HTTP requests (wrapper around tesla)\n- `ActivityPub.Instances` - Module for storing reachability information about remote instances\n\nAlso refer to [MRF documentation](./MRF.md) to learn how to rewrite or discard messages.\n\n### `ActivityPub.Web`\n\nThis namespace contains the ActivityPub Server-to-Server REST API, the activity ingestion pipeline (`ActivityPub.Federator.Transformer`) and the push federation facilities (`ActivityPub.Federator`, `ActivityPub.Federator.APPublisher` and others). The outgoing federation module is designed in a modular way allowing federating through different protocols in the future. \n\n#","ref":"architecture.html#federation-libraries"},{"type":"extras","title":"ActivityPub integration with Bonfire's application logic - Bonfire Architecture","doc":"The callback functions defined in `ActivityPub.Federator.Adapter` are implemented in `Bonfire.Federate.ActivityPub.Adapter`. \n\nWhen implementing federation for a new object type it needs to be implemented for both directions: \nfor outgoing federation using the hooks in `Bonfire.Federate.ActivityPub.Outgoing` and for incoming federation using the hooks in `Bonfire.Federate.ActivityPub.Incoming`.","ref":"architecture.html#activitypub-integration-with-bonfire-s-application-logic"},{"type":"extras","title":"Bonfire-flavoured Elixir","doc":"# Bonfire-flavoured Elixir\n\nBonfire has a few libraries that are widely used in the codebase and make writing Elixir feel a little bit different. To help you get less confused by this, here's a guide on what we can call \"bonfire-flavoured elixir\"!\n\nPlease note this guide assumes you already know [Elixir](https://elixir-lang.org/getting-started/introduction.html).\n\n## `Arrows`\n\nThe Elixir [|> (\"pipe\") operator](https://hexdocs.pm/elixir/Kernel.html#%7C%3E/2) is one of the things that seems to get people excited about elixir. Probably in part because you then don't have to keep coming up with function names. Unfortunately it's kind of limiting. \nThe moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.\n\nNot any more! By simply inserting `...` where you would like the value to be inserted, `Arrows` will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. `Arrows` was inspired by [an existing library](https://hexdocs.pm/magritte/Magritte.html). Here is part of the test suite in lieu of examples:\n\n```elixir\ndefmodule ArrowsTest do\n use ExUnit.Case\n use Arrows\n\n def double(x), do: x * 2\n def double_fst(x, _), do: x * 2\n def double_snd(_, x), do: x * 2\n def add_snd_thd(_, x, y), do: x + y\n\n test \"|>\" do\n assert 4 == (2 |> double)\n assert 4 == (2 |> double())\n assert 4 == (2 |> double(...))\n assert 8 == (2 |> double(double(...)))\n assert 4 == (2 |> double_fst(1))\n assert 4 == (2 |> double_fst(..., 1))\n assert 8 == (2 |> double_fst(double(...), 1))\n assert 4 == (2 |> double_snd(1, ...))\n assert 8 == (2 |> double_snd(1, double(...)))\n assert 3 == (2 |> add_snd_thd(1, ..., 1))\n assert 4 == (2 |> add_snd_thd(1, ..., ...))\n assert 6 == (2 |> add_snd_thd(1, ..., double(...)))\n for x {:ok, ...})\n end\n end\nend\n```\n\nA few little extra features you might notice here:\n* You can move the parameter into a subexpression, as in `2 |> double_fst(double(...), 1)` where double will be called before the parameter is passed to `double_fst`.\n* You can use `...` multiple times, substituting it in multiple places.\n* The right hand side need not even be a function call, you can use any expression with `...`.\n\n#","ref":"bonfire-flavoured-elixir.html"},{"type":"extras","title":"Ok-pipe - Bonfire-flavoured Elixir","doc":"`Arrows` also provides an `ok-pipe` operator, `~>`, which only pipes into the next function if the result from the last one was considered a success. It's inspired by [OK](https://hexdocs.pm/ok/readme.html), but we have chosen to do things slightly differently so it better fits with our regular pipe.\n\ninput | result |\n:----------------------- | :-------------- |\n`{:ok, x}` | `fun.(x)` |\n`{:error, e}` | `{:error, e}` |\n`nil` | `nil` |\n`x when not is_nil(x)` | `fun.(x)` |\n\nIn the case of a function returning an ok/error tuple being on the left hand side, this is straightforward to determine. In the event of `{:ok, x}`, x will be passed into the right hand side to call. In the event of `{:error, x}`, the result will be `{:error, x}`.\n\nWe also deal with a lot of functions that indicate failure by returning nil. `~>` tries to 'do what I mean' for both of these so you can have one pipe operator to rule them all. If `nil` is a valid result, you must thus be sure to wrap it in an `ok` tuple when it occurs on the left hand side of `~>`.\n\n`|>` and `~>` compose in the way you'd expect; i.e. a `~>` receiving an error tuple or nil will stop executing the rest of the chain of (mixed) pipes.","ref":"bonfire-flavoured-elixir.html#ok-pipe"},{"type":"extras","title":"Untangle - Bonfire-flavoured Elixir","doc":"`Untangle` provides replacements for the macros in Elixir's `Logger` module and the `IO.inspect` function to output code location information. The first argument will be `inspect`ed and the second (where provided) will be used as a label:\n\n```\niex(1)> import Untangle\nUntangle\niex(2)> debug(:no, \"the answer is\") # log at debug\n11:19:09.915 [debug] [iex:2] the answer is: :no\n:no\niex(3)> dump(%{a: :map}, \"it\") # inspect something on stdout\n[iex:3] it: %{a: :map}\n%{a: :map}\n```\n\nWhen used in a code file, the location information becomes slightly more useful, e.g.:\n\n```\n[lib/test_untangle.ex:15@Test.Untangle.example/2] Here's an empty list: []\n```\n\nYou may also notice from the iex output that it returns its first argument. This makes it ideal for\ninserting into a pipeline for debugging purposes:\n\n```elixir\ndo_something()\n|> debug(\"output of do_something/0\")\n```\n\nWhen you are done debugging something, the location of the debug statement is already in the output so you know where to remove it or comment it out! Bliss!\n\nYou will find the codebase uses this a lot, though the debugs are frequently commented out. Just uncomment the ones that would help you with a particular debugging task and you're off.","ref":"bonfire-flavoured-elixir.html#untangle"},{"type":"extras","title":"Error handling - Bonfire-flavoured Elixir","doc":"`Bonfire.Fail` is an `Exception` handler, which you can use to stop the show anywhere in the code, e.g:\n\n`id = ulid(object) || raise(Bonfire.Fail, :not_found)` \n\nYou can use this special exception when you want to redirect the user to the login page rather than just show an error:\n`user = current_user(assigns) || raise(Bonfire.Fail.Auth, :needs_login)` \n\nAdvantages include:\n\n- standardised error messages (defaults are defined at https://github.com/bonfire-networks/bonfire_fail/blob/main/lib/runtime_config.ex#L16) which can be overridden in your app's config using `config :bonfire_fail, :common_errors`\n- friendly error messages are defined in one place, which means no duplicated localisation efforts\n- uses the elixir/OTP pattern of \"let it crash\"\n- returns the correct HTTP code when applicable\n- no need to wrap blocks in if/else or the like \n- for users of the LiveView frontend, this will make the corresponding friendly error message appear in a flash overlay (if using `Bonfire.UI.Common.LiveHandlers` and/or `Bonfire.UI.Common.undead/3`)","ref":"bonfire-flavoured-elixir.html#error-handling"},{"type":"extras","title":"Bonfire's Database - an intro","doc":"# Bonfire's Database - an intro\n\nBonfire uses the excellent PostgreSQL database for most data storage. PostgreSQL allows us to make a wide range of queries and to make them relatively fast while upholding data integrity guarantees.\n\nPostgres is a relational schema-led database - it expects you to pre-define tables and the fields in each table (represented in tabular form, i.e. as a collection of tables with each table consisting of a set of rows and columns). Fields can contain data or a reference to a row in another table. \n\nThis usually means that a field containing a reference has to be pre-defined with a foreign key pointing to a specific field (typically a primary key, like an ID column) *in a specific table*. \n\nA simple example would be a blogging app, which might have a `post` table with `author` field that references the `user` table.\n\nA social network, by contrast, is actually a graph of objects. Objects need to be able to refer to other objects by their ID without knowing their type. \n\nA simple example would be likes, you might have a `likes` table with `liked_post_id` field that references the `post` table. But you don't just have posts that can be liked, but also videos, images, polls, etc, each with their own table, but probably do not want to have to add `liked_video_id`, `liked_image_id`, etc?\n\nWe needed the flexibility to have a foreign key that can reference any referenceable object. We call our system `Needle`.\n\nThis guide is a brief introduction to Needle. It assumes some foundational knowledge:\n\n* Basic understanding of how relational databases like Postgresql work, in particular:\n * Tables being made up of fields.\n * What a primary key is and why it's useful.\n * Foreign keys and relationships between tables (1 to 1, 1 to Many, Many to 1, Many to Many).\n * Views as virtual tables backed by a SQL query.\n\n* Basic understanding of Elixir (enough to follow the examples).\n* Basic working knowledge of the [Ecto](https://hexdocs.pm/ecto/Ecto.html) database library (schema and migration definitions)","ref":"database.html"},{"type":"extras","title":"Identifying objects - the ULID type - Bonfire's Database - an intro","doc":"All referenceable objects in the system have a unique ID (primary key) whose type is the [`ULID`](https://github.com/ulid/spec). It's a lot like a `UUID` in that you can generate unique ones independently of the database. It's also a little different, being made up of two parts:\n\n* The current timestamp, to millisecond precision.\n* Strong random padding for uniqueness.\n\nThis means that it naturally sorts by time to the millisecond (close enough for us), giving us a performance advantage on queries ordered by a separate creation datetime field (by contrast, UUIDv4 is randomly distributed).\n\nIf you've only worked with integer primary keys before, you are probably used to letting the database dispense an ID for you. With `ULID` (or `UUID`), IDs can be known *before* they are stored, greatly easing the process of storing a graph of data and allowing us to do more of the preparation work outside of a transaction for increased performance.\n\nIn PostgreSQL, we actually store `ULID`s as `UUID` columns, thanks to both being the same size (and the lack of a `ULID` column type shipping with postgresql). You mostly will not notice this because it's handled for you, but there are a few places it can come up:\n\n* Ecto debug and error output may show either binary values or UUID-formatted values.\n* Hand-written SQL may need to convert table IDs to the `UUID` format before use.","ref":"database.html#identifying-objects-the-ulid-type"},{"type":"extras","title":"It's just a table - Bonfire's Database - an intro","doc":"The `Needle` system is mostly based around a single table represented by the `Needle.Pointer` schema with the following fields:\n\n* `id` (ULID) - the database-wide unique id for the object, primary key.\n* `table_id` (ULID) - identifies the type of the object, references `Needle.Table`.\n* `deleted_at` (timestamp, default: `null`) - when the object was deleted.\n\nEvery object that is stored in the system will have a record in this table. It may also have records in other tables (handy for storing more than 3 fields about the object!).\n\nDon't worry about `Needle.Table` for now, just know that every object type will have a record there so `Needle.Pointer.table_id` can reference it.","ref":"database.html#it-s-just-a-table"},{"type":"extras","title":"Mixins - storing data about objects - Bonfire's Database - an intro","doc":"Mixins are tables which contain extra information on behalf of objects. Each object can choose to\nrecord or not record information for each mixin. Sample mixins include:\n\n* user profile (containing a name, location and summary)\n* post content (containing the title, summary, and/or html body of a post or message)\n* created (containing the id of the object creator)\n\nIn this way, they are reusable across different object types. One mixin may (or may not) be used by any number of objects. This is mostly driven by the type of the object we are storing, but can also be driven by user input.\n\nMixins are just tables too! The only requirement is they have a `ULID` primary key which references `Needle.Pointer`. The developer of the mixin is free to put whatever other fields they want in the table, so long as they have that primary-key-as-reference (which will be automatically added for you by the `mixin_schema` macro). \n\nHere is a sample mixin definition for a user profile:\n\n```elixir\ndefmodule Bonfire.Data.Social.Profile do\n\n use Needle.Mixin,\n otp_app: :bonfire_data_social,\n source: \"bonfire_data_social_profile\"\n\n mixin_schema do\n field :name, :string\n field :summary, :string\n field :website, :string\n field :location, :string\n end\nend\n```\n\nAside from `use`ing `Needle.Mixin` instead of `Ecto.Schema` and calling `mixin_schema` instead of\n`schema`, pretty similar to a standard Ecto schema, right? \n\nThe arguments to `use Needle.Mixin` are:\n\n* `otp_app`: the OTP app name to use when loading dynamic configuration, e.g. the current extension or app (required)\n* `source`: the underlying table name to use in the database\n\nWe will cover dynamic configuration later. For now, you can use the OTP app that includes the module.","ref":"database.html#mixins-storing-data-about-objects"},{"type":"extras","title":"Multimixins - Bonfire's Database - an intro","doc":"Multimixins are like mixins, except that where an object may have 0 or 1 of a particular mixins, an object may have any number of a particular multimixin.\n\nFor this to work, a multimixin must have a *compound primary key* which must contain an `id` column referencing `Needle.Pointer` and at least one other field which will collectively be unique.\n\nAn example multimixin is used for publishing an item to feeds:\n\n```elixir\ndefmodule Bonfire.Data.Social.FeedPublish do\n\n use Needle.Mixin,\n otp_app: :bonfire_data_social,\n source: \"bonfire_data_social_feed_publish\"\n\n alias Needle.Pointer\n\n mixin_schema do\n belongs_to :feed, Pointer, primary_key: true\n end\nend\n```\n\nNotice that this looks very similar to defining a mixin. Indeed, the only difference is the `primary_key: true` in this line, which adds a second field to the compound primary key.\nThis results in ecto recording a compound primary key of `(id, feed_id)` for the schema (the id is added for you as with regular mixins).","ref":"database.html#multimixins"},{"type":"extras","title":"Declaring Object Types - Bonfire's Database - an intro","doc":"#","ref":"database.html#declaring-object-types"},{"type":"extras","title":"Picking a table id - Bonfire's Database - an intro","doc":"The first step to declaring a type is picking a unique table ID in ULID format. You could just generate one at the terminal, but since these IDs are special, we tend to assign a synthetic ULID that are readable as words so they stand out in debug output.\n\nFor example, the ID for the `Feed` table is: `1TFEEDS0NTHES0V1S0FM0RTA1S`, which can be read as \"It feeds on the souls of mortals\". Feel free to have a little fun coming up with them, it makes debug output a little more cheery! The rules are:\n\n* The alphabet is [Crockford's Base32](https://en.wikipedia.org/wiki/Base32#Crockford's_Base32).\n* They must be 26 characters in length.\n* The first character must be a digit in the range 0-7.\n\nTo help you with this, the `Needle.ULID.synthesise!/1` method takes an alphanumeric binary and tries to return you it transliterated into a valid ULID. Example usage:\n\n```\niex(1)> Needle.ULID.synthesise!(\"itfeedsonthesouls\")\n\n11:20:28.299 [error] Too short, need 9 chars.\n:ok\niex(2)> Needle.ULID.synthesise!(\"itfeedsonthesoulsofmortalsandothers\")\n\n11:20:31.819 [warn] Too long, chopping off last 9 chars\n\"1TFEEDS0NTHES0V1S0FM0RTA1S\"\niex(3)> Needle.ULID.synthesise!(\"itfeedsonthesoulsofmortals\")\n\"1TFEEDS0NTHES0V1S0FM0RTA1S\"\niex(4)> Needle.ULID.synthesise!(\"gtfeedsonthesoulsofmortals\")\n\n11:21:03.268 [warn] First character must be a digit in the range 0-7, replacing with 7\n\"7TFEEDS0NTHES0V1S0FM0RTA1S\"\n```\n\n#","ref":"database.html#picking-a-table-id"},{"type":"extras","title":"Virtuals - Bonfire's Database - an intro","doc":"Virtuals are the simplest and most common type of object. Here's a definition of block:\n\n```elixir\ndefmodule Bonfire.Data.Social.Block do\n\n use Needle.Virtual,\n otp_app: :bonfire_data_social,\n table_id: \"310CK1NGSTVFFAV01DSSEE1NG1\",\n source: \"bonfire_data_social_block\"\n\n alias Bonfire.Data.Edges.Edge\n\n virtual_schema do\n has_one :edge, Edge, foreign_key: :id\n end\nend\n```\n\nIt should look quite similar to a mixin definition, except that we `use` `Needle.Virtual` this time (passing an additional `table_id` argument) and we call the `virtual_schema` macro.\n\nThe primary limitation of a virtual is that you cannot put extra fields into one. This also means that `belongs_to` is not generally permitted because it results in adding a field. `has_one` and `has_many` work just fine as they do not cause the creation of fields in the schema.\n\nThis is not usually a problem, as extra fields can be put into mixins or multimixins as appropriate.\n\nUnder the hood, a virtual has a view (in this example, called `bonfire_data_social_block`). It looks like a table with just an id, but it's populated with all the ids of blocks that are not deleted. When the view is inserted into, a record is created in the `pointers` table for you transparently. When you delete from the view, the corresponding `pointers` entry is marked deleted for you.\n\n#","ref":"database.html#virtuals"},{"type":"extras","title":"Pointables - Bonfire's Database - an intro","doc":"The other, lesser used, type of object is called the Pointable. The major difference is that unlike the simple case of virtuals, pointables are not backed by views, but by tables.\n\nWhen a record is inserted into a pointable table, a copy is made in the `pointers` table for you transparently. When you delete from the table, the the corresponding `pointers` entry is marked deleted for you. In these ways, they behave very much like virtuals. By having a table, however, we are free to add new fields.\n\nPointables pay for this flexibility by being slightly more expensive than virtuals:\n\n* Records must be inserted into/deleted from two tables (the pointable's table and the `pointers` table).\n* The pointable table needs its own primary key index.\n\nHere is a definition of a pointable type (indicating an ActivityPub activity whose type we don't recognise, stored as a JSON blob):\n\n```elixir\ndefmodule Bonfire.Data.Social.APActivity do\n\n use Needle.Pointable,\n otp_app: :bonfire_data_social,\n table_id: \"30NF1REAPACTTAB1ENVMBER0NE\",\n source: \"bonfire_data_social_apactivity\"\n\n pointable_schema do\n field :json, :map\n end\nend\n```\n\nThe choice of using a pointable instead of a virtual combined with one or more mixins is ultimately up to you.","ref":"database.html#pointables"},{"type":"extras","title":"Writing Migrations - Bonfire's Database - an intro","doc":"Migrations are typically included along with the schemas as public APIs you can call within your project's migrations.\n\n#","ref":"database.html#writing-migrations"},{"type":"extras","title":"Virtuals - Bonfire's Database - an intro","doc":"Most virtuals are incredibly simple to migrate for:\n\n```elixir\ndefmodule Bonfire.Data.Social.Post.Migration do\n\n import Needle.Migration\n alias Bonfire.Data.Social.Post\n\n def migrate_post(), do: migrate_virtual(Post)\n\nend\n```\n\nIf you need to do more work, it can be a little trickier. Here's an example for `block`, which also creates a unique index on another table:\n\n```elixir\ndefmodule Bonfire.Data.Social.Block.Migration do\n\n import Ecto.Migration\n import Needle.Migration\n import Bonfire.Data.Edges.Edge.Migration\n alias Bonfire.Data.Social.Block\n\n def migrate_block_view(), do: migrate_virtual(Block)\n\n def migrate_block_unique_index(), do: migrate_type_unique_index(Block)\n\n def migrate_block(dir \\\\ direction())\n\n def migrate_block(:up) do\n migrate_block_view()\n migrate_block_unique_index()\n end\n\n def migrate_block(:down) do\n migrate_block_unique_index()\n migrate_block_view()\n end\n\nend\n```\n\nNotice how we have to write our `up` and `down` versions separately to get the correct ordering of operations. \n\n#","ref":"database.html#virtuals"},{"type":"extras","title":"Pointables - Bonfire's Database - an intro","doc":"As of now, pointables are a little trickier to define flexibly than virtuals because we want to\npreserve the ability for the user to define extra fields in config. There are some questions about \nhow useful this is in practice, so we might go for a simpler option in future.\n\nExample:\n\n```elixir\ndefmodule Bonfire.Data.Social.APActivity.Migration do\n @moduledoc false\n use Ecto.Migration\n import Needle.Migration\n alias Bonfire.Data.Social.APActivity\n\n defp make_apactivity_table(exprs) do\n quote do\n require Needle.Migration\n Needle.Migration.create_pointable_table(Bonfire.Data.Social.APActivity) do\n Ecto.Migration.add :json, :jsonb\n unquote_splicing(exprs)\n end\n end\n end\n\n defmacro create_apactivity_table, do: make_apactivity_table([])\n defmacro create_apactivity_table([do: body]), do: make_apactivity_table(body)\n\n def drop_apactivity_table(), do: drop_pointable_table(APActivity)\n\n defp maa(:up), do: make_apactivity_table([])\n defp maa(:down) do\n quote do: Bonfire.Data.Social.APActivity.Migration.drop_apactivity_table()\n end\n\n defmacro migrate_apactivity() do\n quote do\n if Ecto.Migration.direction() == :up,\n do: unquote(maa(:up)),\n else: unquote(maa(:down))\n end\n end\n\nend\n```\n\n#","ref":"database.html#pointables"},{"type":"extras","title":"Mixins - Bonfire's Database - an intro","doc":"Mixins look much like pointables:\n\n```elixir\ndefmodule Bonfire.Data.Social.Profile.Migration do\n\n import Needle.Migration\n alias Bonfire.Data.Social.Profile\n\n # create_profile_table/{0,1}\n\n defp make_profile_table(exprs) do\n quote do\n require Needle.Migration\n Needle.Migration.create_mixin_table(Bonfire.Data.Social.Profile) do\n Ecto.Migration.add :name, :text\n Ecto.Migration.add :summary, :text\n Ecto.Migration.add :website, :text\n Ecto.Migration.add :location, :text\n Ecto.Migration.add :icon_id, strong_pointer(Bonfire.Files.Media)\n Ecto.Migration.add :image_id, strong_pointer(Bonfire.Files.Media)\n unquote_splicing(exprs)\n end\n end\n end\n\n defmacro create_profile_table(), do: make_profile_table([])\n defmacro create_profile_table([do: {_, _, body}]), do: make_profile_table(body)\n\n # drop_profile_table/0\n\n def drop_profile_table(), do: drop_mixin_table(Profile)\n\n # migrate_profile/{0,1}\n\n defp mp(:up), do: make_profile_table([])\n\n defp mp(:down) do\n quote do\n Bonfire.Data.Social.Profile.Migration.drop_profile_table()\n end\n end\n\n defmacro migrate_profile() do\n quote do\n if Ecto.Migration.direction() == :up,\n do: unquote(mp(:up)),\n else: unquote(mp(:down))\n end\n end\n\nend\n```\n\n#","ref":"database.html#mixins"},{"type":"extras","title":"Multimixins - Bonfire's Database - an intro","doc":"Similar to mixins:\n\n```elixir\ndefmodule Bonfire.Data.Social.FeedPublish.Migration do\n\n import Ecto.Migration\n import Needle.Migration\n alias Bonfire.Data.Social.FeedPublish\n\n @feed_publish_table FeedPublish.__schema__(:source)\n\n # create_feed_publish_table/{0,1}\n\n defp make_feed_publish_table(exprs) do\n quote do\n require Needle.Migration\n Needle.Migration.create_mixin_table(Bonfire.Data.Social.FeedPublish) do\n Ecto.Migration.add :feed_id,\n Needle.Migration.strong_pointer(), primary_key: true\n unquote_splicing(exprs)\n end\n end\n end\n\n defmacro create_feed_publish_table(), do: make_feed_publish_table([])\n defmacro create_feed_publish_table([do: {_, _, body}]), do: make_feed_publish_table(body)\n\n def drop_feed_publish_table(), do: drop_pointable_table(FeedPublish)\n\n def migrate_feed_publish_feed_index(dir \\\\ direction(), opts \\\\ [])\n def migrate_feed_publish_feed_index(:up, opts),\n do: create_if_not_exists(index(@feed_publish_table, [:feed_id], opts))\n def migrate_feed_publish_feed_index(:down, opts),\n do: drop_if_exists(index(@feed_publish_table, [:feed_id], opts))\n\n defp mf(:up) do\n quote do\n Bonfire.Data.Social.FeedPublish.Migration.create_feed_publish_table()\n Bonfire.Data.Social.FeedPublish.Migration.migrate_feed_publish_feed_index()\n end\n end\n\n defp mf(:down) do\n quote do\n Bonfire.Data.Social.FeedPublish.Migration.migrate_feed_publish_feed_index()\n Bonfire.Data.Social.FeedPublish.Migration.drop_feed_publish_table()\n end\n end\n\n defmacro migrate_feed_publish() do\n quote do\n if Ecto.Migration.direction() == :up,\n do: unquote(mf(:up)),\n else: unquote(mf(:down))\n end\n end\n\n defmacro migrate_feed_publish(dir), do: mf(dir)\n\nend\n```","ref":"database.html#multimixins"},{"type":"extras","title":"More examples - Bonfire's Database - an intro","doc":"Take a look at a few of the migrations in our data libraries. Between them, they cover most\nscenarios by now:\n\n* [bonfire_data_social](https://github.com/bonfire-networks/bonfire_data_social/)\n* [bonfire_data_access_control](https://github.com/bonfire-networks/bonfire_data_access_control/)\n* [bonfire_data_identity](https://github.com/bonfire-networks/bonfire_data_identity/)\n* [bonfire_data_edges](https://github.com/bonfire-networks/bonfire_data_edges/) (feat. bonus triggers)\n\nIf you want to know exactly what's happening, you may want to read the code for\n[Needle.Migration](https://github.com/bonfire-networks/needle/blob/main/lib/migration.ex).","ref":"database.html#more-examples"},{"type":"extras","title":"Boundaries & Access Control","doc":"# Boundaries & Access Control\n\nBoundaries is Bonfire's flexible framework for full per-user/per-object/per-action access control. It makes it easy to ensure that users may only see or do what they are supposed to.","ref":"boundaries.html"},{"type":"extras","title":"Users and Circles - Boundaries & Access Control","doc":"Ignoring any future bot support, boundaries ultimately apply to users.\n\nCircles are a way of categorising users. Each user has their own set of circles that they can add to and categorise other users in as they please.\n\nCircles allow a user to categorise work colleagues differently from friends, for example. They can choose to allow different interactions from users in the two circles or limit which content each sees on a per-item basis.","ref":"boundaries.html#users-and-circles"},{"type":"extras","title":"Verbs - Boundaries & Access Control","doc":"Verbs represent actions that the user could perform, such as reading a post or replying to a message.\n\nEach verb has a unique ID, like the table IDs from `Needle`, which must be known to the system through configuration.","ref":"boundaries.html#verbs"},{"type":"extras","title":"Permissions - Boundaries & Access Control","doc":"Permissions can take one of three values:\n\n* `true`\n* `false`\n* `nil` (or `null` to postgresql).\n\n`true` and `false` are easy enough to understand as yes and no, but what is `nil`?\n\n`nil` represents `no answer` - in isolation, it is the same as `false`.\n\nBecause a user could be in more than one circle and each circle may have a different permission, we need a way of combining permissions to produce a final result permission. `nil` is treated differently here:\n\nleft | right | result\n:------ | :------ | :-----\n`nil` | `nil` | `nil`\n`nil` | `true` | `true`\n`nil` | `false` | `false`\n`true` | `nil` | `true`\n`true` | `true` | `true`\n`true` | `false` | `false`\n`false` | `nil` | `false`\n`false` | `true` | `false`\n`false` | `false` | `false`\n\nTo be considered granted, the result of combining the permissions must be `true` (`nil` is as good as `false` again here).\n\n`nil` can thus be seen as a sort of `weak false`, being easily overridden by a true, but also not by itself granting anything.\n\nAt first glance, this may seem a little odd, but it gives us a little additional flexibility which is useful for implementing features such as blocks (where `false` is really useful!). With a little practice, it feels quite natural to use.","ref":"boundaries.html#permissions"},{"type":"extras","title":"ACLs and Grants - Boundaries & Access Control","doc":"An `ACL` is \"just\" a collection of `Grant`s.\n\nGrants combine the ID of the ACL they exist in with a verb id, a user or circle id and a permission, thus providing a decision about whether a particular action is permitted for a particular user (or all users in a particular circle).\n\nConceptually, an ACL contains a grant for every user-or-circle/verb combination, but most of the permissions are `nil`. We do not record grants with `nil` permissions in the database, saving substantially on storage space and compute requirements.","ref":"boundaries.html#acls-and-grants"},{"type":"extras","title":"Controlled - Applying boundaries to an object - Boundaries & Access Control","doc":"An object is linked to one or more `ACL`s by the `Controlled` multimixin, which pairs an object ID with an ACL ID. Because it is a multimixin, a given object can have multiple ACLs applied. In the case of overlap, permissions are combined in the manner described earlier. \n\n\nSee also https://doc.bonfirenetworks.org/extension-bonfire_data_access_control.html for more docs (TODO: merge/deduplicate)","ref":"boundaries.html#controlled-applying-boundaries-to-an-object"},{"type":"extras","title":"GraphQL API","doc":"# GraphQL API","ref":"graphql.html"},{"type":"extras","title":"GraphQL Introduction - GraphQL API","doc":"Go to http://your-app-url/api/ to start playing with the GraphQL API. The GraphiQL UI should autocomplete types, queries and mutations for you, and you can also explore the schema there.\n\nLet's start with a simple GraphQL thoeretical query:\n\n```graphql\nquery {\n greetings(limit: 10) {\n greeting\n to {\n name\n }\n }\n}\n```\n\nLet's break this apart:\n\n- `query {}` is how you retrieve information from GraphQL.\n- `greetings` is a `field` within the query.\n- `greetings` takes a `limit` argument, a positive integer.\n- `greetings` has two fields, `greeting` and `to`.\n- `to` has one `field`, `name`.\n\nThis query is asking for a list of (up to) 10 greetings and the people\nthey are for. Notice that the result of both `greetings` and `to` are\nmap/object structures with their own fields and that if the type has\nmultiple fields, we can select more than one field.\n\nHere is some possible data we could get returned\n\n```elixir\n%{greetings: [\n %{greeting: \"hello\", to: %{ name: \"dear reader\"}}, # english\n %{greeting: \"hallo\", to: %{ name: \"beste lezer\"}}, # dutch\n ]}\n```\n\nWhere is the magic? Typically an object type will reside in its own\ntable in the database, so this query is actually querying two tables\nin one go. In fact, given a supporting schema, you can nest queries\narbitrarily and the backend will figure out how to run them.\n\nThe fact that you can represent arbitrarily complex queries puts quite\na lot of pressure on the backend to make it all efficient. This is\nstill a work in progress at this time.","ref":"graphql.html#graphql-introduction"},{"type":"extras","title":"Absinthe Introduction - GraphQL API","doc":"Every `field` is filled by a resolver. Let's take our existing query\nand define a schema for it in Absinthe's query DSL:\n\n```elixir\ndefmodule MyApp.Schema do\n # the schema macro language\n use Absinthe.Schema.Notation\n # where we will actually resolve the fields\n alias MyApp.Resolver\n\n # Our user object is pretty simple, just a name\n object :user do\n field :name, non_null(:string)\n end\n\n # This one is slightly more complicated, we have that nested `to`\n object :greeting do\n # the easy one\n field :greeting, non_null(:string)\n # the hard one. `edge` is the term for when we cross an object boundary.\n field :to, non_null(:user), do: resolve(&Resolver.to_edge/3)\n end\n\n # something to put our top level queries in, because they're just fields too!\n object :queries do\n field :greetings, non_null(list_of(non_null(:string))) do\n arg :limit, :integer # optional\n resolve &Resolver.greetings/2 # we need to manually process this one\n end\n end\n\nend\n```\n\nThere are a couple of interesting things about this:\n\n- Sprinklings of `not_null` to require that values be present (if you\n don't return them, absinthe will get upset).\n- Only two fields have explicit resolvers. Anything else will default\n to a map key lookup (which is more often than not what you want).\n- `greeting.to_edge` has a `/3` resolver and `queries.greetings` a\n `/2` resolver.\n\nTo understand the last one (and partially the middle one), we must\nunderstand how resolution works and what a parent is. The best way of\ndoing that is probably to look at the resolver code:\n\n```elixir\ndefmodule MyApp.Resolver do\n\n # For purposes of this, we will just fake the data out\n defp greetings_data() do\n [ %{greeting: \"hello\", to: %{ name: \"dear reader\"}}, # english\n %{greeting: \"hallo\", to: %{ name: \"beste lezer\"}}, # dutch\n ]\n end\n\n # the /2 resolver takes only arguments (which in this case is just limit)\n # and an info (which we'll explain later)\n def greetings(%{limit: limit}, _info) when is_integer(limit) and limit > 0 do\n {:ok, Enum.take(greetings_data(), limit)} # absinthe expects an ok/error tuple\n end\n def greetings(_args, _info), do: {:ok, greetings_data()} # no limit\n\n # the /3 resolver takes an additional parent argument in first position.\n # `parent` here will be the `greeting` we are resolving `to` for.\n def to_edge(parent, args, info), do: Map.get(parent, :to)\n\nend\n```\n\nThe keen-eyed amongst you may have noticed I said the default resolver\nis a map lookup and our `to_edge/3` is a map lookup too, so\ntechnically we didn't need to write it. But then you wouldn't have an\nexample of a `/3` resolver! In most of the app, these will be querying\nfrom the database, not looking up in a constant.\n\nSo for every field, a resolver function is run. It defaults to a map\nlookup, but you can override it with `resolve/1`. It may or may not\nhave arguments. And all absinthe resolvers return an ok/error tuple.","ref":"graphql.html#absinthe-introduction"},{"type":"extras","title":"Patterns - GraphQL API","doc":"","ref":"graphql.html#patterns"},{"type":"extras","title":"Message Rewrite Facility","doc":"# Message Rewrite Facility\n\n**WARNING: Due to how this app currently handles its configuration, MRF is only usable if you're building your own docker image.**\n\nThe Message Rewrite Facility (MRF) is a subsystem that is implemented as a series of hooks that allows the administrator to rewrite or discard messages.\n\nPossible uses include:\n\n- marking incoming messages with media from a given account or instance as sensitive\n- rejecting messages from a specific instance\n- rejecting reports (flags) from a specific instance\n- removing/unlisting messages from the public timelines\n- removing media from messages\n- sending only public messages to a specific instance\n\nThe MRF provides user-configurable policies. The default policy is `NoOpPolicy`, which disables the MRF functionality. Bonfire also includes an easy to use policy called `SimplePolicy` which maps messages matching certain pre-defined criterion to actions built into the policy module.\nIt is possible to use multiple, active MRF policies at the same time.","ref":"mrf.html"},{"type":"extras","title":"Using `SimplePolicy` - Message Rewrite Facility","doc":"`SimplePolicy` is capable of handling most common admin tasks.\n\nTo use `SimplePolicy`, you must enable it. Do so by adding the following to your `:instance` config object, so that it looks like this:\n\n```\nconfig :bonfire, :instance,\n [...]\n rewrite_policy: ActivityPub.MRF.SimplePolicy\n```\n\nOnce `SimplePolicy` is enabled, you can configure various groups in the `:mrf_simple` config object. These groups are:\n\n- `media_removal`: Servers in this group will have media stripped from incoming messages.\n- `media_nsfw`: Servers in this group will have the #nsfw tag and sensitive setting injected into incoming messages which contain media.\n- `reject`: Servers in this group will have their messages rejected.\n- `report_removal`: Servers in this group will have their reports (flags) rejected.\n\nServers should be configured as lists.\n\n#","ref":"mrf.html#using-simplepolicy"},{"type":"extras","title":"Example - Message Rewrite Facility","doc":"This example will enable `SimplePolicy`, block media from `illegalporn.biz`, mark media as NSFW from `porn.biz` and `porn.business`, reject messages from `spam.com` and block reports (flags) from `troll.mob`:\n\n```\nconfig :activity_pub, :instance,\n rewrite_policy: [ActivityPub.MRF.SimplePolicy]\n\nconfig :activity_pub, :mrf_simple,\n media_removal: [\"illegalporn.biz\"],\n media_nsfw: [\"porn.biz\", \"porn.business\"],\n reject: [\"spam.com\"],\n report_removal: [\"troll.mob\"]\n\n```\n\n#","ref":"mrf.html#example"},{"type":"extras","title":"Use with Care - Message Rewrite Facility","doc":"The effects of MRF policies can be very drastic. It is important to use this functionality carefully. Always try to talk to an admin before writing an MRF policy concerning their instance.","ref":"mrf.html#use-with-care"},{"type":"extras","title":"Writing your own MRF Policy - Message Rewrite Facility","doc":"As discussed above, the MRF system is a modular system that supports pluggable policies. This means that an admin may write a custom MRF policy in Elixir or any other language that runs on the Erlang VM, by specifying the module name in the `rewrite_policy` config setting.\n\nFor example, here is a sample policy module which rewrites all messages to \"new message content\":\n\n```elixir\n# This is a sample MRF policy which rewrites all Notes to have \"new message\n# content.\"\ndefmodule Site.RewritePolicy do\n @behavior ActivityPub.MRF\n\n # Catch messages which contain Note objects with actual data to filter.\n # Capture the object as `object`, the message content as `content` and the\n # entire activity itself as `activity`.\n @impl true\n def filter(%{\"type\" => \"Create\", \"object\" => %{\"type\" => \"Note\", \"content\" => content} = object} = message)\n when is_binary(content) do\n # Subject / CW is stored as summary instead of `name` like other AS2 objects\n # because of Mastodon doing it that way.\n summary = object[\"summary\"]\n\n # edits go here.\n content = \"new message content\"\n\n # Assemble the mutated object.\n object =\n object\n |> Map.put(\"content\", content)\n |> Map.put(\"summary\", summary)\n\n # Assemble the mutated activity.\n {:ok, Map.put(activity, \"object\", object)}\n end\n\n # Let all other messages through without modifying them.\n @impl true\n def filter(message), do: {:ok, message}\nend\n```\n\nIf you save this file as `lib/site/mrf/rewrite_policy.ex`, it will be included when you next rebuild Bonfire. You can enable it in the configuration like so:\n\n```\nconfig :activity_pub, :instance,\n rewrite_policy: [\n ActivityPub.MRF.SimplePolicy,\n Site.RewritePolicy\n ]\n```","ref":"mrf.html#writing-your-own-mrf-policy"},{"type":"extras","title":"Bonfire Changelog","doc":"# Bonfire Changelog\n\n## [0.3.5-beta (2022-09-23)]\n#","ref":"changelog.html"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Coordination MVP [#445](https://github.com/bonfire-networks/bonfire-app/issues/445) by mayel & ivanminutillo\n- UI to enable/disable extensions in settings [#448](https://github.com/bonfire-networks/bonfire-app/issues/448) \n- Static page generator [#444](https://github.com/bonfire-networks/bonfire-app/issues/444) \n- Publish creation of sub-topic in the topic's feed [#439](https://github.com/bonfire-networks/bonfire-app/issues/439) by mayel\n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- Refactor navs/sidebars to use dynamic navigation & widgets provided by extensions [#447](https://github.com/bonfire-networks/bonfire-app/issues/447) \n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Other - Bonfire Changelog","doc":"- When I reply to a task, the activity in the feed does not show the parent activity [#449](https://github.com/bonfire-networks/bonfire-app/issues/449) \n- Use same composer for create post / topic / create a new list / create task\n\n## [0.3.4-beta.8 (2022-08-26)]\n#","ref":"changelog.html#other"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Remember position in timeline [#392](https://github.com/bonfire-networks/bonfire-app/issues/392) by mayel\n- Should be able to click on a notification to see the related activity [#412](https://github.com/bonfire-networks/bonfire-app/issues/412) by mayel\n- Actions when someone clicks on follow/boost/like/reply buttons on a profile or feed while logged out [#441](https://github.com/bonfire-networks/bonfire-app/issues/441) \n- Combine duplicate posts [#396](https://github.com/bonfire-networks/bonfire-app/issues/396) by mayel\n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- User preferences missing a consistent UX structure [#430](https://github.com/bonfire-networks/bonfire-app/issues/430) \n- Bug: pop-ups from compose box are hidden if close to edge [#394](https://github.com/bonfire-networks/bonfire-app/issues/394) \n- reset the CW field after posting [#378](https://github.com/bonfire-networks/bonfire-app/issues/378) \n- On mobile, there should be an obvious way to reply to a single post when viewing it by itself [#371](https://github.com/bonfire-networks/bonfire-app/issues/371) \n- Alerts and feedback messages need to adopt a solid pattern [#305](https://github.com/bonfire-networks/bonfire-app/issues/305) \n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Fixed - Bonfire Changelog","doc":"- i can't see what i'm typing past a certain amount of text. Like rivht now i dont' see what i'm typing. Might be some typos then^^ [#425](https://github.com/bonfire-networks/bonfire-app/issues/425) \n- Bug: When you switch user it *sometimes* stays on the switch user page [#377](https://github.com/bonfire-networks/bonfire-app/issues/377) by mayel\n\n#","ref":"changelog.html#fixed"},{"type":"extras","title":"Other - Bonfire Changelog","doc":"- Make push notification system more solid [#180](https://github.com/bonfire-networks/bonfire-app/issues/180) \n- Test/fix/improve graceful degradation (usage without JS, or without a LiveView websocket, i.e. when logged out) [#365](https://github.com/bonfire-networks/bonfire-app/issues/365) by mayel\n- use @prop in Surface views/components instead of e(assigns, :prop, default) and declare defaults in props or mount/1 [#414](https://github.com/bonfire-networks/bonfire-app/issues/414) \n\n\n## [0.3.4-beta.6 (2022-08-19)]\n#","ref":"changelog.html#other"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- 3 options for smart input (sidebar, modal, floating) and improve responsive (modal on small screens) [#443](https://github.com/bonfire-networks/bonfire-app/issues/443) \n- Improve feeds async loading [#437](https://github.com/bonfire-networks/bonfire-app/issues/437) by mayel\n- Improve media/link attachments [#440](https://github.com/bonfire-networks/bonfire-app/issues/440) \n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Fixed - Bonfire Changelog","doc":"- Show and count only local users in user directory [#438](https://github.com/bonfire-networks/bonfire-app/issues/438) by mayel\n\n## [0.3.4 (2022-08-09)]\n#","ref":"changelog.html#fixed"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Define & implement granular role & permission system for instance administration and moderation [#406](https://github.com/bonfire-networks/bonfire-app/issues/406) \n\n## [0.3.3 (2022-08-02)]\n#","ref":"changelog.html#added"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Define & implement granular role & permission system for instance administration and moderation [#406](https://github.com/bonfire-networks/bonfire-app/issues/406) \n\n## [0.3.2 (2022-07-30)]\n#","ref":"changelog.html#added"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Pagination topics list & feeds within topics [#431](https://github.com/bonfire-networks/bonfire-app/issues/431) \n- Check boundaries of a topic when tagging and if allowed auto-boost the tagged object in the topic's outbox [#428](https://github.com/bonfire-networks/bonfire-app/issues/428) \n- Show followed topics on a list [#424](https://github.com/bonfire-networks/bonfire-app/issues/424) \n- Topic settings [#423](https://github.com/bonfire-networks/bonfire-app/issues/423) \n- Topic activity preview [#422](https://github.com/bonfire-networks/bonfire-app/issues/422) \n- Browse topics [#421](https://github.com/bonfire-networks/bonfire-app/issues/421) \n- Tag something (eg. post/user) with a topic at any time (depending on boundaries) [#416](https://github.com/bonfire-networks/bonfire-app/issues/416) \n- Tag a post with a topic when writing a new post (or reply) [#415](https://github.com/bonfire-networks/bonfire-app/issues/415) \n- CRUD topics [#410](https://github.com/bonfire-networks/bonfire-app/issues/410) \n- Create a users directory [#159](https://github.com/bonfire-networks/bonfire-app/issues/159) \n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- Optimise LiveView rendering [#426](https://github.com/bonfire-networks/bonfire-app/issues/426) \n- Allow us to scroll from anywhere [#391](https://github.com/bonfire-networks/bonfire-app/issues/391) \n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Other - Bonfire Changelog","doc":"- Add unique key to encircle [#248](https://github.com/bonfire-networks/bonfire-app/issues/248) \n- Database Question [#3](https://github.com/bonfire-networks/activity_pub/issues/3) \n- Being able to change activity type from the composer [#429](https://github.com/bonfire-networks/bonfire-app/issues/429) \n- use created and extra_info mixins on Category [#433](https://github.com/bonfire-networks/bonfire-app/issues/433) \n- check boundaries for edit and archive topic [#434](https://github.com/bonfire-networks/bonfire-app/issues/434)","ref":"changelog.html#other"},{"type":"extras","title":"0.3.1-beta.9 (2022-07-22) - Bonfire Changelog","doc":"#","ref":"changelog.html#0-3-1-beta-9-2022-07-22"},{"type":"extras","title":"Fixed - Bonfire Changelog","doc":"- BUG:Responsive, navigation goes under the mobile bottom tab [#420](https://github.com/bonfire-networks/bonfire-app/issues/420) by ivanminutillo","ref":"changelog.html#fixed"},{"type":"extras","title":"0.3.1-beta (2022-07-19) - Bonfire Changelog","doc":"#","ref":"changelog.html#0-3-1-beta-2022-07-19"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Circles & flexible boundaries [#223](https://github.com/bonfire-networks/bonfire-app/issues/223) by mayel & ivanminutillo\n- Compose box at the bottom of the screen as an alternative to the standard microblogging input box [#419](https://github.com/bonfire-networks/bonfire-app/issues/419) \n- \"Compact layout\" in user preferences [#418](https://github.com/bonfire-networks/bonfire-app/issues/418) \n- Fetch metadata of links included in a post and show previews (of images, videos, etc) in feeds [#314](https://github.com/bonfire-networks/bonfire-app/issues/314) \n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- Pasting images into the editor should upload them [#411](https://github.com/bonfire-networks/bonfire-app/issues/411) \n- Bug: When starting from the feed page, clicking back would exit the site [#400](https://github.com/bonfire-networks/bonfire-app/issues/400) \n- /write page was missing the boundary selector [#398](https://github.com/bonfire-networks/bonfire-app/issues/398) \n- Keep me logged in [#395](https://github.com/bonfire-networks/bonfire-app/issues/395) \n- Font size is too small in compose window [#388](https://github.com/bonfire-networks/bonfire-app/issues/388) \n- UI: moved topbar in the header to sidebar [#362](https://github.com/bonfire-networks/bonfire-app/issues/362) \n- Improved responsive UI for use on small screens\n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Fixed - Bonfire Changelog","doc":"- Bug: some notifications / live feed updates were making all other activities in the feed disappear [#383](https://github.com/bonfire-networks/bonfire-app/issues/383) by mayel\n- Bug: followed/followers pages remained empty despite having followed people [#373](https://github.com/bonfire-networks/bonfire-app/issues/373) by mayel\n- Bug: followed activity missing the person (in main feeds) [#372](https://github.com/bonfire-networks/bonfire-app/issues/372) by mayel\n- Bug: follow notification clears the home feed except for the \"new follow\" post [#366](https://github.com/bonfire-networks/bonfire-app/issues/366) by mayel\n- Bug: images attached to a post should appear in the feed [#364](https://github.com/bonfire-networks/bonfire-app/issues/364)","ref":"changelog.html#fixed"},{"type":"extras","title":"Changelog","doc":"# Changelog\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nThis project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)\n\n## [Unreleased (2022-11-19)]\n#","ref":"changelog-autogenerated.html"},{"type":"extras","title":"Added - Changelog","doc":"- Enable/disable extensions [#448](https://github.com/bonfire-networks/bonfire-app/issues/448) \n- Coordination MVP [#445](https://github.com/bonfire-networks/bonfire-app/issues/445) by mayel & ivanminutillo\n- Static page generator [#444](https://github.com/bonfire-networks/bonfire-app/issues/444) \n- Export my data [#235](https://github.com/bonfire-networks/bonfire-app/issues/235) \n- Customise bonfire without forking [#89](https://github.com/bonfire-networks/bonfire-app/issues/89) \n- Config-driven routing [#88](https://github.com/bonfire-networks/bonfire-app/issues/88) \n\n#","ref":"changelog-autogenerated.html#added"},{"type":"extras","title":"Changed - Changelog","doc":"- Refactor navs/sidebars to use dynamic navigation & widgets provided by extensions [#447](https://github.com/bonfire-networks/bonfire-app/issues/447) \n- LivePush security - efficient version [#234](https://github.com/bonfire-networks/bonfire-app/issues/234) \n- More efficient (batched) insertion of associated data [#233](https://github.com/bonfire-networks/bonfire-app/issues/233) \n- Beta: the great renaming/reorg, a stable API? [#232](https://github.com/bonfire-networks/bonfire-app/issues/232) \n- Improve feeds performance based on benchmark [#226](https://github.com/bonfire-networks/bonfire-app/issues/226) \n\n#","ref":"changelog-autogenerated.html#changed"},{"type":"extras","title":"Other - Changelog","doc":"- UI for federation configuration [#39](https://github.com/bonfire-networks/bonfire-app/issues/39) \n- Publish creation of sub-topic in the topic's feed [#439](https://github.com/bonfire-networks/bonfire-app/issues/439) by mayel\n- When I reply to a task, the activity in the feed does not show the parent activity [#449](https://github.com/bonfire-networks/bonfire-app/issues/449) \n- Feature Proposal: Use prefers-color-scheme [#451](https://github.com/bonfire-networks/bonfire-app/issues/451)","ref":"changelog-autogenerated.html#other"},{"type":"extras","title":"Bonfire Classic","doc":"# Bonfire Classic\n\nThis app is part of the [Bonfire](https://bonfirenetworks.org/) ecosystem and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places","ref":"classic.html"},{"type":"extras","title":"More information - Bonfire Classic","doc":"See the [main docs](../../README.md).","ref":"classic.html#more-information"},{"type":"extras","title":"Bonfire Community","doc":"# Bonfire Community \n\nThis app is a flavour of [Bonfire](https://bonfirenetworks.org/) and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.UI.Groups](https://github.com/bonfire-ecosystem/bonfire_ui_groups) - groups\n- [Bonfire.UI.Topics](https://github.com/bonfire-ecosystem/bonfire_ui_topics) - topics","ref":"community.html"},{"type":"extras","title":"More information - Bonfire Community","doc":"See the [main docs](../../README.md).","ref":"community.html#more-information"},{"type":"extras","title":"Bonfire Cooperation","doc":"# Bonfire Cooperation \n\nThis app is a flavour of [Bonfire](https://bonfirenetworks.org/) and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places\n- [Bonfire.Quantify](https://github.com/bonfire-ecosystem/bonfire_quantify) - units & measures\n- [Bonfire.ValueFlows](https://github.com/bonfire-ecosystem/bonfire_valueflows) - economic activities with ValueFlows\n- [Bonfire.ValueFlows.Observe](https://github.com/bonfire-ecosystem/bonfire_valueflows_observe) - observation of economic resources\n- [Bonfire.API.GraphQL](https://github.com/bonfire-ecosystem/bonfire_api_graphql) - a GraphQL client API\n- [Bonfire.UI.ValueFlows](https://github.com/bonfire-networks/bonfire_ui_valueflows) - reusable frontend components for economic activities \n- [Bonfire.UI.Coordination](https://github.com/bonfire-networks/bonfire_ui_valueflows) - basic coordination UI for projects and communities\n- [Bonfire.Kanban](https://github.com/bonfire-networks/bonfire_breadpub) - coordination tools with drag-and-drop card UI\n- [Bonfire.Breadpub](https://github.com/bonfire-networks/bonfire_breadpub) - needs & offers for mutual aid","ref":"cooperation.html"},{"type":"extras","title":"More information - Bonfire Cooperation","doc":"See the [main docs](../../README.md).","ref":"cooperation.html#more-information"},{"type":"extras","title":"Haha Academy","doc":"# Haha Academy\n\nThis app is part of the [Bonfire](https://bonfirenetworks.org/) ecosystem and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places","ref":"haha.html"},{"type":"extras","title":"More information - Haha Academy","doc":"See the [main docs](../../README.md).","ref":"haha.html#more-information"},{"type":"extras","title":"Reflow","doc":"# Reflow\n\nThis app is part of the [Bonfire](https://bonfirenetworks.org/) and [ValueFlows](http://valueflo.ws/) ecosystems and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places\n- [Bonfire.Quantify](https://github.com/bonfire-ecosystem/bonfire_quantify) - units & measures\n- [Bonfire.ValueFlows](https://github.com/bonfire-ecosystem/bonfire_valueflows) - economic activities with ValueFlows\n- [Bonfire.ValueFlows.Observe](https://github.com/bonfire-ecosystem/bonfire_valueflows_observe) - observation of economic resources\n- [Bonfire.API.GraphQL](https://github.com/bonfire-ecosystem/bonfire_api_graphql) - a GraphQL client API\n- [Bonfire.UI.ValueFlows](https://github.com/bonfire-networks/bonfire_ui_valueflows) - reusable frontend components for economic activities \n- [Bonfire.UI.Reflow](https://github.com/bonfire-networks/bonfire_ui_reflow) - frontend for the Reflow project","ref":"reflow.html"},{"type":"extras","title":"More information - Reflow","doc":"See the [main docs](../../README.md).","ref":"reflow.html#more-information"},{"type":"extras","title":"Upcycle","doc":"# Upcycle\n\nThis app is a flavour of [Bonfire](https://bonfirenetworks.org/) and bundles the following extensions:\n\n- [Bonfire:Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire:Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire:Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire:UI:Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire:Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire:Federate:ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire:Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire:Classify\n- [Bonfire:Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire:Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places\n- [Bonfire:Quantify](https://github.com/bonfire-ecosystem/bonfire_quantify) - units & measures\n- [Bonfire:ValueFlows](https://github.com/bonfire-ecosystem/bonfire_valueflows) - economic activities with ValueFlows\n- [Bonfire:ValueFlows:Observe](https://github.com/bonfire-ecosystem/bonfire_valueflows_observe) - observation of economic resources\n- [Bonfire:API:GraphQL](https://github.com/bonfire-ecosystem/bonfire_api_graphql) - a GraphQL client API\n- [Bonfire:UI:ValueFlows](https://github.com/bonfire-networks/bonfire_ui_valueflows) - reusable frontend components for economic activities \n- [Bonfire:UI:Coordination](https://github.com/bonfire-networks/bonfire_ui_valueflows) - basic coordination UI for projects and communities\n- [Bonfire:Kanban](https://github.com/bonfire-networks/bonfire_breadpub) - coordination tools with drag-and-drop card UI\n- [Bonfire:Breadpub](https://github.com/bonfire-networks/bonfire_breadpub) - needs & offers for mutual aid\n- [Bonfire:Files](https://github.com/bonfire-networks/bonfire_files) - file management for bonfire apps\n- [Bonfire:Data:SharedUser](https://github.com/bonfire-networks/bonfire_data_shared_user) - database models for shared users in the bonfire ecosystem\n- [Bonfire:Upcycle](https://gitlab.com/msoe.edu-public/sdl/y22sdl/upcycle/bonfire_upcycle/-/tree/master) - Upcycle UI","ref":"upcycle.html"},{"type":"extras","title":"More information - Upcycle","doc":"See the [main docs](../../README.md).","ref":"upcycle.html#more-information"},{"type":"extras","title":"Classic","doc":"| Package | License | Version | Link |\n|------------------------------|------------------------------------|------------|------------------------------------------------------------------|\n| absinthe | MIT | 1.7.0 | https://hex.pm/packages/absinthe |\n| absinthe_error_payload | BSD-3; Unrecognized license | 1.1.4 | https://hex.pm/packages/absinthe_error_payload |\n| absinthe_phoenix | MIT | 2.0.2 | https://hex.pm/packages/absinthe_phoenix |\n| absinthe_plug | MIT | 1.5.8 | https://hex.pm/packages/absinthe_plug |\n| activity_pub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/activity_pub |\n| argon2_elixir | Apache 2.0 | ~> 3.0 | https://hex.pm/packages/argon2_elixir |\n| arrows | Undefined | 0.1.0 | https://github.com/bonfire-networks/arrows |\n| bamboo | MIT | 2.2.0 | https://hex.pm/packages/bamboo |\n| bamboo_smtp | MIT | 4.2.1 | https://hex.pm/packages/bamboo_smtp |\n| benchee | MIT | 1.1.0 | https://hex.pm/packages/benchee |\n| benchee_html | MIT | 1.0.0 | https://hex.pm/packages/benchee_html |\n| benchee_json | MIT | 1.0.0 | https://hex.pm/packages/benchee_json |\n| bonfire_api_graphql | MPL 2.0 | | https://github.com/bonfire-networks/bonfire_api_graphql |\n| bonfire_boundaries | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_boundaries |\n| bonfire_classify | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_classify |\n| bonfire_common | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_common |\n| bonfire_data_access_control | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_access_control |\n| bonfire_data_activity_pub | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_activity_pub |\n| bonfire_data_edges | Undefined | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_edges |\n| bonfire_data_identity | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_identity |\n| bonfire_data_shared_user | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_shared_user |\n| bonfire_data_social | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_social |\n| bonfire_ecto | Undefined | 0.1.0 | https://github.com/bonfire-networks/bonfire_ecto |\n| bonfire_editor_ck | MIT | 0.1.0 | https://github.com/bonfire-networks/bonfire_editor_ck |\n| bonfire_editor_quill | AGPL v3 | 0.0.1 | https://github.com/bonfire-networks/bonfire_editor_quill |\n| bonfire_epics | Apache 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_epics |\n| bonfire_fail | MPL 2.0 | | https://github.com/bonfire-networks/bonfire_fail |\n| bonfire_federate_activitypub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_federate_activitypub |\n| bonfire_files | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_files |\n| bonfire_invite_links | AGPL v3 | 0.0.1 | https://github.com/bonfire-networks/bonfire_invite_links |\n| bonfire_mailer | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_mailer |\n| bonfire_me | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_me |\n| bonfire_search | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_search |\n| bonfire_social | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_social |\n| bonfire_tag | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_tag |\n| bonfire_ui_common | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_common |\n| bonfire_ui_me | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_me |\n| bonfire_ui_social | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_social |\n| cachex | MIT | 3.4.0 | https://hex.pm/packages/cachex |\n| certifi | BSD | 2.9.0 | https://hex.pm/packages/certifi |\n| cldr_utils | Apache 2.0 | 2.17.2 | https://hex.pm/packages/cldr_utils |\n| combine | MIT | 0.10.0 | https://hex.pm/packages/combine |\n| comeonin | BSD-3-Clause; Unrecognized license | 5.3.3 | https://hex.pm/packages/comeonin |\n| connection | Apache 2.0 | 1.1.0 | https://hex.pm/packages/connection |\n| cowboy | ISC | 2.9.0 | https://hex.pm/packages/cowboy |\n| cowboy_telemetry | Apache 2.0 | 0.4.0 | https://hex.pm/packages/cowboy_telemetry |\n| cowlib | ISC | 2.11.0 | https://hex.pm/packages/cowlib |\n| dataloader | MIT | 1.0.10 | https://hex.pm/packages/dataloader |\n| db_connection | Apache 2.0 | 2.4.2 | https://hex.pm/packages/db_connection |\n| decimal | Apache 2.0 | 2.0.0 | https://hex.pm/packages/decimal |\n| deep_merge | MIT | 1.0.0 | https://hex.pm/packages/deep_merge |\n| earmark | Apache 2.0 | 1.4.28 | https://hex.pm/packages/earmark |\n| earmark_parser | Apache 2.0 | 1.4.26 | https://hex.pm/packages/earmark_parser |\n| ecto | Apache 2.0 | 3.8.4 | https://hex.pm/packages/ecto |\n| ecto_erd | Apache 2.0 | 0.4.2 | https://hex.pm/packages/ecto_erd |\n| ecto_materialized_path | Apache 2.0 | 0.3.0 | https://github.com/bonfire-networks/ecto_materialized_path |\n| ecto_psql_extras | MIT | 0.7.4 | https://hex.pm/packages/ecto_psql_extras |\n| ecto_shorts | MIT | 1.1.1 | https://github.com/bonfire-networks/ecto_shorts |\n| ecto_sparkles | Undefined | 0.1.0 | https://github.com/bonfire-networks/ecto_sparkles |\n| ecto_sql | Apache 2.0 | 3.8.3 | https://hex.pm/packages/ecto_sql |\n| elixir_make | Apache 2.0 | ~> 0.6 | https://hex.pm/packages/elixir_make |\n| email_checker | MIT | 0.2.4 | https://hex.pm/packages/email_checker |\n| emote | Undefined | 0.1.0 | https://github.com/bonfire-networks/emote |\n| eqrcode | MIT | 0.1.10 | https://hex.pm/packages/eqrcode |\n| eternal | MIT | 1.2.2 | https://hex.pm/packages/eternal |\n| ex_aws | MIT | 2.3.2 | https://hex.pm/packages/ex_aws |\n| ex_aws_s3 | MIT | 2.3.2 | https://hex.pm/packages/ex_aws_s3 |\n| ex_cldr | Apache 2.0 | 2.30.0 | https://hex.pm/packages/ex_cldr |\n| ex_cldr_languages | Apache 2.0 | 0.3.3 | https://hex.pm/packages/ex_cldr_languages |\n| ex_cldr_plugs | Apache 2.0 | 1.0.0 | https://hex.pm/packages/ex_cldr_plugs |\n| ex_doc | Apache 2.0 | 0.28.4 | https://hex.pm/packages/ex_doc |\n| ex_machina | MIT | ~> 2.4 | https://hex.pm/packages/ex_machina |\n| ex_ulid | Apache 2.0 | 0.1.0 | https://hex.pm/packages/ex_ulid |\n| ex_unit_notifier | MIT | ~> 1.0 | https://hex.pm/packages/ex_unit_notifier |\n| exsync | BSD 3-Clause; Unrecognized license | 0.2.4 | https://hex.pm/packages/exsync |\n| faker | MIT | 0.17.0 | https://hex.pm/packages/faker |\n| fast_ngram | MIT | 1.2.0 | https://hex.pm/packages/fast_ngram |\n| fetch_favicon | MIT | 0.1.3 | https://hex.pm/packages/fetch_favicon |\n| file_info | MIT | 0.0.4 | https://hex.pm/packages/file_info |\n| file_system | WTFPL | 0.2.10 | https://hex.pm/packages/file_system |\n| flame_on | MIT | 0.5.0 | https://hex.pm/packages/flame_on |\n| exto | Apache 2.0 | 0.2.3 | https://github.com/bonfire-networks/exto |\n| floki | MIT | 0.32.1 | https://hex.pm/packages/floki |\n| gen_smtp | BSD-2-Clause; Unrecognized license | 1.2.0 | https://hex.pm/packages/gen_smtp |\n| geo | MIT | 3.4.3 | https://hex.pm/packages/geo |\n| gettext | Apache 2.0 | 0.19.1 | https://hex.pm/packages/gettext |\n| grumble | Apache 2.0 | ~> 0.1.3 | https://hex.pm/packages/grumble |\n| hackney | Apache 2.0 | 1.18.1 | https://hex.pm/packages/hackney |\n| html_entities | MIT | 0.5.2 | https://hex.pm/packages/html_entities |\n| html_sanitize_ex | MIT | 1.4.2 | https://hex.pm/packages/html_sanitize_ex |\n| http_signatures | GPL v3 | 0.1.0 | https://git.pleroma.social/pleroma/http_signatures.git |\n| httpoison | MIT | 1.8.1 | https://hex.pm/packages/httpoison |\n| idna | MIT | 6.1.1 | https://hex.pm/packages/idna |\n| inflex | Apache 2.0 | 2.1.0 | https://hex.pm/packages/inflex |\n| jason | Apache 2.0 | 1.3.0 | https://hex.pm/packages/jason |\n| jumper | MIT | 1.0.1 | https://hex.pm/packages/jumper |\n| libgraph | MIT | 0.13.3 | https://hex.pm/packages/libgraph |\n| licensir | MIT | 0.7.0 | https://github.com/bonfire-networks/licensir |\n| linkify | MIT | 0.2.0 | https://github.com/bonfire-networks/linkify |\n| makeup | BSD; Unrecognized license | 1.1.0 | https://hex.pm/packages/makeup |\n| makeup_diff | MIT | 0.1.0 | https://hex.pm/packages/makeup_diff |\n| makeup_eex | BSD; Unrecognized license | 0.1.1 | https://hex.pm/packages/makeup_eex |\n| makeup_elixir | BSD; Unrecognized license | 0.16.0 | https://hex.pm/packages/makeup_elixir |\n| makeup_erlang | BSD | 0.1.1 | https://hex.pm/packages/makeup_erlang |\n| makeup_graphql | BSD | 0.1.2 | https://hex.pm/packages/makeup_graphql |\n| makeup_html | MIT | 0.1.0 | https://hex.pm/packages/makeup_html |\n| makeup_js | MIT | 0.1.0 | https://hex.pm/packages/makeup_js |\n| makeup_sql | BSD | 0.1.0 | https://hex.pm/packages/makeup_sql |\n| meck | Apache 2.0 | 0.9.2 | https://hex.pm/packages/meck |\n| metrics | BSD | 1.0.1 | https://hex.pm/packages/metrics |\n| mime | Apache 2.0 | 1.6.0 | https://hex.pm/packages/mime |\n| mimerl | MIT | 1.2.0 | https://hex.pm/packages/mimerl |\n| mimetype_parser | MIT | 0.1.3 | https://hex.pm/packages/mimetype_parser |\n| mix_test_interactive | MIT | ~> 1.2 | https://hex.pm/packages/mix_test_interactive |\n| mix_test_watch | MIT | ~> 1.0 | https://hex.pm/packages/mix_test_watch |\n| mix_unused | MIT; Unrecognized license | 0.4.0 | https://hex.pm/packages/mix_unused |\n| mochiweb | MIT | 2.22.0 | https://hex.pm/packages/mochiweb |\n| mock | MIT | ~> 0.3 | https://hex.pm/packages/mock |\n| mogrify | MIT | 0.9.1 | https://hex.pm/packages/mogrify |\n| mox | Apache 2.0 | ~> 1.0 | https://hex.pm/packages/mox |\n| nimble_parsec | Apache 2.0 | 1.2.3 | https://hex.pm/packages/nimble_parsec |\n| nimble_totp | Apache 2.0 | 0.2.0 | https://hex.pm/packages/nimble_totp |\n| nodeinfo | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/nodeinfo |\n| oban | Apache 2.0 | 2.8.0 | https://hex.pm/packages/oban |\n| paginator | MIT | 1.0.4 | https://github.com/bonfire-networks/paginator |\n| pane | MIT | 0.4.1 | https://hex.pm/packages/pane |\n| parse_trans | Apache 2.0 | 3.3.1 | https://hex.pm/packages/parse_trans |\n| pbkdf2_elixir | BSD-3-Clause; Unrecognized license | 2.0.0 | https://hex.pm/packages/pbkdf2_elixir |\n| periscope | Apache 2.0 | 0.4.6 | https://hex.pm/packages/periscope |\n| phoenix | MIT | 1.6.10 | https://hex.pm/packages/phoenix |\n| phoenix_ecto | MIT | 4.4.0 | https://hex.pm/packages/phoenix_ecto |\n| phoenix_gon | MIT | 0.4.1 | https://github.com/bonfire-networks/phoenix_gon |\n| phoenix_html | MIT | 3.2.0 | https://hex.pm/packages/phoenix_html |\n| phoenix_live_dashboard | MIT | 0.6.5 | https://hex.pm/packages/phoenix_live_dashboard |\n| phoenix_live_reload | MIT | 1.3.3 | https://hex.pm/packages/phoenix_live_reload |\n| phoenix_live_view | MIT | 0.17.10 | https://hex.pm/packages/phoenix_live_view |\n| phoenix_pubsub | MIT | 2.1.1 | https://hex.pm/packages/phoenix_pubsub |\n| phoenix_view | MIT | 1.1.2 | https://hex.pm/packages/phoenix_view |\n| plug | Apache 2.0 | 1.13.6 | https://hex.pm/packages/plug |\n| plug_cowboy | Apache 2.0 | 2.5.2 | https://hex.pm/packages/plug_cowboy |\n| plug_crypto | Apache 2.0 | 1.2.2 | https://hex.pm/packages/plug_crypto |\n| pointers | Apache 2.0 | 0.6.0 | https://github.com/bonfire-networks/pointers |\n| needle_ulid | MIT | 0.2.2 | https://github.com/bonfire-networks/needle_ulid |\n| postgrex | Apache 2.0 | 0.16.3 | https://hex.pm/packages/postgrex |\n| pseudo_gettext | Undefined | 0.1.0 | https://github.com/tmbb/pseudo_gettext |\n| ranch | ISC | 1.8.0 | https://hex.pm/packages/ranch |\n| recase | MIT | 0.7.0 | https://hex.pm/packages/recase |\n| redirect | Apache 2.0 | 0.3.0 | https://hex.pm/packages/redirect |\n| scribe | MIT | 0.10.0 | https://hex.pm/packages/scribe |\n| sentry | MIT | 8.0.6 | https://hex.pm/packages/sentry |\n| sleeplocks | MIT | 1.1.1 | https://hex.pm/packages/sleeplocks |\n| sobelow | Apache 2.0 | 0.11.1 | https://hex.pm/packages/sobelow |\n| solid | MIT | 0.12.0 | https://hex.pm/packages/solid |\n| sourceror | Apache 2.0 | 0.11.1 | https://hex.pm/packages/sourceror |\n| ssl_verify_fun | MIT | 1.1.6 | https://hex.pm/packages/ssl_verify_fun |\n| statistex | MIT | 1.0.0 | https://hex.pm/packages/statistex |\n| surface | MIT | 0.7.4 | https://hex.pm/packages/surface |\n| surface_heroicons | Undefined | 0.5.3 | https://github.com/rocketinsights/surface_heroicons |\n| sweet_xml | MIT | 0.7.3 | https://hex.pm/packages/sweet_xml |\n| table_rex | MIT | 3.1.1 | https://hex.pm/packages/table_rex |\n| telemetry | Apache 2.0 | 1.1.0 | https://hex.pm/packages/telemetry |\n| telemetry_metrics | Apache 2.0 | 0.6.1 | https://hex.pm/packages/telemetry_metrics |\n| telemetry_poller | Apache 2.0 | 1.0.0 | https://hex.pm/packages/telemetry_poller |\n| tesla | MIT | 1.4.4 | https://hex.pm/packages/tesla |\n| timex | MIT | 3.7.8 | https://hex.pm/packages/timex |\n| twinkle_star | GPL v3 | 0.1.0 | https://github.com/bonfire-networks/twinkle_star |\n| typed_struct | MIT | ~> 0.3.0 | https://hex.pm/packages/typed_struct |\n| tzdata | MIT | 1.1.1 | https://hex.pm/packages/tzdata |\n| unicode_util_compat | Apache 2.0 | 0.7.0 | https://hex.pm/packages/unicode_util_compat |\n| unsafe | MIT | 1.0.1 | https://hex.pm/packages/unsafe |\n| verbs | MIT | 0.6.1 | https://github.com/shannonwells/verbs_ex |\n| voodoo | Undefined | 0.1.0 | https://github.com/bonfire-networks/voodoo |\n| waffle | Apache 2.0 | 1.1.6 | https://hex.pm/packages/waffle |\n| wallaby | MIT | ~> 0.29.1 | https://hex.pm/packages/wallaby |\n| web_driver_client | MIT | ~> 0.2.0 | https://hex.pm/packages/web_driver_client |\n| where | Apache 2.0 | 0.1.0 | https://github.com/bonfire-networks/untangle |\n| zest | Apache 2.0 | 0.1.2 | https://hex.pm/packages/zest |\n|------------------------------|------------------------------------|------------|------------------------------------------------------------------|","ref":"deps-classic.html"},{"type":"extras","title":"Cooperation","doc":"| Package | License | Version | Link |\n|------------------------------|------------------------------------|----------|------------------------------------------------------------------|\n| absinthe | MIT | 1.7.0 | https://hex.pm/packages/absinthe |\n| absinthe_client | MIT | 2.0.0 | https://github.com/bonfire-networks/absinthe_client.git |\n| absinthe_error_payload | BSD-3; Unrecognized license | 1.1.4 | https://hex.pm/packages/absinthe_error_payload |\n| absinthe_phoenix | MIT | 2.0.2 | https://hex.pm/packages/absinthe_phoenix |\n| absinthe_plug | MIT | 1.5.8 | https://hex.pm/packages/absinthe_plug |\n| activity_pub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/activity_pub |\n| argon2_elixir | Apache 2.0 | ~> 2.4 | https://hex.pm/packages/argon2_elixir |\n| arrows | Undefined | 0.1.0 | https://github.com/bonfire-networks/arrows |\n| bamboo | MIT | 2.2.0 | https://hex.pm/packages/bamboo |\n| bamboo_smtp | MIT | 4.1.0 | https://hex.pm/packages/bamboo_smtp |\n| bonfire_api_graphql | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_api_graphql |\n| bonfire_boundaries | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_boundaries |\n| bonfire_breadpub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_breadpub |\n| bonfire_classify | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_classify |\n| bonfire_common | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_common |\n| bonfire_data_access_control | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_access_control |\n| bonfire_data_activity_pub | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_activity_pub |\n| bonfire_data_assort | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_assort |\n| bonfire_data_edges | Undefined | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_edges |\n| bonfire_data_identity | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_identity |\n| bonfire_data_shared_user | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_shared_user |\n| bonfire_data_social | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_social |\n| bonfire_editor_ck | MIT | 0.1.0 | https://github.com/bonfire-networks/bonfire_editor_ck |\n| bonfire_epics | Apache 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_epics |\n| bonfire_fail | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_fail |\n| bonfire_federate_activitypub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_federate_activitypub |\n| bonfire_files | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_files |\n| bonfire_geolocate | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_geolocate |\n| bonfire_invite_links | AGPL v3 | 0.0.1 | https://github.com/bonfire-networks/bonfire_invite_links |\n| bonfire_mailer | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_mailer |\n| bonfire_me | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_me |\n| bonfire_quantify | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_quantify |\n| bonfire_search | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_search |\n| bonfire_social | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_social |\n| bonfire_tag | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_tag |\n| bonfire_ui_coordination | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_coordination |\n| bonfire_ui_kanban | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_kanban |\n| bonfire_ui_social | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_social |\n| bonfire_ui_valueflows | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_valueflows |\n| bonfire_valueflows | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_valueflows |\n| bonfire_valueflows_observe | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_valueflows_observe |\n| bonfire_website | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_website |\n| cachex | MIT | 3.4.0 | https://hex.pm/packages/cachex |\n| certifi | BSD | 2.9.0 | https://hex.pm/packages/certifi |\n| cldr_utils | Apache 2.0 | 2.17.1 | https://hex.pm/packages/cldr_utils |\n| combine | MIT | 0.10.0 | https://hex.pm/packages/combine |\n| comeonin | BSD-3-Clause; Unrecognized license | 5.3.3 | https://hex.pm/packages/comeonin |\n| connection | Apache 2.0 | 1.1.0 | https://hex.pm/packages/connection |\n| cowboy | ISC | 2.9.0 | https://hex.pm/packages/cowboy |\n| cowboy_telemetry | Apache 2.0 | 0.4.0 | https://hex.pm/packages/cowboy_telemetry |\n| cowlib | ISC | 2.11.0 | https://hex.pm/packages/cowlib |\n| dataloader | MIT | 1.0.10 | https://hex.pm/packages/dataloader |\n| db_connection | Apache 2.0 | 2.4.1 | https://hex.pm/packages/db_connection |\n| decimal | Apache 2.0 | 2.0.0 | https://hex.pm/packages/decimal |\n| earmark | Apache 2.0 | 1.4.20 | https://hex.pm/packages/earmark |\n| earmark_parser | Apache 2.0 | 1.4.18 | https://hex.pm/packages/earmark_parser |\n| ecto | Apache 2.0 | 3.7.1 | https://hex.pm/packages/ecto |\n| ecto_erd | Apache 2.0 | 0.4.1 | https://hex.pm/packages/ecto_erd |\n| ecto_materialized_path | Apache 2.0 | 0.3.0 | https://github.com/bonfire-networks/ecto_materialized_path |\n| ecto_psql_extras | MIT | 0.7.4 | https://hex.pm/packages/ecto_psql_extras |\n| ecto_ranked | MIT | 0.5.0 | https://hex.pm/packages/ecto_ranked |\n| ecto_shorts | MIT | 1.1.1 | https://github.com/bonfire-networks/ecto_shorts |\n| ecto_sparkles | Undefined | 0.1.0 | https://github.com/bonfire-networks/ecto_sparkles |\n| ecto_sql | Apache 2.0 | 3.7.2 | https://hex.pm/packages/ecto_sql |\n| eflambe | Apache 2.0 | 0.2.2 | https://hex.pm/packages/eflambe |\n| elixir_make | Apache 2.0 | ~> 0.6 | https://hex.pm/packages/elixir_make |\n| email_checker | MIT | 0.2.4 | https://hex.pm/packages/email_checker |\n| emote | Undefined | 0.1.0 | https://github.com/bonfire-networks/emote |\n| eternal | MIT | 1.2.2 | https://hex.pm/packages/eternal |\n| ex_cldr | Apache 2.0 | 2.26.1 | https://hex.pm/packages/ex_cldr |\n| ex_doc | Apache 2.0 | 0.28.1 | https://hex.pm/packages/ex_doc |\n| ex_machina | MIT | ~> 2.4 | https://hex.pm/packages/ex_machina |\n| ex_unit_notifier | MIT | ~> 1.0 | https://hex.pm/packages/ex_unit_notifier |\n| exsync | BSD 3-Clause; Unrecognized license | 0.2.4 | https://hex.pm/packages/exsync |\n| faker | MIT | 0.17.0 | https://hex.pm/packages/faker |\n| fast_ngram | MIT | 1.2.0 | https://hex.pm/packages/fast_ngram |\n| file_info | MIT | 0.0.4 | https://hex.pm/packages/file_info |\n| file_system | WTFPL | 0.2.10 | https://hex.pm/packages/file_system |\n| flame_on | MIT | 0.2.1 | https://hex.pm/packages/flame_on |\n| exto | Apache 2.0 | 0.2.3 | https://github.com/bonfire-networks/exto |\n| floki | MIT | 0.32.0 | https://hex.pm/packages/floki |\n| gen_smtp | BSD 2-clause; Unrecognized license | 1.1.1 | https://hex.pm/packages/gen_smtp |\n| geo | MIT | 3.4.3 | https://hex.pm/packages/geo |\n| geo_postgis | MIT | 3.4.1 | https://hex.pm/packages/geo_postgis |\n| geocoder | MIT | 1.1.4 | https://hex.pm/packages/geocoder |\n| geohash | Apache 2.0 | 1.2.2 | https://hex.pm/packages/geohash |\n| gettext | Apache 2.0 | 0.19.1 | https://hex.pm/packages/gettext |\n| git_diff | MIT | 0.6.3 | https://hex.pm/packages/git_diff |\n| grumble | Apache 2.0 | ~> 0.1.3 | https://hex.pm/packages/grumble |\n| hackney | Apache 2.0 | 1.18.1 | https://hex.pm/packages/hackney |\n| html_entities | MIT | 0.5.2 | https://hex.pm/packages/html_entities |\n| html_sanitize_ex | MIT | 1.4.2 | https://hex.pm/packages/html_sanitize_ex |\n| http_signatures | GPL v3 | 0.1.0 | https://git.pleroma.social/pleroma/http_signatures.git |\n| httpoison | MIT | 1.8.0 | https://hex.pm/packages/httpoison |\n| hut | MIT | 1.3.0 | https://hex.pm/packages/hut |\n| idna | MIT | 6.1.1 | https://hex.pm/packages/idna |\n| inflex | Apache 2.0 | 2.1.0 | https://hex.pm/packages/inflex |\n| jason | Apache 2.0 | 1.3.0 | https://hex.pm/packages/jason |\n| jumper | MIT | 1.0.1 | https://hex.pm/packages/jumper |\n| licensir | MIT | 0.7.0 | https://github.com/bonfire-networks/licensir |\n| linkify | MIT | 0.2.0 | https://github.com/bonfire-networks/linkify |\n| makeup | BSD; Unrecognized license | 1.0.5 | https://hex.pm/packages/makeup |\n| makeup_elixir | BSD; Unrecognized license | 0.15.2 | https://hex.pm/packages/makeup_elixir |\n| makeup_erlang | BSD | 0.1.1 | https://hex.pm/packages/makeup_erlang |\n| mappable | New BSD | 0.2.4 | https://hex.pm/packages/mappable |\n| meck | Apache 2.0 | 0.9.2 | https://hex.pm/packages/meck |\n| metrics | BSD | 1.0.1 | https://hex.pm/packages/metrics |\n| mime | Apache 2.0 | 1.6.0 | https://hex.pm/packages/mime |\n| mimerl | MIT | 1.2.0 | https://hex.pm/packages/mimerl |\n| mimetype_parser | MIT | 0.1.3 | https://hex.pm/packages/mimetype_parser |\n| mix_test_interactive | MIT | ~> 1.0 | https://hex.pm/packages/mix_test_interactive |\n| mix_test_watch | MIT | ~> 1.0 | https://hex.pm/packages/mix_test_watch |\n| mix_unused | MIT; Unrecognized license | 0.3.0 | https://hex.pm/packages/mix_unused |\n| mochiweb | MIT | 2.22.0 | https://hex.pm/packages/mochiweb |\n| mock | MIT | ~> 0.3 | https://hex.pm/packages/mock |\n| neuron | ISC | 5.0.0 | https://hex.pm/packages/neuron |\n| nimble_parsec | Apache 2.0 | 1.2.2 | https://hex.pm/packages/nimble_parsec |\n| nodeinfo | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/nodeinfo |\n| oban | Apache 2.0 | 2.8.0 | https://hex.pm/packages/oban |\n| ok | Apache 2.0 | 2.3.0 | https://hex.pm/packages/ok |\n| paginator | MIT | 1.0.4 | https://github.com/bonfire-networks/paginator |\n| pane | MIT | 0.4.1 | https://hex.pm/packages/pane |\n| parse_trans | Apache 2.0 | 3.3.1 | https://hex.pm/packages/parse_trans |\n| pbkdf2_elixir | BSD-3-Clause; Unrecognized license | 1.4.2 | https://hex.pm/packages/pbkdf2_elixir |\n| phil_columns | MIT | 3.1.0 | https://hex.pm/packages/phil_columns |\n| phoenix | MIT | 1.6.6 | https://hex.pm/packages/phoenix |\n| phoenix_ecto | MIT | 4.4.0 | https://hex.pm/packages/phoenix_ecto |\n| phoenix_gon | MIT | 0.4.1 | https://github.com/bonfire-networks/phoenix_gon |\n| phoenix_html | MIT | 3.2.0 | https://hex.pm/packages/phoenix_html |\n| phoenix_live_dashboard | MIT | 0.6.5 | https://hex.pm/packages/phoenix_live_dashboard |\n| phoenix_live_reload | MIT | 1.3.3 | https://hex.pm/packages/phoenix_live_reload |\n| phoenix_live_view | MIT | 0.17.7 | https://hex.pm/packages/phoenix_live_view |\n| phoenix_pubsub | MIT | 2.0.0 | https://hex.pm/packages/phoenix_pubsub |\n| phoenix_view | MIT | 1.1.2 | https://hex.pm/packages/phoenix_view |\n| plug | Apache 2.0 | 1.13.3 | https://hex.pm/packages/plug |\n| plug_cowboy | Apache 2.0 | 2.5.2 | https://hex.pm/packages/plug_cowboy |\n| plug_crypto | Apache 2.0 | 1.2.2 | https://hex.pm/packages/plug_crypto |\n| pointers | Apache 2.0 | 0.6.0 | https://github.com/bonfire-networks/pointers |\n| needle_ulid | MIT | 0.2.2 | https://github.com/bonfire-networks/needle_ulid |\n| poolboy | Unlicense; Apache 2.0; ISC | 1.5.2 | https://hex.pm/packages/poolboy |\n| postgrex | Apache 2.0 | 0.16.2 | https://hex.pm/packages/postgrex |\n| ranch | ISC | 1.8.0 | https://hex.pm/packages/ranch |\n| recase | MIT | 0.7.0 | https://hex.pm/packages/recase |\n| redirect | Apache 2.0 | 0.3.0 | https://hex.pm/packages/redirect |\n| scribe | MIT | 0.10.0 | https://hex.pm/packages/scribe |\n| sentry | MIT | 8.0.6 | https://hex.pm/packages/sentry |\n| sleeplocks | MIT | 1.1.1 | https://hex.pm/packages/sleeplocks |\n| sobelow | Apache 2.0 | 0.11.1 | https://hex.pm/packages/sobelow |\n| sourceror | Apache 2.0 | 0.10.0 | https://hex.pm/packages/sourceror |\n| ssl_verify_fun | MIT | 1.1.6 | https://hex.pm/packages/ssl_verify_fun |\n| stream_data | Apache 2.0 | 0.5.0 | https://hex.pm/packages/stream_data |\n| surface | MIT | 0.7.1 | https://hex.pm/packages/surface |\n| surface_heroicons | Undefined | 0.5.3 | https://github.com/rocketinsights/surface_heroicons |\n| table_rex | MIT | 3.1.1 | https://hex.pm/packages/table_rex |\n| telemetry | Apache 2.0 | 1.0.0 | https://hex.pm/packages/telemetry |\n| telemetry_metrics | Apache 2.0 | 0.6.1 | https://hex.pm/packages/telemetry_metrics |\n| telemetry_poller | Apache 2.0 | 1.0.0 | https://hex.pm/packages/telemetry_poller |\n| tesla | MIT | 1.4.4 | https://hex.pm/packages/tesla |\n| timex | MIT | 3.7.6 | https://hex.pm/packages/timex |\n| towel | MIT | 0.2.1 | https://hex.pm/packages/towel |\n| twinkle_star | GPL v3 | 0.1.0 | https://github.com/bonfire-networks/twinkle_star |\n| typed_struct | MIT | ~> 0.2.1 | https://hex.pm/packages/typed_struct |\n| tzdata | MIT | 1.1.1 | https://hex.pm/packages/tzdata |\n| unicode_util_compat | Apache 2.0 | 0.7.0 | https://hex.pm/packages/unicode_util_compat |\n| unsafe | MIT | 1.0.1 | https://hex.pm/packages/unsafe |\n| verbs | MIT | 0.6.1 | https://github.com/shannonwells/verbs_ex |\n| voodoo | Undefined | 0.1.0 | https://github.com/bonfire-networks/voodoo |\n| waffle | Apache 2.0 | 1.1.6 | https://hex.pm/packages/waffle |\n| where | Apache 2.0 | 0.1.0 | https://github.com/bonfire-networks/untangle |\n| zest | Apache 2.0 | 0.1.2 | https://hex.pm/packages/zest |\n|------------------------------|------------------------------------|----------|------------------------------------------------------------------|","ref":"deps-cooperation.html"}],"content_type":"text/markdown"} \ No newline at end of file diff --git a/dist/search_data-B7FC5534.js b/dist/search_data-B7FC5534.js new file mode 100644 index 00000000000..216c8d71677 --- /dev/null +++ b/dist/search_data-B7FC5534.js @@ -0,0 +1 @@ +searchData={"items":[{"type":"module","title":"Bonfire.Data.AccessControl.Acl","doc":"Conceptually, a complete list of all permissions for everybody.\nIn practice, it's a partial specification, and anything not\nexplicitly granted is assumed to be denied.\n\nCan be reused to secure multiple objects, thus exists independently\nof any object.","ref":"Bonfire.Data.AccessControl.Acl.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Acl.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Acl.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Circle","doc":"","ref":"Bonfire.Data.AccessControl.Circle.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Circle.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Circle.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Controlled","doc":"An object is linked to one or more `Acl`s by the `Controlled` multimixin, which pairs an object ID with an ACL ID. Because it is a multimixin, a given object can have multiple ACLs applied. In the case of overlap, permissions are combined with `false` being prioritised.","ref":"Bonfire.Data.AccessControl.Controlled.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Controlled.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Controlled.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Encircle","doc":"","ref":"Bonfire.Data.AccessControl.Encircle.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Encircle.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Encircle.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Grant","doc":"","ref":"Bonfire.Data.AccessControl.Grant.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Grant.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Grant.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.InstanceAdmin","doc":"A mixin for superpowers","ref":"Bonfire.Data.AccessControl.InstanceAdmin.html"},{"type":"function","title":"Bonfire.Data.AccessControl.InstanceAdmin.changeset/3","doc":"","ref":"Bonfire.Data.AccessControl.InstanceAdmin.html#changeset/3"},{"type":"module","title":"Bonfire.Data.AccessControl.Stereotyped","doc":"A marker that identifies special context-dependent semantics to the system.","ref":"Bonfire.Data.AccessControl.Stereotyped.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Stereotyped.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Stereotyped.html#changeset/2"},{"type":"module","title":"Bonfire.Data.AccessControl.Verb","doc":"","ref":"Bonfire.Data.AccessControl.Verb.html"},{"type":"function","title":"Bonfire.Data.AccessControl.Verb.changeset/2","doc":"","ref":"Bonfire.Data.AccessControl.Verb.html#changeset/2"},{"type":"module","title":"Bonfire.Data.ActivityPub.Actor","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.html"},{"type":"function","title":"Bonfire.Data.ActivityPub.Actor.changeset/2","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.html#changeset/2"},{"type":"module","title":"Bonfire.Data.ActivityPub.Actor.Migration","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html"},{"type":"macro","title":"Bonfire.Data.ActivityPub.Actor.Migration.create_actor_table/0","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#create_actor_table/0"},{"type":"macro","title":"Bonfire.Data.ActivityPub.Actor.Migration.create_actor_table/1","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#create_actor_table/1"},{"type":"function","title":"Bonfire.Data.ActivityPub.Actor.Migration.drop_actor_table/0","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#drop_actor_table/0"},{"type":"macro","title":"Bonfire.Data.ActivityPub.Actor.Migration.migrate_actor/0","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#migrate_actor/0"},{"type":"macro","title":"Bonfire.Data.ActivityPub.Actor.Migration.migrate_actor/1","doc":"","ref":"Bonfire.Data.ActivityPub.Actor.Migration.html#migrate_actor/1"},{"type":"module","title":"Bonfire.Data.ActivityPub.Peer","doc":"Federated instances","ref":"Bonfire.Data.ActivityPub.Peer.html"},{"type":"function","title":"Bonfire.Data.ActivityPub.Peer.changeset/3","doc":"","ref":"Bonfire.Data.ActivityPub.Peer.html#changeset/3"},{"type":"module","title":"Bonfire.Data.ActivityPub.Peered","doc":"Federated actors or objects","ref":"Bonfire.Data.ActivityPub.Peered.html"},{"type":"function","title":"Bonfire.Data.ActivityPub.Peered.changeset/3","doc":"","ref":"Bonfire.Data.ActivityPub.Peered.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Assort.Ranked","doc":"A reusable table to link child or related items and also rank sibling items.\n\nUsage (for global ranking, otherwise you should specify scope):\n```\n{:ok, first} = Bonfire.Data.Assort.Ranked.changeset(%{item_id: \"01FGTH48ZZD08ADBHQ260KYJHW\"}) |> repo().insert\nsecond = Bonfire.Data.Assort.Ranked.changeset(%{item_id: \"01FGTH0N3YPBS5MNNAEAEVV54J\"}) |> repo().insert\n\nimport Ecto.Query\nBonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all\n\nfirst |> Bonfire.Data.Assort.Ranked.changeset(%{rank_set: :last}) |> repo().update\n\nBonfire.Data.Assort.Ranked |> order_by(:rank) |> repo().all\n```","ref":"Bonfire.Data.Assort.Ranked.html"},{"type":"function","title":"Bonfire.Data.Assort.Ranked.changeset/2","doc":"","ref":"Bonfire.Data.Assort.Ranked.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Assort.Ranked.Migration","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.create_ranked_table/0","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#create_ranked_table/0"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.create_ranked_table/1","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#create_ranked_table/1"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.create_unique_index/1","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#create_unique_index/1"},{"type":"function","title":"Bonfire.Data.Assort.Ranked.Migration.drop_ranked_table/0","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#drop_ranked_table/0"},{"type":"function","title":"Bonfire.Data.Assort.Ranked.Migration.drop_unique_index/1","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#drop_unique_index/1"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.migrate_ranked/0","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#migrate_ranked/0"},{"type":"macro","title":"Bonfire.Data.Assort.Ranked.Migration.migrate_ranked/1","doc":"","ref":"Bonfire.Data.Assort.Ranked.Migration.html#migrate_ranked/1"},{"type":"module","title":"Bonfire.Data.Edges.Edge","doc":"","ref":"Bonfire.Data.Edges.Edge.html"},{"type":"function","title":"Bonfire.Data.Edges.Edge.changeset/2","doc":"","ref":"Bonfire.Data.Edges.Edge.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Edges.EdgeTotal","doc":"","ref":"Bonfire.Data.Edges.EdgeTotal.html"},{"type":"function","title":"Bonfire.Data.Edges.EdgeTotal.changeset/2","doc":"","ref":"Bonfire.Data.Edges.EdgeTotal.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.Account","doc":"An account is an identity for authentication purposes. An account\nhas one or more credentials with which it may identify.","ref":"Bonfire.Data.Identity.Account.html"},{"type":"function","title":"Bonfire.Data.Identity.Account.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Account.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.Accounted","doc":"A mixin for an account ID, indicating ownership\n\nPrimarily used for Users.","ref":"Bonfire.Data.Identity.Accounted.html"},{"type":"function","title":"Bonfire.Data.Identity.Accounted.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Accounted.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.Alias","doc":"","ref":"Bonfire.Data.Identity.Alias.html"},{"type":"function","title":"Bonfire.Data.Identity.Alias.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Alias.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.AuthSecondFactor","doc":"A mixin that stores a second factor secret to authenticate an account.","ref":"Bonfire.Data.Identity.AuthSecondFactor.html"},{"type":"function","title":"Bonfire.Data.Identity.AuthSecondFactor.changeset/2","doc":"","ref":"Bonfire.Data.Identity.AuthSecondFactor.html#changeset/2"},{"type":"function","title":"Bonfire.Data.Identity.AuthSecondFactor.valid_totp?/2","doc":"","ref":"Bonfire.Data.Identity.AuthSecondFactor.html#valid_totp?/2"},{"type":"module","title":"Bonfire.Data.Identity.CareClosure","doc":"A recursive view of all entities taken care of by their root entities.\n\nReally, really do not query this without providing a branch_id.","ref":"Bonfire.Data.Identity.CareClosure.html"},{"type":"function","title":"Bonfire.Data.Identity.CareClosure.by_branch/1","doc":"","ref":"Bonfire.Data.Identity.CareClosure.html#by_branch/1"},{"type":"module","title":"Bonfire.Data.Identity.Caretaker","doc":"The entity responsible for something. In practice, it means that\nsomething is deleted when its caretaker is deleted.\n\nYou can think of it as being like the creator, except:\na) You can give it away.\nb) Objects can take care of arbitrary objects, such as e.g. custom\n ACLs created to permit people mentioned special permissions","ref":"Bonfire.Data.Identity.Caretaker.html"},{"type":"function","title":"Bonfire.Data.Identity.Caretaker.changeset/3","doc":"","ref":"Bonfire.Data.Identity.Caretaker.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Identity.Character","doc":"A username mixin that denies reuse of the same or similar usernames\neven when the username has been deleted.","ref":"Bonfire.Data.Identity.Character.html"},{"type":"function","title":"Bonfire.Data.Identity.Character.changeset/3","doc":"","ref":"Bonfire.Data.Identity.Character.html#changeset/3"},{"type":"function","title":"Bonfire.Data.Identity.Character.changeset_basic/2","doc":"","ref":"Bonfire.Data.Identity.Character.html#changeset_basic/2"},{"type":"function","title":"Bonfire.Data.Identity.Character.hash/1","doc":"","ref":"Bonfire.Data.Identity.Character.html#hash/1"},{"type":"function","title":"Bonfire.Data.Identity.Character.uniform/1","doc":"","ref":"Bonfire.Data.Identity.Character.html#uniform/1"},{"type":"module","title":"Bonfire.Data.Identity.Credential","doc":"A Mixin that provides a password for local login.","ref":"Bonfire.Data.Identity.Credential.html"},{"type":"function","title":"Bonfire.Data.Identity.Credential.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Credential.html#changeset/2"},{"type":"function","title":"Bonfire.Data.Identity.Credential.check_password/2","doc":"","ref":"Bonfire.Data.Identity.Credential.html#check_password/2"},{"type":"function","title":"Bonfire.Data.Identity.Credential.confirmation_changeset/2","doc":"","ref":"Bonfire.Data.Identity.Credential.html#confirmation_changeset/2"},{"type":"function","title":"Bonfire.Data.Identity.Credential.dummy_check/0","doc":"","ref":"Bonfire.Data.Identity.Credential.html#dummy_check/0"},{"type":"function","title":"Bonfire.Data.Identity.Credential.hash_password/1","doc":"","ref":"Bonfire.Data.Identity.Credential.html#hash_password/1"},{"type":"module","title":"Bonfire.Data.Identity.Credential.Migration","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html"},{"type":"macro","title":"Bonfire.Data.Identity.Credential.Migration.create_credential_table/0","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#create_credential_table/0"},{"type":"macro","title":"Bonfire.Data.Identity.Credential.Migration.create_credential_table/1","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#create_credential_table/1"},{"type":"function","title":"Bonfire.Data.Identity.Credential.Migration.drop_credential_table/0","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#drop_credential_table/0"},{"type":"macro","title":"Bonfire.Data.Identity.Credential.Migration.migrate_credential/0","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#migrate_credential/0"},{"type":"macro","title":"Bonfire.Data.Identity.Credential.Migration.migrate_credential/1","doc":"","ref":"Bonfire.Data.Identity.Credential.Migration.html#migrate_credential/1"},{"type":"module","title":"Bonfire.Data.Identity.Email","doc":"","ref":"Bonfire.Data.Identity.Email.html"},{"type":"function","title":"Bonfire.Data.Identity.Email.changeset/3","doc":"Options:\n email_regex: Regexp.t (default very minimal validation)\n must_confirm?: bool (default true)","ref":"Bonfire.Data.Identity.Email.html#changeset/3"},{"type":"function","title":"Bonfire.Data.Identity.Email.confirm/1","doc":"Changeset function. Marks the user's email as confirmed and removes\ntheir confirmation token.","ref":"Bonfire.Data.Identity.Email.html#confirm/1"},{"type":"function","title":"Bonfire.Data.Identity.Email.may_confirm?/2","doc":"","ref":"Bonfire.Data.Identity.Email.html#may_confirm?/2"},{"type":"function","title":"Bonfire.Data.Identity.Email.may_request_confirm_email?/2","doc":"Checks whether the user should be able to request a confirm email","ref":"Bonfire.Data.Identity.Email.html#may_request_confirm_email?/2"},{"type":"function","title":"Bonfire.Data.Identity.Email.put_token/1","doc":"Changeset function. Unconditionally sets the user as unconfirmed,\ngenerates a confirmation token and puts an expiry on it determined\nby the `:confirm_duration` config key (default one day).","ref":"Bonfire.Data.Identity.Email.html#put_token/1"},{"type":"function","title":"Bonfire.Data.Identity.Email.should_request_or_refresh?/2","doc":"Checks whether the user should request a new confirmation token or refresh it","ref":"Bonfire.Data.Identity.Email.html#should_request_or_refresh?/2"},{"type":"type","title":"Bonfire.Data.Identity.Email.t/0","doc":"","ref":"Bonfire.Data.Identity.Email.html#t:t/0"},{"type":"module","title":"Bonfire.Data.Identity.ExtraInfo","doc":"","ref":"Bonfire.Data.Identity.ExtraInfo.html"},{"type":"function","title":"Bonfire.Data.Identity.ExtraInfo.changeset/3","doc":"","ref":"Bonfire.Data.Identity.ExtraInfo.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Identity.Named","doc":"","ref":"Bonfire.Data.Identity.Named.html"},{"type":"function","title":"Bonfire.Data.Identity.Named.changeset/3","doc":"","ref":"Bonfire.Data.Identity.Named.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Identity.Self","doc":"","ref":"Bonfire.Data.Identity.Self.html"},{"type":"function","title":"Bonfire.Data.Identity.Self.changeset/2","doc":"","ref":"Bonfire.Data.Identity.Self.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Identity.Settings","doc":"A mixin that stores settings (of the instance, account, user, etc) as an Erlang Term (typically a map or keyword list) encoded to binary.","ref":"Bonfire.Data.Identity.Settings.html"},{"type":"function","title":"Bonfire.Data.Identity.Settings.changeset/3","doc":"","ref":"Bonfire.Data.Identity.Settings.html#changeset/3"},{"type":"module","title":"Bonfire.Data.Identity.User","doc":"A persona. A person (account) may have more than one user, but this\nis not exposed publicly (except to local instance administrators),\nso it is as if they are different people.","ref":"Bonfire.Data.Identity.User.html"},{"type":"function","title":"Bonfire.Data.Identity.User.changeset/2","doc":"","ref":"Bonfire.Data.Identity.User.html#changeset/2"},{"type":"function","title":"Bonfire.Data.Identity.User.maybe_redact/1","doc":"","ref":"Bonfire.Data.Identity.User.html#maybe_redact/1"},{"type":"module","title":"Bonfire.Data.SharedUser","doc":"A mixin for shared user personas (which multiple accounts can use)","ref":"Bonfire.Data.SharedUser.html"},{"type":"function","title":"Bonfire.Data.SharedUser.changeset/2","doc":"","ref":"Bonfire.Data.SharedUser.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.APActivity","doc":"","ref":"Bonfire.Data.Social.APActivity.html"},{"type":"function","title":"Bonfire.Data.Social.APActivity.changeset/2","doc":"","ref":"Bonfire.Data.Social.APActivity.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Activity","doc":"","ref":"Bonfire.Data.Social.Activity.html"},{"type":"function","title":"Bonfire.Data.Social.Activity.changeset/2","doc":"","ref":"Bonfire.Data.Social.Activity.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Bookmark","doc":"","ref":"Bonfire.Data.Social.Bookmark.html"},{"type":"function","title":"Bonfire.Data.Social.Bookmark.changeset/2","doc":"","ref":"Bonfire.Data.Social.Bookmark.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Boost","doc":"","ref":"Bonfire.Data.Social.Boost.html"},{"type":"function","title":"Bonfire.Data.Social.Boost.changeset/2","doc":"","ref":"Bonfire.Data.Social.Boost.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Created","doc":"","ref":"Bonfire.Data.Social.Created.html"},{"type":"function","title":"Bonfire.Data.Social.Created.changeset/2","doc":"","ref":"Bonfire.Data.Social.Created.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Feed","doc":"","ref":"Bonfire.Data.Social.Feed.html"},{"type":"function","title":"Bonfire.Data.Social.Feed.changeset/2","doc":"","ref":"Bonfire.Data.Social.Feed.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.FeedPublish","doc":"A multimixin for an activity/object appearing in a feed.\n\nA quite interesting thing about this model is that `feed`\nreferences `Pointer`, so it isn't only things of type `Feed` that it can\nappear in, they are just an obvious choice.","ref":"Bonfire.Data.Social.FeedPublish.html"},{"type":"function","title":"Bonfire.Data.Social.FeedPublish.changeset/2","doc":"","ref":"Bonfire.Data.Social.FeedPublish.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Flag","doc":"","ref":"Bonfire.Data.Social.Flag.html"},{"type":"function","title":"Bonfire.Data.Social.Flag.changeset/2","doc":"","ref":"Bonfire.Data.Social.Flag.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Follow","doc":"","ref":"Bonfire.Data.Social.Follow.html"},{"type":"function","title":"Bonfire.Data.Social.Follow.changeset/2","doc":"","ref":"Bonfire.Data.Social.Follow.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Inbox","doc":"","ref":"Bonfire.Data.Social.Inbox.html"},{"type":"function","title":"Bonfire.Data.Social.Inbox.changeset/2","doc":"","ref":"Bonfire.Data.Social.Inbox.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Like","doc":"","ref":"Bonfire.Data.Social.Like.html"},{"type":"function","title":"Bonfire.Data.Social.Like.changeset/2","doc":"","ref":"Bonfire.Data.Social.Like.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Message","doc":"","ref":"Bonfire.Data.Social.Message.html"},{"type":"function","title":"Bonfire.Data.Social.Message.changeset/2","doc":"","ref":"Bonfire.Data.Social.Message.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Pin","doc":"","ref":"Bonfire.Data.Social.Pin.html"},{"type":"function","title":"Bonfire.Data.Social.Pin.changeset/2","doc":"","ref":"Bonfire.Data.Social.Pin.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Post","doc":"","ref":"Bonfire.Data.Social.Post.html"},{"type":"function","title":"Bonfire.Data.Social.Post.changeset/2","doc":"","ref":"Bonfire.Data.Social.Post.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.PostContent","doc":"","ref":"Bonfire.Data.Social.PostContent.html"},{"type":"function","title":"Bonfire.Data.Social.PostContent.changeset/2","doc":"","ref":"Bonfire.Data.Social.PostContent.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Profile","doc":"","ref":"Bonfire.Data.Social.Profile.html"},{"type":"function","title":"Bonfire.Data.Social.Profile.changeset/2","doc":"","ref":"Bonfire.Data.Social.Profile.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Replied","doc":"","ref":"Bonfire.Data.Social.Replied.html"},{"type":"function","title":"Bonfire.Data.Social.Replied.ancestor_ids/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#ancestor_ids/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.ancestors/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#ancestors/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.arrange/2","doc":"","ref":"Bonfire.Data.Social.Replied.html#arrange/2"},{"type":"function","title":"Bonfire.Data.Social.Replied.build_child/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#build_child/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.changeset/2","doc":"","ref":"Bonfire.Data.Social.Replied.html#changeset/2"},{"type":"function","title":"Bonfire.Data.Social.Replied.children/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#children/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.depth/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#depth/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.descendants/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#descendants/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.make_child_of/2","doc":"","ref":"Bonfire.Data.Social.Replied.html#make_child_of/2"},{"type":"function","title":"Bonfire.Data.Social.Replied.parent/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#parent/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.parent_id/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#parent_id/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.path/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#path/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.path_ids/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#path_ids/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.root/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#root/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.root?/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#root?/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.root_id/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#root_id/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.siblings/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#siblings/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.subtree/1","doc":"","ref":"Bonfire.Data.Social.Replied.html#subtree/1"},{"type":"function","title":"Bonfire.Data.Social.Replied.where_depth/2","doc":"","ref":"Bonfire.Data.Social.Replied.html#where_depth/2"},{"type":"module","title":"Bonfire.Data.Social.Request","doc":"","ref":"Bonfire.Data.Social.Request.html"},{"type":"function","title":"Bonfire.Data.Social.Request.changeset/2","doc":"","ref":"Bonfire.Data.Social.Request.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Seen","doc":"Track seen/unseen (similar to read/unread, but only indicates that it was displayed in a feed or other listing for the user, not that they actually read it) status of things (usually an `Activity`)","ref":"Bonfire.Data.Social.Seen.html"},{"type":"function","title":"Bonfire.Data.Social.Seen.changeset/2","doc":"","ref":"Bonfire.Data.Social.Seen.html#changeset/2"},{"type":"module","title":"Bonfire.Data.Social.Sensitive","doc":"","ref":"Bonfire.Data.Social.Sensitive.html"},{"type":"function","title":"Bonfire.Data.Social.Sensitive.changeset/2","doc":"","ref":"Bonfire.Data.Social.Sensitive.html#changeset/2"},{"type":"module","title":"Bonfire.UI.Common","doc":"A library of common utils and helpers used across Bonfire extensions","ref":"Bonfire.UI.Common.html"},{"type":"function","title":"Bonfire.UI.Common.assign_error/3","doc":"","ref":"Bonfire.UI.Common.html#assign_error/3"},{"type":"function","title":"Bonfire.UI.Common.assign_flash/5","doc":"","ref":"Bonfire.UI.Common.html#assign_flash/5"},{"type":"function","title":"Bonfire.UI.Common.assign_generic/2","doc":"","ref":"Bonfire.UI.Common.html#assign_generic/2"},{"type":"function","title":"Bonfire.UI.Common.assign_generic/3","doc":"","ref":"Bonfire.UI.Common.html#assign_generic/3"},{"type":"function","title":"Bonfire.UI.Common.assign_generic_global/2","doc":"","ref":"Bonfire.UI.Common.html#assign_generic_global/2"},{"type":"function","title":"Bonfire.UI.Common.assign_global/2","doc":"","ref":"Bonfire.UI.Common.html#assign_global/2"},{"type":"function","title":"Bonfire.UI.Common.assign_global/3","doc":"","ref":"Bonfire.UI.Common.html#assign_global/3"},{"type":"function","title":"Bonfire.UI.Common.assigns_clean/1","doc":"","ref":"Bonfire.UI.Common.html#assigns_clean/1"},{"type":"function","title":"Bonfire.UI.Common.assigns_merge/2","doc":"","ref":"Bonfire.UI.Common.html#assigns_merge/2"},{"type":"function","title":"Bonfire.UI.Common.assigns_merge/3","doc":"","ref":"Bonfire.UI.Common.html#assigns_merge/3"},{"type":"function","title":"Bonfire.UI.Common.assigns_minimal/1","doc":"","ref":"Bonfire.UI.Common.html#assigns_minimal/1"},{"type":"function","title":"Bonfire.UI.Common.assigns_subscribe/2","doc":"","ref":"Bonfire.UI.Common.html#assigns_subscribe/2"},{"type":"function","title":"Bonfire.UI.Common.batch_update_many_async/3","doc":"","ref":"Bonfire.UI.Common.html#batch_update_many_async/3"},{"type":"function","title":"Bonfire.UI.Common.batch_update_many_async/4","doc":"","ref":"Bonfire.UI.Common.html#batch_update_many_async/4"},{"type":"function","title":"Bonfire.UI.Common.can?/4","doc":"","ref":"Bonfire.UI.Common.html#can?/4"},{"type":"function","title":"Bonfire.UI.Common.cast_public/2","doc":"Warning: this will set assigns for any/all users who subscribe to them. You want to `cast_self/2` instead if dealing with user-specific actions or private data.","ref":"Bonfire.UI.Common.html#cast_public/2"},{"type":"function","title":"Bonfire.UI.Common.cast_self/2","doc":"","ref":"Bonfire.UI.Common.html#cast_self/2"},{"type":"function","title":"Bonfire.UI.Common.copy_go/1","doc":"copies the `go` param into a query string, if any","ref":"Bonfire.UI.Common.html#copy_go/1"},{"type":"function","title":"Bonfire.UI.Common.current_url/2","doc":"","ref":"Bonfire.UI.Common.html#current_url/2"},{"type":"function","title":"Bonfire.UI.Common.current_user_or_remote_interaction/3","doc":"","ref":"Bonfire.UI.Common.html#current_user_or_remote_interaction/3"},{"type":"function","title":"Bonfire.UI.Common.go_query/1","doc":"Generate a query string adding a `go` redirection path to the URI (for redirecting somewhere after auth flows).\nIt is recommended to use `set_go_after/2` where possible instead.","ref":"Bonfire.UI.Common.html#go_query/1"},{"type":"function","title":"Bonfire.UI.Common.hero_icons_list/0","doc":"","ref":"Bonfire.UI.Common.html#hero_icons_list/0"},{"type":"macro","title":"Bonfire.UI.Common.live_aliases/5","doc":"","ref":"Bonfire.UI.Common.html#live_aliases/5"},{"type":"function","title":"Bonfire.UI.Common.live_render_component/2","doc":"Special LiveView helper function which allows loading LiveComponents in regular Phoenix views: `live_render_component(@conn, MyLiveComponent)`","ref":"Bonfire.UI.Common.html#live_render_component/2"},{"type":"function","title":"Bonfire.UI.Common.live_render_with_conn/2","doc":"","ref":"Bonfire.UI.Common.html#live_render_with_conn/2"},{"type":"function","title":"Bonfire.UI.Common.live_upload_files/3","doc":"","ref":"Bonfire.UI.Common.html#live_upload_files/3"},{"type":"function","title":"Bonfire.UI.Common.markdown/1","doc":"","ref":"Bonfire.UI.Common.html#markdown/1"},{"type":"function","title":"Bonfire.UI.Common.maybe_assign/3","doc":"","ref":"Bonfire.UI.Common.html#maybe_assign/3"},{"type":"function","title":"Bonfire.UI.Common.maybe_component/2","doc":"","ref":"Bonfire.UI.Common.html#maybe_component/2"},{"type":"function","title":"Bonfire.UI.Common.maybe_consume_uploaded_entries/3","doc":"","ref":"Bonfire.UI.Common.html#maybe_consume_uploaded_entries/3"},{"type":"function","title":"Bonfire.UI.Common.maybe_consume_uploaded_entry/3","doc":"","ref":"Bonfire.UI.Common.html#maybe_consume_uploaded_entry/3"},{"type":"function","title":"Bonfire.UI.Common.maybe_cute_gif/0","doc":"","ref":"Bonfire.UI.Common.html#maybe_cute_gif/0"},{"type":"function","title":"Bonfire.UI.Common.maybe_last_sentry_event_id/0","doc":"","ref":"Bonfire.UI.Common.html#maybe_last_sentry_event_id/0"},{"type":"function","title":"Bonfire.UI.Common.maybe_push_event/3","doc":"","ref":"Bonfire.UI.Common.html#maybe_push_event/3"},{"type":"function","title":"Bonfire.UI.Common.maybe_send_update/4","doc":"","ref":"Bonfire.UI.Common.html#maybe_send_update/4"},{"type":"function","title":"Bonfire.UI.Common.maybe_stream_insert/4","doc":"Inserts one or many items in an existing stream.\nSee `Phoenix.LiveView.stream_insert/4` for opts.","ref":"Bonfire.UI.Common.html#maybe_stream_insert/4"},{"type":"function","title":"Bonfire.UI.Common.opts_for_update_many_async/2","doc":"","ref":"Bonfire.UI.Common.html#opts_for_update_many_async/2"},{"type":"function","title":"Bonfire.UI.Common.patch_to/3","doc":"","ref":"Bonfire.UI.Common.html#patch_to/3"},{"type":"function","title":"Bonfire.UI.Common.path_fallback/2","doc":"","ref":"Bonfire.UI.Common.html#path_fallback/2"},{"type":"function","title":"Bonfire.UI.Common.redirect_to/3","doc":"","ref":"Bonfire.UI.Common.html#redirect_to/3"},{"type":"function","title":"Bonfire.UI.Common.redirect_to_previous_go/4","doc":"","ref":"Bonfire.UI.Common.html#redirect_to_previous_go/4"},{"type":"macro","title":"Bonfire.UI.Common.render_sface_or_native/0","doc":"","ref":"Bonfire.UI.Common.html#render_sface_or_native/0"},{"type":"function","title":"Bonfire.UI.Common.rich/2","doc":"","ref":"Bonfire.UI.Common.html#rich/2"},{"type":"function","title":"Bonfire.UI.Common.self_subscribe/2","doc":"Subscribe to assigns targeted at the current account/user","ref":"Bonfire.UI.Common.html#self_subscribe/2"},{"type":"function","title":"Bonfire.UI.Common.send_self/2","doc":"","ref":"Bonfire.UI.Common.html#send_self/2"},{"type":"function","title":"Bonfire.UI.Common.send_self_global/2","doc":"","ref":"Bonfire.UI.Common.html#send_self_global/2"},{"type":"function","title":"Bonfire.UI.Common.set_go_after/2","doc":"Save a `go` redirection path in the session (for redirecting somewhere after auth flows)","ref":"Bonfire.UI.Common.html#set_go_after/2"},{"type":"function","title":"Bonfire.UI.Common.templated/2","doc":"","ref":"Bonfire.UI.Common.html#templated/2"},{"type":"function","title":"Bonfire.UI.Common.templated_or_remote_markdown/2","doc":"","ref":"Bonfire.UI.Common.html#templated_or_remote_markdown/2"},{"type":"function","title":"Bonfire.UI.Common.the_object/1","doc":"","ref":"Bonfire.UI.Common.html#the_object/1"},{"type":"function","title":"Bonfire.UI.Common.undead/3","doc":"","ref":"Bonfire.UI.Common.html#undead/3"},{"type":"function","title":"Bonfire.UI.Common.undead_mount/2","doc":"Run a function and expects tuple.\nIf anything else is returned, like an error, a flash message is shown to the user.","ref":"Bonfire.UI.Common.html#undead_mount/2"},{"type":"function","title":"Bonfire.UI.Common.undead_on_mount/2","doc":"","ref":"Bonfire.UI.Common.html#undead_on_mount/2"},{"type":"function","title":"Bonfire.UI.Common.undead_params/2","doc":"","ref":"Bonfire.UI.Common.html#undead_params/2"},{"type":"function","title":"Bonfire.UI.Common.update_many_async/2","doc":"","ref":"Bonfire.UI.Common.html#update_many_async/2"},{"type":"function","title":"Bonfire.UI.Common.update_many_async/3","doc":"","ref":"Bonfire.UI.Common.html#update_many_async/3"},{"type":"module","title":"Bonfire.UI.Common.ComponentID","doc":"","ref":"Bonfire.UI.Common.ComponentID.html"},{"type":"function","title":"Bonfire.UI.Common.ComponentID.new/3","doc":"","ref":"Bonfire.UI.Common.ComponentID.html#new/3"},{"type":"function","title":"Bonfire.UI.Common.ComponentID.send_assigns/5","doc":"","ref":"Bonfire.UI.Common.ComponentID.html#send_assigns/5"},{"type":"function","title":"Bonfire.UI.Common.ComponentID.send_updates/4","doc":"","ref":"Bonfire.UI.Common.ComponentID.html#send_updates/4"},{"type":"module","title":"Bonfire.UI.Common.EndpointTemplate","doc":"","ref":"Bonfire.UI.Common.EndpointTemplate.html"},{"type":"function","title":"Bonfire.UI.Common.EndpointTemplate.session_options/0","doc":"","ref":"Bonfire.UI.Common.EndpointTemplate.html#session_options/0"},{"type":"module","title":"Bonfire.UI.Common.ErrorHelpers","doc":"Conveniences for translating and building error messages.","ref":"Bonfire.UI.Common.ErrorHelpers.html"},{"type":"function","title":"Bonfire.UI.Common.ErrorHelpers.error_tag/2","doc":"Generates tag for inlined form input errors.\n# TODO: use `Surface.Components.Form.ErrorTag` instead","ref":"Bonfire.UI.Common.ErrorHelpers.html#error_tag/2"},{"type":"function","title":"Bonfire.UI.Common.ErrorHelpers.translate_error/1","doc":"Translates an error message using gettext.","ref":"Bonfire.UI.Common.ErrorHelpers.html#translate_error/1"},{"type":"module","title":"Bonfire.UI.Common.ErrorReportingPlug","doc":"","ref":"Bonfire.UI.Common.ErrorReportingPlug.html"},{"type":"module","title":"Bonfire.UI.Common.LiveHandlers","doc":"usage examples:\n\n`phx-submit=\"Bonfire.Posts:post\"` will be routed to `Bonfire.Posts.LiveHandler.handle_event(\"post\", ...`\n\n`PubSub.broadcast(feed_id, {{Bonfire.Social.Feeds, :new_activity}, activity})` will be routed to `Bonfire.Social.Feeds.LiveHandler.handle_info({:new_activity, activity}, ...`\n\n`href=\"?Bonfire.Social.Feeds[after]= \"` will be routed to `Bonfire.Social.Feeds.LiveHandler.handle_params(%{\"after\" => cursor_after} ...`","ref":"Bonfire.UI.Common.LiveHandlers.html"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.assign_attrs/2","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#assign_attrs/2"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.handle_event/5","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#handle_event/5"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.handle_info/3","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#handle_info/3"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.handle_params/5","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#handle_params/5"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.handle_progress/5","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#handle_progress/5"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.maybe_from_json/1","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#maybe_from_json/1"},{"type":"function","title":"Bonfire.UI.Common.LiveHandlers.mod_delegate/4","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#mod_delegate/4"},{"type":"macro","title":"Bonfire.UI.Common.LiveHandlers.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.LiveHandlers.html#sigil_p/2"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs","doc":"Like a plug, but for a liveview","ref":"Bonfire.UI.Common.LivePlugs.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.maybe_send_persistent_assigns/2","doc":"","ref":"Bonfire.UI.Common.LivePlugs.html#maybe_send_persistent_assigns/2"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox","doc":"","ref":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.mount/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html#mount/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.Csrf","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Csrf.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Csrf.mount/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Csrf.html#mount/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Csrf.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Csrf.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.Helpers","doc":"Like a plug, but for a liveview","ref":"Bonfire.UI.Common.LivePlugs.Helpers.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Helpers.assign_default_params/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Helpers.html#assign_default_params/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Helpers.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Helpers.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.Locale","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.assign_put_locale/2","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#assign_put_locale/2"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.assign_put_locale/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#assign_put_locale/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.default/2","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#default/2"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.mount/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#mount/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.Locale.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.Locale.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.LivePlugs.StaticChanged","doc":"","ref":"Bonfire.UI.Common.LivePlugs.StaticChanged.html"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.StaticChanged.mount/3","doc":"","ref":"Bonfire.UI.Common.LivePlugs.StaticChanged.html#mount/3"},{"type":"function","title":"Bonfire.UI.Common.LivePlugs.StaticChanged.on_mount/4","doc":"","ref":"Bonfire.UI.Common.LivePlugs.StaticChanged.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug","doc":"","ref":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.html"},{"type":"function","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.call/2","doc":"","ref":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.html#call/2"},{"type":"function","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.init/1","doc":"","ref":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.html#init/1"},{"type":"function","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.maybe_add_index_html/2","doc":"","ref":"Bonfire.UI.Common.MaybeStaticGeneratorPlug.html#maybe_add_index_html/2"},{"type":"module","title":"Bonfire.UI.Common.MultiTenancyPlug","doc":"","ref":"Bonfire.UI.Common.MultiTenancyPlug.html"},{"type":"module","title":"Bonfire.UI.Common.MultiselectLive.LiveHandler","doc":"","ref":"Bonfire.UI.Common.MultiselectLive.LiveHandler.html"},{"type":"function","title":"Bonfire.UI.Common.MultiselectLive.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.UI.Common.MultiselectLive.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.UI.Common.MultiselectLive.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.MultiselectLive.LiveHandler.html#sigil_p/2"},{"type":"behaviour","title":"Bonfire.UI.Common.NavModule","doc":"Add items to extensions' navigation sidebar.","ref":"Bonfire.UI.Common.NavModule.html"},{"type":"function","title":"Bonfire.UI.Common.NavModule.app_modules/0","doc":"","ref":"Bonfire.UI.Common.NavModule.html#app_modules/0"},{"type":"callback","title":"Bonfire.UI.Common.NavModule.declared_nav/0","doc":"Declares a nav module, with links or nav components","ref":"Bonfire.UI.Common.NavModule.html#c:declared_nav/0"},{"type":"function","title":"Bonfire.UI.Common.NavModule.modules/0","doc":"","ref":"Bonfire.UI.Common.NavModule.html#modules/0"},{"type":"function","title":"Bonfire.UI.Common.NavModule.nav/0","doc":"Load all navs","ref":"Bonfire.UI.Common.NavModule.html#nav/0"},{"type":"function","title":"Bonfire.UI.Common.NavModule.nav/1","doc":"Get navs for an extension","ref":"Bonfire.UI.Common.NavModule.html#nav/1"},{"type":"function","title":"Bonfire.UI.Common.NavModule.nav_function_error/2","doc":"","ref":"Bonfire.UI.Common.NavModule.html#nav_function_error/2"},{"type":"module","title":"Bonfire.UI.Common.Notifications","doc":"","ref":"Bonfire.UI.Common.Notifications.html"},{"type":"function","title":"Bonfire.UI.Common.Notifications.assign_notification/2","doc":"","ref":"Bonfire.UI.Common.Notifications.html#assign_notification/2"},{"type":"function","title":"Bonfire.UI.Common.Notifications.handle_event/3","doc":"","ref":"Bonfire.UI.Common.Notifications.html#handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.Notifications.handle_info/2","doc":"","ref":"Bonfire.UI.Common.Notifications.html#handle_info/2"},{"type":"function","title":"Bonfire.UI.Common.Notifications.notify_feeds/5","doc":"","ref":"Bonfire.UI.Common.Notifications.html#notify_feeds/5"},{"type":"function","title":"Bonfire.UI.Common.Notifications.notify_me/4","doc":"","ref":"Bonfire.UI.Common.Notifications.html#notify_me/4"},{"type":"function","title":"Bonfire.UI.Common.Notifications.receive_flash/3","doc":"","ref":"Bonfire.UI.Common.Notifications.html#receive_flash/3"},{"type":"function","title":"Bonfire.UI.Common.Notifications.receive_notification/2","doc":"","ref":"Bonfire.UI.Common.Notifications.html#receive_notification/2"},{"type":"macro","title":"Bonfire.UI.Common.Notifications.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.Notifications.html#sigil_p/2"},{"type":"module","title":"Bonfire.UI.Common.PlugProtect","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html"},{"type":"function","title":"Bonfire.UI.Common.PlugProtect.allow_action/3","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html#allow_action/3"},{"type":"function","title":"Bonfire.UI.Common.PlugProtect.block_action/3","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html#block_action/3"},{"type":"function","title":"Bonfire.UI.Common.PlugProtect.call/2","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html#call/2"},{"type":"function","title":"Bonfire.UI.Common.PlugProtect.init/1","doc":"","ref":"Bonfire.UI.Common.PlugProtect.html#init/1"},{"type":"module","title":"Bonfire.UI.Common.Plugs.ActivityPub","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html"},{"type":"function","title":"Bonfire.UI.Common.Plugs.ActivityPub.call/2","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html#call/2"},{"type":"function","title":"Bonfire.UI.Common.Plugs.ActivityPub.init/1","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html#init/1"},{"type":"function","title":"Bonfire.UI.Common.Plugs.ActivityPub.maybe_redirect/1","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html#maybe_redirect/1"},{"type":"function","title":"Bonfire.UI.Common.Plugs.ActivityPub.with_headers/3","doc":"","ref":"Bonfire.UI.Common.Plugs.ActivityPub.html#with_headers/3"},{"type":"module","title":"Bonfire.UI.Common.Presence","doc":"WIP for tracking online users. Used by `PersistentLive`","ref":"Bonfire.UI.Common.Presence.html"},{"type":"function","title":"Bonfire.UI.Common.Presence.child_spec/1","doc":"","ref":"Bonfire.UI.Common.Presence.html#child_spec/1"},{"type":"function","title":"Bonfire.UI.Common.Presence.fetch/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#fetch/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.fetchers_pids/0","doc":"","ref":"Bonfire.UI.Common.Presence.html#fetchers_pids/0"},{"type":"function","title":"Bonfire.UI.Common.Presence.get_by_key/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#get_by_key/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.handle_info/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#handle_info/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.list/0","doc":"","ref":"Bonfire.UI.Common.Presence.html#list/0"},{"type":"function","title":"Bonfire.UI.Common.Presence.list/1","doc":"","ref":"Bonfire.UI.Common.Presence.html#list/1"},{"type":"function","title":"Bonfire.UI.Common.Presence.list_and_maybe_subscribe_to_presence/1","doc":"","ref":"Bonfire.UI.Common.Presence.html#list_and_maybe_subscribe_to_presence/1"},{"type":"function","title":"Bonfire.UI.Common.Presence.present!/2","doc":"Join a user to the list of those who are present","ref":"Bonfire.UI.Common.Presence.html#present!/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.present?/2","doc":"Check if a given user (or the current user) is in the list of those who are present","ref":"Bonfire.UI.Common.Presence.html#present?/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.present_meta/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#present_meta/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.track/3","doc":"","ref":"Bonfire.UI.Common.Presence.html#track/3"},{"type":"function","title":"Bonfire.UI.Common.Presence.track/4","doc":"","ref":"Bonfire.UI.Common.Presence.html#track/4"},{"type":"function","title":"Bonfire.UI.Common.Presence.untrack/2","doc":"","ref":"Bonfire.UI.Common.Presence.html#untrack/2"},{"type":"function","title":"Bonfire.UI.Common.Presence.untrack/3","doc":"","ref":"Bonfire.UI.Common.Presence.html#untrack/3"},{"type":"function","title":"Bonfire.UI.Common.Presence.update/3","doc":"","ref":"Bonfire.UI.Common.Presence.html#update/3"},{"type":"function","title":"Bonfire.UI.Common.Presence.update/4","doc":"","ref":"Bonfire.UI.Common.Presence.html#update/4"},{"type":"module","title":"Bonfire.UI.Common.PreviewContentLive","doc":"A special 'modal' for previewing objects from a feed without redirecting to a new view (so we can go back to where we were in the feed)","ref":"Bonfire.UI.Common.PreviewContentLive.html"},{"type":"module","title":"Properties - Bonfire.UI.Common.PreviewContentLive","doc":"* **id** *:string, required: true* - The id of the live component (required by LiveView for stateful components).\n\n* **source_inspector_attrs** *:map, default: %{}*\n* **title_text** *:string, default: nil* - The title of the modal. Only used if no title slot is passed.\n* **title_class** *:css_class, default: nil* - The classes of the title of the modal\n* **show** *:boolean, default: false* - Force modal to be open\n* **no_header** *:boolean, default: false* - Optional prop to hide the header at the top of the modal\n* **modal_class** *:string, default: nil* - The classes of the modal.\n* **modal_assigns** *:any, default: []* - Additional assigns for the modal\n\n* **opts** *:keyword, default: []* - Additional attributes to add onto the modal wrapper","ref":"Bonfire.UI.Common.PreviewContentLive.html#module-properties"},{"type":"module","title":"Slots - Bonfire.UI.Common.PreviewContentLive","doc":"* **default, arg: [:autocomplete]** - Slots for the contents of the modal, title, buttons...\n\n* **open_btn**\n* **action_btns**\n* **cancel_btn**\n* **title**","ref":"Bonfire.UI.Common.PreviewContentLive.html#module-slots"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.do_handle_event/3","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#do_handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.handle_event/3","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.handle_info/2","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#handle_info/2"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.mount/1","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#mount/1"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.render/1","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#render/1"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.render_native/1","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#render_native/1"},{"type":"macro","title":"Bonfire.UI.Common.PreviewContentLive.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#sigil_p/2"},{"type":"macro","title":"Bonfire.UI.Common.PreviewContentLive.sigil_SWIFTUI/2","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#sigil_SWIFTUI/2"},{"type":"function","title":"Bonfire.UI.Common.PreviewContentLive.update/2","doc":"","ref":"Bonfire.UI.Common.PreviewContentLive.html#update/2"},{"type":"module","title":"Bonfire.UI.Common.ReusableModalLive","doc":"The classic **modal**","ref":"Bonfire.UI.Common.ReusableModalLive.html"},{"type":"module","title":"Properties - Bonfire.UI.Common.ReusableModalLive","doc":"* **id** *:string, required: true* - The id of the live component (required by LiveView for stateful components).\n\n* **source_inspector_attrs** *:map, default: %{}*\n* **title_text** *:string, default: nil* - The title of the modal. Only used if no title slot is passed.\n* **image_preview** *:boolean, default: false* - If the modal is a preview of an image, set this to true.\n* **title_class** *:css_class, default: nil* - The classes of the title of the modal\n* **modal_class** *:css_class, default: \"\"* - The classes of the modal.\n* **wrapper_class** *:css_class, default: nil* - The classes of the modal wrapper.\n* **action_btns_wrapper_class** *:css_class, default: nil* - The classes around the action/submit button(s) on the modal\n* **cancel_btn_class** *:css_class, default: nil* - The classes of the close/cancel button on the modal. Only used if no close_btn slot is passed.\n* **cancel_label** *:string, default: nil*\n* **show** *:boolean, default: false* - Force modal to be open\n* **form_opts** *:map, default: %{}*\n* **no_actions** *:boolean, default: false* - Optional prop to hide the actions at the bottom of the modal\n* **no_header** *:boolean, default: false* - Optional prop to hide the header at the top of the modal\n* **no_backdrop** *:boolean, default: false*\n* **opts** *:keyword, default: []* - Additional attributes to add onto the modal wrapper\n\n* **autocomplete** *:list, default: []*","ref":"Bonfire.UI.Common.ReusableModalLive.html#module-properties"},{"type":"module","title":"Slots - Bonfire.UI.Common.ReusableModalLive","doc":"* **open_btn, arg: [autocomplete: :list, value: :any]** - Slots for the contents of the modal, title, buttons...\n\n* **action_btns**\n* **cancel_btn**\n* **title**\n* **default, arg: [autocomplete: :list, value: :any]**","ref":"Bonfire.UI.Common.ReusableModalLive.html#module-slots"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.default_assigns/0","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#default_assigns/0"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.do_handle_event/3","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#do_handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.handle_event/3","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.handle_info/2","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#handle_info/2"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.mount/1","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#mount/1"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.render/1","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#render/1"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.render_native/1","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#render_native/1"},{"type":"macro","title":"Bonfire.UI.Common.ReusableModalLive.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#sigil_p/2"},{"type":"macro","title":"Bonfire.UI.Common.ReusableModalLive.sigil_SWIFTUI/2","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#sigil_SWIFTUI/2"},{"type":"function","title":"Bonfire.UI.Common.ReusableModalLive.update/2","doc":"","ref":"Bonfire.UI.Common.ReusableModalLive.html#update/2"},{"type":"module","title":"Bonfire.UI.Common.Routes","doc":"","ref":"Bonfire.UI.Common.Routes.html"},{"type":"function","title":"Bonfire.UI.Common.Routes.gon_js_config/0","doc":"Config keys to make available in JS (via Phoenix Gon lib)","ref":"Bonfire.UI.Common.Routes.html#gon_js_config/0"},{"type":"module","title":"Bonfire.UI.Common.SEO","doc":"","ref":"Bonfire.UI.Common.SEO.html"},{"type":"function","title":"Bonfire.UI.Common.SEO.config/0","doc":"Get configuration for SEO.\n\nconfig/0 will return all SEO config\nconfig/1 with SEO domain atom will return that domain's config","ref":"Bonfire.UI.Common.SEO.html#config/0"},{"type":"function","title":"Bonfire.UI.Common.SEO.open_graph_config/1","doc":"","ref":"Bonfire.UI.Common.SEO.html#open_graph_config/1"},{"type":"function","title":"Bonfire.UI.Common.SEO.site_config/1","doc":"","ref":"Bonfire.UI.Common.SEO.html#site_config/1"},{"type":"function","title":"Bonfire.UI.Common.SEO.twitter_config/1","doc":"","ref":"Bonfire.UI.Common.SEO.html#twitter_config/1"},{"type":"behaviour","title":"Bonfire.UI.Common.SettingsModule","doc":"Settings nav & components","ref":"Bonfire.UI.Common.SettingsModule.html"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.app_modules/0","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#app_modules/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.component_function_error/2","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#component_function_error/2"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.components/0","doc":"Load all components at once","ref":"Bonfire.UI.Common.SettingsModule.html#components/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.components/1","doc":"Load components for an extension","ref":"Bonfire.UI.Common.SettingsModule.html#components/1"},{"type":"callback","title":"Bonfire.UI.Common.SettingsModule.declared_component/0","doc":"Declares a component component","ref":"Bonfire.UI.Common.SettingsModule.html#c:declared_component/0"},{"type":"callback","title":"Bonfire.UI.Common.SettingsModule.declared_nav/0","doc":"Declares a nav module, with links or nav components","ref":"Bonfire.UI.Common.SettingsModule.html#c:declared_nav/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.extension_has_components?/2","doc":"List extensions that have settings component(s)","ref":"Bonfire.UI.Common.SettingsModule.html#extension_has_components?/2"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.modules/0","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#modules/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.modules_component/1","doc":"Get components identified by their module","ref":"Bonfire.UI.Common.SettingsModule.html#modules_component/1"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.modules_nav/1","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#modules_nav/1"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.nav/0","doc":"Load all navs","ref":"Bonfire.UI.Common.SettingsModule.html#nav/0"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.nav/1","doc":"Get navs for an extension","ref":"Bonfire.UI.Common.SettingsModule.html#nav/1"},{"type":"function","title":"Bonfire.UI.Common.SettingsModule.nav_function_error/2","doc":"","ref":"Bonfire.UI.Common.SettingsModule.html#nav_function_error/2"},{"type":"module","title":"Bonfire.UI.Common.SmartInput.LiveHandler","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.active_smart_input_component/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#active_smart_input_component/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.active_smart_input_components/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#active_smart_input_components/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.activity_type_or_reply/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#activity_type_or_reply/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.all_smart_input_components/0","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#all_smart_input_components/0"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.assign_open/2","doc":"Open the composer by setting assigns","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#assign_open/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.close_smart_input/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#close_smart_input/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.confirm_close_smart_input/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#confirm_close_smart_input/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.max_length/0","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#max_length/0"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.maximize/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#maximize/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.maybe_from_json/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#maybe_from_json/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.maybe_from_json_string/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#maybe_from_json_string/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.minimize/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#minimize/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.open/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#open/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.open_type/4","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#open_type/4"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.open_with_text_suggestion/3","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#open_with_text_suggestion/3"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.replace_input_next_time/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#replace_input_next_time/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.reply_to_param/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#reply_to_param/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.reset_input/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#reset_input/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.set/2","doc":"Set assigns in the smart input from anywhere in the app (whether using a live component or sticky live view)","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#set/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.set_smart_input_text/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#set_smart_input_text/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.show_main/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#show_main/2"},{"type":"macro","title":"Bonfire.UI.Common.SmartInput.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.smart_input_name/1","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#smart_input_name/1"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.switch_smart_input_type/2","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#switch_smart_input_type/2"},{"type":"function","title":"Bonfire.UI.Common.SmartInput.LiveHandler.toggle_expanded/4","doc":"","ref":"Bonfire.UI.Common.SmartInput.LiveHandler.html#toggle_expanded/4"},{"type":"behaviour","title":"Bonfire.UI.Common.SmartInputModule","doc":"Find a smart input module via the object type(s) it can create, or vice versa. Backed by a global cache of known smart input modules.\n\nTo add a module to this list, you should declare `@behaviour Bonfire.UI.Common.SmartInputModule` in it and define a `smart_input_module/0` function which returns a list of object types that it can create.\n\nExample:\n```\n@behaviour Bonfire.UI.Common.SmartInputModule\ndef smart_input_module, do: [:page, Bonfire.Pages.Page]\n```\n\nYou can then open the smart input composer / object creator using that declared type, for example:\n```\n \n```","ref":"Bonfire.UI.Common.SmartInputModule.html"},{"type":"function","title":"Bonfire.UI.Common.SmartInputModule.app_modules/0","doc":"","ref":"Bonfire.UI.Common.SmartInputModule.html#app_modules/0"},{"type":"function","title":"Bonfire.UI.Common.SmartInputModule.modules/0","doc":"","ref":"Bonfire.UI.Common.SmartInputModule.html#modules/0"},{"type":"callback","title":"Bonfire.UI.Common.SmartInputModule.smart_input_module/0","doc":"Declares a smart input module","ref":"Bonfire.UI.Common.SmartInputModule.html#c:smart_input_module/0"},{"type":"function","title":"Bonfire.UI.Common.SmartInputModule.smart_input_modules_types/0","doc":"Returns a list of smart input modules and the object type(s) it can create, and vice versa.","ref":"Bonfire.UI.Common.SmartInputModule.html#smart_input_modules_types/0"},{"type":"module","title":"Bonfire.UI.Common.StaticGenerator","doc":"Static-site generator which can take a list of URLs served by the current Phoenix server and output static HTML for them","ref":"Bonfire.UI.Common.StaticGenerator.html"},{"type":"function","title":"Bonfire.UI.Common.StaticGenerator.base_path/0","doc":"","ref":"Bonfire.UI.Common.StaticGenerator.html#base_path/0"},{"type":"function","title":"Bonfire.UI.Common.StaticGenerator.generate/2","doc":"","ref":"Bonfire.UI.Common.StaticGenerator.html#generate/2"},{"type":"module","title":"Bonfire.UI.Common.StaticGeneratorPlug","doc":"","ref":"Bonfire.UI.Common.StaticGeneratorPlug.html"},{"type":"function","title":"Bonfire.UI.Common.StaticGeneratorPlug.add_index_html/2","doc":"","ref":"Bonfire.UI.Common.StaticGeneratorPlug.html#add_index_html/2"},{"type":"function","title":"Bonfire.UI.Common.StaticGeneratorPlug.call/2","doc":"","ref":"Bonfire.UI.Common.StaticGeneratorPlug.html#call/2"},{"type":"function","title":"Bonfire.UI.Common.StaticGeneratorPlug.init/1","doc":"","ref":"Bonfire.UI.Common.StaticGeneratorPlug.html#init/1"},{"type":"module","title":"Bonfire.UI.Common.Testing.Helpers","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_field_error/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_field_error/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_field_good/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_field_good/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_flash/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_flash/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_flash_kind/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_flash_kind/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.assert_flash_message/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#assert_flash_message/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.conn/0","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#conn/0"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.conn/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#conn/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.conn/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#conn/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fake_account!/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fake_account!/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fake_admin!/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fake_admin!/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fake_user!/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fake_user!/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fake_user_and_conn!/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fake_user_and_conn!/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fancy_fake_user!/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fancy_fake_user!/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.fancy_fake_user_on_test_instance/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#fancy_fake_user_on_test_instance/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.find_flash/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#find_flash/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.find_form_error/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#find_form_error/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_attr/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_attr/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_click/3","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_click/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_live/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_live/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_redirect/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_redirect/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_response/2","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_response/2"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.floki_submit/4","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#floki_submit/4"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.live_pubsub_wait/1","doc":"Wait for the LiveView to receive any queued PubSub broadcasts","ref":"Bonfire.UI.Common.Testing.Helpers.html#live_pubsub_wait/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.live_sockets_disconnect/1","doc":"Disconnect all LiveViews associated with current user or account","ref":"Bonfire.UI.Common.Testing.Helpers.html#live_sockets_disconnect/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.live_view_stop/1","doc":"Stop a specific LiveView","ref":"Bonfire.UI.Common.Testing.Helpers.html#live_view_stop/1"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.render_stateful/3","doc":"Render stateful Surface or LiveView components","ref":"Bonfire.UI.Common.Testing.Helpers.html#render_stateful/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.render_stateless/3","doc":"Render stateless Surface or LiveView components","ref":"Bonfire.UI.Common.Testing.Helpers.html#render_stateless/3"},{"type":"function","title":"Bonfire.UI.Common.Testing.Helpers.session_conn/1","doc":"","ref":"Bonfire.UI.Common.Testing.Helpers.html#session_conn/1"},{"type":"behaviour","title":"Bonfire.UI.Common.WidgetModule","doc":"Widgets: components that can be added to the dashboard or sidebards","ref":"Bonfire.UI.Common.WidgetModule.html"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.app_modules/0","doc":"","ref":"Bonfire.UI.Common.WidgetModule.html#app_modules/0"},{"type":"callback","title":"Bonfire.UI.Common.WidgetModule.declared_widget/0","doc":"Declares a widget component","ref":"Bonfire.UI.Common.WidgetModule.html#c:declared_widget/0"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.modules/0","doc":"","ref":"Bonfire.UI.Common.WidgetModule.html#modules/0"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.widget/1","doc":"Get a widget identified by module","ref":"Bonfire.UI.Common.WidgetModule.html#widget/1"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.widget_function_error/2","doc":"","ref":"Bonfire.UI.Common.WidgetModule.html#widget_function_error/2"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.widgets/0","doc":"Load all widgets at once","ref":"Bonfire.UI.Common.WidgetModule.html#widgets/0"},{"type":"function","title":"Bonfire.UI.Common.WidgetModule.widgets/1","doc":"Load widgets for an extension","ref":"Bonfire.UI.Common.WidgetModule.html#widgets/1"},{"type":"module","title":"Bonfire.UI.Me.Integration","doc":"","ref":"Bonfire.UI.Me.Integration.html"},{"type":"function","title":"Bonfire.UI.Me.Integration.mailer/0","doc":"","ref":"Bonfire.UI.Me.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.UI.Me.Integration.repo/0","doc":"","ref":"Bonfire.UI.Me.Integration.html#repo/0"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.AccountRequired","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AccountRequired.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.AccountRequired.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AccountRequired.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.AccountRequired.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AccountRequired.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.AdminRequired","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AdminRequired.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.AdminRequired.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AdminRequired.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.AdminRequired.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.AdminRequired.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.LivePlugs.UserRequired","doc":"","ref":"Bonfire.UI.Me.LivePlugs.UserRequired.html"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.UserRequired.mount/3","doc":"","ref":"Bonfire.UI.Me.LivePlugs.UserRequired.html#mount/3"},{"type":"function","title":"Bonfire.UI.Me.LivePlugs.UserRequired.on_mount/4","doc":"","ref":"Bonfire.UI.Me.LivePlugs.UserRequired.html#on_mount/4"},{"type":"module","title":"Bonfire.UI.Me.Plugs.AccountRequired","doc":"","ref":"Bonfire.UI.Me.Plugs.AccountRequired.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.AccountRequired.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.AccountRequired.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.AccountRequired.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.AccountRequired.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.AdminRequired","doc":"","ref":"Bonfire.UI.Me.Plugs.AdminRequired.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.AdminRequired.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.AdminRequired.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.AdminRequired.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.AdminRequired.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.GuestOnly","doc":"","ref":"Bonfire.UI.Me.Plugs.GuestOnly.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.GuestOnly.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.GuestOnly.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.GuestOnly.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.GuestOnly.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccount","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccount.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.LoadCurrentUser","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentUser.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentUser.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentUser.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.LoadCurrentUser.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.LoadCurrentUser.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Plugs.UserRequired","doc":"","ref":"Bonfire.UI.Me.Plugs.UserRequired.html"},{"type":"function","title":"Bonfire.UI.Me.Plugs.UserRequired.call/2","doc":"","ref":"Bonfire.UI.Me.Plugs.UserRequired.html#call/2"},{"type":"function","title":"Bonfire.UI.Me.Plugs.UserRequired.init/1","doc":"","ref":"Bonfire.UI.Me.Plugs.UserRequired.html#init/1"},{"type":"module","title":"Bonfire.UI.Me.Routes","doc":"","ref":"Bonfire.UI.Me.Routes.html"},{"type":"module","title":"Bonfire.UI.Me.RuntimeConfig","doc":"","ref":"Bonfire.UI.Me.RuntimeConfig.html"},{"type":"function","title":"Bonfire.UI.Me.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's `runtime.exs`, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs()` line","ref":"Bonfire.UI.Me.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.UI.Me.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.UI.Me.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.UI.Messages.Routes","doc":"","ref":"Bonfire.UI.Messages.Routes.html"},{"type":"function","title":"Bonfire.UI.Messages.Routes.declare_routes/0","doc":"","ref":"Bonfire.UI.Messages.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.UI.Messages.RuntimeConfig","doc":"","ref":"Bonfire.UI.Messages.RuntimeConfig.html"},{"type":"function","title":"Bonfire.UI.Messages.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's `runtime.exs`, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs()` line","ref":"Bonfire.UI.Messages.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.UI.Messages.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.UI.Messages.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.UI.Moderation.RuntimeConfig","doc":"","ref":"Bonfire.UI.Moderation.RuntimeConfig.html"},{"type":"function","title":"Bonfire.UI.Moderation.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's `runtime.exs`, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs()` line","ref":"Bonfire.UI.Moderation.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.UI.Moderation.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.UI.Moderation.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.UI.Posts.Routes","doc":"","ref":"Bonfire.UI.Posts.Routes.html"},{"type":"function","title":"Bonfire.UI.Posts.Routes.declare_routes/0","doc":"","ref":"Bonfire.UI.Posts.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.UI.Posts.RuntimeConfig","doc":"","ref":"Bonfire.UI.Posts.RuntimeConfig.html"},{"type":"function","title":"Bonfire.UI.Posts.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's `runtime.exs`, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs()` line","ref":"Bonfire.UI.Posts.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.UI.Posts.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.UI.Posts.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.UI.Reactions.Routes","doc":"","ref":"Bonfire.UI.Reactions.Routes.html"},{"type":"function","title":"Bonfire.UI.Reactions.Routes.declare_routes/0","doc":"","ref":"Bonfire.UI.Reactions.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.UI.Reactions.RuntimeConfig","doc":"","ref":"Bonfire.UI.Reactions.RuntimeConfig.html"},{"type":"function","title":"Bonfire.UI.Reactions.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's `runtime.exs`, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs()` line","ref":"Bonfire.UI.Reactions.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.UI.Reactions.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.UI.Reactions.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.UI.Social.Benchmark","doc":"","ref":"Bonfire.UI.Social.Benchmark.html"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed_page/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed_page/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed_queries_without_benchee/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed_queries_without_benchee/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed_query_methods/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed_query_methods/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.feed_render_page/0","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#feed_render_page/0"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.live_feed/1","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#live_feed/1"},{"type":"function","title":"Bonfire.UI.Social.Benchmark.render_feed/2","doc":"","ref":"Bonfire.UI.Social.Benchmark.html#render_feed/2"},{"type":"module","title":"Bonfire.UI.Social.Graph.RuntimeConfig","doc":"","ref":"Bonfire.UI.Social.Graph.RuntimeConfig.html"},{"type":"function","title":"Bonfire.UI.Social.Graph.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's `runtime.exs`, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs()` line","ref":"Bonfire.UI.Social.Graph.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.UI.Social.Graph.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.UI.Social.Graph.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.UI.Social.Integration","doc":"","ref":"Bonfire.UI.Social.Integration.html"},{"type":"function","title":"Bonfire.UI.Social.Integration.mailer/0","doc":"","ref":"Bonfire.UI.Social.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.UI.Social.Integration.repo/0","doc":"","ref":"Bonfire.UI.Social.Integration.html#repo/0"},{"type":"module","title":"Bonfire.UI.Social.Routes","doc":"","ref":"Bonfire.UI.Social.Routes.html"},{"type":"function","title":"Bonfire.UI.Social.Routes.declare_routes/0","doc":"","ref":"Bonfire.UI.Social.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.UI.Social.RuntimeConfig","doc":"","ref":"Bonfire.UI.Social.RuntimeConfig.html"},{"type":"function","title":"Bonfire.UI.Social.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's `runtime.exs`, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs()` line","ref":"Bonfire.UI.Social.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.UI.Social.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.UI.Social.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Needle.Changesets","doc":"","ref":"Needle.Changesets.html"},{"type":"function","title":"Needle.Changesets.build_assoc/3","doc":"Like Ecto.build_assoc/3, but can work with a Changeset","ref":"Needle.Changesets.html#build_assoc/3"},{"type":"function","title":"Needle.Changesets.built?/1","doc":"True if the schema object's current state is `:built`","ref":"Needle.Changesets.html#built?/1"},{"type":"function","title":"Needle.Changesets.cast/3","doc":"Like `Ecto.Changeset.cast` but for Pointables, Virtuals and Mixins.\n\nIf a pointable or virtual, Generates an ID if one is not present.","ref":"Needle.Changesets.html#cast/3"},{"type":"function","title":"Needle.Changesets.cast_assoc/3","doc":"","ref":"Needle.Changesets.html#cast_assoc/3"},{"type":"function","title":"Needle.Changesets.cast_belongs_to/4","doc":"","ref":"Needle.Changesets.html#cast_belongs_to/4"},{"type":"function","title":"Needle.Changesets.cast_has_many/4","doc":"","ref":"Needle.Changesets.html#cast_has_many/4"},{"type":"function","title":"Needle.Changesets.cast_has_one/4","doc":"","ref":"Needle.Changesets.html#cast_has_one/4"},{"type":"function","title":"Needle.Changesets.config_for/3","doc":"","ref":"Needle.Changesets.html#config_for/3"},{"type":"function","title":"Needle.Changesets.deleted?/1","doc":"True if the schema object's current state is `:deleted`","ref":"Needle.Changesets.html#deleted?/1"},{"type":"function","title":"Needle.Changesets.get_field/2","doc":"","ref":"Needle.Changesets.html#get_field/2"},{"type":"function","title":"Needle.Changesets.insert_verb/1","doc":"","ref":"Needle.Changesets.html#insert_verb/1"},{"type":"function","title":"Needle.Changesets.loaded?/1","doc":"True if the schema object's current state is `:loaded`","ref":"Needle.Changesets.html#loaded?/1"},{"type":"function","title":"Needle.Changesets.merge_child_errors/1","doc":"","ref":"Needle.Changesets.html#merge_child_errors/1"},{"type":"function","title":"Needle.Changesets.put_assoc/3","doc":"Like `put_assoc!/3` but doesn't raise if the association doesn't exist","ref":"Needle.Changesets.html#put_assoc/3"},{"type":"function","title":"Needle.Changesets.put_assoc!/3","doc":"Like `Ecto.Changeset.put_assoc/3` but for Pointables, Virtuals and Mixins.\n\nCopies across keys where possible.","ref":"Needle.Changesets.html#put_assoc!/3"},{"type":"function","title":"Needle.Changesets.put_id_on_mixins/3","doc":"","ref":"Needle.Changesets.html#put_id_on_mixins/3"},{"type":"function","title":"Needle.Changesets.put_new_id/1","doc":"","ref":"Needle.Changesets.html#put_new_id/1"},{"type":"function","title":"Needle.Changesets.state/1","doc":"Returns the schema object's current state.","ref":"Needle.Changesets.html#state/1"},{"type":"function","title":"Needle.Changesets.update_data/2","doc":"","ref":"Needle.Changesets.html#update_data/2"},{"type":"function","title":"Needle.Changesets.valid?/1","doc":"true if the provided changeset or list of changesets is valid.","ref":"Needle.Changesets.html#valid?/1"},{"type":"module","title":"Needle.Form","doc":"","ref":"Needle.Form.html"},{"type":"macro","title":"Needle.Form.form_schema/1","doc":"","ref":"Needle.Form.html#form_schema/1"},{"type":"function","title":"Needle.Form.using/2","doc":"","ref":"Needle.Form.html#using/2"},{"type":"module","title":"Needle.Migration","doc":"Helpers for writing Pointer-aware migrations.","ref":"Needle.Migration.html"},{"type":"function","title":"Needle.Migration.add_is_not_deleted/1","doc":"","ref":"Needle.Migration.html#add_is_not_deleted/1"},{"type":"macro","title":"Needle.Migration.create_mixin_table/3","doc":"Creates a mixin table - one with a ULID primary key and no trigger","ref":"Needle.Migration.html#create_mixin_table/3"},{"type":"macro","title":"Needle.Migration.create_pointable_table/2","doc":"Creates a pointable table along with its trigger.","ref":"Needle.Migration.html#create_pointable_table/2"},{"type":"macro","title":"Needle.Migration.create_pointable_table/3","doc":"","ref":"Needle.Migration.html#create_pointable_table/3"},{"type":"macro","title":"Needle.Migration.create_pointable_table/4","doc":"","ref":"Needle.Migration.html#create_pointable_table/4"},{"type":"macro","title":"Needle.Migration.create_random_table/3","doc":"Creates a random table - one with a UUID v4 primary key.","ref":"Needle.Migration.html#create_random_table/3"},{"type":"function","title":"Needle.Migration.create_virtual/1","doc":"","ref":"Needle.Migration.html#create_virtual/1"},{"type":"function","title":"Needle.Migration.create_virtual/2","doc":"","ref":"Needle.Migration.html#create_virtual/2"},{"type":"function","title":"Needle.Migration.create_virtual_trigger_function/0","doc":"","ref":"Needle.Migration.html#create_virtual_trigger_function/0"},{"type":"function","title":"Needle.Migration.drop_mixin_table/1","doc":"Drops a mixin table.","ref":"Needle.Migration.html#drop_mixin_table/1"},{"type":"function","title":"Needle.Migration.drop_pointable_table/1","doc":"Drops a pointable table","ref":"Needle.Migration.html#drop_pointable_table/1"},{"type":"function","title":"Needle.Migration.drop_pointable_table/2","doc":"","ref":"Needle.Migration.html#drop_pointable_table/2"},{"type":"function","title":"Needle.Migration.drop_random_table/1","doc":"Drops a random table.","ref":"Needle.Migration.html#drop_random_table/1"},{"type":"function","title":"Needle.Migration.drop_table/1","doc":"","ref":"Needle.Migration.html#drop_table/1"},{"type":"function","title":"Needle.Migration.drop_virtual/1","doc":"","ref":"Needle.Migration.html#drop_virtual/1"},{"type":"function","title":"Needle.Migration.drop_virtual/2","doc":"","ref":"Needle.Migration.html#drop_virtual/2"},{"type":"function","title":"Needle.Migration.init_pointers/0","doc":"When migrating up: initialises the pointers database.\nWhen migrating down: deinitialises the pointers database.","ref":"Needle.Migration.html#init_pointers/0"},{"type":"function","title":"Needle.Migration.init_pointers/1","doc":"Given `:up`: initialises the pointers database.\nGiven `:down`: deinitialises the pointers database.","ref":"Needle.Migration.html#init_pointers/1"},{"type":"function","title":"Needle.Migration.init_pointers_ulid_extra/0","doc":"","ref":"Needle.Migration.html#init_pointers_ulid_extra/0"},{"type":"function","title":"Needle.Migration.migrate_virtual/1","doc":"","ref":"Needle.Migration.html#migrate_virtual/1"},{"type":"function","title":"Needle.Migration.migrate_virtual/2","doc":"","ref":"Needle.Migration.html#migrate_virtual/2"},{"type":"function","title":"Needle.Migration.migrate_virtual/3","doc":"","ref":"Needle.Migration.html#migrate_virtual/3"},{"type":"function","title":"Needle.Migration.pointer/2","doc":"Creates a strong, weak or unbreakable pointer depending on `type`.","ref":"Needle.Migration.html#pointer/2"},{"type":"function","title":"Needle.Migration.strong_pointer/1","doc":"A reference to a pointer for use with `add/3`. A strong pointer will\nbe deleted when the thing it's pointing to is deleted.","ref":"Needle.Migration.html#strong_pointer/1"},{"type":"function","title":"Needle.Migration.unbreakable_pointer/1","doc":"A reference to a pointer for use with `add/3`. An unbreakable\npointer will prevent the thing it's pointing to from being deleted.","ref":"Needle.Migration.html#unbreakable_pointer/1"},{"type":"function","title":"Needle.Migration.weak_pointer/1","doc":"A reference to a pointer for use with `add/3`. A weak pointer will\nbe set null when the thing it's pointing to is deleted.","ref":"Needle.Migration.html#weak_pointer/1"},{"type":"type","title":"Needle.Migration.pointer_type/0","doc":"","ref":"Needle.Migration.html#t:pointer_type/0"},{"type":"module","title":"Needle.Mixin","doc":"If a Pointer represents an object, mixins represent data about the object. Mixins collate optional\nadditional information about an object. Different types of object will typically make use of\ndifferent mixins. You can see these as aspects of the data if you like.\n\nA mixin table starts with an `id` column which references `Pointer` and forms the default primary\nkey. It is up to the user to choose which other fields go in the table, and thus what the mixin is for.\n\nUse of a mixin is typically through `has_one`:\n\n```\nhas_one :my_mixin, MyMixin, foreign_key: :id, references: :id\n```\n\nSometimes, the user may wish to add fields to the primary key by using the `primary_key: true`\noption to `add` in their migrations. This is permitted and in such case we call the resulting\nmixin a `multimixin`. Use becomes `has_many`:\n\n```\nhas_many :my_mixin, MyMixin, foreign_key: :id, references: :id\n```\n\nThus the choice of single or multi comes down to how many times you want to store that data for\nthe object. A user's profile naturally lends itself to a regular `single` mixin, whereas an\nobject's appearance in a feed would naturally lend itself to being a multimixin since the object\nmay appear in many feeds.\n\n#","ref":"Needle.Mixin.html"},{"type":"module","title":"Declaring a mixin table type - Needle.Mixin","doc":"```\ndefmodule My.Mixin do\n\n use Needle.Mixin,\n otp_app: :my_app,\n source: \"postgres_table_name\"\n\n mixin_schema do\n field :is_awesome, :boolean\n end\nend\n```","ref":"Needle.Mixin.html#module-declaring-a-mixin-table-type"},{"type":"macro","title":"Needle.Mixin.mixin_schema/1","doc":"","ref":"Needle.Mixin.html#mixin_schema/1"},{"type":"function","title":"Needle.Mixin.using/2","doc":"","ref":"Needle.Mixin.html#using/2"},{"type":"exception","title":"Needle.NotFound","doc":"We could not find the requested object","ref":"Needle.NotFound.html"},{"type":"function","title":"Needle.NotFound.new/1","doc":"Creates a new NotFound","ref":"Needle.NotFound.html#new/1"},{"type":"type","title":"Needle.NotFound.t/0","doc":"","ref":"Needle.NotFound.html#t:t/0"},{"type":"module","title":"Needle.Pointable","doc":"Sets up an Ecto Schema for a Pointable table.","ref":"Needle.Pointable.html"},{"type":"module","title":"Sample Usage - Needle.Pointable","doc":"```\nuse Needle.Pointable,\n otp_app: :my_app, # your OTP application's name\n source: \"my_table\", # default name of table in database\n table_id: \"01EBTVSZJ6X02J01R1XWWPWGZW\" # unique ULID to identify table\n\npointable_schema do\n # ... fields go here, if any\nend\n```","ref":"Needle.Pointable.html#module-sample-usage"},{"type":"module","title":"Overriding with configuration - Needle.Pointable","doc":"During `use` (i.e. compilation time), we will attempt to load\nconfiguration from the provided `:otp_app` under the key of the\ncurrent module. Any values provided here will override the defaults\nprovided to `use`. This allows you to configure them after the fact.\n\nAdditionally, pointables use `Exto`'s `flex_schema()`, so you can\nprovide additional configuration for those in the same place.\n\nI shall say it again because it's important: This happens at\n*compile time*. You must rebuild the app containing the pointable\nwhenever the configuration changes.","ref":"Needle.Pointable.html#module-overriding-with-configuration"},{"type":"module","title":"Introspection - Needle.Pointable","doc":"Defines a function `__pointers__/1` to introspect data. Recognised\nparameters:\n\n`:role` - `:pointable`\n`:table_id` - retrieves the ULID id of the pointable table.\n`:otp_app` - retrieves the OTP application to which this belongs.","ref":"Needle.Pointable.html#module-introspection"},{"type":"macro","title":"Needle.Pointable.pointable_schema/1","doc":"","ref":"Needle.Pointable.html#pointable_schema/1"},{"type":"module","title":"Needle.Pointer","doc":"A Pointer is any object that can be referenced by its id.\n\nPointer is a simple table consisting of three fields:\n* id - the database-unique id for this pointer in ULID format.\n* table_id - a type tag, references `Table`.\n* deleted_at - timestamp of when the object was deleted, null by default.\n\nTo reference `any` object, simply reference `Pointer`:\n\n```\nalias Needle.Pointer\nbelongs_to :object, Pointer\n```\n\nTo define a new object type there are two options, you should choose one:\n\n* `Virtual` - an object type with a view over `Pointer` limited by type.\n* `Pointable` - an object type with a table which is kept synchronised with `Pointer`.\n\nFor most purposes, you should use a `Virtual`. Pointable exists mostly to support existing code.\nThe major difference in practice is that you cannot add new fields to a virtual. Most of the time\nyou will want to store such extra fields in one or more mixins anyway so they may be reused.\n\nSee `Mixin` for more information about mixins.","ref":"Needle.Pointer.html"},{"type":"function","title":"Needle.Pointer.create/2","doc":"Changeset for creating a Pointer","ref":"Needle.Pointer.html#create/2"},{"type":"module","title":"Needle.Pointers","doc":"A context for working with Needle, a sort of global foreign key scheme.","ref":"Needle.Pointers.html"},{"type":"function","title":"Needle.Pointers.assert_points_to!/2","doc":"Return the provided pointer when it belongs to table queryable by the given table search term.","ref":"Needle.Pointers.html#assert_points_to!/2"},{"type":"function","title":"Needle.Pointers.cast!/1","doc":"Returns a Pointer, either the one provided or a synthesised one\npointing to the provided schema object. Does not hit the database or\ncause the pointer to be written to the database whatsoever.","ref":"Needle.Pointers.html#cast!/1"},{"type":"function","title":"Needle.Pointers.get_table_id!/1","doc":"","ref":"Needle.Pointers.html#get_table_id!/1"},{"type":"function","title":"Needle.Pointers.plan/1","doc":"Given a list of pointers which may or may have their pointed loaded,\nreturn a plan for preloading, a map of module name to set of loadable IDs.","ref":"Needle.Pointers.html#plan/1"},{"type":"function","title":"Needle.Pointers.query_base/1","doc":"Returns a basic query over non-deleted pointable objects in the system,\noptionally limited to one or more types.\n\nIf the type is set to a Pointable, Virtual or Mixin schema, records\nwill be selected from that schema directly. It is assumed this\nfilters deleted records by construction.\n\nOtherwise, will query from Pointer, filtering not is_nil(deleted_at)","ref":"Needle.Pointers.html#query_base/1"},{"type":"function","title":"Needle.Pointers.schema/1","doc":"","ref":"Needle.Pointers.html#schema/1"},{"type":"function","title":"Needle.Pointers.table/1","doc":"Looks up the table for a given pointer","ref":"Needle.Pointers.html#table/1"},{"type":"module","title":"Needle.Random","doc":"A securely randomly generated UUID keyed table. Not pointable.","ref":"Needle.Random.html"},{"type":"macro","title":"Needle.Random.random_schema/1","doc":"","ref":"Needle.Random.html#random_schema/1"},{"type":"function","title":"Needle.Random.using/2","doc":"","ref":"Needle.Random.html#using/2"},{"type":"module","title":"Needle.Table","doc":"One Table to rule them all. A record of a table participating in the\npointers abstraction - mandatory if participating.","ref":"Needle.Table.html"},{"type":"type","title":"Needle.Table.t/0","doc":"","ref":"Needle.Table.html#t:t/0"},{"type":"module","title":"Needle.Tables","doc":"A Global cache of Tables to be queried by their (Pointer) IDs, table\nnames or Ecto Schema module names.\n\nUse of the Table Service requires:\n\n1. You have run the migrations shipped with this library.\n2. You have started `Needle.Tables` before querying.\n3. All OTP applications with pointable Ecto Schemata to be added to the schema path.\n4. OTP 21.2 or greater, though we recommend using the most recent release available.\n\nWhile this module is a GenServer, it is only responsible for setup\nof the cache and then exits with :ignore having done so. It is not\nrecommended to restart the service as this will lead to a stop the\nworld garbage collection of all processes and the copying of the\nentire cache to each process that has queried it since its last\nlocal garbage collection.","ref":"Needle.Tables.html"},{"type":"function","title":"Needle.Tables.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Needle.Tables.html#child_spec/1"},{"type":"function","title":"Needle.Tables.data/0","doc":"","ref":"Needle.Tables.html#data/0"},{"type":"function","title":"Needle.Tables.id/1","doc":"Look up a table id by id, name or schema.","ref":"Needle.Tables.html#id/1"},{"type":"function","title":"Needle.Tables.id!/1","doc":"Look up a table id by id, name or schema, raise NotFound if not found.","ref":"Needle.Tables.html#id!/1"},{"type":"function","title":"Needle.Tables.ids!/1","doc":"Look up many ids at once, raise NotFound if any of them are not found","ref":"Needle.Tables.html#ids!/1"},{"type":"function","title":"Needle.Tables.mixin_modules/0","doc":"","ref":"Needle.Tables.html#mixin_modules/0"},{"type":"function","title":"Needle.Tables.schema/1","doc":"Look up a schema module by id, name or schema","ref":"Needle.Tables.html#schema/1"},{"type":"function","title":"Needle.Tables.schema!/1","doc":"Look up a schema module by id, name or schema, raise NotFound if not found","ref":"Needle.Tables.html#schema!/1"},{"type":"function","title":"Needle.Tables.schema?/1","doc":"","ref":"Needle.Tables.html#schema?/1"},{"type":"function","title":"Needle.Tables.schema_modules/0","doc":"","ref":"Needle.Tables.html#schema_modules/0"},{"type":"function","title":"Needle.Tables.start_link/1","doc":"Populates the global cache with table data via introspection.","ref":"Needle.Tables.html#start_link/1"},{"type":"function","title":"Needle.Tables.table/1","doc":"Get a Table identified by name, id or module.","ref":"Needle.Tables.html#table/1"},{"type":"function","title":"Needle.Tables.table!/1","doc":"Look up a Table by name or id, raise NotFound if not found.","ref":"Needle.Tables.html#table!/1"},{"type":"type","title":"Needle.Tables.query/0","doc":"A query is either a table's (database) name or (Pointer) ID as a\nbinary or the name of its Ecto Schema Module as an atom.","ref":"Needle.Tables.html#t:query/0"},{"type":"module","title":"Needle.ULID","doc":"An Ecto type for ULID strings.","ref":"Needle.ULID.html"},{"type":"function","title":"Needle.ULID.bingenerate/1","doc":"Generates a binary ULID.\n\nIf a value is provided for `timestamp`, the generated ULID will be for the provided timestamp.\nOtherwise, a ULID will be generated for the current time.\n\nArguments:\n\n* `timestamp`: A Unix timestamp with millisecond precision.","ref":"Needle.ULID.html#bingenerate/1"},{"type":"function","title":"Needle.ULID.bintimestamp/1","doc":"","ref":"Needle.ULID.html#bintimestamp/1"},{"type":"function","title":"Needle.ULID.cast/1","doc":"Casts a 26-byte encoded string to ULID or a 16-byte binary unchanged","ref":"Needle.ULID.html#cast/1"},{"type":"function","title":"Needle.ULID.cast!/1","doc":"Same as `cast/1` but raises `Ecto.CastError` on invalid arguments.","ref":"Needle.ULID.html#cast!/1"},{"type":"function","title":"Needle.ULID.dump/1","doc":"Converts a Crockford Base32 encoded ULID into a binary.","ref":"Needle.ULID.html#dump/1"},{"type":"function","title":"Needle.ULID.dump!/1","doc":"","ref":"Needle.ULID.html#dump!/1"},{"type":"function","title":"Needle.ULID.embed_as/1","doc":"","ref":"Needle.ULID.html#embed_as/1"},{"type":"function","title":"Needle.ULID.encoded_randomness/1","doc":"Returns the randomness portion of the encoded ulid","ref":"Needle.ULID.html#encoded_randomness/1"},{"type":"function","title":"Needle.ULID.encoded_timestamp/1","doc":"Returns the timestamp portion of the encoded ulid","ref":"Needle.ULID.html#encoded_timestamp/1"},{"type":"function","title":"Needle.ULID.equal?/2","doc":"","ref":"Needle.ULID.html#equal?/2"},{"type":"function","title":"Needle.ULID.generate/1","doc":"Generates a Crockford Base32 encoded ULID.\n\nIf a value is provided for `timestamp`, the generated ULID will be for the provided timestamp.\nOtherwise, a ULID will be generated for the current time.\n\nArguments:\n\n* `timestamp`: A Unix timestamp with millisecond precision.","ref":"Needle.ULID.html#generate/1"},{"type":"function","title":"Needle.ULID.load/1","doc":"Converts a binary ULID into a Crockford Base32 encoded string.","ref":"Needle.ULID.html#load/1"},{"type":"function","title":"Needle.ULID.synthesise!/1","doc":"translates alphanumerics into a sentinel ulid value","ref":"Needle.ULID.html#synthesise!/1"},{"type":"function","title":"Needle.ULID.timestamp/1","doc":"Returns the timestamp of an encoded or unencoded ULID","ref":"Needle.ULID.html#timestamp/1"},{"type":"function","title":"Needle.ULID.type/0","doc":"The underlying schema type.","ref":"Needle.ULID.html#type/0"},{"type":"module","title":"Needle.ULID.Migration","doc":"","ref":"Needle.ULID.Migration.html"},{"type":"function","title":"Needle.ULID.Migration.init_pointers_ulid_extra/0","doc":"","ref":"Needle.ULID.Migration.html#init_pointers_ulid_extra/0"},{"type":"function","title":"Needle.ULID.Migration.init_pointers_ulid_extra/1","doc":"","ref":"Needle.ULID.Migration.html#init_pointers_ulid_extra/1"},{"type":"module","title":"Needle.Unpointable","doc":"Has a ULID primary key but is not pointable.","ref":"Needle.Unpointable.html"},{"type":"macro","title":"Needle.Unpointable.unpointable_schema/1","doc":"","ref":"Needle.Unpointable.html#unpointable_schema/1"},{"type":"function","title":"Needle.Unpointable.using/2","doc":"","ref":"Needle.Unpointable.html#using/2"},{"type":"module","title":"Needle.Virtual","doc":"Sets up an Ecto Schema for a Virtual Pointable\n\nVirtual Pointables (or just `virtuals`) are like pointables with no\nadditional columns, except instead of being backed by a table they\nare backed by a view. This is more efficient of resources but only\nworks when there are no additional columns to add.\n\nIf you need to add columns to the schema, you should use a pointable.","ref":"Needle.Virtual.html"},{"type":"module","title":"Sample Usage - Needle.Virtual","doc":"```\nuse Needle.Virtual,\n otp_app: :my_app, # your OTP application's name\n source: \"my_table\", # default name of view in database\n table_id: \"01EBTVSZJ6X02J01R1XWWPWGZW\" # valid ULID to identify virtual\n\nvirtual_schema do\n # ... `has_one`, `has_many`, or *virtual* fields ONLY go here.\nend\n```","ref":"Needle.Virtual.html#module-sample-usage"},{"type":"module","title":"Overriding with configuration - Needle.Virtual","doc":"During `use` (i.e. compilation time), we will attempt to load\nconfiguration from the provided `:otp_app` under the key of the\ncurrent module. Any values provided here will override the defaults\nprovided to `use`. This allows you to configure them after the fact.\n\nAdditionally, pointables use `Exto`'s `flex_schema()`, so you can\nprovide additional configuration for those in the same place. Unlike\na regular pointable, you should not add additional\n(non-virtual) fields, but it is permitted to add `has_one` /\n`has_many` associations.\n\nI shall say it again because it's important: This happens at\n*compile time*. You must rebuild the app containing the pointable\nwhenever the configuration changes.","ref":"Needle.Virtual.html#module-overriding-with-configuration"},{"type":"module","title":"Introspection - Needle.Virtual","doc":"Defines a function `__pointers__/1` to introspect data. Recognised\nparameters:\n\n`:role` - `:virtual`.\n`:table_id` - retrieves the ULID id of the virtual.\n`:otp_app` - retrieves the OTP application to which this belongs.","ref":"Needle.Virtual.html#module-introspection"},{"type":"macro","title":"Needle.Virtual.virtual_schema/1","doc":"","ref":"Needle.Virtual.html#virtual_schema/1"},{"type":"module","title":"Bonfire.Boundaries","doc":"","ref":"Bonfire.Boundaries.html"},{"type":"function","title":"Bonfire.Boundaries.acls_from_preset_boundary_names/1","doc":"","ref":"Bonfire.Boundaries.html#acls_from_preset_boundary_names/1"},{"type":"function","title":"Bonfire.Boundaries.boundaries_normalise/1","doc":"","ref":"Bonfire.Boundaries.html#boundaries_normalise/1"},{"type":"function","title":"Bonfire.Boundaries.boundaries_or_default/2","doc":"","ref":"Bonfire.Boundaries.html#boundaries_or_default/2"},{"type":"function","title":"Bonfire.Boundaries.can?/4","doc":"","ref":"Bonfire.Boundaries.html#can?/4"},{"type":"function","title":"Bonfire.Boundaries.default_boundaries/1","doc":"","ref":"Bonfire.Boundaries.html#default_boundaries/1"},{"type":"function","title":"Bonfire.Boundaries.find_caretaker_stereotype/3","doc":"","ref":"Bonfire.Boundaries.html#find_caretaker_stereotype/3"},{"type":"function","title":"Bonfire.Boundaries.find_caretaker_stereotypes/3","doc":"","ref":"Bonfire.Boundaries.html#find_caretaker_stereotypes/3"},{"type":"function","title":"Bonfire.Boundaries.find_caretaker_stereotypes_q/3","doc":"","ref":"Bonfire.Boundaries.html#find_caretaker_stereotypes_q/3"},{"type":"function","title":"Bonfire.Boundaries.list_grants_on/1","doc":"","ref":"Bonfire.Boundaries.html#list_grants_on/1"},{"type":"function","title":"Bonfire.Boundaries.list_grants_on/2","doc":"eg: `list_grants_on(id, [:see, :read])`","ref":"Bonfire.Boundaries.html#list_grants_on/2"},{"type":"function","title":"Bonfire.Boundaries.list_object_acls/2","doc":"","ref":"Bonfire.Boundaries.html#list_object_acls/2"},{"type":"function","title":"Bonfire.Boundaries.list_object_boundaries/2","doc":"","ref":"Bonfire.Boundaries.html#list_object_boundaries/2"},{"type":"function","title":"Bonfire.Boundaries.load_pointer/2","doc":"","ref":"Bonfire.Boundaries.html#load_pointer/2"},{"type":"function","title":"Bonfire.Boundaries.load_pointers/2","doc":"Loads binaries according to boundaries (which are assumed to be ULID pointer IDs).\nLists which are iterated and return a [sub]list with only permitted pointers.","ref":"Bonfire.Boundaries.html#load_pointers/2"},{"type":"function","title":"Bonfire.Boundaries.pointer_permitted?/2","doc":"","ref":"Bonfire.Boundaries.html#pointer_permitted?/2"},{"type":"function","title":"Bonfire.Boundaries.preset_boundary_from_acl/2","doc":"","ref":"Bonfire.Boundaries.html#preset_boundary_from_acl/2"},{"type":"function","title":"Bonfire.Boundaries.preset_boundary_tuple_from_acl/2","doc":"","ref":"Bonfire.Boundaries.html#preset_boundary_tuple_from_acl/2"},{"type":"function","title":"Bonfire.Boundaries.preset_name/2","doc":"","ref":"Bonfire.Boundaries.html#preset_name/2"},{"type":"function","title":"Bonfire.Boundaries.replace_boundaries/4","doc":"","ref":"Bonfire.Boundaries.html#replace_boundaries/4"},{"type":"function","title":"Bonfire.Boundaries.set_boundaries/3","doc":"","ref":"Bonfire.Boundaries.html#set_boundaries/3"},{"type":"function","title":"Bonfire.Boundaries.take_care_of!/2","doc":"Assigns the user as the caretaker of the given object or objects,\nreplacing the existing caretaker, if any.","ref":"Bonfire.Boundaries.html#take_care_of!/2"},{"type":"function","title":"Bonfire.Boundaries.user_default_boundaries/0","doc":"","ref":"Bonfire.Boundaries.html#user_default_boundaries/0"},{"type":"function","title":"Bonfire.Boundaries.users_grants_on/2","doc":"","ref":"Bonfire.Boundaries.html#users_grants_on/2"},{"type":"function","title":"Bonfire.Boundaries.users_grants_on/3","doc":"","ref":"Bonfire.Boundaries.html#users_grants_on/3"},{"type":"module","title":"Bonfire.Boundaries.Acls","doc":"ACLs represent fully populated access control rules that can be reused.\nCan be reused to secure multiple objects, thus exists independently of any object.\n\nThe table doesn't have any fields of its own:\n```\nhas_many(:grants, Grant)\nhas_many(:controlled, Controlled)\n```","ref":"Bonfire.Boundaries.Acls.html"},{"type":"function","title":"Bonfire.Boundaries.Acls.acl_grants_to_tuples/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#acl_grants_to_tuples/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.acl_id/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#acl_id/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.acls/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#acls/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.acls_from_preset/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#acls_from_preset/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.base_acls_from_preset/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#base_acls_from_preset/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.built_in_ids/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#built_in_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.cast/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#cast/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.changeset/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#changeset/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.create/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#create/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.default_exclude_ids/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#default_exclude_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.delete/2","doc":"Fully delete the ACL, including permissions/grants and controlled information. This will affect all objects previously shared with this ACL.","ref":"Bonfire.Boundaries.Acls.html#delete/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.edit/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#edit/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.exclude_stereotypes/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#exclude_stereotypes/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get!/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get!/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_for_caretaker/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_for_caretaker/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_for_caretaker_q/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_for_caretaker_q/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_id/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_id/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_id!/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_id!/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_object_custom_acl/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_object_custom_acl/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.get_or_create_object_custom_acl/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#get_or_create_object_custom_acl/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.grant_tuples_from_preset/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#grant_tuples_from_preset/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.is_built_in?/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#is_built_in?/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.is_object_custom?/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#is_object_custom?/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.is_stereotype?/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#is_stereotype?/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.is_stereotyped?/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#is_stereotyped?/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.list/1","doc":"Lists ACLs we are permitted to see.","ref":"Bonfire.Boundaries.Acls.html#list/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_built_ins/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#list_built_ins/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_my/2","doc":"Lists the ACLs we are the registered caretakers of that we are\npermitted to see. If any are created without permitting the\nuser to see them, they will not be shown.","ref":"Bonfire.Boundaries.Acls.html#list_my/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_my_q/2","doc":"query for `list_my`","ref":"Bonfire.Boundaries.Acls.html#list_my_q/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_my_with_counts/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#list_my_with_counts/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.list_q/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#list_q/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.local_acl_ids/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#local_acl_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.maybe_by_ids/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#maybe_by_ids/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.maybe_search/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#maybe_search/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.opts_for_dropdown/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#opts_for_dropdown/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.opts_for_list/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#opts_for_list/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.prepare_cast/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#prepare_cast/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.preset_acl_ids/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#preset_acl_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.preview/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#preview/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.public_acl_ids/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#public_acl_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.remote_public_acl_ids/0","doc":"Built-in ACLs for things that should federate","ref":"Bonfire.Boundaries.Acls.html#remote_public_acl_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.set/3","doc":"","ref":"Bonfire.Boundaries.Acls.html#set/3"},{"type":"function","title":"Bonfire.Boundaries.Acls.simple_create/2","doc":"","ref":"Bonfire.Boundaries.Acls.html#simple_create/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.soft_delete/2","doc":"Soft-delete the ACL, meaning it will not be displayed anymore, but permissions/grants and controlled information will be preserved. This will not affect objects previously shared with this ACL.","ref":"Bonfire.Boundaries.Acls.html#soft_delete/2"},{"type":"function","title":"Bonfire.Boundaries.Acls.stereotype_ids/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#stereotype_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Acls.user_default_acl/1","doc":"","ref":"Bonfire.Boundaries.Acls.html#user_default_acl/1"},{"type":"function","title":"Bonfire.Boundaries.Acls.user_default_acls/0","doc":"","ref":"Bonfire.Boundaries.Acls.html#user_default_acls/0"},{"type":"module","title":"Bonfire.Boundaries.Acts.SetBoundaries","doc":"","ref":"Bonfire.Boundaries.Acts.SetBoundaries.html"},{"type":"function","title":"Bonfire.Boundaries.Acts.SetBoundaries.run/2","doc":"","ref":"Bonfire.Boundaries.Acts.SetBoundaries.html#run/2"},{"type":"module","title":"Bonfire.Boundaries.Blocks","doc":"","ref":"Bonfire.Boundaries.Blocks.html"},{"type":"function","title":"Bonfire.Boundaries.Blocks.ap_receive_activity/3","doc":"","ref":"Bonfire.Boundaries.Blocks.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.block/3","doc":"","ref":"Bonfire.Boundaries.Blocks.html#block/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.federation_module/0","doc":"","ref":"Bonfire.Boundaries.Blocks.html#federation_module/0"},{"type":"function","title":"Bonfire.Boundaries.Blocks.instance_wide_block/2","doc":"Block something for everyone on the instance (only for admins)","ref":"Bonfire.Boundaries.Blocks.html#instance_wide_block/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.instance_wide_circles/1","doc":"","ref":"Bonfire.Boundaries.Blocks.html#instance_wide_circles/1"},{"type":"function","title":"Bonfire.Boundaries.Blocks.is_blocked?/3","doc":"Checks if a `user_or_instance` is blocked\nPass a `block_type` (eg `:silence` or `:ghost`)\nPass a `current_user` in `opts` or check `:instance_wide`","ref":"Bonfire.Boundaries.Blocks.html#is_blocked?/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.list/2","doc":"","ref":"Bonfire.Boundaries.Blocks.html#list/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.remote_instance_block/3","doc":"","ref":"Bonfire.Boundaries.Blocks.html#remote_instance_block/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.types_blocked/1","doc":"","ref":"Bonfire.Boundaries.Blocks.html#types_blocked/1"},{"type":"function","title":"Bonfire.Boundaries.Blocks.unblock/3","doc":"","ref":"Bonfire.Boundaries.Blocks.html#unblock/3"},{"type":"function","title":"Bonfire.Boundaries.Blocks.unblock_all/2","doc":"","ref":"Bonfire.Boundaries.Blocks.html#unblock_all/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.user_block_circles/2","doc":"","ref":"Bonfire.Boundaries.Blocks.html#user_block_circles/2"},{"type":"module","title":"Bonfire.Boundaries.Blocks.LiveHandler","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html"},{"type":"function","title":"Bonfire.Boundaries.Blocks.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Boundaries.Blocks.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.LiveHandler.update_many/2","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html#update_many/2"},{"type":"function","title":"Bonfire.Boundaries.Blocks.LiveHandler.update_many_opts/1","doc":"","ref":"Bonfire.Boundaries.Blocks.LiveHandler.html#update_many_opts/1"},{"type":"module","title":"Bonfire.Boundaries.Circles","doc":"","ref":"Bonfire.Boundaries.Circles.html"},{"type":"function","title":"Bonfire.Boundaries.Circles.add_to_circles/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#add_to_circles/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.built_in_ids/0","doc":"","ref":"Bonfire.Boundaries.Circles.html#built_in_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Circles.changeset/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#changeset/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.changeset/3","doc":"","ref":"Bonfire.Boundaries.Circles.html#changeset/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.circle_ids/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#circle_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.circles/0","doc":"","ref":"Bonfire.Boundaries.Circles.html#circles/0"},{"type":"function","title":"Bonfire.Boundaries.Circles.create/2","doc":"Create a circle for the provided user (and with the user in the circle?)","ref":"Bonfire.Boundaries.Circles.html#create/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.delete/2","doc":"Fully delete the circle, including membership and boundary information. This will affect all objects previously shared with members of this circle.","ref":"Bonfire.Boundaries.Circles.html#delete/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.edit/3","doc":"","ref":"Bonfire.Boundaries.Circles.html#edit/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.empty_circles/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#empty_circles/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get!/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get!/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_by_name/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_by_name/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_for_caretaker/3","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_for_caretaker/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_id/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_id/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_id!/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_id!/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_or_create/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_or_create/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_stereotype_circles/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_stereotype_circles/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.get_tuple/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#get_tuple/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.is_built_in?/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#is_built_in?/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.is_encircled_by?/2","doc":"Lists the circles that we are permitted to see.","ref":"Bonfire.Boundaries.Circles.html#is_encircled_by?/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.is_encircled_by_q/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#is_encircled_by_q/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.is_stereotype?/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#is_stereotype?/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_built_ins/0","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_built_ins/0"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_by_ids/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_by_ids/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_my/2","doc":"Lists the circles we are the registered caretakers of that we are\npermitted to see. If any circles are created without permitting the\nuser to see them, they will not be shown.","ref":"Bonfire.Boundaries.Circles.html#list_my/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_my_defaults/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_my_defaults/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_my_with_counts/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_my_with_counts/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_my_with_global/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#list_my_with_global/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.list_visible/2","doc":"Lists the circles that we are permitted to see.","ref":"Bonfire.Boundaries.Circles.html#list_visible/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.preload_encircled_by/3","doc":"","ref":"Bonfire.Boundaries.Circles.html#preload_encircled_by/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.query/1","doc":"query for `list_visible`","ref":"Bonfire.Boundaries.Circles.html#query/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.query_my/2","doc":"query for `list_my`","ref":"Bonfire.Boundaries.Circles.html#query_my/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.query_my_by_id/3","doc":"query for `get`","ref":"Bonfire.Boundaries.Circles.html#query_my_by_id/3"},{"type":"function","title":"Bonfire.Boundaries.Circles.query_visible/2","doc":"query for `list_visible`","ref":"Bonfire.Boundaries.Circles.html#query_visible/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.remove_from_circles/2","doc":"","ref":"Bonfire.Boundaries.Circles.html#remove_from_circles/2"},{"type":"function","title":"Bonfire.Boundaries.Circles.stereotype_ids/0","doc":"","ref":"Bonfire.Boundaries.Circles.html#stereotype_ids/0"},{"type":"function","title":"Bonfire.Boundaries.Circles.stereotypes/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#stereotypes/1"},{"type":"function","title":"Bonfire.Boundaries.Circles.to_circle_ids/1","doc":"","ref":"Bonfire.Boundaries.Circles.html#to_circle_ids/1"},{"type":"module","title":"Bonfire.Boundaries.Controlleds","doc":"An object is linked to one or more `Acl`s by the `Controlled` multimixin, which pairs an object ID with an ACL ID. Because it is a multimixin, a given object can have multiple ACLs applied. In the case of overlap, permissions are combined with `false` being prioritised.","ref":"Bonfire.Boundaries.Controlleds.html"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.add_acls/2","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#add_acls/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.changeset/2","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#changeset/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.create/1","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#create/1"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.get_preset_on_object/1","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#get_preset_on_object/1"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.grant_role/4","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#grant_role/4"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_acls_on_object/2","doc":"List ACLs applied to an object.\nOnly call this as an admin or curator of the object.","ref":"Bonfire.Boundaries.Controlleds.html#list_acls_on_object/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_grants_by_verbs/3","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_grants_by_verbs/3"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_on_object/2","doc":"List ALL boundaries (ACLs and grants) applied to an object.\nOnly call this as an admin or curator of the object.","ref":"Bonfire.Boundaries.Controlleds.html#list_on_object/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_on_objects_by_subject/2","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_on_objects_by_subject/2"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_presets_on_objects/1","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_presets_on_objects/1"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_q/1","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_q/1"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.list_subjects_by_verb/3","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#list_subjects_by_verb/3"},{"type":"function","title":"Bonfire.Boundaries.Controlleds.remove_acls/2","doc":"","ref":"Bonfire.Boundaries.Controlleds.html#remove_acls/2"},{"type":"module","title":"Bonfire.Boundaries.Debug","doc":"","ref":"Bonfire.Boundaries.Debug.html"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_grants_on/1","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_grants_on/1"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_grants_on/2","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_grants_on/2"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_my_grants_on/2","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_my_grants_on/2"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_object_acls/1","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_object_acls/1"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_user_acls/2","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_user_acls/2"},{"type":"function","title":"Bonfire.Boundaries.Debug.debug_user_circles/1","doc":"","ref":"Bonfire.Boundaries.Debug.html#debug_user_circles/1"},{"type":"module","title":"Bonfire.Boundaries.Fixtures","doc":"","ref":"Bonfire.Boundaries.Fixtures.html"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.activity_pub_circle/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#activity_pub_circle/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.admin_circle/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#admin_circle/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.custom_acl/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#custom_acl/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.fixtures/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#fixtures/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.global_circles/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#global_circles/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.insert/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#insert/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.instance_acl/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#instance_acl/0"},{"type":"function","title":"Bonfire.Boundaries.Fixtures.mod_circle/0","doc":"","ref":"Bonfire.Boundaries.Fixtures.html#mod_circle/0"},{"type":"module","title":"Bonfire.Boundaries.FixturesUsersMigrations","doc":"","ref":"Bonfire.Boundaries.FixturesUsersMigrations.html"},{"type":"function","title":"Bonfire.Boundaries.FixturesUsersMigrations.down/0","doc":"","ref":"Bonfire.Boundaries.FixturesUsersMigrations.html#down/0"},{"type":"function","title":"Bonfire.Boundaries.FixturesUsersMigrations.up/0","doc":"","ref":"Bonfire.Boundaries.FixturesUsersMigrations.html#up/0"},{"type":"module","title":"Bonfire.Boundaries.Grants","doc":"A grant is part of an `Acl`, and defines a permission (`value` boolean on a `verb`) for a `subject`","ref":"Bonfire.Boundaries.Grants.html"},{"type":"function","title":"Bonfire.Boundaries.Grants.changeset/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#changeset/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.changeset/3","doc":"","ref":"Bonfire.Boundaries.Grants.html#changeset/3"},{"type":"function","title":"Bonfire.Boundaries.Grants.create/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#create/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.create/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#create/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.get/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#get/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.grant/5","doc":"Edits or adds a grant to an Acl \n\nTakes three parameters:\n- subject_id: who we are granting access to\n- acl_id: what ACL we're applying a grant to\n- verb: which verb/action\n- value: true, false, or nil","ref":"Bonfire.Boundaries.Grants.html#grant/5"},{"type":"function","title":"Bonfire.Boundaries.Grants.grant_role/4","doc":"Edits or adds grants to an Acl based on a role","ref":"Bonfire.Boundaries.Grants.html#grant_role/4"},{"type":"function","title":"Bonfire.Boundaries.Grants.grants/0","doc":"","ref":"Bonfire.Boundaries.Grants.html#grants/0"},{"type":"function","title":"Bonfire.Boundaries.Grants.grants_to_tuples/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#grants_to_tuples/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.list/1","doc":"Lists the grants permitted to see.","ref":"Bonfire.Boundaries.Grants.html#list/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.list_for_acl/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#list_for_acl/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.list_my/1","doc":"Lists the grants we are the registered caretakers of that we are\npermitted to see. If any are created without permitting the\nuser to see them, they will not be shown.","ref":"Bonfire.Boundaries.Grants.html#list_my/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.list_q/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#list_q/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.remove_subject_from_acl/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#remove_subject_from_acl/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.subject_grants/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#subject_grants/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.subject_verb_grants/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#subject_verb_grants/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.subjects/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#subjects/1"},{"type":"function","title":"Bonfire.Boundaries.Grants.upsert_or_delete/2","doc":"","ref":"Bonfire.Boundaries.Grants.html#upsert_or_delete/2"},{"type":"function","title":"Bonfire.Boundaries.Grants.verb_subject_grant/1","doc":"","ref":"Bonfire.Boundaries.Grants.html#verb_subject_grant/1"},{"type":"module","title":"Bonfire.Boundaries.Integration","doc":"","ref":"Bonfire.Boundaries.Integration.html"},{"type":"function","title":"Bonfire.Boundaries.Integration.is_local?/1","doc":"","ref":"Bonfire.Boundaries.Integration.html#is_local?/1"},{"type":"function","title":"Bonfire.Boundaries.Integration.many/3","doc":"","ref":"Bonfire.Boundaries.Integration.html#many/3"},{"type":"function","title":"Bonfire.Boundaries.Integration.repo/0","doc":"","ref":"Bonfire.Boundaries.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Boundaries.LiveHandler","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.acl_create/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#acl_create/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.boundaries_on_objects/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#boundaries_on_objects/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.circle_create/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#circle_create/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.maybe_check_boundaries/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#maybe_check_boundaries/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.maybe_redirect_to/3","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#maybe_redirect_to/3"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.my_acls/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#my_acls/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.my_circles_paginated/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#my_circles_paginated/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.prepare_assigns/1","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#prepare_assigns/1"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.remove_from_circle_tuples/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#remove_from_circle_tuples/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.scope_origin/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#scope_origin/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.set_circles_tuples/3","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#set_circles_tuples/3"},{"type":"macro","title":"Bonfire.Boundaries.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.subject_name/1","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#subject_name/1"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.unblock/4","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#unblock/4"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.update_many/2","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#update_many/2"},{"type":"function","title":"Bonfire.Boundaries.LiveHandler.update_many_opts/1","doc":"","ref":"Bonfire.Boundaries.LiveHandler.html#update_many_opts/1"},{"type":"module","title":"Bonfire.Boundaries.Queries","doc":"Helpers for writing common queries. In particular, access control.\n\nMost of this stuff will probably move at some point when we figure\nout how to better organise it.\n\nUnfortunately, ecto is against the sort of thing we take for granted\nin the bonfire ecosystem, so some of these patterns are a bit\nconvoluted to make ecto generate acceptable sql. In particular the\nlateral join and the macro is a bit loltastic when we could just\nreturn an arbitrary tuple if ecto would support inferring (or us\nproviding) the return type of a subquery.","ref":"Bonfire.Boundaries.Queries.html"},{"type":"macro","title":"Bonfire.Boundaries.Queries.add_perms/2","doc":"Call the `add_perms(bool?, bool?)` postgres function for combining permissions.","ref":"Bonfire.Boundaries.Queries.html#add_perms/2"},{"type":"macro","title":"Bonfire.Boundaries.Queries.agg_perms/1","doc":"Call the `agg_perms(bool?)` postgres aggregate for combining permissions.","ref":"Bonfire.Boundaries.Queries.html#agg_perms/1"},{"type":"macro","title":"Bonfire.Boundaries.Queries.boundarise/3","doc":"","ref":"Bonfire.Boundaries.Queries.html#boundarise/3"},{"type":"function","title":"Bonfire.Boundaries.Queries.object_boundarised/2","doc":"","ref":"Bonfire.Boundaries.Queries.html#object_boundarised/2"},{"type":"function","title":"Bonfire.Boundaries.Queries.permitted/1","doc":"","ref":"Bonfire.Boundaries.Queries.html#permitted/1"},{"type":"function","title":"Bonfire.Boundaries.Queries.permitted/2","doc":"","ref":"Bonfire.Boundaries.Queries.html#permitted/2"},{"type":"function","title":"Bonfire.Boundaries.Queries.query_with_summary/3","doc":"A subquery which filters out results the current user is not permitted to perform *all* of the specified verbs on.\n\nParameters are an expression evaluating to the current user, a list of verbs, and optionally an initial query on `Summary` in order to filter what objects are checked.","ref":"Bonfire.Boundaries.Queries.html#query_with_summary/3"},{"type":"function","title":"Bonfire.Boundaries.Queries.skip_boundary_check?/2","doc":"","ref":"Bonfire.Boundaries.Queries.html#skip_boundary_check?/2"},{"type":"module","title":"Bonfire.Boundaries.Roles","doc":"","ref":"Bonfire.Boundaries.Roles.html"},{"type":"function","title":"Bonfire.Boundaries.Roles.cannot_role_from_verb/5","doc":"","ref":"Bonfire.Boundaries.Roles.html#cannot_role_from_verb/5"},{"type":"function","title":"Bonfire.Boundaries.Roles.create/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#create/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.create/3","doc":"","ref":"Bonfire.Boundaries.Roles.html#create/3"},{"type":"function","title":"Bonfire.Boundaries.Roles.edit_verb_permission/4","doc":"","ref":"Bonfire.Boundaries.Roles.html#edit_verb_permission/4"},{"type":"function","title":"Bonfire.Boundaries.Roles.get/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#get/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.preset_boundary_role_from_acl/1","doc":"","ref":"Bonfire.Boundaries.Roles.html#preset_boundary_role_from_acl/1"},{"type":"function","title":"Bonfire.Boundaries.Roles.reset_instance_roles/0","doc":"","ref":"Bonfire.Boundaries.Roles.html#reset_instance_roles/0"},{"type":"function","title":"Bonfire.Boundaries.Roles.role_from_grants/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#role_from_grants/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.role_from_verb/5","doc":"","ref":"Bonfire.Boundaries.Roles.html#role_from_verb/5"},{"type":"function","title":"Bonfire.Boundaries.Roles.role_verbs/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#role_verbs/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.roles_for_dropdown/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#roles_for_dropdown/2"},{"type":"function","title":"Bonfire.Boundaries.Roles.split_tuples_can_cannot/1","doc":"","ref":"Bonfire.Boundaries.Roles.html#split_tuples_can_cannot/1"},{"type":"function","title":"Bonfire.Boundaries.Roles.verbs_for_role/2","doc":"","ref":"Bonfire.Boundaries.Roles.html#verbs_for_role/2"},{"type":"module","title":"Bonfire.Boundaries.RuntimeConfig","doc":"","ref":"Bonfire.Boundaries.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Boundaries.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs` line","ref":"Bonfire.Boundaries.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Boundaries.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Boundaries.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Boundaries.Summary","doc":"","ref":"Bonfire.Boundaries.Summary.html"},{"type":"function","title":"Bonfire.Boundaries.Summary.migrate_views/0","doc":"","ref":"Bonfire.Boundaries.Summary.html#migrate_views/0"},{"type":"module","title":"Bonfire.Boundaries.Users","doc":"Reads fixtures in configuration and creates a default boundaries setup for a user","ref":"Bonfire.Boundaries.Users.html"},{"type":"function","title":"Bonfire.Boundaries.Users.create_default_boundaries/2","doc":"","ref":"Bonfire.Boundaries.Users.html#create_default_boundaries/2"},{"type":"function","title":"Bonfire.Boundaries.Users.create_missing_boundaries/2","doc":"","ref":"Bonfire.Boundaries.Users.html#create_missing_boundaries/2"},{"type":"function","title":"Bonfire.Boundaries.Users.do_insert_main/2","doc":"","ref":"Bonfire.Boundaries.Users.html#do_insert_main/2"},{"type":"function","title":"Bonfire.Boundaries.Users.prepare_default_boundaries/3","doc":"","ref":"Bonfire.Boundaries.Users.html#prepare_default_boundaries/3"},{"type":"module","title":"Bonfire.Boundaries.Verbs","doc":"","ref":"Bonfire.Boundaries.Verbs.html"},{"type":"function","title":"Bonfire.Boundaries.Verbs.changeset/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#changeset/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.create/1","doc":"","ref":"Bonfire.Boundaries.Verbs.html#create/1"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get!/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get!/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get_id/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get_id/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get_id!/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get_id!/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get_slug/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get_slug/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.get_tuple/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#get_tuple/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.ids/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#ids/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.list/2","doc":"","ref":"Bonfire.Boundaries.Verbs.html#list/2"},{"type":"function","title":"Bonfire.Boundaries.Verbs.list_verbs_debug/0","doc":"","ref":"Bonfire.Boundaries.Verbs.html#list_verbs_debug/0"},{"type":"function","title":"Bonfire.Boundaries.Verbs.slugs/0","doc":"","ref":"Bonfire.Boundaries.Verbs.html#slugs/0"},{"type":"function","title":"Bonfire.Boundaries.Verbs.verbs/0","doc":"","ref":"Bonfire.Boundaries.Verbs.html#verbs/0"},{"type":"function","title":"Bonfire.Boundaries.Verbs.verbs_count/0","doc":"","ref":"Bonfire.Boundaries.Verbs.html#verbs_count/0"},{"type":"module","title":"Bonfire.Boundaries.Web.ExcludeBoundaries","doc":"","ref":"Bonfire.Boundaries.Web.ExcludeBoundaries.html"},{"type":"function","title":"Bonfire.Boundaries.Web.ExcludeBoundaries.do_handle_event/3","doc":"","ref":"Bonfire.Boundaries.Web.ExcludeBoundaries.html#do_handle_event/3"},{"type":"module","title":"Bonfire.Boundaries.Web.Routes","doc":"","ref":"Bonfire.Boundaries.Web.Routes.html"},{"type":"function","title":"Bonfire.Boundaries.Web.Routes.declare_routes/0","doc":"","ref":"Bonfire.Boundaries.Web.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.Common","doc":"A library of common utils and helpers used across Bonfire extensions\n\nRefer to the [README](https://doc.bonfirenetworks.org/bonfire_common.html)","ref":"Bonfire.Common.html"},{"type":"module","title":"Bonfire.Common.Benchmark","doc":"Simple way to measure the execution time of functions. It is preferred to use `@decorator` from `Untangle` instead.","ref":"Bonfire.Common.Benchmark.html"},{"type":"function","title":"Bonfire.Common.Benchmark.apply_timed/1","doc":"","ref":"Bonfire.Common.Benchmark.html#apply_timed/1"},{"type":"function","title":"Bonfire.Common.Benchmark.apply_timed/2","doc":"","ref":"Bonfire.Common.Benchmark.html#apply_timed/2"},{"type":"function","title":"Bonfire.Common.Benchmark.apply_timed/3","doc":"","ref":"Bonfire.Common.Benchmark.html#apply_timed/3"},{"type":"module","title":"Bonfire.Common.Cache","doc":"Helpers for caching data and operations","ref":"Bonfire.Common.Cache.html"},{"type":"macro","title":"Bonfire.Common.Cache.cache/0","doc":"","ref":"Bonfire.Common.Cache.html#cache/0"},{"type":"function","title":"Bonfire.Common.Cache.cache_store/1","doc":"","ref":"Bonfire.Common.Cache.html#cache_store/1"},{"type":"function","title":"Bonfire.Common.Cache.cached_preloads_for_objects/3","doc":"","ref":"Bonfire.Common.Cache.html#cached_preloads_for_objects/3"},{"type":"function","title":"Bonfire.Common.Cache.get/2","doc":"","ref":"Bonfire.Common.Cache.html#get/2"},{"type":"function","title":"Bonfire.Common.Cache.get!/2","doc":"","ref":"Bonfire.Common.Cache.html#get!/2"},{"type":"function","title":"Bonfire.Common.Cache.maybe_apply_cached/3","doc":"Takes a function (or module and function names) and a set of arguments for that function, and tries to fetch the previous result of running that function from the in-memory cache, using the MFA (module name/function name/arguments used) to generate the cache key. If it's not in the cache, it executes the function, and caches and returns the result.","ref":"Bonfire.Common.Cache.html#maybe_apply_cached/3"},{"type":"function","title":"Bonfire.Common.Cache.put/3","doc":"","ref":"Bonfire.Common.Cache.html#put/3"},{"type":"function","title":"Bonfire.Common.Cache.remove/2","doc":"It removes the entry associated with a key from the cache.","ref":"Bonfire.Common.Cache.html#remove/2"},{"type":"function","title":"Bonfire.Common.Cache.remove_all/1","doc":"","ref":"Bonfire.Common.Cache.html#remove_all/1"},{"type":"function","title":"Bonfire.Common.Cache.reset/3","doc":"It removes the result of a given function from the cache.","ref":"Bonfire.Common.Cache.html#reset/3"},{"type":"module","title":"Bonfire.Common.Changelog.Github.DataGrabber","doc":"Datagrabber for changelog generation, `Versioce.Config.Changelog.datagrabber/0`\n\nUses repository history to obtain and format data.","ref":"Bonfire.Common.Changelog.Github.DataGrabber.html"},{"type":"function","title":"Bonfire.Common.Changelog.Github.DataGrabber.fetch_issues/1","doc":"","ref":"Bonfire.Common.Changelog.Github.DataGrabber.html#fetch_issues/1"},{"type":"function","title":"Bonfire.Common.Changelog.Github.DataGrabber.format_issue/1","doc":"","ref":"Bonfire.Common.Changelog.Github.DataGrabber.html#format_issue/1"},{"type":"function","title":"Bonfire.Common.Changelog.Github.DataGrabber.prepare_data/2","doc":"","ref":"Bonfire.Common.Changelog.Github.DataGrabber.html#prepare_data/2"},{"type":"module","title":"Bonfire.Common.Config","doc":"","ref":"Bonfire.Common.Config.html"},{"type":"macro","title":"Bonfire.Common.Config.compilation_error/1","doc":"","ref":"Bonfire.Common.Config.html#compilation_error/1"},{"type":"function","title":"Bonfire.Common.Config.delete/2","doc":"","ref":"Bonfire.Common.Config.html#delete/2"},{"type":"function","title":"Bonfire.Common.Config.endpoint_module/0","doc":"","ref":"Bonfire.Common.Config.html#endpoint_module/0"},{"type":"function","title":"Bonfire.Common.Config.env/0","doc":"","ref":"Bonfire.Common.Config.html#env/0"},{"type":"function","title":"Bonfire.Common.Config.get/3","doc":"Get config value for a config key (optionally from a specific OTP app or Bonfire extension)","ref":"Bonfire.Common.Config.html#get/3"},{"type":"function","title":"Bonfire.Common.Config.get!/2","doc":"","ref":"Bonfire.Common.Config.html#get!/2"},{"type":"function","title":"Bonfire.Common.Config.get_ext/1","doc":"Get *all* config keys/values for a specific Bonfire extension or OTP app","ref":"Bonfire.Common.Config.html#get_ext/1"},{"type":"function","title":"Bonfire.Common.Config.get_ext/3","doc":"Get config value for a Bonfire extension or OTP app config key","ref":"Bonfire.Common.Config.html#get_ext/3"},{"type":"function","title":"Bonfire.Common.Config.get_ext!/1","doc":"","ref":"Bonfire.Common.Config.html#get_ext!/1"},{"type":"function","title":"Bonfire.Common.Config.get_ext!/2","doc":"","ref":"Bonfire.Common.Config.html#get_ext!/2"},{"type":"function","title":"Bonfire.Common.Config.keys_tree/1","doc":"Constructs a key path for settings/config, which always starts with an app or extension name (which defaults to the main OTP app)\n\niex> keys_tree([:bonfire_me, Bonfire.Me.Users])\n [:bonfire_me, Bonfire.Me.Users]\n\niex> keys_tree(Bonfire.Me.Users)\n [:bonfire_me, Bonfire.Me.Users]\n\niex> keys_tree(:bonfire_me)\n [:bonfire_me]\n\niex> keys_tree(:random_atom)\n [:bonfire, :random_atom]\n\niex>keys_tree([:random_atom, :sub_key])\n [:bonfire, :random_atom, :sub_key]","ref":"Bonfire.Common.Config.html#keys_tree/1"},{"type":"function","title":"Bonfire.Common.Config.module_enabled?/1","doc":"","ref":"Bonfire.Common.Config.html#module_enabled?/1"},{"type":"function","title":"Bonfire.Common.Config.put/1","doc":"","ref":"Bonfire.Common.Config.html#put/1"},{"type":"function","title":"Bonfire.Common.Config.put/3","doc":"","ref":"Bonfire.Common.Config.html#put/3"},{"type":"function","title":"Bonfire.Common.Config.repo/0","doc":"","ref":"Bonfire.Common.Config.html#repo/0"},{"type":"function","title":"Bonfire.Common.Config.require_extension_config!/1","doc":"Stop if an Elixir module or extension / OTP app doesn't have configuration keys set up","ref":"Bonfire.Common.Config.html#require_extension_config!/1"},{"type":"function","title":"Bonfire.Common.Config.top_level_otp_app/0","doc":"","ref":"Bonfire.Common.Config.html#top_level_otp_app/0"},{"type":"exception","title":"Bonfire.Common.Config.Error","doc":"","ref":"Bonfire.Common.Config.Error.html"},{"type":"module","title":"Bonfire.Common.Config.LoadExtensionsConfig","doc":"Loads instance Settings from DB into Elixir's Config\n\nWhile this module is a GenServer, it is only responsible for querying the settings, putting them in Config, and then exits with :ignore having done so.","ref":"Bonfire.Common.Config.LoadExtensionsConfig.html"},{"type":"function","title":"Bonfire.Common.Config.LoadExtensionsConfig.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.Config.LoadExtensionsConfig.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Config.LoadExtensionsConfig.load_configs/1","doc":"","ref":"Bonfire.Common.Config.LoadExtensionsConfig.html#load_configs/1"},{"type":"function","title":"Bonfire.Common.Config.LoadExtensionsConfig.start_link/1","doc":"Populates the global cache with table data via introspection.","ref":"Bonfire.Common.Config.LoadExtensionsConfig.html#start_link/1"},{"type":"behaviour","title":"Bonfire.Common.ConfigModule","doc":"A global cache of runtime config modules to be loaded at app startup.","ref":"Bonfire.Common.ConfigModule.html"},{"type":"callback","title":"Bonfire.Common.ConfigModule.config/0","doc":"Set runtime config","ref":"Bonfire.Common.ConfigModule.html#c:config/0"},{"type":"callback","title":"Bonfire.Common.ConfigModule.config_module/0","doc":"Declares a config module","ref":"Bonfire.Common.ConfigModule.html#c:config_module/0"},{"type":"function","title":"Bonfire.Common.ConfigModule.modules/0","doc":"","ref":"Bonfire.Common.ConfigModule.html#modules/0"},{"type":"behaviour","title":"Bonfire.Common.ContextModule","doc":"Find a context or query module via its schema, backed by a global cache of known modules.","ref":"Bonfire.Common.ContextModule.html"},{"type":"function","title":"Bonfire.Common.ContextModule.apply_error/2","doc":"","ref":"Bonfire.Common.ContextModule.html#apply_error/2"},{"type":"function","title":"Bonfire.Common.ContextModule.context_function_error/2","doc":"","ref":"Bonfire.Common.ContextModule.html#context_function_error/2"},{"type":"callback","title":"Bonfire.Common.ContextModule.context_module/0","doc":"Declares a context module","ref":"Bonfire.Common.ContextModule.html#c:context_module/0"},{"type":"function","title":"Bonfire.Common.ContextModule.context_module/1","doc":"Get a context identified by schema","ref":"Bonfire.Common.ContextModule.html#context_module/1"},{"type":"function","title":"Bonfire.Common.ContextModule.context_module!/1","doc":"Look up a context, throw :not_found if not found.","ref":"Bonfire.Common.ContextModule.html#context_module!/1"},{"type":"function","title":"Bonfire.Common.ContextModule.context_modules/1","doc":"Look up many contexts at once, throw :not_found if any of them are not found","ref":"Bonfire.Common.ContextModule.html#context_modules/1"},{"type":"function","title":"Bonfire.Common.ContextModule.linked_query_modules/0","doc":"","ref":"Bonfire.Common.ContextModule.html#linked_query_modules/0"},{"type":"function","title":"Bonfire.Common.ContextModule.linked_schema_modules/0","doc":"","ref":"Bonfire.Common.ContextModule.html#linked_schema_modules/0"},{"type":"function","title":"Bonfire.Common.ContextModule.maybe_apply/4","doc":"Given an object or schema module name, run a function on the associated context module.\nTODO: refactor to re-use Utils.maybe_apply?","ref":"Bonfire.Common.ContextModule.html#maybe_apply/4"},{"type":"function","title":"Bonfire.Common.ContextModule.maybe_context_module/1","doc":"","ref":"Bonfire.Common.ContextModule.html#maybe_context_module/1"},{"type":"function","title":"Bonfire.Common.ContextModule.modules/0","doc":"","ref":"Bonfire.Common.ContextModule.html#modules/0"},{"type":"callback","title":"Bonfire.Common.ContextModule.query_module/0","doc":"Points to the related queries module","ref":"Bonfire.Common.ContextModule.html#c:query_module/0"},{"type":"callback","title":"Bonfire.Common.ContextModule.schema_module/0","doc":"Points to the related schema module","ref":"Bonfire.Common.ContextModule.html#c:schema_module/0"},{"type":"module","title":"Bonfire.Common.DatesTimes","doc":"Date/time helpers","ref":"Bonfire.Common.DatesTimes.html"},{"type":"function","title":"Bonfire.Common.DatesTimes.date_from_now/2","doc":"Takes a ULID ID (or an object with one) or a `DateTime` struct, and turns the date into a relative phrase, e.g. `2 days ago`, using the `Cldr.DateTime` or `Timex` library.","ref":"Bonfire.Common.DatesTimes.html#date_from_now/2"},{"type":"function","title":"Bonfire.Common.DatesTimes.date_from_pointer/1","doc":"Takes an object (or string with an ULID) and converts the ULID ID to a `DateTime` struct.","ref":"Bonfire.Common.DatesTimes.html#date_from_pointer/1"},{"type":"function","title":"Bonfire.Common.DatesTimes.format/2","doc":"","ref":"Bonfire.Common.DatesTimes.html#format/2"},{"type":"function","title":"Bonfire.Common.DatesTimes.future?/1","doc":"","ref":"Bonfire.Common.DatesTimes.html#future?/1"},{"type":"function","title":"Bonfire.Common.DatesTimes.now/0","doc":"","ref":"Bonfire.Common.DatesTimes.html#now/0"},{"type":"function","title":"Bonfire.Common.DatesTimes.past/2","doc":"","ref":"Bonfire.Common.DatesTimes.html#past/2"},{"type":"function","title":"Bonfire.Common.DatesTimes.past?/1","doc":"","ref":"Bonfire.Common.DatesTimes.html#past?/1"},{"type":"function","title":"Bonfire.Common.DatesTimes.remove/3","doc":"","ref":"Bonfire.Common.DatesTimes.html#remove/3"},{"type":"function","title":"Bonfire.Common.DatesTimes.to_date/1","doc":"","ref":"Bonfire.Common.DatesTimes.html#to_date/1"},{"type":"module","title":"Bonfire.Common.Enums","doc":"Extra functions to manipulate enumerables, basically an extension of `Enum`","ref":"Bonfire.Common.Enums.html"},{"type":"function","title":"Bonfire.Common.Enums.attr_get_id/2","doc":"Gets the value of a key in a map and returns the ID of that value (i.e. either the :id field of that association, or the value itself).","ref":"Bonfire.Common.Enums.html#attr_get_id/2"},{"type":"function","title":"Bonfire.Common.Enums.count_where/2","doc":"Counts the number of items in an enumerable that satisfy the given function.","ref":"Bonfire.Common.Enums.html#count_where/2"},{"type":"function","title":"Bonfire.Common.Enums.deep_merge/3","doc":"Recursively merges two data structures (`left` and `right`), which can be structs, maps or lists.\nIf `left` and `right` are `Ecto.Changeset`s, `merge_changesets/2` is called on them.\nIf `left` is a struct, a similar struct is returned with the merged values.\nIf `left` and `right` are lists, they are concatenated unless `:replace_lists` option is set to `true`.","ref":"Bonfire.Common.Enums.html#deep_merge/3"},{"type":"function","title":"Bonfire.Common.Enums.deep_merge_reduce/2","doc":"Deep merges a list of maps into a single map.","ref":"Bonfire.Common.Enums.html#deep_merge_reduce/2"},{"type":"function","title":"Bonfire.Common.Enums.enum_get/3","doc":"Attempt getting a value out of a map by atom key, or try with string key, or return a fallback","ref":"Bonfire.Common.Enums.html#enum_get/3"},{"type":"function","title":"Bonfire.Common.Enums.filter_empty/2","doc":"Takes a value and a fallback value. If the value is empty (e.g. an empty map, a non-loaded association, an empty list, an empty string, or nil), the fallback value is returned.","ref":"Bonfire.Common.Enums.html#filter_empty/2"},{"type":"function","title":"Bonfire.Common.Enums.filter_empty/3","doc":"","ref":"Bonfire.Common.Enums.html#filter_empty/3"},{"type":"function","title":"Bonfire.Common.Enums.flatter/1","doc":"Takes a list and recursively flattens it by recursively flattening the head and tail of the list","ref":"Bonfire.Common.Enums.html#flatter/1"},{"type":"function","title":"Bonfire.Common.Enums.fun/3","doc":"Applies a function from one of Elixir's `Map`, `Keyword`, or `List` modules depending on the type of the given enumerable.","ref":"Bonfire.Common.Enums.html#fun/3"},{"type":"function","title":"Bonfire.Common.Enums.group/2","doc":"Like `Enum.group_by/3`, except children are required to be unique (will throw\notherwise!) and the resulting map does not wrap each item in a list","ref":"Bonfire.Common.Enums.html#group/2"},{"type":"function","title":"Bonfire.Common.Enums.group_map/2","doc":"","ref":"Bonfire.Common.Enums.html#group_map/2"},{"type":"function","title":"Bonfire.Common.Enums.has_duplicates?/2","doc":"Checks if the given list contains any duplicates. Takes an optional function that can be used to extract and/or compute the value to compare for each element in the list.","ref":"Bonfire.Common.Enums.html#has_duplicates?/2"},{"type":"function","title":"Bonfire.Common.Enums.id/1","doc":"Extracts a binary ID from various data structures, such as a map containing the key :id or \"id\", a changeset, or a tuple containing the atom :id.","ref":"Bonfire.Common.Enums.html#id/1"},{"type":"function","title":"Bonfire.Common.Enums.ids/1","doc":"","ref":"Bonfire.Common.Enums.html#ids/1"},{"type":"function","title":"Bonfire.Common.Enums.input_to_atoms/2","doc":"Takes a data structure and converts any keys in maps to (previously defined) atoms, recursively. By default any unknown string keys will be discarded. It can optionally also convert string values to known atoms as well.","ref":"Bonfire.Common.Enums.html#input_to_atoms/2"},{"type":"function","title":"Bonfire.Common.Enums.input_to_value/7","doc":"","ref":"Bonfire.Common.Enums.html#input_to_value/7"},{"type":"function","title":"Bonfire.Common.Enums.map_filter_empty/1","doc":"Recursively filters nil values from a map","ref":"Bonfire.Common.Enums.html#map_filter_empty/1"},{"type":"function","title":"Bonfire.Common.Enums.map_key_replace/4","doc":"Renames a key in a map. Optionally changes the value as well.","ref":"Bonfire.Common.Enums.html#map_key_replace/4"},{"type":"function","title":"Bonfire.Common.Enums.map_key_replace_existing/4","doc":"Renames a key in a `map`, only if the key exists in the `map`. Optionally changes the value as well.","ref":"Bonfire.Common.Enums.html#map_key_replace_existing/4"},{"type":"function","title":"Bonfire.Common.Enums.map_new/2","doc":"Takes an enumerable object and converts it to a map. If it is not an enumerable, a map is created with the data under a fallback key (`:data` by default).","ref":"Bonfire.Common.Enums.html#map_new/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_append/2","doc":"Appends a value to a list, but only if the value is not nil or an empty list.","ref":"Bonfire.Common.Enums.html#maybe_append/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_elem/3","doc":"Takes any element, an index and a fallback value. If the element is a Tuple it returns either the tuple value at that index, otherwise it returns the fallback. If the tuple doesn't contain such an index, it raises `ArgumentError`.","ref":"Bonfire.Common.Enums.html#maybe_elem/3"},{"type":"function","title":"Bonfire.Common.Enums.maybe_flatten/1","doc":"Flattens the list if provided a list, otherwise just return the input","ref":"Bonfire.Common.Enums.html#maybe_flatten/1"},{"type":"function","title":"Bonfire.Common.Enums.maybe_from_struct/1","doc":"If given a struct, returns a map representation of it","ref":"Bonfire.Common.Enums.html#maybe_from_struct/1"},{"type":"function","title":"Bonfire.Common.Enums.maybe_get/3","doc":"","ref":"Bonfire.Common.Enums.html#maybe_get/3"},{"type":"function","title":"Bonfire.Common.Enums.maybe_list/2","doc":"","ref":"Bonfire.Common.Enums.html#maybe_list/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_merge_to_struct/2","doc":"","ref":"Bonfire.Common.Enums.html#maybe_merge_to_struct/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_put/3","doc":"Updates a `map` with the given `key` and `value`, but only if the `value` is not `nil`, an empty list or an empty string.","ref":"Bonfire.Common.Enums.html#maybe_put/3"},{"type":"function","title":"Bonfire.Common.Enums.maybe_to_keyword_list/2","doc":"Returns a keyword list representation of the input object. If the second argument is `true`, the function will recursively convert nested data structures to keyword lists as well.\nNote: make sure that all keys are atoms, i.e. using `input_to_atoms` first, otherwise the enumerable(s) containing a string key won't be converted.","ref":"Bonfire.Common.Enums.html#maybe_to_keyword_list/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_to_map/2","doc":"Returns a map representation of the input object. If the second argument is `true`, the function will recursively convert nested data structures to maps as well.","ref":"Bonfire.Common.Enums.html#maybe_to_map/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_to_struct/2","doc":"Takes a data structure and tries to convert it to a struct, using some hints in the data (eg. `__type` or `index_type` fields) or a manually-provided type.","ref":"Bonfire.Common.Enums.html#maybe_to_struct/2"},{"type":"function","title":"Bonfire.Common.Enums.maybe_to_structs/2","doc":"Takes a data structure and recursively converts any known keys to atoms and then tries to recursively convert any maps to structs, using some hints in the data (eg. `__type` or `index_type` fields).","ref":"Bonfire.Common.Enums.html#maybe_to_structs/2"},{"type":"function","title":"Bonfire.Common.Enums.merge_as_map/3","doc":"Merges two maps or lists into a single map","ref":"Bonfire.Common.Enums.html#merge_as_map/3"},{"type":"function","title":"Bonfire.Common.Enums.merge_changesets/2","doc":"Merges two `Ecto` changesets. If both changesets have a prepare field, the function concatenates the values of the prepare fields. Either way it also calls `Ecto.Changeset.merge/2` operation.","ref":"Bonfire.Common.Enums.html#merge_changesets/2"},{"type":"function","title":"Bonfire.Common.Enums.merge_keeping_only_first_keys/2","doc":"Merges two maps map_1 and map_2, but only keeps the keys that exist in map_1.","ref":"Bonfire.Common.Enums.html#merge_keeping_only_first_keys/2"},{"type":"function","title":"Bonfire.Common.Enums.merge_structs_as_map/2","doc":"","ref":"Bonfire.Common.Enums.html#merge_structs_as_map/2"},{"type":"function","title":"Bonfire.Common.Enums.merge_uniq/2","doc":"","ref":"Bonfire.Common.Enums.html#merge_uniq/2"},{"type":"function","title":"Bonfire.Common.Enums.naughty_to_atoms!/2","doc":"","ref":"Bonfire.Common.Enums.html#naughty_to_atoms!/2"},{"type":"function","title":"Bonfire.Common.Enums.nested_structs_to_maps/1","doc":"Recursively converts all nested structs to maps.","ref":"Bonfire.Common.Enums.html#nested_structs_to_maps/1"},{"type":"function","title":"Bonfire.Common.Enums.put_new_in/3","doc":"This function is used to insert a new value into a nested map data structure, where the path to the location of the value is specified as a list of keys.\n\nWhen the path is a single-element list, if the key already exists in the map, it returns the original map; otherwise, it inserts the key-value pair.\n\nWhen the path is a list of more than one key, the first element of the list (key) represents the key for the current level of the nested map, and the remaining elements (path) represent the keys for the nested map at the next level. The function starts by retrieving the value at the current level of the map (if it exists) and updates the map with the new value.","ref":"Bonfire.Common.Enums.html#put_new_in/3"},{"type":"function","title":"Bonfire.Common.Enums.stringify_keys/2","doc":"Takes a map or keyword list, and returns a map with any atom keys converted to string keys. It can optionally do so recursively.","ref":"Bonfire.Common.Enums.html#stringify_keys/2"},{"type":"function","title":"Bonfire.Common.Enums.struct_from_map/2","doc":"","ref":"Bonfire.Common.Enums.html#struct_from_map/2"},{"type":"function","title":"Bonfire.Common.Enums.struct_to_map/1","doc":"","ref":"Bonfire.Common.Enums.html#struct_to_map/1"},{"type":"function","title":"Bonfire.Common.Enums.uniq_by_id/1","doc":"Takes a list of maps that have an id field and returns a list with only the unique maps. Uniqueness is determined based on the id field and not the full contents of the maps.","ref":"Bonfire.Common.Enums.html#uniq_by_id/1"},{"type":"module","title":"Bonfire.Common.Errors","doc":"","ref":"Bonfire.Common.Errors.html"},{"type":"function","title":"Bonfire.Common.Errors.debug_banner_with_trace/4","doc":"","ref":"Bonfire.Common.Errors.html#debug_banner_with_trace/4"},{"type":"function","title":"Bonfire.Common.Errors.debug_exception/5","doc":"","ref":"Bonfire.Common.Errors.html#debug_exception/5"},{"type":"function","title":"Bonfire.Common.Errors.debug_log/4","doc":"","ref":"Bonfire.Common.Errors.html#debug_log/4"},{"type":"function","title":"Bonfire.Common.Errors.error_msg/1","doc":"Turns various kind of errors into an error message string. Used to format errors in a way that can be easily read by the user.","ref":"Bonfire.Common.Errors.html#error_msg/1"},{"type":"function","title":"Bonfire.Common.Errors.format_banner/4","doc":"Normalizes and formats any throw/error/exit.\nThe message is formatted and displayed in the same\nformat as used by Elixir's CLI.\nThe third argument is the stacktrace which is used to enrich\na normalized error with more information. It is only used when\nthe kind is an error.","ref":"Bonfire.Common.Errors.html#format_banner/4"},{"type":"function","title":"Bonfire.Common.Errors.format_location/1","doc":"","ref":"Bonfire.Common.Errors.html#format_location/1"},{"type":"function","title":"Bonfire.Common.Errors.format_mfa/3","doc":"Receives a module, fun and arity and formats it\nas shown in stacktraces. The arity may also be a list\nof arguments.","ref":"Bonfire.Common.Errors.html#format_mfa/3"},{"type":"function","title":"Examples - Bonfire.Common.Errors.format_mfa/3","doc":"iex> Exception.format_mfa(Foo, :bar, 1)\n {Foo, :bar, \"Foo.bar/1\"}\n iex> Exception.format_mfa(Foo, :bar, [])\n {Foo, :bar, \"Foo.bar()\"}\n iex> Exception.format_mfa(nil, :bar, [])\n {nil, :bar, \"nil.bar()\"}\nAnonymous functions are reported as -func/arity-anonfn-count-,\nwhere func is the name of the enclosing function. Convert to\n\"anonymous fn in func/arity\"","ref":"Bonfire.Common.Errors.html#format_mfa/3-examples"},{"type":"function","title":"Bonfire.Common.Errors.format_stacktrace/2","doc":"Formats the stacktrace.\nA stacktrace must be given as an argument. If not, the stacktrace\nis retrieved from `Process.info/2`.","ref":"Bonfire.Common.Errors.html#format_stacktrace/2"},{"type":"function","title":"Bonfire.Common.Errors.format_stacktrace_entry/2","doc":"Receives a stacktrace entry and formats it into a string.","ref":"Bonfire.Common.Errors.html#format_stacktrace_entry/2"},{"type":"function","title":"Bonfire.Common.Errors.format_stacktrace_entry_sliced/2","doc":"","ref":"Bonfire.Common.Errors.html#format_stacktrace_entry_sliced/2"},{"type":"function","title":"Bonfire.Common.Errors.last_stacktrace/0","doc":"","ref":"Bonfire.Common.Errors.html#last_stacktrace/0"},{"type":"function","title":"Bonfire.Common.Errors.map_error/2","doc":"","ref":"Bonfire.Common.Errors.html#map_error/2"},{"type":"function","title":"Bonfire.Common.Errors.maybe_ok_error/2","doc":"Applies change_fn if the first parameter is an {:ok, val} tuple, else returns the value","ref":"Bonfire.Common.Errors.html#maybe_ok_error/2"},{"type":"function","title":"Bonfire.Common.Errors.mf_maybe_link_to_code/4","doc":"","ref":"Bonfire.Common.Errors.html#mf_maybe_link_to_code/4"},{"type":"function","title":"Bonfire.Common.Errors.module_maybe_link_to_code/3","doc":"","ref":"Bonfire.Common.Errors.html#module_maybe_link_to_code/3"},{"type":"function","title":"Bonfire.Common.Errors.replace_error/2","doc":"","ref":"Bonfire.Common.Errors.html#replace_error/2"},{"type":"module","title":"Bonfire.Common.Extend","doc":"","ref":"Bonfire.Common.Extend.html"},{"type":"function","title":"Bonfire.Common.Extend.application_loaded?/1","doc":"","ref":"Bonfire.Common.Extend.html#application_loaded?/1"},{"type":"function","title":"Bonfire.Common.Extend.disabled_value?/1","doc":"","ref":"Bonfire.Common.Extend.html#disabled_value?/1"},{"type":"macro","title":"Bonfire.Common.Extend.extend_module/1","doc":"Extend a module (i.e. define `defdelegate` and `defoverridable` for all functions from the source module in the current module. \nUsage:\nimport Module.Extend\nextend_module Common.Text","ref":"Bonfire.Common.Extend.html#extend_module/1"},{"type":"function","title":"Bonfire.Common.Extend.extension_enabled?/2","doc":"Whether an Elixir module or extension / OTP app is present AND not part of a disabled Bonfire extension (by having in config something like `config :bonfire_common, modularity: :disabled`)","ref":"Bonfire.Common.Extend.html#extension_enabled?/2"},{"type":"function","title":"Bonfire.Common.Extend.extension_loaded?/1","doc":"Whether an Elixir module or extension / OTP app is present","ref":"Bonfire.Common.Extend.html#extension_loaded?/1"},{"type":"function","title":"Bonfire.Common.Extend.function_ast/2","doc":"","ref":"Bonfire.Common.Extend.html#function_ast/2"},{"type":"function","title":"Bonfire.Common.Extend.function_code/2","doc":"","ref":"Bonfire.Common.Extend.html#function_code/2"},{"type":"function","title":"Bonfire.Common.Extend.function_line_number/2","doc":"Return the number of the first line where a function is defined in a module","ref":"Bonfire.Common.Extend.html#function_line_number/2"},{"type":"function","title":"Bonfire.Common.Extend.function_line_numbers/2","doc":"Return the numbers (as a tuple) of the first and last lines of a function's definition in a module","ref":"Bonfire.Common.Extend.html#function_line_numbers/2"},{"type":"function","title":"Bonfire.Common.Extend.generate_reverse_router!/0","doc":"","ref":"Bonfire.Common.Extend.html#generate_reverse_router!/0"},{"type":"function","title":"Bonfire.Common.Extend.has_extension_config?/1","doc":"Whether an Elixir module or extension / OTP app has configuration keys set up","ref":"Bonfire.Common.Extend.html#has_extension_config?/1"},{"type":"macro","title":"Bonfire.Common.Extend.import_if_enabled/2","doc":"","ref":"Bonfire.Common.Extend.html#import_if_enabled/2"},{"type":"function","title":"Bonfire.Common.Extend.inject_function/3","doc":"Copy the code defining a function from its original module to one that extends it (or a manually specified module). \nUsage: `Module.Extend.inject_function(Common.TextExtended, :blank?)`","ref":"Bonfire.Common.Extend.html#inject_function/3"},{"type":"function","title":"Bonfire.Common.Extend.macro_inspect/1","doc":"","ref":"Bonfire.Common.Extend.html#macro_inspect/1"},{"type":"function","title":"Bonfire.Common.Extend.maybe_extension_loaded/1","doc":"","ref":"Bonfire.Common.Extend.html#maybe_extension_loaded/1"},{"type":"function","title":"Bonfire.Common.Extend.maybe_extension_loaded!/1","doc":"","ref":"Bonfire.Common.Extend.html#maybe_extension_loaded!/1"},{"type":"function","title":"Bonfire.Common.Extend.maybe_module/2","doc":"Given an Elixir module, this returns an Elixir module, as long as the module and extension / OTP app is present AND not disabled (eg. by having in config something like `config Bonfire.Common.Text, modularity: :disabled`)\n\nImportant note: you should make sure to use the returned module, rather than the one provided as argument, as it can be different, this allows for swapping out modules in config or user settings (eg. by having in config something like `config Bonfire.Common.Text, modularity: MyCustomExtension.Text`)","ref":"Bonfire.Common.Extend.html#maybe_module/2"},{"type":"function","title":"Bonfire.Common.Extend.maybe_module!/2","doc":"","ref":"Bonfire.Common.Extend.html#maybe_module!/2"},{"type":"function","title":"Bonfire.Common.Extend.maybe_module_loaded/1","doc":"","ref":"Bonfire.Common.Extend.html#maybe_module_loaded/1"},{"type":"function","title":"Bonfire.Common.Extend.maybe_schema_or_pointer/1","doc":"","ref":"Bonfire.Common.Extend.html#maybe_schema_or_pointer/1"},{"type":"function","title":"Bonfire.Common.Extend.module_code/1","doc":"","ref":"Bonfire.Common.Extend.html#module_code/1"},{"type":"function","title":"Bonfire.Common.Extend.module_enabled?/2","doc":"Whether an Elixir module or extension / OTP app is present AND not disabled (eg. by having in config something like `config :bonfire_common, modularity: :disabled`)","ref":"Bonfire.Common.Extend.html#module_enabled?/2"},{"type":"function","title":"Bonfire.Common.Extend.module_exists?/1","doc":"","ref":"Bonfire.Common.Extend.html#module_exists?/1"},{"type":"function","title":"Bonfire.Common.Extend.module_exists_or/2","doc":"","ref":"Bonfire.Common.Extend.html#module_exists_or/2"},{"type":"function","title":"Bonfire.Common.Extend.module_file/1","doc":"","ref":"Bonfire.Common.Extend.html#module_file/1"},{"type":"function","title":"Bonfire.Common.Extend.module_file_code/1","doc":"","ref":"Bonfire.Common.Extend.html#module_file_code/1"},{"type":"function","title":"Bonfire.Common.Extend.quoted_import_if_enabled/3","doc":"","ref":"Bonfire.Common.Extend.html#quoted_import_if_enabled/3"},{"type":"function","title":"Bonfire.Common.Extend.quoted_require_if_enabled/3","doc":"","ref":"Bonfire.Common.Extend.html#quoted_require_if_enabled/3"},{"type":"function","title":"Bonfire.Common.Extend.quoted_use_if_enabled/3","doc":"","ref":"Bonfire.Common.Extend.html#quoted_use_if_enabled/3"},{"type":"macro","title":"Bonfire.Common.Extend.require_if_enabled/2","doc":"","ref":"Bonfire.Common.Extend.html#require_if_enabled/2"},{"type":"function","title":"Bonfire.Common.Extend.split_lines/1","doc":"","ref":"Bonfire.Common.Extend.html#split_lines/1"},{"type":"macro","title":"Bonfire.Common.Extend.use_if_enabled/2","doc":"","ref":"Bonfire.Common.Extend.html#use_if_enabled/2"},{"type":"behaviour","title":"Bonfire.Common.ExtensionBehaviour","doc":"A Global cache of known Behaviours in Bonfire\n\nUse of the ExtensionBehaviour Service requires declaring `@behaviour Bonfire.Common.ExtensionBehaviour` in your behaviour module. This module will then index those behaviours *and* all the modules that implement those behaviours at app startup.\n\nWhile this module is a GenServer, it is only responsible for setup\nof the cache and then exits with :ignore having done so. It is not\nrecommended to restart the service as this will lead to a stop the\nworld garbage collection of all processes and the copying of the\nentire cache to each process that has queried it since its last\nlocal garbage collection.","ref":"Bonfire.Common.ExtensionBehaviour.html"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.adopters_of_behaviour/1","doc":"Given a behaviour module, filters app modules to only those that implement that behaviour","ref":"Bonfire.Common.ExtensionBehaviour.html#adopters_of_behaviour/1"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.apply_modules/2","doc":"Note: use `apply_modules_cached/2` instead, as it caches the result.","ref":"Bonfire.Common.ExtensionBehaviour.html#apply_modules/2"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.apply_modules_cached/2","doc":"Runs/applies a given function name on each of a list of given modules, returning a map (listing the modules with their result as value) and vice versa (listing the results as key with their calling module as value). It also caches the result on first run.","ref":"Bonfire.Common.ExtensionBehaviour.html#apply_modules_cached/2"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.apps_to_scan/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#apps_to_scan/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.behaviour_app_modules/2","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#behaviour_app_modules/2"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.behaviour_modules/2","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#behaviour_modules/2"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.behaviours/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#behaviours/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.cached_behaviours/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#cached_behaviours/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.ExtensionBehaviour.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.find_adopters_of_behaviours/1","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#find_adopters_of_behaviours/1"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.find_extension_behaviours/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#find_extension_behaviours/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.module_behaviours/1","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#module_behaviours/1"},{"type":"callback","title":"Bonfire.Common.ExtensionBehaviour.modules/0","doc":"List modules that implement a behaviour","ref":"Bonfire.Common.ExtensionBehaviour.html#c:modules/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.populate/0","doc":"","ref":"Bonfire.Common.ExtensionBehaviour.html#populate/0"},{"type":"function","title":"Bonfire.Common.ExtensionBehaviour.start_link/1","doc":"Populates the global cache with config_module data via introspection.","ref":"Bonfire.Common.ExtensionBehaviour.html#start_link/1"},{"type":"behaviour","title":"Bonfire.Common.ExtensionModule","doc":"A global cache of known Bonfire extensions and their metadata.","ref":"Bonfire.Common.ExtensionModule.html"},{"type":"function","title":"Bonfire.Common.ExtensionModule.app_modules/0","doc":"","ref":"Bonfire.Common.ExtensionModule.html#app_modules/0"},{"type":"callback","title":"Bonfire.Common.ExtensionModule.declared_extension/0","doc":"Declares a Bonfire extensions","ref":"Bonfire.Common.ExtensionModule.html#c:declared_extension/0"},{"type":"function","title":"Bonfire.Common.ExtensionModule.declared_extension/1","doc":"","ref":"Bonfire.Common.ExtensionModule.html#declared_extension/1"},{"type":"function","title":"Bonfire.Common.ExtensionModule.declared_extensions/1","doc":"","ref":"Bonfire.Common.ExtensionModule.html#declared_extensions/1"},{"type":"function","title":"Bonfire.Common.ExtensionModule.default_nav/0","doc":"","ref":"Bonfire.Common.ExtensionModule.html#default_nav/0"},{"type":"function","title":"Bonfire.Common.ExtensionModule.default_nav/1","doc":"","ref":"Bonfire.Common.ExtensionModule.html#default_nav/1"},{"type":"function","title":"Bonfire.Common.ExtensionModule.extension/1","doc":"Get a extension identified by schema","ref":"Bonfire.Common.ExtensionModule.html#extension/1"},{"type":"function","title":"Bonfire.Common.ExtensionModule.extension_function_error/2","doc":"","ref":"Bonfire.Common.ExtensionModule.html#extension_function_error/2"},{"type":"function","title":"Bonfire.Common.ExtensionModule.modules/0","doc":"","ref":"Bonfire.Common.ExtensionModule.html#modules/0"},{"type":"module","title":"Bonfire.Common.Extensions","doc":"","ref":"Bonfire.Common.Extensions.html"},{"type":"function","title":"Bonfire.Common.Extensions.data/0","doc":"","ref":"Bonfire.Common.Extensions.html#data/0"},{"type":"function","title":"Bonfire.Common.Extensions.get_branch/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_branch/1"},{"type":"function","title":"Bonfire.Common.Extensions.get_code_link/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_code_link/1"},{"type":"function","title":"Bonfire.Common.Extensions.get_link/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_link/1"},{"type":"function","title":"Bonfire.Common.Extensions.get_version/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_version/1"},{"type":"function","title":"Bonfire.Common.Extensions.get_version_link/1","doc":"","ref":"Bonfire.Common.Extensions.html#get_version_link/1"},{"type":"function","title":"Bonfire.Common.Extensions.global_disable/1","doc":"","ref":"Bonfire.Common.Extensions.html#global_disable/1"},{"type":"function","title":"Bonfire.Common.Extensions.global_enable/1","doc":"","ref":"Bonfire.Common.Extensions.html#global_enable/1"},{"type":"function","title":"Bonfire.Common.Extensions.loaded_deps/1","doc":"","ref":"Bonfire.Common.Extensions.html#loaded_deps/1"},{"type":"module","title":"Bonfire.Common.Extensions.Diff","doc":"","ref":"Bonfire.Common.Extensions.Diff.html"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.analyse_repo_latest_diff_stream/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#analyse_repo_latest_diff_stream/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.generate_diff/2","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#generate_diff/2"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git!/4","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git!/4"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git_add_all/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git_add_all/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git_fetch/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git_fetch/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git_generate_diff/4","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git_generate_diff/4"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.git_pre_configure/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#git_pre_configure/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.parse_repo_latest_diff/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#parse_repo_latest_diff/1"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.repo_latest_diff/3","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#repo_latest_diff/3"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.root/0","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#root/0"},{"type":"function","title":"Bonfire.Common.Extensions.Diff.tmp_path/1","doc":"","ref":"Bonfire.Common.Extensions.Diff.html#tmp_path/1"},{"type":"module","title":"Bonfire.Common.HTTP","doc":"Module for building and performing HTTP requests.","ref":"Bonfire.Common.HTTP.html"},{"type":"function","title":"Bonfire.Common.HTTP.delete/4","doc":"Makes a DELETE request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#delete/4"},{"type":"function","title":"Bonfire.Common.HTTP.get/3","doc":"Makes a GET request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#get/3"},{"type":"function","title":"Bonfire.Common.HTTP.get_cached/1","doc":"","ref":"Bonfire.Common.HTTP.html#get_cached/1"},{"type":"function","title":"Bonfire.Common.HTTP.patch/4","doc":"Makes a PATCH request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#patch/4"},{"type":"function","title":"Bonfire.Common.HTTP.post/4","doc":"Makes a POST request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#post/4"},{"type":"function","title":"Bonfire.Common.HTTP.put/4","doc":"Makes a PUT request\n\nsee `request/5`","ref":"Bonfire.Common.HTTP.html#put/4"},{"type":"function","title":"Bonfire.Common.HTTP.request/5","doc":"Builds and perform http request.\n\n# Arguments:\n`method` - :get, :post, :put, :delete\n`url`\n`body`\n`headers` - a keyworld list of headers, e.g. `[{\"content-type\", \"text/plain\"}]`\n`options` - custom, per-request middleware or adapter options\n\n# Returns:\n`{:ok, %Tesla.Env{}}` or `{:error, error}`","ref":"Bonfire.Common.HTTP.html#request/5"},{"type":"type","title":"Bonfire.Common.HTTP.t/0","doc":"","ref":"Bonfire.Common.HTTP.html#t:t/0"},{"type":"module","title":"Bonfire.Common.HTTP.Connection","doc":"Specifies connection options for HTTP requests","ref":"Bonfire.Common.HTTP.Connection.html"},{"type":"function","title":"Bonfire.Common.HTTP.Connection.adapter_options/2","doc":"","ref":"Bonfire.Common.HTTP.Connection.html#adapter_options/2"},{"type":"function","title":"Bonfire.Common.HTTP.Connection.new/1","doc":"","ref":"Bonfire.Common.HTTP.Connection.html#new/1"},{"type":"module","title":"Bonfire.Common.HTTP.RequestBuilder","doc":"Helper functions for building HTTP requests","ref":"Bonfire.Common.HTTP.RequestBuilder.html"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.add_param/4","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#add_param/4"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.headers/2","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#headers/2"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.method/2","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#method/2"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.opts/2","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#opts/2"},{"type":"function","title":"Bonfire.Common.HTTP.RequestBuilder.url/2","doc":"","ref":"Bonfire.Common.HTTP.RequestBuilder.html#url/2"},{"type":"module","title":"Bonfire.Common.Localise","doc":"Various helpers for localisation","ref":"Bonfire.Common.Localise.html"},{"type":"function","title":"Bonfire.Common.Localise.default_locale/0","doc":"","ref":"Bonfire.Common.Localise.html#default_locale/0"},{"type":"function","title":"Bonfire.Common.Localise.get_locale/0","doc":"","ref":"Bonfire.Common.Localise.html#get_locale/0"},{"type":"function","title":"Bonfire.Common.Localise.get_locale_id/0","doc":"","ref":"Bonfire.Common.Localise.html#get_locale_id/0"},{"type":"function","title":"Bonfire.Common.Localise.known_locales/0","doc":"","ref":"Bonfire.Common.Localise.html#known_locales/0"},{"type":"function","title":"Bonfire.Common.Localise.locale_name/1","doc":"","ref":"Bonfire.Common.Localise.html#locale_name/1"},{"type":"function","title":"Bonfire.Common.Localise.put_locale/1","doc":"","ref":"Bonfire.Common.Localise.html#put_locale/1"},{"type":"function","title":"Bonfire.Common.Localise.set_locale_config/0","doc":"","ref":"Bonfire.Common.Localise.html#set_locale_config/0"},{"type":"module","title":"Bonfire.Common.Localise.Cldr","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":"Bonfire.Common.Localise.Cldr.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.available_locale_name?/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#available_locale_name?/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.default_locale/0","doc":"Returns the default `locale`.","ref":"Bonfire.Common.Localise.Cldr.html#default_locale/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.default_locale/0","doc":"iex> Bonfire.Common.Localise.Cldr.default_locale()\n %Cldr.LanguageTag{\n backend: Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.html#default_locale/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.default_territory/0","doc":"Returns the default territory when a locale\ndoes not specify one and none can be inferred.","ref":"Bonfire.Common.Localise.Cldr.html#default_territory/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.default_territory/0","doc":"iex> Bonfire.Common.Localise.Cldr.default_territory()\n :\"001\"","ref":"Bonfire.Common.Localise.Cldr.html#default_territory/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.ellipsis/2","doc":"Add locale-specific ellipsis to a string.","ref":"Bonfire.Common.Localise.Cldr.html#ellipsis/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.ellipsis/2","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":"Bonfire.Common.Localise.Cldr.html#ellipsis/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.ellipsis/2","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":"Bonfire.Common.Localise.Cldr.html#ellipsis/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.ellipsis/2","doc":"iex> Bonfire.Common.Localise.Cldr.ellipsis(\"And furthermore\")\n \"And furthermore…\"\n\n iex> Bonfire.Common.Localise.Cldr.ellipsis([\"And furthermore\", \"there is much to be done\"], locale: :ja)\n \"And furthermore…there is much to be done\"\n\n iex> Bonfire.Common.Localise.Cldr.ellipsis(\"And furthermore\", format: :word)\n \"And furthermore …\"\n\n iex> Bonfire.Common.Localise.Cldr.ellipsis([\"And furthermore\", \"there is much to be done\"], locale: :ja, format: :word)\n \"And furthermore … there is much to be done\"","ref":"Bonfire.Common.Localise.Cldr.html#ellipsis/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.get_locale/0","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":"Bonfire.Common.Localise.Cldr.html#get_locale/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.get_locale/0","doc":"iex> Bonfire.Common.Localise.Cldr.put_locale(\"pl\")\n iex> Bonfire.Common.Localise.Cldr.get_locale()\n %Cldr.LanguageTag{\n backend: Elixir.Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.html#get_locale/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_calendars/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#known_calendars/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_currencies/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#known_currencies/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_gettext_locale_name/1","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":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_gettext_locale_name/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_gettext_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_gettext_locale_name/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name(\"en\")\n \"en\"\n\n iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name(\"en-SA\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_gettext_locale_name?/1","doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Gettext.","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_gettext_locale_name?/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name?/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_gettext_locale_name?/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?(\"en\")\n true\n\n iex> Bonfire.Common.Localise.Cldr.known_gettext_locale_name?(\"!!\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_name?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_gettext_locale_names/0","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":"Bonfire.Common.Localise.Cldr.html#known_gettext_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_locale_name/1","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":"Bonfire.Common.Localise.Cldr.html#known_locale_name/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_locale_name/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_locale_name/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_locale_name(:\"en-AU\")\n :\"en-AU\"\n\n iex> Bonfire.Common.Localise.Cldr.known_locale_name(:\"en-SA\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_locale_name?/1","doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Cldr.","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_locale_name?/1","doc":"* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name?/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_locale_name?/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:en)\n true\n\n iex> Bonfire.Common.Localise.Cldr.known_locale_name?(:\"!!\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_locale_name?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_locale_names/0","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":"Bonfire.Common.Localise.Cldr.html#known_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_number_system_types/0","doc":"Returns a list of atoms representing the number systems types known to `Cldr`.","ref":"Bonfire.Common.Localise.Cldr.html#known_number_system_types/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.known_number_system_types/0","doc":"iex> Bonfire.Common.Localise.Cldr.known_number_system_types()\n [:default, :finance, :native, :traditional]","ref":"Bonfire.Common.Localise.Cldr.html#known_number_system_types/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_number_systems/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#known_number_systems/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_rbnf_locale_name/1","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":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_rbnf_locale_name/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_rbnf_locale_name/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:en)\n :en\n\n iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name(:\"en-SA\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?/1","doc":"Returns a boolean indicating if the specified locale\nname is configured and available in Cldr and supports\nrules based number formats (RBNF).","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?/1","doc":"* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name?/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?/1","doc":"iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:en)\n true\n\n iex> Bonfire.Common.Localise.Cldr.known_rbnf_locale_name?(:\"!!\")\n false","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_name?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_rbnf_locale_names/0","doc":"Returns a list of locale names which have rules-based number\nformats (RBNF).","ref":"Bonfire.Common.Localise.Cldr.html#known_rbnf_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.known_territories/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#known_territories/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.normalize_lenient_parse/3","doc":"Normalizes a string by applying transliteration\nof common symbols in numbers, currencies and dates","ref":"Bonfire.Common.Localise.Cldr.html#normalize_lenient_parse/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"Set the current process's Gettext locale from a\n`t:Cldr.LanguageTag`.","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"* `locale` is a `Cldr.LanguageTag` struct returned by `Cldr.Locale.new!/2`.","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"* `{:ok, gettext_locale_name}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1-returns"},{"type":"function","title":"Behaviour - Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"1. If the `locale.gettext_locale_name` is `nil` then an error\n is returned.\n\n2. The `gettext` locale for the `gettext_backend` configured for the\n CLDR backend defined by the `t:Cldr.LanguageTag` is set.","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1-behaviour"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.put_gettext_locale/1","doc":"iex> import Cldr.LanguageTag.Sigil\n iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l\"en\")\n {:ok, \"en\"}\n\n iex> import Cldr.LanguageTag.Sigil\n iex> Bonfire.Common.Localise.Cldr.put_gettext_locale(~l\"de\")\n {:error,\n {Cldr.UnknownLocaleError,\n \"Locale #Cldr.LanguageTag does not map to a known gettext locale name\"}}","ref":"Bonfire.Common.Localise.Cldr.html#put_gettext_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.put_locale/1","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":"Bonfire.Common.Localise.Cldr.html#put_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.put_locale/1","doc":"* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1`\n\nSee [rfc5646](https://tools.ietf.org/html/rfc5646) for the specification\nof a language tag.","ref":"Bonfire.Common.Localise.Cldr.html#put_locale/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.put_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.put_locale(\"en\")\n {:ok,\n %Cldr.LanguageTag{\n backend: Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.html#put_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.quote/2","doc":"Add locale-specific quotation marks around a string.","ref":"Bonfire.Common.Localise.Cldr.html#quote/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.quote/2","doc":"* `string` is any valid Elixir string\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.html#quote/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.quote/2","doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/1`.\n The default is `Cldr.get_locale/0`","ref":"Bonfire.Common.Localise.Cldr.html#quote/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.quote/2","doc":"iex> Bonfire.Common.Localise.Cldr.quote(\"Quoted String\")\n \"“Quoted String”\"\n\n iex> Bonfire.Common.Localise.Cldr.quote(\"Quoted String\", locale: :ja)\n \"「Quoted String」\"","ref":"Bonfire.Common.Localise.Cldr.html#quote/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.unknown_locale_names/0","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":"Bonfire.Common.Localise.Cldr.html#unknown_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_calendar/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#validate_calendar/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_currency/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#validate_currency/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"Normalise and validate a locale name.","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1`","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"* `{:ok, language_tag}`\n\n* `{:error, reason}`","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"See [rfc5646](https://tools.ietf.org/html/rfc5646) for the specification\nof a language tag.","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.validate_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.validate_locale(:en)\n {:ok,\n %Cldr.LanguageTag{\n backend: Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.validate_locale Bonfire.Common.Localise.Cldr.default_locale()\n {:ok,\n %Cldr.LanguageTag{\n backend: Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.validate_locale(\"zzz\")\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zzz\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.html#validate_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_number_system/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_number_system_type/1","doc":"Normalise and validate a number system type.","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system_type/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.validate_number_system_type/1","doc":"* `number_system_type` is any number system type returned by\n `Cldr.known_number_system_types/1`","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system_type/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.validate_number_system_type/1","doc":"* `{:ok, normalized_number_system_type}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system_type/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.validate_number_system_type/1","doc":"iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:default)\n {:ok, :default}\n\n iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:traditional)\n {:ok, :traditional}\n\n iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(:latn)\n {\n :error,\n {Cldr.UnknownNumberSystemTypeError, \"The number system type :latn is unknown\"}\n }\n\n iex> Bonfire.Common.Localise.Cldr.validate_number_system_type(\"bork\")\n {\n :error,\n {Cldr.UnknownNumberSystemTypeError, \"The number system type \\\"bork\\\" is invalid\"}\n }","ref":"Bonfire.Common.Localise.Cldr.html#validate_number_system_type/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.validate_territory/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.html#validate_territory/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.with_locale/2","doc":"Execute a function with a locale ensuring that the\ncurrent locale is restored after the function.","ref":"Bonfire.Common.Localise.Cldr.html#with_locale/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.with_locale/2","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":"Bonfire.Common.Localise.Cldr.html#with_locale/2-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.with_locale/2","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":"Bonfire.Common.Localise.Cldr.html#with_locale/2-returns"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match/1","doc":"Parse an `Accept-Language` string and return the best match for\na configured `Cldr` locale.","ref":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#best_match/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match/1","doc":"* `accept_langauge` is a string representing an accept language header","ref":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#best_match/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match/1","doc":"* `{:ok, language_tag}` or\n\n* `{:error, reason}`","ref":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#best_match/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.AcceptLanguage.best_match/1","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#best_match/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage.parse/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse/1-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse/1","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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse!/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!/1","doc":"* `accept-language` is any string in the format defined by [rfc2616](https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)","ref":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse!/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!/1","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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse!/1-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.AcceptLanguage.parse!/1","doc":"iex> Bonfire.Common.Localise.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 Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.AcceptLanguage.html#parse!/1-example"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Calendar","doc":"Data functions to retrieve localised calendar\ninformation.\n\n`Cldr` defines formats for several calendars, the names of which\nare returned by `Cldr.known_calendars/0`.\n\nCurrently this implementation only supports the `:gregorian`,\n`:persian`, `:coptic` and `ethiopic` calendars.\n\nThe `:gregorian` calendar aligns with the proleptic Gregorian calendar\ndefined by Elixir, `Calendar.ISO`.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale/1","doc":"Return the calendar module for a locale.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale/1","doc":"* `:locale` is any locale or locale name validated\n by `Cldr.validate_locale/2`. The default is\n `Cldr.get_locale()` which returns the locale\n set for the current process","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale/1","doc":"* `{:ok, calendar_module}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale \"en-GB\"\n {:ok, Cldr.Calendar.GB}\n\n iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale \"en-GB-u-ca-gregory\"\n {:ok, Cldr.Calendar.Gregorian}\n\n iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale \"en\"\n {:ok, Cldr.Calendar.US}\n\n iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_locale \"fa-IR\"\n {:ok, Cldr.Calendar.Persian}","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"Returns the calendar module preferred for\na territory.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"* `territory` is any valid ISO3166-2 code as\n an `String.t` or upcased `atom()`","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"* `{:ok, calendar_module}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory :US\n {:ok, Cldr.Calendar.Gregorian}\n\n iex> Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory :XX\n {:error, {Cldr.UnknownTerritoryError, \"The territory :XX is unknown\"}}","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1-examples"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Calendar.calendar_from_territory/1","doc":"The overwhelming majority of territories have\n`:gregorian` as their first preferred calendar\nand therefore `Cldr.Calendar.Gregorian`\nwill be returned for most territories.\n\nReturning any other calendar module would require:\n\n1. That another calendar is preferred over `:gregorian`\n for a territory\n\n2. That a calendar module is available to support\n that calendar.\n\nAs an example, Iran (territory `:IR`) prefers the\n`:persian` calendar. If the optional library\n[ex_cldr_calendars_persian](https://hex.pm/packages/ex_cldr_calendars_persian)\nis installed, the calendar module `Cldr.Calendar.Persian` will\nbe returned. If it is not installed, `Cldr.Calendar.Gregorian`\nwill be returned as `:gregorian` is the second preference\nfor `:IR`.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#calendar_from_territory/1-notes"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.cyclic_years/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#cyclic_years/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.day_periods/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#day_periods/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.days/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#days/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.eras/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#eras/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.month_patterns/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#month_patterns/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.months/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#months/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.quarters/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#quarters/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"Returns a keyword list of options than can be applied to\n`NimbleStrftime.format/3`.\n\nThe hex package [nimble_strftime](https://hex.pm/packages/nimble_strftime)\nprovides a `format/3` function to format dates, times and datetimes.\nIt takes a set of options that can return day, month and am/pm names.\n\n`strftime_options!` returns a keyword list than can be used as these\noptions to return localised names for days, months and am/pm.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"* `locale` is any locale returned by `MyApp.Cldr.known_locale_names/0`. The\n default is `MyApp.Cldr.get_locale/0`\n\n* `options` is a set of keyword options. The default is `[]`","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"* `:calendar` is the name of any known CLDR calendar. The default\n is `:gregorian`.","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2-options"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"iex: MyApp.Cldr.Calendar.strftime_options!\n [\n am_pm_names: #Function ,\n month_names: #Function ,\n abbreviated_month_names: #Function ,\n day_of_week_names: #Function ,\n abbreviated_day_of_week_names: #Function \n ]","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2-example"},{"type":"function","title":"Typical usage - Bonfire.Common.Localise.Cldr.Calendar.strftime_options!/2","doc":"iex: NimbleStrftime.format(Date.today(), MyApp.Cldr.Calendar.strftime_options!())","ref":"Bonfire.Common.Localise.Cldr.Calendar.html#strftime_options!/2-typical-usage"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Currency","doc":"","ref":"Bonfire.Common.Localise.Cldr.Currency.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale/3","doc":"Returns a map of the metadata for all currencies for\na given locale.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale/3-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale/3","doc":"* `{:ok, currency_map}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale/3-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale/3-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale!/3","doc":"Returns a map of the metadata for all currencies for\na given locale and raises on error.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale!/3-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale!/3","doc":"* `{:ok, currency_map}` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale!/3-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currencies_for_locale!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currencies_for_locale!/3-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","doc":"Returns the currency metadata for the requested currency code.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","doc":"* `currency_or_currency_code` is a `binary` or `atom` representation\n of an ISO 4217 currency code, or a `%Cldr.Currency{}` struct.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","doc":"* A `{:ok, currency}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.currency_for_code/2","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","doc":"Returns the currency metadata for the requested currency code.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","doc":"* `currency_or_currency_code` is a `binary` or `atom` representation\n of an ISO 4217 currency code, or a `%Cldr.Currency{}` struct.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","doc":"* A `t:Cldr.Current.t/0` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.currency_for_code!/2","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_for_code!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_from_locale/1","doc":"Returns the effective currency for a given locale","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_from_locale/1","doc":"* `locale` is a `Cldr.LanguageTag` struct returned by\n `Cldr.Locale.new!/2`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_from_locale/1","doc":"* A ISO 4217 currency code as an upcased atom","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.currency_from_locale/1","doc":"iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale(\"en\")\n iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale locale\n :USD\n\n iex> {:ok, locale} = Bonfire.Common.Localise.Cldr.validate_locale(\"en-AU\")\n iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale locale\n :AUD\n\n iex> Bonfire.Common.Localise.Cldr.Currency.currency_from_locale(\"en-GB\")\n :GBP","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_history_for_locale/1","doc":"Returns a list of historic and the current\ncurrency for a given locale.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_history_for_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_history_for_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_history_for_locale/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currency_history_for_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_history_for_locale/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_strings/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_strings/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings/3-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_strings/3","doc":"* `{:ok, currency_string_map}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings/3-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currency_strings/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings/3-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.currency_strings!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.currency_strings!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings!/3-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.currency_strings!/3","doc":"* `{:ok, currency_string_map}` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings!/3-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.currency_strings!/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#currency_strings!/3-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.current_currency_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#current_currency_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.current_currency_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#current_currency_from_locale/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.current_currency_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Currency.html#current_currency_from_locale/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies/0","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":"Bonfire.Common.Localise.Cldr.Currency.html#current_territory_currencies/0"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies/0","doc":"* A map of `{territory_code => Cldr.Currency.t}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#current_territory_currencies/0-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies/0","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.current_territory_currencies()","ref":"Bonfire.Common.Localise.Cldr.Currency.html#current_territory_currencies/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currencies/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currencies/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currency?/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency?/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currency_code/1","doc":"Returns a 2-tuple indicating if the supplied currency code is known.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.known_currency_code/1","doc":"* `currency_code` is a `binary` or `atom` representing an ISO4217\n currency code","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.known_currency_code/1","doc":"* `{:ok, currency_code}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.known_currency_code/1","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code(\"AUD\")\n {:ok, :AUD}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code(\"GGG\")\n {:error, {Cldr.UnknownCurrencyError, \"The currency \\\"GGG\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currency_code?/1","doc":"Returns a boolean indicating if the supplied currency code is known.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.known_currency_code?/1","doc":"* `currency_code` is a `binary` or `atom` representing an ISO4217\n currency code","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code?/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.known_currency_code?/1","doc":"* `true` or `false`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code?/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.known_currency_code?/1","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(\"AUD\")\n true\n\n iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(\"GGG\")\n false\n\n iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_code?(:XCV)\n false","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_code?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.known_currency_codes/0","doc":"Returns a list of all known currency codes.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_codes/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.known_currency_codes/0","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.known_currency_codes()","ref":"Bonfire.Common.Localise.Cldr.Currency.html#known_currency_codes/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.new/2","doc":"Returns a `Currency` struct created from the arguments.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#new/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.new/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#new/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Currency.new/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#new/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.new/2","doc":"* `{:ok, Cldr.Currency.t}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#new/2-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.new/2","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Currency.new(:XAE, name: \"XAE\", digits: 0)\n {:error, {Cldr.CurrencyAlreadyDefined, \"Currency :XAE is already defined.\"}}","ref":"Bonfire.Common.Localise.Cldr.Currency.html#new/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.pluralize/3","doc":"Returns the appropriate currency display name for the `currency`, based\non the plural rules in effect for the `locale`.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.pluralize/3","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":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Currency.pluralize/3","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 `Bonfire.Common.Localise.Cldr.get_locale/0`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.pluralize/3","doc":"* `{:ok, plural_string}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Currency.pluralize/3","doc":"iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD)\n {:ok, \"US dollar\"}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(3, :USD)\n {:ok, \"US dollars\"}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: \"zh\")\n {:ok, \"美元\"}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(12, :USD, locale: \"fr\")\n {:ok, \"dollars des États-Unis\"}\n\n iex> Bonfire.Common.Localise.Cldr.Currency.pluralize(1, :USD, locale: \"fr\")\n {:ok, \"dollar des États-Unis\"}","ref":"Bonfire.Common.Localise.Cldr.Currency.html#pluralize/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Currency.strings_for_currency/2","doc":"Returns the strings associated with a currency\nin a given locale.","ref":"Bonfire.Common.Localise.Cldr.Currency.html#strings_for_currency/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Currency.strings_for_currency/2","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":"Bonfire.Common.Localise.Cldr.Currency.html#strings_for_currency/2-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Currency.strings_for_currency/2","doc":"* A list of strings or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Currency.html#strings_for_currency/2-returns"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Currency.strings_for_currency/2","doc":"iex> MyApp.Cldr.Currency.strings_for_currency(:AUD, \"en\")\n [\"a$\", \"australian dollars\", \"aud\", \"australian dollar\"]","ref":"Bonfire.Common.Localise.Cldr.Currency.html#strings_for_currency/2-example"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Date","doc":"","ref":"Bonfire.Common.Localise.Cldr.Date.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"Formats a date according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html)","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"* `date` is a `%Date{}` struct or any map that contains the keys\n `year`, `month`, `day` and `calendar`\n\n* `options` is a keyword list of options for formatting. The valid options are:","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string.\n The default is `:medium`.\n\n * `locale:` any locale returned by `Cldr.known_locale_names/1`.\n The default is `Cldr.get_locale()`.\n\n * `number_system:` a number system into which the formatted date digits\n should be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"* `{:ok, formatted_string}` or\n\n* `{:error, reason}`","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Date.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :medium, locale: \"en\"\n {:ok, \"Jul 10, 2017\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], locale: \"en\"\n {:ok, \"Jul 10, 2017\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :full, locale: \"en\"\n {:ok, \"Monday, July 10, 2017\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :short, locale: \"en\"\n {:ok, \"7/10/17\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :short, locale: \"fr\"\n {:ok, \"10/07/2017\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string ~D[2017-07-10], format: :long, locale: \"af\"\n {:ok, \"10 Julie 2017\"}","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"Formats a date according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html).","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"* `date` is a `%Date{}` struct or any map that contains the keys\n `year`, `month`, `day` and `calendar`.\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string.\n The default is `:medium`.\n\n * `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`.\n\n * `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"* `formatted_date` or\n\n* raises an exception.","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Date.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :medium, locale: \"en\"\n \"Jul 10, 2017\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], locale: \"en\"\n \"Jul 10, 2017\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :full,locale: \"en\"\n \"Monday, July 10, 2017\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :short, locale: \"en\"\n \"7/10/17\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :short, locale: \"fr\"\n \"10/07/2017\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.to_string! ~D[2017-07-10], format: :long, locale: \"af\"\n \"10 Julie 2017\"","ref":"Bonfire.Common.Localise.Cldr.Date.html#to_string!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Date.Interval","doc":"Interval formats allow for software to format intervals like \"Jan 10-12, 2008\" as a\nshorter and more natural format than \"Jan 10, 2008 - Jan 12, 2008\". They are designed\nto take a start and end date, time or datetime plus a formatting pattern\nand use that information to produce a localized format.\n\nSee `Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3` and `Bonfire.Common.Localise.Cldr.Interval.to_string/3`","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.Interval.do_to_string!/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#do_to_string!/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"Returns a interval formed from two dates as\na localised string.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"* `from` is any map that conforms to the\n `Calendar.date` type.\n\n* `to` is any map that conforms to the\n `Calendar.date` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone date.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The\n alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"* For more information on interval format string\n see the `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Date.Interval.to_string/3","doc":"iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-12-31]\n {:ok, \"Jan 1 – Dec 31, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12]\n {:ok, \"Jan 1 – 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Sun, Jan 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-12-01],\n ...> format: :long, style: :year_and_month\n {:ok, \"January – December 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :short\n {:ok, \"1/1/2020 – 1/12/2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long, locale: \"fr\"\n {:ok, \"mer. 1 – dim. 12 janv. 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long, locale: \"th\", number_system: :thai\n {:ok, \"พ. ๑ ม.ค. – อา. ๑๒ ม.ค. ๒๐๒๐\"}","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"Returns a interval formed from two dates as\na localised string.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"* `from` is any map that conforms to the\n `Calendar.date` type.\n\n* `to` is any map that conforms to the\n `Calendar.date` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone date.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The\n alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"* `string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"* For more information on interval format string\n see the `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Date.Interval.to_string!/3","doc":"iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31])\n \"Jan 1 – Dec 31, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12])\n \"Jan 1 – 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),\n ...> format: :long\n \"Wed, Jan 1 – Sun, Jan 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-01]),\n ...> format: :long, style: :year_and_month\n \"January – December 2020\"\n\n iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! ~I\"2020-01/12\"\n \"Jan 1 – Dec 31, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),\n ...> format: :short\n \"1/1/2020 – 1/12/2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Date.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-01-12]),\n ...> format: :long, locale: \"fr\"\n \"mer. 1 – dim. 12 janv. 2020\"","ref":"Bonfire.Common.Localise.Cldr.Date.Interval.html#to_string!/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"Formats a DateTime according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html)","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"* `datetime` is a `%DateTime{}` `or %NaiveDateTime{}`struct or any map that contains the keys\n `:year`, `:month`, `:day`, `:calendar`. `:hour`, `:minute` and `:second` with optional\n `:microsecond`.\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string or\n any of the keys returned by `Cldr.DateTime.available_format_names`.\n The default is `:medium`\n\n * `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n * `number_system:` a number system into which the formatted date digits should\n be transliterated\n\n * `era: :variant` will use a variant for the era is one is available in the locale.\n In the \"en\" for example, the locale `era: :variant` will return \"BCE\" instead of \"BC\".\n\n * `period: :variant` will use a variant for the time period and flexible time period if\n one is available in the locale. For example, in the \"en\" locale `period: :variant` will\n return \"pm\" instead of \"PM\"","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"* `{:ok, formatted_datetime}` or\n\n* `{:error, reason}`","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.to_string/2","doc":"iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], \"Etc/UTC\")\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime\n {:ok, \"Jan 1, 2000, 11:59:59 PM\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, locale: \"en\"\n {:ok, \"Jan 1, 2000, 11:59:59 PM\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :long, locale: \"en\"\n {:ok, \"January 1, 2000, 11:59:59 PM UTC\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :hms, locale: \"en\"\n {:ok, \"11:59:59 PM\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :full, locale: \"en\"\n {:ok, \"Saturday, January 1, 2000, 11:59:59 PM GMT\"}\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string datetime, format: :full, locale: \"fr\"\n {:ok, \"samedi 1 janvier 2000, 23:59:59 UTC\"}","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"Formats a DateTime according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html)\nreturning a formatted string or raising on error.","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"* `datetime` is a `%DateTime{}` `or %NaiveDateTime{}`struct or any map that contains the keys\n `:year`, `:month`, `:day`, `:calendar`. `:hour`, `:minute` and `:second` with optional\n `:microsecond`.\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string or\n any of the keys returned by `Cldr.DateTime.available_format_names` or a format string.\n The default is `:medium`.\n\n * `:date_format` is any one of `:short`, `:medium`, `:long`, `:full`. If defined,\n this option is used to format the date part of the date time. This option is\n only acceptable if the `:format` option is not specified, or is specified as either\n `:short`, `:medium`, `:long`, `:full`. If `:date_format` is not specified\n then the date format is defined by the `:format` option.\n\n * `:time_format` is any one of `:short`, `:medium`, `:long`, `:full`. If defined,\n this option is used to format the time part of the date time. This option is\n only acceptable if the `:format` option is not specified, or is specified as either\n `:short`, `:medium`, `:long`, `:full`. If `:time_format` is not specified\n then the time format is defined by the `:format` option.\n\n * `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`.\n\n * `number_system:` a number system into which the formatted date digits should\n be transliterated.\n\n * `era: :variant` will use a variant for the era is one is available in the locale.\n In the \"en\" for example, the locale `era: :variant` will return \"BCE\" instead of \"BC\".\n\n * `period: :variant` will use a variant for the time period and flexible time period if\n one is available in the locale. For example, in the \"en\" locale `period: :variant` will\n return \"pm\" instead of \"PM\".","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"* `formatted_datetime` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.to_string!/2","doc":"iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], \"Etc/UTC\")\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, locale: \"en\"\n \"Jan 1, 2000, 11:59:59 PM\"\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, format: :long, locale: \"en\"\n \"January 1, 2000, 11:59:59 PM UTC\"\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, format: :full, locale: \"en\"\n \"Saturday, January 1, 2000, 11:59:59 PM GMT\"\n iex> Bonfire.Common.Localise.Cldr.DateTime.to_string! datetime, format: :full, locale: \"fr\"\n \"samedi 1 janvier 2000, 23:59:59 UTC\"","ref":"Bonfire.Common.Localise.Cldr.DateTime.html#to_string!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime.Format","doc":"Manages the Date, TIme and DateTime formats\ndefined by CLDR.\n\nThe functions in `Cldr.DateTime.Format` are\nprimarily concerned with encapsulating the\ndata from CLDR in functions that are used\nduring the formatting process.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for/1","doc":"Returns a list of calendars defined for a given locale.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#calendars_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for/1","doc":"* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#calendars_for/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.calendars_for(:en)\n {:ok, [:buddhist, :chinese, :coptic, :dangi, :ethiopic, :ethiopic_amete_alem,\n :generic, :gregorian, :hebrew, :indian, :islamic, :islamic_civil,\n :islamic_rgsa, :islamic_tbla, :islamic_umalqura, :japanese, :persian, :roc]}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#calendars_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats/2","doc":"Returns a map of the standard date formats for a given locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`.\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en)\n {:ok, %Cldr.Date.Formats{\n full: \"EEEE, MMMM d, y\",\n long: \"MMMM d, y\",\n medium: \"MMM d, y\",\n short: \"M/d/yy\"\n }}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_formats(:en, :buddhist)\n {:ok, %Cldr.Date.Formats{\n full: \"EEEE, MMMM d, y G\",\n long: \"MMMM d, y G\",\n medium: \"MMM d, y G\",\n short: \"M/d/y GGGGG\"\n }}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats/2","doc":"Returns a map of the standard datetime \"at\" formats for a given\nlocale and calendar.\n\nAn \"at\" format is one where the datetime is formatted with the\ndate part separated from the time part by a localized version\nof \"at\".","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_at_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`.\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`,","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_at_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en)\n {:ok, %Cldr.DateTime.Formats{\n full: \"{1} 'at' {0}\",\n long: \"{1} 'at' {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\"}\n }\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_at_formats(:en, :buddhist)\n {:ok, %Cldr.DateTime.Formats{\n full: \"{1} 'at' {0}\",\n long: \"{1} 'at' {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\"}\n }","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_at_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats/2","doc":"Returns a map of the available non-standard datetime formats for a\ngiven locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_available_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag.t()`\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\nThe default is `:gregorian`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_available_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_available_formats \"en\"\n {\n :ok,\n %{\n d: \"d\",\n h: \"h a\",\n hm: \"h:mm a\",\n hms: \"h:mm:ss a\",\n hmsv: \"h:mm:ss a v\",\n hmv: \"h:mm a v\",\n ms: \"mm:ss\",\n y: \"y\",\n yw: %{one: \"'week' w 'of' Y\", other: \"'week' w 'of' Y\"},\n Bh: \"h B\",\n Bhm: \"h:mm B\",\n Bhms: \"h:mm:ss B\",\n E: \"ccc\",\n EBhm: \"E h:mm B\",\n EBhms: \"E h:mm:ss B\",\n EHm: \"E HH:mm\",\n EHms: \"E HH:mm:ss\",\n Ed: \"d E\",\n Ehm: \"E h:mm a\",\n Ehms: \"E h:mm:ss a\",\n Gy: \"y G\",\n GyMMM: \"MMM y G\",\n GyMMMEd: \"E, MMM d, y G\",\n GyMMMd: \"MMM d, y G\",\n GyMd: \"M/d/y G\",\n H: \"HH\",\n Hm: \"HH:mm\",\n Hms: \"HH:mm:ss\",\n Hmsv: \"HH:mm:ss v\",\n Hmv: \"HH:mm v\",\n M: \"L\",\n MEd: \"E, M/d\",\n MMM: \"LLL\",\n MMMEd: \"E, MMM d\",\n MMMMW: %{one: \"'week' W 'of' MMMM\", other: \"'week' W 'of' MMMM\"},\n MMMMd: \"MMMM d\",\n MMMd: \"MMM d\",\n Md: \"M/d\",\n yM: \"M/y\",\n yMEd: \"E, M/d/y\",\n yMMM: \"MMM y\",\n yMMMEd: \"E, MMM d, y\",\n yMMMM: \"MMMM y\",\n yMMMd: \"MMM d, y\",\n yMd: \"M/d/y\",\n yQQQ: \"QQQ y\",\n yQQQQ: \"QQQQ y\"\n }\n }","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_available_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats/2","doc":"Returns a map of the standard datetime formats for a given locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`.\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en)\n {:ok, %Cldr.DateTime.Formats{\n full: \"{1}, {0}\",\n long: \"{1}, {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\"\n }}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_formats(:en, :buddhist)\n {:ok, %Cldr.DateTime.Formats{\n full: \"{1}, {0}\",\n long: \"{1}, {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\"\n }}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback/2","doc":"Returns the fallback format for a given\nlocale and calendar type","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_fallback/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag.t()`\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_fallback/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_fallback :en, :gregorian\n [0, \" – \", 1]","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_fallback/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_formats/2","doc":"Returns a map of the interval formats for a\ngiven locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag.t/0`\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.date_time_interval_formats/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#date_time_interval_formats/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for/2","doc":"Returns the time period for a given time of day.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#day_period_for/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for/2","doc":"* `time` is any `Time.t` or a map with at least `:hour`,\n `:minute` and `:second` keys\n\n* `language` is a binary representation of a valid and\n configured language in `Cldr`\n\nThe time period is a locale-specific key that is used\nto localise a time into a textual representation of \"am\",\n\"pm\", \"noon\", \"midnight\", \"evening\", \"morning\" and so on\nas defined in the CLDR day period rules.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#day_period_for/2-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for ~T[06:05:54.515228], :en\n :morning1\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for ~T[13:05:54.515228], :en\n :afternoon1\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for ~T[21:05:54.515228], :en\n :night1\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.day_period_for ~T[21:05:54.515228], :fr\n :evening1","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#day_period_for/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format/1","doc":"Returns the GMT offset format list for a\nfor a timezone offset for a given locale.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_format/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format/1","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_format/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_format :en\n {:ok, [\"GMT\", 0]}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_format/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format/1","doc":"Returns the GMT format string for a\nfor a timezone with an offset of zero for\na given locale.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_zero_format/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format/1","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_zero_format/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format :en\n {:ok, \"GMT\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.gmt_zero_format :fr\n {:ok, \"UTC\"}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#gmt_zero_format/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format/1","doc":"Returns the positive and negative hour format\nfor a timezone offset for a given locale.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#hour_format/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format/1","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#hour_format/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.hour_format \"en\"\n {:ok, {\"+HH:mm\", \"-HH:mm\"}}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#hour_format/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight?/1","doc":"Returns a boolean indicating is a given language defines the\nnotion of \"noon\" and \"midnight\"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#language_has_noon_and_midnight?/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight?/1","doc":"* `language` is a binary representation of a valid and\n configured language in `Cldr`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#language_has_noon_and_midnight?/1-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight?/1","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight? :fr\n true\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight? :en\n true\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.language_has_noon_and_midnight? :af\n false","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#language_has_noon_and_midnight?/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats/2","doc":"Returns a map of the standard time formats for a given locale and calendar.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#time_formats/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats/2","doc":"* `locale` is any locale returned by `Cldr.known_locale_names/0`.\n\n* `calendar` is any calendar returned by `Cldr.DateTime.Format.calendars_for/1`\n The default is `:gregorian`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#time_formats/2-arguments"},{"type":"function","title":"Examples: - Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en)\n {:ok, %Cldr.Time.Formats{\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\"\n }}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Format.time_formats(:en, :buddhist)\n {:ok, %Cldr.Time.Formats{\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\"\n }}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#time_formats/2-examples"},{"type":"type","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.calendar/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#t:calendar/0"},{"type":"type","title":"Bonfire.Common.Localise.Cldr.DateTime.Format.formats/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Format.html#t:formats/0"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime.Formatter","doc":"Implements the compilation and execution of\ndate, time and datetime formats.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.format/4","doc":"Returns the formatted and localised date, time or datetime\nfor a given `Date`, `Time`, `DateTime` or struct with the\nappropriate fields.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#format/4"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Formatter.format/4","doc":"* `date` is a `Date`, `Time`, `DateTime` or other struct that\ncontains the required date and time fields.\n\n* `format` is a valid format string, for example `yy/MM/dd hh:MM`\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `options` is a keyword list of options. The valid options are:","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#format/4-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Formatter.format/4","doc":"* `:number_system`. The resulting formatted and localised date/time\nstring will be transliterated into this number system. Number system\nis anything returned from `Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1`\n\n*NOTE* This function is called by `Cldr.Date.to_string/2`, `Cldr.Time.to_string/2`\nand `Cldr.DateTime.to_string/2` which is the preferred API.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#format/4-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Formatter.format/4","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Formatter.format ~U[2017-09-03 10:23:00.0Z], \"yy/MM/dd hh:MM\", \"en\"\n {:ok, \"17/09/03 10:09\"}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#format/4-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.gmt_tz_format/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Formatter.html#gmt_tz_format/3"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval","doc":"Interval formats allow for software to format intervals like \"Jan 10-12, 2008\" as a\nshorter and more natural format than \"Jan 10, 2008 - Jan 12, 2008\". They are designed\nto take a start and end date, time or datetime plus a formatting pattern\nand use that information to produce a localized format.\n\nSee `Cldr.Interval.to_string/3` and `Cldr.DateTime.Interval.to_string/3`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval.do_to_string/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#do_to_string/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval.do_to_string!/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#do_to_string!/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"Returns a string representing the formatted\ninterval formed by two dates.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"* `from` is any map that conforms to the\n `Calendar.datetime` type.\n\n* `to` is any map that conforms to the\n `Calendar.datetime` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone datetime.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see the `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string/3","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string ~U[2020-01-01 00:00:00.0Z],\n ...> ~U[2020-12-31 10:00:00.0Z]\n {:ok, \"Jan 1, 2020, 12:00:00 AM – Dec 31, 2020, 10:00:00 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string ~U[2020-01-01 00:00:00.0Z], nil\n {:ok, \"Jan 1, 2020, 12:00:00 AM –\"}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"Returns a string representing the formatted\ninterval formed by two dates or raises an\nexception.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"* `from` is any map that conforms to the\n `Calendar.datetime` type.\n\n* `to` is any map that conforms to the\n `Calendar.datetime` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone datetime.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"* `string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"* For more information on interval format string\n see the `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date is formatted instead of an interval.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string!/3","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Interval.to_string! ~U[2020-01-01 00:00:00.0Z],\n ...> ~U[2020-12-31 10:00:00.0Z]\n \"Jan 1, 2020, 12:00:00 AM – Dec 31, 2020, 10:00:00 AM\"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Interval.html#to_string!/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.DateTime.Relative","doc":"","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string/2","doc":"Returns a `{:ok, string}` representing a relative time (ago, in) for a given\nnumber, Date or Datetime. Returns `{:error, reason}` when errors are detected.\n\n* `relative` is a number or Date/Datetime representing the time distance from `now` or from\n options[:relative_to]\n\n* `options` is a `Keyword` list of options which are:","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string/2"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string/2","doc":"* `:locale` is the locale in which the binary is formatted.\n The default is `Cldr.get_locale/0`\n\n* `:style` is the style of the binary. Style may be `:default`, `:narrow` or `:short`\n\n* `:unit` is the time unit for the formatting. The allowable units are `:second`, `:minute`,\n `:hour`, `:day`, `:week`, `:month`, `:year`, `:mon`, `:tue`, `:wed`, `:thu`, `:fri`, `:sat`,\n `:sun`, `:quarter`\n\n* `:relative_to` is the baseline Date or Datetime from which the difference from `relative` is\n calculated when `relative` is a Date or a DateTime. The default for a Date is `Date.utc_today`,\n for a DateTime it is `DateTime.utc_now`\n\n#","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string/2-options"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string/2","doc":"When `options[:unit]` is not specified, `MyApp.Cldr.DateTime.Relative.to_string/2`\nattempts to identify the appropriate unit based upon the magnitude of `relative`.\nFor example, given a parameter of less than `60`, then `to_string/2` will\nassume `:seconds` as the unit. See `unit_from_relative_time/1`.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(-1)\n {:ok, \"1 second ago\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1)\n {:ok, \"in 1 second\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day)\n {:ok, \"tomorrow\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, locale: \"fr\")\n {:ok, \"demain\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1, unit: :day, style: :narrow)\n {:ok, \"tomorrow\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year)\n {:ok, \"in 1,234 years\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(1234, unit: :year, locale: \"fr\")\n {:ok, \"dans 1 234 ans\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(31)\n {:ok, \"in 31 seconds\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], relative_to: ~D[2017-04-26])\n {:ok, \"in 3 days\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :short, locale: \"fr\")\n {:ok, \"dans 5 min\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(310, style: :narrow, locale: \"fr\")\n {:ok, \"+5 min\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string 2, unit: :wed, style: :short, locale: \"en\"\n {:ok, \"in 2 Wed.\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string 1, unit: :wed, style: :short\n {:ok, \"next Wed.\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :wed, style: :short\n {:ok, \"last Wed.\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :wed\n {:ok, \"last Wednesday\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :quarter\n {:ok, \"last quarter\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string -1, unit: :mon, locale: \"fr\"\n {:ok, \"lundi dernier\"}\n\n iex> Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string(~D[2017-04-29], unit: :ziggeraut)\n {:error, {Cldr.UnknownTimeUnit,\n \"Unknown time unit :ziggeraut. Valid time units are [:day, :fri, :hour, :minute, :mon, :month, :quarter, :sat, :second, :sun, :thu, :tue, :wed, :week, :year]\"}}","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string!/2","doc":"Returns a `{:ok, string}` representing a relative time (ago, in) for a given\nnumber, Date or Datetime or raises an exception on error.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string!/2","doc":"* `relative` is a number or Date/Datetime representing the time distance from `now` or from\n options[:relative_to].\n\n* `options` is a `Keyword` list of options.","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.DateTime.Relative.to_string!/2","doc":"* `:locale` is the locale in which the binary is formatted.\n The default is `Cldr.get_locale/0`\n\n* `:style` is the format of the binary. Style may be `:default`, `:narrow` or `:short`.\n The default is `:default`\n\n* `:unit` is the time unit for the formatting. The allowable units are `:second`, `:minute`,\n `:hour`, `:day`, `:week`, `:month`, `:year`, `:mon`, `:tue`, `:wed`, `:thu`, `:fri`, `:sat`,\n `:sun`, `:quarter`\n\n* `:relative_to` is the baseline Date or Datetime from which the difference from `relative` is\n calculated when `relative` is a Date or a DateTime. The default for a Date is `Date.utc_today`,\n for a DateTime it is `DateTime.utc_now`\n\nSee `to_string/2`","ref":"Bonfire.Common.Localise.Cldr.DateTime.Relative.html#to_string!/2-options"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Interval","doc":"Interval formats allow for software to format intervals like \"Jan 10-12, 2008\" as a\nshorter and more natural format than \"Jan 10, 2008 - Jan 12, 2008\". They are designed\nto take a start and end date, time or datetime plus a formatting pattern\nand use that information to produce a localized format.\n\nThe interval functions in this library will determine the calendar\nfield with the greatest difference between the two datetimes before using the\nformat pattern.\n\nFor example, the greatest difference in \"Jan 10-12, 2008\" is the day field, while\nthe greatest difference in \"Jan 10 - Feb 12, 2008\" is the month field. This is used to\npick the exact pattern to be used.\n\nSee `Cldr.Interval` for further detail.","ref":"Bonfire.Common.Localise.Cldr.Interval.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"Returns a `Date.Range` or `CalendarInterval` as\na localised string.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"* `range` is either a `Date.Range.t` returned from `Date.range/2`\n or a `CalendarInterval.t`\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date | :time | nil]`.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The valid\n styles depends on whether formatting is for a date, time or datetime.\n Since the functions in this module will make a determination as\n to which formatter to be used based upon the data passed to them\n it is recommended the style option be omitted. If a style is important\n then call `to_string/3` directly on `Cldr.Date.Interval`, `Cldr.Time.Interval`\n or `Cldr.DateTime.Interval`.\n\n * For a date the alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n * For a time the alternatives are `:time`, `:zone` and\n `:flex`. The default is `:time`\n\n * For a datetime there are no style options, the default\n for each of the date and time part is used\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"* `to_string/2` will decide which formatter to call based upon\n the arguments provided to it.\n\n * A `Date.Range.t` will call `Cldr.Date.Interval.to_string/3`\n\n * A `CalendarInterval` will call `Cldr.Date.Interval.to_string/3`\n if its `:precision` is `:year`, `:month` or `:day`. Othersie\n it will call `Cldr.Time.Interval.to_string/3`\n\n * If `from` and `to` both conform to the `Calendar.datetime()`\n type then `Cldr.DateTime.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.date()`\n type then `Cldr.Date.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.time()`\n type then `Cldr.Time.Interval.to_string/3` is called\n\n* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date, time or datetime is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Interval.to_string/2","doc":"iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~I\"2020-01-01/12\",\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Sun, Jan 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string Date.range(~D[2020-01-01], ~D[2020-12-31]),\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Thu, Dec 31, 2020\"}","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"Returns a string representing the formatted\ninterval formed by two dates.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"* `from` is any map that conforms to the\n any one of the `Calendar` types.\n\n* `to` is any map that conforms to the\n any one of the `Calendar` types. `to` must\n occur on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date | :time | nil]`.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The valid\n styles depends on whether formatting is for a date, time or datetime.\n Since the functions in this module will make a determination as\n to which formatter to be used based upon the data passed to them\n it is recommended the style option be omitted. If styling is important\n then call `to_string/3` directly on `Cldr.Date.Interval`, `Cldr.Time.Interval`\n or `Cldr.DateTime.Interval`.\n\n * For a date the alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n * For a time the alternatives are `:time`, `:zone` and\n `:flex`. The default is `:time`\n\n * For a datetime there are no style options, the default\n for each of the date and time part is used\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"* `to_string/2` will decide which formatter to call based upon\n the arguments provided to it.\n\n * A `Date.Range.t` will call `Cldr.Date.Interval.to_string/3`\n\n * A `CalendarInterval` will call `Cldr.Date.Interval.to_string/3`\n if its `:precision` is `:year`, `:month` or `:day`. Othersie\n it will call `Cldr.Time.Interval.to_string/3`\n\n * If `from` and `to` both conform to the `Calendar.datetime()`\n type then `Cldr.DateTime.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.date()`\n type then `Cldr.Date.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.time()`\n type then `Cldr.Time.Interval.to_string/3` is called\n\n* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date, time or datetime is formatted instead of an interval.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Interval.to_string/3","doc":"iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-12-31]\n {:ok, \"Jan 1 – Dec 31, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-01-12]\n {:ok, \"Jan 1 – 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Sun, Jan 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~D[2020-01-01], ~D[2020-12-01],\n ...> format: :long, style: :year_and_month\n {:ok, \"January – December 2020\"}\n\n iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~I\"2020-01-01/12\",\n ...> format: :long\n {:ok, \"Wed, Jan 1 – Sun, Jan 12, 2020\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-12-01 10:05:00.0Z],\n ...> format: :long\n {:ok, \"January 1, 2020, 12:00:00 AM UTC – December 1, 2020, 10:05:00 AM UTC\"}\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:05:00.0Z],\n ...> format: :long\n {:ok, \"January 1, 2020, 12:00:00 AM UTC – 10:05:00 AM UTC\"}","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"Returns a `Date.Range` or `CalendarInterval` as\na localised string or raises an exception.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"* `range` is either a `Date.Range.t` returned from `Date.range/2`\n or a `CalendarInterval.t`\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date | :time | nil]`.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The valid\n styles depends on whether formatting is for a date, time or datetime.\n Since the functions in this module will make a determination as\n to which formatter to be used based upon the data passed to them\n it is recommended the style option be omitted. If a style is important\n then call `to_string/3` directly on `Cldr.Date.Interval`, `Cldr.Time.Interval`\n or `Cldr.DateTime.Interval`.\n\n * For a date the alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n * For a time the alternatives are `:time`, `:zone` and\n `:flex`. The default is `:time`.\n\n * For a datetime there are no style options, the default\n for each of the date and time part is used.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"* `string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"* `to_string/3` will decide which formatter to call based upon\n the arguments provided to it.\n\n * A `Date.Range.t` will call `Cldr.Date.Interval.to_string/3`\n\n * A `CalendarInterval` will call `Cldr.Date.Interval.to_string/3`\n if its `:precision` is `:year`, `:month` or `:day`. Otherwise\n it will call `Cldr.Time.Interval.to_string/3`\n\n * If `from` and `to` both conform to the `Calendar.datetime()`\n type then `Cldr.DateTime.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.date()`\n type then `Cldr.Date.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.time()`\n type then `Cldr.Time.Interval.to_string/3` is called\n\n* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date, time or datetime is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Interval.to_string!/2","doc":"iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~I\"2020-01-01/12\",\n ...> format: :long\n \"Wed, Jan 1 – Sun, Jan 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! Date.range(~D[2020-01-01], ~D[2020-12-31]),\n ...> format: :long\n \"Wed, Jan 1 – Thu, Dec 31, 2020\"","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"Returns a string representing the formatted\ninterval formed by two date or raises an\nexception.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"* `from` is any map that conforms to the\n any one of the `Calendar` types.\n\n* `to` is any map that conforms to the\n any one of the `Calendar` types. `to` must\n occur on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :date | :time | nil]`.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The valid\n styles depends on whether formatting is for a date, time or datetime.\n Since the functions in this module will make a determination as\n to which formatter to be used based upon the data passed to them\n it is recommended the style option be omitted. If styling is important\n then call `to_string/3` directly on `Cldr.Date.Interval`, `Cldr.Time.Interval`\n or `Cldr.DateTime.Interval`.\n\n * For a date the alternatives are `:date`, `:month_and_day`, `:month`\n and `:year_and_month`. The default is `:date`.\n\n * For a time the alternatives are `:time`, `:zone` and\n `:flex`. The default is `:time`.\n\n * For a datetime there are no style options, the default\n for each of the date and time part is used.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"* `string` or\n\n* raises and exception","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"* `to_string/3` will decide which formatter to call based upon\n the arguments provided to it.\n\n * A `Date.Range.t` will call `Cldr.Date.Interval.to_string/3`\n\n * A `CalendarInterval` will call `Cldr.Date.Interval.to_string/3`\n if its `:precision` is `:year`, `:month` or `:day`. Othersie\n it will call `Cldr.Time.Interval.to_string/3`\n\n * If `from` and `to` both conform to the `Calendar.datetime()`\n type then `Cldr.DateTime.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.date()`\n type then `Cldr.Date.Interval.to_string/3` is called\n\n * Otherwise if `from` and `to` conform to the `Calendar.time()`\n type then `Cldr.Time.Interval.to_string/3` is called\n\n* `CalendarInterval` support requires adding the\n dependency [calendar_interval](https://hex.pm/packages/calendar_interval)\n to the `deps` configuration in `mix.exs`.\n\n* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configuration locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n date, time or datetime is formatted instead of an interval.","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Interval.to_string!/3","doc":"iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~D[2020-01-01], ~D[2020-12-31]\n \"Jan 1 – Dec 31, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~D[2020-01-01], ~D[2020-01-12]\n \"Jan 1 – 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~D[2020-01-01], ~D[2020-01-12],\n ...> format: :long\n \"Wed, Jan 1 – Sun, Jan 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~D[2020-01-01], ~D[2020-12-01],\n ...> format: :long, style: :year_and_month\n \"January – December 2020\"\n\n iex> use CalendarInterval\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~I\"2020-01-01/12\",\n ...> format: :long\n \"Wed, Jan 1 – Sun, Jan 12, 2020\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~U[2020-01-01 00:00:00.0Z], ~U[2020-12-01 10:05:00.0Z],\n ...> format: :long\n \"January 1, 2020, 12:00:00 AM UTC – December 1, 2020, 10:05:00 AM UTC\"\n\n iex> Bonfire.Common.Localise.Cldr.Interval.to_string! ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:05:00.0Z],\n ...> format: :long\n \"January 1, 2020, 12:00:00 AM UTC – 10:05:00 AM UTC\"","ref":"Bonfire.Common.Localise.Cldr.Interval.html#to_string!/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Language","doc":"","ref":"Bonfire.Common.Localise.Cldr.Language.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Language.available_languages/1","doc":"Return all the languages' iso-codes available for a given locale.\nDefaults to the current locale.","ref":"Bonfire.Common.Localise.Cldr.Language.html#available_languages/1"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Language.available_languages/1","doc":"> Bonfire.Common.Localise.Cldr.Language.Language.available_languages(:en)\n [\"aa\", \"ab\", \"ace\", \"ach\", \"ada\", \"ady\", \"ae\", \"aeb\", \"af\", \"afh\", \"agq\", \"ain\",\n \"ak\", \"akk\", \"akz\", \"ale\", \"aln\", \"alt\", \"am\", \"an\", \"ang\", \"anp\", \"ar\",\n \"ar-001\", \"arc\", \"arn\", \"aro\", \"arp\", \"arq\", \"ars\", \"arw\", \"ary\", \"arz\", \"as\",\n \"asa\", \"ase\", \"ast\", \"av\", \"avk\", \"awa\", \"ay\", \"az\", \"ba\", \"bal\", \"ban\", \"bar\",\n \"bas\", \"bax\", \"bbc\", \"bbj\", ...]","ref":"Bonfire.Common.Localise.Cldr.Language.html#available_languages/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Language.known_languages/1","doc":"Return a map of iso-code keyed maps of language names in any available\nformats for the given locale.\nDefaults to the current locale.","ref":"Bonfire.Common.Localise.Cldr.Language.html#known_languages/1"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Language.known_languages/1","doc":"> Bonfire.Common.Localise.Cldr.Language.Language.known_languages(:en)\n %{\"bez\" => %{standard: \"Bena\"}, \"lo\" => %{standard: \"Lao\"},\n \"kha\" => %{standard: \"Khasi\"}, \"eo\" => %{standard: \"Esperanto\"},\n \"rm\" => %{standard: \"Romansh\"}, \"ja\" => %{standard: \"Japanese\"},\n \"sw-CD\" => %{standard: \"Congo Swahili\"},\n \"pdc\" => %{standard: \"Pennsylvania German\"}, \"om\" => %{standard: \"Oromo\"},\n \"jut\" => %{standard: \"Jutish\"}, \"lij\" => %{standard: \"Ligurian\"},\n \"kut\" => %{standard: \"Kutenai\"}, \"vep\" => %{standard: \"Veps\"},\n \"yao\" => %{standard: \"Yao\"}, \"gez\" => %{standard: \"Geez\"},\n \"cr\" => %{standard: \"Cree\"}, \"ne\" => %{standard: \"Nepali\"},\n \"zbl\" => %{standard: \"Blissymbols\"}, \"ae\" => %{standard: \"Avestan\"},\n \"rof\" => %{standard: \"Rombo\"}, \"tkl\" => %{standard: \"Tokelau\"},\n \"rgn\" => %{standard: \"Romagnol\"}, \"el\" => %{standard: \"Greek\"},\n \"myv\" => %{standard: \"Erzya\"}, \"smj\" => %{standard: \"Lule Sami\"},\n \"fo\" => %{standard: \"Faroese\"}, \"ii\" => %{standard: \"Sichuan Yi\"},\n \"bum\" => %{standard: \"Bulu\"}, \"za\" => %{standard: \"Zhuang\"},\n \"raj\" => %{standard: \"Rajasthani\"}, \"mrj\" => %{standard: \"Western Mari\"},\n \"stq\" => %{standard: \"Saterland Frisian\"}, \"hu\" => %{standard: \"Hungarian\"},\n \"mga\" => %{standard: \"Middle Irish\"}, \"bej\" => %{standard: \"Beja\"},\n \"yue\" => %{standard: \"Cantonese\"}, \"xog\" => %{standard: \"Soga\"},\n \"ttt\" => %{standard: \"Muslim Tat\"}, \"uga\" => %{standard: \"Ugaritic\"},\n \"rup\" => %{standard: \"Aromanian\"},\n \"crs\" => %{standard: \"Seselwa Creole French\"}, \"oc\" => %{standard: \"Occitan\"},\n \"chp\" => %{standard: \"Chipewyan\"}, \"zen\" => %{standard: \"Zenaga\"},\n \"kmb\" => %{standard: \"Kimbundu\"}, \"nr\" => %{standard: \"South Ndebele\"},\n \"tiv\" => %{standard: \"Tiv\"}, \"aln\" => %{standard: \"Gheg Albanian\"},\n \"sh\" => %{standard: \"Serbo-Croatian\"}, \"fil\" => %{...}, ...}","ref":"Bonfire.Common.Localise.Cldr.Language.html#known_languages/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Language.to_string/2","doc":"Try to translate the given language iso code or language tag.","ref":"Bonfire.Common.Localise.Cldr.Language.html#to_string/2"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Language.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Language.Language.to_string(\"eo\")\n {:ok, \"Esperanto\"}","ref":"Bonfire.Common.Localise.Cldr.Language.html#to_string/2-example"},{"type":"type","title":"Bonfire.Common.Localise.Cldr.Language.styles/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Language.html#t:styles/0"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.List","doc":"Cldr backend module that formats lists.\n\nIf we have a list of days like `[\"Monday\", \"Tuesday\", \"Wednesday\"]`\nthen we can format that list for a given locale by:\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([\"Monday\", \"Tuesday\", \"Wednesday\"], locale: \"en\")\n {:ok, \"Monday, Tuesday, and Wednesday\"}","ref":"Bonfire.Common.Localise.Cldr.List.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.intersperse/2","doc":"Intersperces a list elements into a list format according to the list\npattern rules for a locale.\n\nThis function can be helpful when creating a list from `Phoenix`\nsafe strings which are of the format `{:safe, \"some string\"}`","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.List.intersperse/2","doc":"* `list` is any list of of terms that can be passed through `Kernel.to_string/1`\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.List.intersperse/2","doc":"* `:locale` is any configured locale. See . The default\n is `Bonfire.Common.Localise.Cldr.known_locale_names/0`.\n\n* `:format` is one of those returned by\n `Cldr.List.known_list_formats/0`. The default is `format: :standard`","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.List.intersperse/2","doc":"iex> Bonfire.Common.Localise.Cldr.List.intersperse([\"a\", \"b\", \"c\"], locale: \"en\")\n {:ok, [\"a\", \", \", \"b\", \", and \", \"c\"]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([\"a\", \"b\", \"c\"], locale: \"en\", format: :unit_narrow)\n {:ok, [\"a\", \" \", \"b\", \" \", \"c\"]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([\"a\", \"b\", \"c\"], locale: \"fr\")\n {:ok, [\"a\", \", \", \"b\", \" et \", \"c\"]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2,3,4,5,6])\n {:ok, [1, \", \", 2, \", \", 3, \", \", 4, \", \", 5, \", and \", 6]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([\"a\"])\n {:ok, [\"a\"]}\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse([1,2])\n {:ok, [1, \" and \", 2]}","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.intersperse/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.intersperse!/2","doc":"Formats a list using `intersperse/2` but raises if there is\nan error.","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse!/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.List.intersperse!/2","doc":"iex> Bonfire.Common.Localise.Cldr.List.intersperse!([\"a\", \"b\", \"c\"], locale: \"en\")\n [\"a\", \", \", \"b\", \", and \", \"c\"]\n\n iex> Bonfire.Common.Localise.Cldr.List.intersperse!([\"a\", \"b\", \"c\"], locale: \"en\", format: :unit_narrow)\n [\"a\", \" \", \"b\", \" \", \"c\"]","ref":"Bonfire.Common.Localise.Cldr.List.html#intersperse!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.list_formats_for/1","doc":"Returns the styles of list patterns available for a locale.\n\nReturns a list of `atom`s of of the list formats that are\navailable in CLDR for a locale.","ref":"Bonfire.Common.Localise.Cldr.List.html#list_formats_for/1"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.List.list_formats_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.List.list_formats_for(:en)\n [:or, :or_narrow, :or_short, :standard, :standard_narrow, :standard_short,\n :unit, :unit_narrow, :unit_short]","ref":"Bonfire.Common.Localise.Cldr.List.html#list_formats_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.list_patterns_for/1","doc":"Returns the list patterns for a locale.\n\nList patterns provide rules for combining multiple\nitems into a language format appropriate for a locale.","ref":"Bonfire.Common.Localise.Cldr.List.html#list_patterns_for/1"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.List.list_patterns_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.List.list_patterns_for(:en)\n %{\n or: %{\n 2 => [0, \" or \", 1],\n end: [0, \", or \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n or_narrow: %{\n 2 => [0, \" or \", 1],\n end: [0, \", or \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n or_short: %{\n 2 => [0, \" or \", 1],\n end: [0, \", or \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n standard: %{\n 2 => [0, \" and \", 1],\n end: [0, \", and \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n standard_narrow: %{\n 2 => [0, \", \", 1],\n end: [0, \", \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n standard_short: %{\n 2 => [0, \" & \", 1],\n end: [0, \", & \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n unit: %{\n 2 => [0, \", \", 1],\n end: [0, \", \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n },\n unit_narrow: %{\n 2 => [0, \" \", 1],\n end: [0, \" \", 1],\n middle: [0, \" \", 1],\n start: [0, \" \", 1]\n },\n unit_short: %{\n 2 => [0, \", \", 1],\n end: [0, \", \", 1],\n middle: [0, \", \", 1],\n start: [0, \", \", 1]\n }\n }","ref":"Bonfire.Common.Localise.Cldr.List.html#list_patterns_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.to_string/2","doc":"Formats a list into a string according to the list pattern rules for a locale.","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.List.to_string/2","doc":"* `list` is any list of of terms that can be passed through `Kernel.to_string/1`\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.List.to_string/2","doc":"* `:locale` is any configured locale. See . The default\n is `Bonfire.Common.Localise.Cldr.known_locale_names/0`.\n\n* `:format` is one of those returned by\n `Cldr.List.known_list_formats/0`. The default is `format: :standard`","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.List.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.List.to_string([\"a\", \"b\", \"c\"], locale: \"en\")\n {:ok, \"a, b, and c\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([\"a\", \"b\", \"c\"], locale: \"en\", format: :unit_narrow)\n {:ok, \"a b c\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([\"a\", \"b\", \"c\"], locale: \"fr\")\n {:ok, \"a, b et c\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2,3,4,5,6])\n {:ok, \"1, 2, 3, 4, 5, and 6\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([\"a\"])\n {:ok, \"a\"}\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string([1,2])\n {:ok, \"1 and 2\"}","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.List.to_string!/2","doc":"Formats a list using `to_string/2` but raises if there is\nan error.","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string!/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.List.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.List.to_string!([\"a\", \"b\", \"c\"], locale: \"en\")\n \"a, b, and c\"\n\n iex> Bonfire.Common.Localise.Cldr.List.to_string!([\"a\", \"b\", \"c\"], locale: \"en\", format: :unit_narrow)\n \"a b c\"","ref":"Bonfire.Common.Localise.Cldr.List.html#to_string!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Locale","doc":"Backend module that provides functions\nto define new locales and display human-readable\nlocale names for presentation purposes.","ref":"Bonfire.Common.Localise.Cldr.Locale.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locale_names/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names/1","doc":"* `locale_name` is any locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locale_names/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names/1","doc":"* `{:ok, list_of_locale_names}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locale_names/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names/1","doc":"iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Locale.fallback_locale_names(:nb)\n {:ok, [:nb, :no, :und]}","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locale_names/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.fallback_locales/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locales/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.fallback_locales/1","doc":"* `locale_name` is any locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locales/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.fallback_locales/1","doc":"* `{:ok, list_of_locales}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locales/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.fallback_locales/1","doc":"Bonfire.Common.Localise.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 Bonfire.Common.Localise.Cldr.Locale.fallback_locales(:nb))\n => {:ok,\n [#Cldr.LanguageTag , #Cldr.LanguageTag ,\n #Cldr.LanguageTag ]}","ref":"Bonfire.Common.Localise.Cldr.Locale.html#fallback_locales/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.locale_for_territory/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#locale_for_territory/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.locale_for_territory/1","doc":"* `territory` is any ISO 3166 Alpha-2 territory\n code that can be validated by `Cldr.validate_territory/1`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_for_territory/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.locale_for_territory/1","doc":"* `{:ok, language_tag}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_for_territory/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.locale_for_territory/1","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.locale_for_territory(:AU)\n Elixir.Bonfire.Common.Localise.Cldr.validate_locale(:\"en-AU\")\n\n iex> Bonfire.Common.Localise.Cldr.Locale.locale_for_territory(:US)\n Elixir.Bonfire.Common.Localise.Cldr.validate_locale(:\"en-US\")\n\n iex> Bonfire.Common.Localise.Cldr.Locale.locale_for_territory(:ZZ)\n {:error, {Cldr.UnknownTerritoryError, \"The territory :ZZ is unknown\"}}","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_for_territory/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","doc":"Returns a \"best fit\" locale for a host name.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","doc":"* `host` is any valid host name\n\n* `options` is a keyword list of options. The default\n is `[]`.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","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":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","doc":"* `{:ok, langauge_tag}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","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":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.locale_from_host/2","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host \"a.b.com.au\"\n Elixir.Bonfire.Common.Localise.Cldr.validate_locale(:\"en-AU\")\n\n iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host(\"a.b.com.tv\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"tv\\\"\"}}\n\n iex> Bonfire.Common.Localise.Cldr.Locale.locale_from_host(\"a.b.com\")\n {:error,\n {Cldr.UnknownLocaleError, \"No locale was identified for territory \\\"com\\\"\"}}","ref":"Bonfire.Common.Localise.Cldr.Locale.html#locale_from_host/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.new/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Locale.html#new/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.new!/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Locale.html#new!/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale/1","doc":"Returns the script direction for a locale.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#script_direction_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#script_direction_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale/1","doc":"* The script direction which is either `:ltr` (for left-to-right\n scripts) or `:rtl` (for right-to-left scripts).","ref":"Bonfire.Common.Localise.Cldr.Locale.html#script_direction_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale \"en-US\"\n :ltr\n\n iex> Bonfire.Common.Localise.Cldr.Locale.script_direction_from_locale :ar\n :rtl","ref":"Bonfire.Common.Localise.Cldr.Locale.html#script_direction_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.territory_from_host/1","doc":"Returns the last segment of a host that might\nbe a territory.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_host/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.territory_from_host/1","doc":"* `host` is any valid host name","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_host/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.territory_from_host/1","doc":"* `{:ok, territory}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_host/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.territory_from_host/1","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":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_host/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.territory_from_locale/1","doc":"Returns the territory from a language tag or\nlocale name.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.territory_from_locale/1","doc":"* `locale` is any language tag returned by\n `Bonfire.Common.Localise.Cldr.Locale.new/1`\n or a locale name in the list returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.territory_from_locale/1","doc":"* A territory code as an atom","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.territory_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.territory_from_locale \"en-US\"\n :US\n\n iex> Bonfire.Common.Localise.Cldr.Locale.territory_from_locale \"en-US-u-rg-GBzzzz\"\n :GB","ref":"Bonfire.Common.Localise.Cldr.Locale.html#territory_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale/1","doc":"Returns the time zone from a language tag or\nlocale name.","ref":"Bonfire.Common.Localise.Cldr.Locale.html#timezone_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale/1","doc":"* `locale` is any language tag returned by\n `Bonfire.Common.Localise.Cldr.Locale.new/1`\n or a locale name in the list returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`","ref":"Bonfire.Common.Localise.Cldr.Locale.html#timezone_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale/1","doc":"* A time zone ID as a string or\n\n* `:error` if no time zone can be determined","ref":"Bonfire.Common.Localise.Cldr.Locale.html#timezone_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Locale.timezone_from_locale \"en-US-u-tz-ausyd\"\n \"Australia/Sydney\"","ref":"Bonfire.Common.Localise.Cldr.Locale.html#timezone_from_locale/1-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number","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":"Bonfire.Common.Localise.Cldr.Number.html"},{"type":"module","title":"Non-Scientific Notation Formatting - Bonfire.Common.Localise.Cldr.Number","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":"Bonfire.Common.Localise.Cldr.Number.html#module-non-scientific-notation-formatting"},{"type":"module","title":"Scientific Notation Formatting - Bonfire.Common.Localise.Cldr.Number","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":"Bonfire.Common.Localise.Cldr.Number.html#module-scientific-notation-formatting"},{"type":"module","title":"Significant Digits - Bonfire.Common.Localise.Cldr.Number","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":"Bonfire.Common.Localise.Cldr.Number.html#module-significant-digits"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.parse/2","doc":"Parse a string locale-aware manner and return\na number.","ref":"Bonfire.Common.Localise.Cldr.Number.html#parse/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.parse/2","doc":"* `string` is any `String.t`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.parse/2","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 `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag.t`. The default is\n `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.parse/2","doc":"* A number of the requested or default type or\n\n* `{:error, {exception, error}}` if no number could be determined","ref":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Number.parse/2","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":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.parse/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.parse(\"+1.000,34\", locale: \"de\")\n {:ok, 1000.34}\n\n iex> Bonfire.Common.Localise.Cldr.Number.parse(\"-1_000_000.34\")\n {:ok, -1000000.34}\n\n iex> Bonfire.Common.Localise.Cldr.Number.parse(\"1.000\", locale: \"de\", number: :integer)\n {:ok, 1000}\n\n iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.html#parse/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","doc":"Resolve curencies from strings within\na list.","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","doc":"* `list` is any list in which currency\n names and symbols are expected\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","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 `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2-options"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.resolve_currencies/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.scan(\"100 US dollars\")\n ...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies\n [100, :USD]\n\n iex> Bonfire.Common.Localise.Cldr.Number.scan(\"100 eurosports\")\n ...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(fuzzy: 0.75)\n [100, :EUR]\n\n iex> Bonfire.Common.Localise.Cldr.Number.scan(\"100 dollars des États-Unis\")\n ...> |> Bonfire.Common.Localise.Cldr.Number.resolve_currencies(locale: \"fr\")\n [100, :USD]","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currencies/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","doc":"Resolve a currency from a string","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","doc":"* `list` is any list in which currency\n names and symbols are expected\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","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 `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","doc":"* An ISO4217 currency code as an atom or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.resolve_currency/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency(\"US dollars\")\n [:USD]\n\n iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency(\"100 eurosports\", fuzzy: 0.75)\n [:EUR]\n\n iex> Bonfire.Common.Localise.Cldr.Number.resolve_currency(\"dollars des États-Unis\", locale: \"fr\")\n [:USD]\n\n iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_currency/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.resolve_per/2","doc":"Resolve and tokenize percent or permille\nfrom the beginning and/or the end of a string","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.resolve_per/2","doc":"* `list` is any list in which percent\n and permille symbols are expected\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.resolve_per/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.resolve_per/2","doc":"* An `:percent` or `permille` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.resolve_per/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.resolve_per \"11%\"\n [\"11\", :percent]\n\n iex> Bonfire.Common.Localise.Cldr.Number.resolve_per \"% of linguists\"\n [:percent, \" of linguists\"]\n\n iex> Bonfire.Common.Localise.Cldr.Number.resolve_per \"% of linguists %\"\n [:percent, \" of linguists \", :percent]","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_per/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.resolve_pers/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_pers/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.resolve_pers/2","doc":"* `list` is any list in which percent and\n permille symbols are expected\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_pers/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.resolve_pers/2","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":"Bonfire.Common.Localise.Cldr.Number.html#resolve_pers/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.resolve_pers/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.scan(\"100%\")\n ...> |> Bonfire.Common.Localise.Cldr.Number.resolve_pers()\n [100, :percent]","ref":"Bonfire.Common.Localise.Cldr.Number.html#resolve_pers/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"Scans a string locale-aware manner and returns\na list of strings and numbers.","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"* `string` is any `String.t`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.scan/2","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 `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"* A list of strings and numbers","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"Number parsing is performed by `Cldr.Number.Parser.parse/2`\nand any options provided are passed to that function.","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.scan/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.scan(\"£1_000_000.34\")\n [\"£\", 1000000.34]\n\n iex> Bonfire.Common.Localise.Cldr.Number.scan(\"I want £1_000_000 dollars\")\n [\"I want £\", 1000000, \" dollars\"]\n\n iex> Bonfire.Common.Localise.Cldr.Number.scan(\"The prize is 23\")\n [\"The prize is \", 23]\n\n iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.scan(\"The loss is -1.000 euros\", locale: \"de\", number: :integer)\n [\"The loss is \", -1000, \" euros\"]","ref":"Bonfire.Common.Localise.Cldr.Number.html#scan/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_approx_string/2","doc":"Formats a number and applies the `:approximately` format for\na locale and number system.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_approx_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_approx_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_approx_string/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.to_approx_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_approx_string 1234\n {:ok, \"~1,234\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_approx_string/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_at_least_string/2","doc":"Formats a number and applies the `:at_least` format for\na locale and number system.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_least_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_at_least_string/2","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 `Bonfire.Common.Localise.Cldr.Number.to_string/2` for a description of the available\n options.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_least_string/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.to_at_least_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_at_least_string 1234\n {:ok, \"1,234+\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_least_string/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_at_most_string/2","doc":"Formats a number and applies the `:at_most` format for\na locale and number system.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_most_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_at_most_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_at_most_string/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.to_at_most_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_at_most_string 1234\n {:ok, \"≤1,234\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_at_most_string/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_range_string/2","doc":"Formats the first and last numbers of a range and applies\nthe `:range` format for a locale and number system.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_range_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_range_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_range_string/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.to_range_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_range_string 1234..5678\n {:ok, \"1,234–5,678\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_range_string/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_string/2","doc":"Returns a number formatted into a string according to a format pattern and options.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.to_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-options"},{"type":"function","title":"Locale extensions affecting formatting - Bonfire.Common.Localise.Cldr.Number.to_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-locale-extensions-affecting-formatting"},{"type":"function","title":"Wrapping format elements - Bonfire.Common.Localise.Cldr.Number.to_string/2","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":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-wrapping-format-elements"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.to_string/2","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345\n {:ok, \"12,345\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, locale: \"fr\"\n {:ok, \"12 345\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1345.32, currency: :EUR, locale: \"es\", minimum_grouping_digits: 1\n {:ok, \"1.345,32 €\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1345.32, currency: :EUR, locale: \"es\"\n {:ok, \"1345,32 €\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, locale: \"fr\", currency: \"USD\"\n {:ok, \"12 345,00 $US\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: \"#E0\"\n {:ok, \"1.2345E4\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\"\n {:ok, \"THB 12,345.00\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string -12345, format: :accounting, currency: \"THB\"\n {:ok, \"(THB 12,345.00)\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\",\n ...> locale: \"th\"\n {:ok, \"฿12,345.00\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 12345, format: :accounting, currency: \"THB\",\n ...> locale: \"th\", number_system: :native\n {:ok, \"฿๑๒,๓๔๕.๐๐\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :long\n {:ok, \"1 thousand\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :long, currency: \"USD\"\n {:ok, \"1,244 US dollars\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :short\n {:ok, \"1K\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1244.30, format: :short, currency: \"EUR\"\n {:ok, \"€1K\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1234, format: :spellout\n {:ok, \"one thousand two hundred thirty-four\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1234, format: :spellout_verbose\n {:ok, \"one thousand two hundred and thirty-four\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 1989, format: :spellout_year\n {:ok, \"nineteen eighty-nine\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 123, format: :ordinal\n {:ok, \"123rd\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 123, format: :roman\n {:ok, \"CXXIII\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string 123, locale: \"th-u-nu-thai\"\n {:ok, \"๑๒๓\"}","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-examples"},{"type":"function","title":"Errors - Bonfire.Common.Localise.Cldr.Number.to_string/2","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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.to_string(1234, locale: \"he\", number_system: \"hebr\", format: :percent)\n {:error, {Cldr.UnknownFormatError,\n \"The locale :he with number system :hebr does not define a format :percent\"}}\n```","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string/2-errors"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.to_string!/2","doc":"Same as the execution of `to_string/2` but raises an exception if an error would be\nreturned.","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.to_string!/2","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 `Bonfire.Common.Localise.Cldr.Number.to_string/2`","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string!/2-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.to_string!/2","doc":"* a formatted number as a string or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.to_string! 12345\n \"12,345\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.to_string! 12345, locale: \"fr\"\n \"12 345\"","ref":"Bonfire.Common.Localise.Cldr.Number.html#to_string!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.validate_number_system/2","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":"Bonfire.Common.Localise.Cldr.Number.html#validate_number_system/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.validate_number_system/2","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":"Bonfire.Common.Localise.Cldr.Number.html#validate_number_system/2-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.validate_number_system/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system \"en\", :latn\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system \"en\", :default\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system \"en\", :unknown\n {:error,\n {Cldr.UnknownNumberSystemError, \"The number system :unknown is unknown\"}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.validate_number_system \"zz\", :default\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.Number.html#validate_number_system/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal","doc":"Implements cardinal plural rules for numbers.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.available_locale_names/0","doc":"The locale names for which plural rules are defined.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#available_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.known_locale_names/0","doc":"The configured locales for which plural rules are defined.\n\nReturns the intersection of `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#known_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule/3","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":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rule/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule/3","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 `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rule/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule 0, \"fr\"\n :one\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rule 0, \"en\"\n :other","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rule/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rules/0","doc":"Returns all the plural rules defined in CLDR.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rules/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rules_for/1","doc":"Return the plural rules for a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rules_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Cardinal.plural_rules_for/1","doc":"* `locale` is any locale returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n\nThe rules are returned in AST form after parsing.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#plural_rules_for/1-arguments"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize/3","doc":"Pluralize a number using cardinal plural rules\nand a substitution map.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#pluralize/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize/3","doc":"* `number` is an integer, float or Decimal\n\n* `locale` is any locale returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Bonfire.Common.Localise.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 `Bonfire.Common.Localise.Cldr.Number.Cardinal.Cardinal.plural_rule/3`.","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#pluralize/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1, \"en\", %{one: \"one\"}\n \"one\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, \"en\", %{one: \"one\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 2, \"en\", %{one: \"one\", two: \"two\", other: \"other\"}\n \"other\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 22, \"en\", %{one: \"one\", two: \"two\", other: \"other\"}\n \"other\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(1), \"en\", %{one: \"one\"}\n \"one\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), \"en\", %{one: \"one\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize Decimal.new(2), \"en\", %{one: \"one\", two: \"two\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, \"ar\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"few\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Cardinal.pluralize 1..10, \"en\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"","ref":"Bonfire.Common.Localise.Cldr.Number.Cardinal.html#pluralize/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Format","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":"Bonfire.Common.Localise.Cldr.Number.Format.html"},{"type":"module","title":"Number Pattern Examples - Bonfire.Common.Localise.Cldr.Number.Format","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":"Bonfire.Common.Localise.Cldr.Number.Format.html#module-number-pattern-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for/1","doc":"Returns the decimal formats defined for a given locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for/1","doc":"* `{:ok, map}` where map is a map of decimal formats\n keyed by number system or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for/1-returns"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for!/1","doc":"Returns the decimal formats defined for a given locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for!/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for!/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for!/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.all_formats_for!/1","doc":"* `{:ok, map}` where map is a map of decimal formats\n keyed by number system or\n\n* raises an exception\n\nSee `Bonfire.Common.Localise.Cldr.Number.Format.Number.Format.all_formats_for/1` for further information.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#all_formats_for!/1-returns"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.currency_spacing/2","doc":"Returns the currency space for a given locale and\nnumber system.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#currency_spacing/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list/0","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":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list/0"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list/0","doc":"#=> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list/0-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list_for/1","doc":"Returns the list of decimal formats for a configured locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list_for/1-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.Format.decimal_format_list_for/1","doc":"iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Format.html#decimal_format_list_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for/1","doc":"Returns the default grouping for a locale as a map.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for/1","doc":"* `{:ok, grouping}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for(:en)\n {:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!/1","doc":"Returns the default grouping for a locale\nor raises on error.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for!/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for!/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!/1","doc":"* `grouping` as a map or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for!/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Format.default_grouping_for!(:en)\n %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#default_grouping_for!/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.formats_for/2","doc":"Return the predfined formats for a given `locale` and `number_system`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#formats_for/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.formats_for/2","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.\n\n* `number_system` is any valid number system or number system type returned\n by `Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#formats_for/2-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.Format.formats_for/2","doc":"Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Format.html#formats_for/2-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.formats_for!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#formats_for!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for/1","doc":"Returns the minimum grouping digits for a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for/1","doc":"* `{:ok, minumum_digits}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for(\"en\")\n {:ok, 1}","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!/1","doc":"Returns the minimum grouping digits for a locale\nor raises on error.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for!/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!/1","doc":"* `minumum_digits` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Format.minimum_grouping_digits_for!(\"en\")\n 1","ref":"Bonfire.Common.Localise.Cldr.Number.Format.html#minimum_grouping_digits_for!/1-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.metadata!/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html#metadata!/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.to_string/3","doc":"Formats a number according to a decimal format string.","ref":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.to_string/3","doc":"* `number` is an integer, float or Decimal\n\n* `format` is a format string. See `Bonfire.Common.Localise.Cldr.Number` for further information.\n\n* `options` is a map of options. See `Bonfire.Common.Localise.Cldr.Number.to_string/2`\n for further information.","ref":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal.html#to_string/3-arguments"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal","doc":"Implements ordinal plural rules for numbers.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.available_locale_names/0","doc":"The locale names for which plural rules are defined.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#available_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.known_locale_names/0","doc":"The configured locales for which plural rules are defined.\n\nReturns the intersection of `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#known_locale_names/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule/3","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":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rule/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule/3","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 `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rule/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule 0, \"fr\"\n :other\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rule 1, \"en\"\n :one","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rule/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rules/0","doc":"Returns all the plural rules defined in CLDR.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rules/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rules_for/1","doc":"Return the plural rules for a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rules_for/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Ordinal.plural_rules_for/1","doc":"* `locale` is any locale returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n\nThe rules are returned in AST form after parsing.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#plural_rules_for/1-arguments"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize/3","doc":"Pluralize a number using ordinal plural rules\nand a substitution map.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#pluralize/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize/3","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 `Bonfire.Common.Localise.Cldr.Locale.new!/1` or any\n `locale_name` returned by `Bonfire.Common.Localise.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 `Bonfire.Common.Localise.Cldr.Number.Ordinal.Ordinal.plural_rule/3`.","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#pluralize/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1, :en, %{one: \"one\"}\n \"one\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: \"one\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 2, :en, %{one: \"one\", two: \"two\"}\n \"two\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 22, :en, %{one: \"one\", two: \"two\", other: \"other\"}\n \"two\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: \"one\"}\n \"one\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: \"one\"}\n nil\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: \"one\", two: \"two\"}\n \"two\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, \"ar\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Ordinal.pluralize 1..10, \"en\", %{one: \"one\", few: \"few\", other: \"other\"}\n \"other\"","ref":"Bonfire.Common.Localise.Cldr.Number.Ordinal.html#pluralize/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range","doc":"Implements plural rules for ranges","ref":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.plural_rule/3","doc":"Returns a final plural type for a start-of-range plural\ntype, an end-of-range plural type and a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html#plural_rule/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.plural_rule/3","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":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html#plural_rule/3-arguments"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.plural_rule/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.plural_rule :other, :few, \"ar\"\n :few","ref":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range.html#plural_rule/3-example"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Symbol","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.all_decimal_symbols/0","doc":"Returns a list of all decimal symbols defined\nby the locales configured in this backend as\na list.","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#all_decimal_symbols/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.all_decimal_symbols_class/0","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":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#all_decimal_symbols_class/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.all_grouping_symbols/0","doc":"Returns a list of all grouping symbols defined\nby the locales configured in this backend as\na list.","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#all_grouping_symbols/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.all_grouping_symbols_class/0","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":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#all_grouping_symbols_class/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/1","doc":"Returns a map of `Cldr.Number.Symbol.t` structs of the number symbols for each\nof the number systems of a locale.","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#number_symbols_for/1"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/1","doc":"* `locale` is any valid locale name returned by\n `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by\n `Bonfire.Common.Localise.Cldr.Locale.new!/1`. The default\n is `Bonfire.Common.Localise.Cldr.get_locale/0`.","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#number_symbols_for/1-options"},{"type":"function","title":"Example: - Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/1","doc":"iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#number_symbols_for/1-example"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Symbol.html#number_symbols_for/2"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.System","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_for/2","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":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_for/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.number_system_for/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for \"th\", :latn\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for \"en\", :default\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for \"he\", :traditional\n {:ok, %{rules: \"hebrew\", type: :algorithmic}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_for \"en\", :native\n {:ok, %{digits: \"0123456789\", type: :numeric}}\n\n iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_for/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale/1","doc":"Returns the number system from a language tag or\nlocale name.","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_from_locale/1"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale/1","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":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_from_locale/1-arguments"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale/1","doc":"* A number system name as an atom","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_from_locale/1-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale \"en-US-u-nu-thai\"\n :thai\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_from_locale \"en-US\"\n :latn","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_from_locale/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for/1","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 `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1`","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_names_for/1"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for \"en\"\n {:ok, [:latn]}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for \"zz\"\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_names_for/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_names_for!/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_names_for!/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_system_types_for/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_system_types_for/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1","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 `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.Cldr.Locale.new!/1`","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_systems_for/1"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for \"en\"\n {:ok, %{default: :latn, native: :latn}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for \"th\"\n {:ok, %{default: :latn, native: :thai}}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.number_systems_for \"zz\"\n {:error, {Cldr.InvalidLanguageError, \"The language \\\"zz\\\" is invalid\"}}","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_systems_for/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_systems_for!/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_systems_for!/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.number_systems_like/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#number_systems_like/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.system_name_from/2","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 `Bonfire.Common.Localise.Cldr.known_number_systems/0` or a number system type\n returned by `Bonfire.Common.Localise.Cldr.known_number_system_types/0`\n\n* `locale` is any valid locale name returned by `Bonfire.Common.Localise.Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct returned by `Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.System.html#system_name_from/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.system_name_from/2","doc":"ex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:default, \"en\")\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(\"latn\", \"en\")\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.system_name_from(:native, \"en\")\n {:ok, :latn}\n\n iex> Bonfire.Common.Localise.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":"Bonfire.Common.Localise.Cldr.Number.System.html#system_name_from/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.to_system/2","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":"Bonfire.Common.Localise.Cldr.Number.System.html#to_system/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.to_system/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123456, :hebr\n {:ok, \"קכ״ג׳תנ״ו\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hans\n {:ok, \"一百二十三\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hant\n {:ok, \"一百二十三\"}\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system 123, :hansfin\n {:ok, \"壹佰贰拾叁\"}","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#to_system/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.System.to_system!/2","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 `Bonfire.Common.Localise.Cldr.known_number_systems/0` or a number system type\n returned by `Bonfire.Common.Localise.Cldr.known_number_system_types/0`\n\nSee `Bonfire.Common.Localise.Cldr.Number.System.to_system/2` for further\ninformation.","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#to_system!/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.System.to_system!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Number.System.to_system! 123, :hans\n \"一百二十三\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system! 123, :hant\n \"一百二十三\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.System.to_system! 123, :hansfin\n \"壹佰贰拾叁\"","ref":"Bonfire.Common.Localise.Cldr.Number.System.html#to_system!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate","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":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html"},{"type":"module","title":"Configuring precompilation of digit transliterations - Bonfire.Common.Localise.Cldr.Number.Transliterate","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.numeric_systems/0`.\n\nIf a transliteration is requested between two number pairs that have not been configured for\nprecompilation, a warning is logged.","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#module-configuring-precompilation-of-digit-transliterations"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate/3","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":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate/3","doc":"* `sequence` is the string to be transliterated.\n\n* `locale` is any known locale, defaulting to `Bonfire.Common.Localise.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 `Bonfire.Common.Localise.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 `Bonfire.Common.Localise.Cldr.Number.System.number_systems_for/1`. Also see\n`Bonfire.Common.Localise.Cldr.Number.Symbol.number_symbols_for/1`.","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate/3-arguments"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123556\")\n \"123556\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123,556.000\", \"fr\", :default)\n \"123 556,000\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", :default)\n \"123556\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", \"thai\")\n \"๑๒๓๕๕๖\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"123556\", \"th\", :native)\n \"๑๒๓๕๕๖\"\n\n iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate(\"Some number is: 123556\", \"th\", \"thai\")\n \"Some number is: ๑๒๓๕๕๖\"","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate!/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate!/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate_digits/3","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.numeric_systems/0` for available number systems.","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate_digits/3"},{"type":"function","title":"Example - Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate_digits/3","doc":"iex> Bonfire.Common.Localise.Cldr.Number.Transliterate.transliterate_digits \"٠١٢٣٤٥٦٧٨٩\", :arab, :latn\n \"0123456789\"","ref":"Bonfire.Common.Localise.Cldr.Number.Transliterate.html#transliterate_digits/3-example"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem","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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :roman)\n {:ok, \"CXXIII\"}","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.all_rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#all_rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.armenian_lower/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#armenian_lower/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.armenian_lower/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#armenian_lower/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.armenian_upper/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#armenian_upper/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.armenian_upper/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#armenian_upper/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower_1_10/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_1_10/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower_final/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_final/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower_post/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_post/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.cyrillic_lower_thousands/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#cyrillic_lower_thousands/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic_p1/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic_p1/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic_p2/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic_p2/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic_p3/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic_p3/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.ethiopic_p/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#ethiopic_p/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.georgian/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#georgian/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.georgian/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#georgian/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_lower/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_lower/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_lower/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_lower/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_numeral_majuscules/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_numeral_majuscules/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_numeral_minuscules/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_numeral_minuscules/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_upper/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_upper/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.greek_upper/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#greek_upper/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_0_99/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_0_99/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_item/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_item/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_item/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_item/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_item_hundreds/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_item_hundreds/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.hebrew_thousands/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#hebrew_thousands/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_lower/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#roman_lower/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_lower/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#roman_lower/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_upper/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#roman_upper/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.roman_upper/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#roman_upper/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.rule_sets/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#rule_sets/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.tamil/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#tamil/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.tamil/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#tamil/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.tamil_thousands/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#tamil_thousands/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.zz_default/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#zz_default/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.zz_default/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem.html#zz_default/2"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal","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> Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets(:en)\n [:digits_ordinal]\n\n iex> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :ordinal)\n {:ok, \"123rd\"}","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.all_rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#all_rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_feminine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_feminine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_feminine_plural/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_feminine_plural/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_indicator_m/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_indicator_m/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_masculine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_masculine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_masculine_adjective/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_masculine_adjective/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.digits_ordinal_masculine_plural/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#digits_ordinal_masculine_plural/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.dord_femabbrev/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#dord_femabbrev/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.dord_mascabbrev/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#dord_mascabbrev/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.rule_sets/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal.html#rule_sets/1"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout","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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.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> Bonfire.Common.Localise.Cldr.Number.to_string(123, format: :spellout)\n {:ok, \"one hundred twenty-three\"}","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.after_hundred/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#after_hundred/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.after_thousand_or_more/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#after_thousand_or_more/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.all_rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#all_rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.and/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#and/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.and_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#and_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.cents_f/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#cents_f/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.cents_m/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#cents_m/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.cents_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#cents_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.commas/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#commas/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.commas_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#commas_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.et_un/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#et_un/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.et_une/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#et_une/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.et_unieme/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#et_unieme/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.fem_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#fem_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.fem_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#fem_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.fem_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#fem_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.lenient_parse/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#lenient_parse/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.mille_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#mille_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_no_final/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_no_final/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_a_nofinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_a_nofinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_i_nofinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_i_nofinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msc_with_o_nofinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msc_with_o_nofinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msco_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msco_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msco_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msco_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.msco_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#msco_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esima/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esima/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esima_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esima_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esima_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esima_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esima_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esima_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esime/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esime/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esime_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esime_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esime_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esime_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esime_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esime_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimi/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimi/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimi_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimi_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimi_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimi_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimi_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimi_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimo/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimo/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimo_with_a/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimo_with_a/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimo_with_i/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimo_with_i/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.ordinal_esimo_with_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#ordinal_esimo_with_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.r2d_year/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#r2d_year/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.rule_sets/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#rule_sets/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.rule_sets/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#rule_sets/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_feminine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_feminine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_feminine_cents/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_feminine_cents/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_masculine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_masculine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_masculine_cents/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_masculine_cents/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_cardinal_verbose/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_cardinal_verbose/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_leading/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_leading/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_numbering/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_numbering/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_numbering_cents/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_numbering_cents/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_numbering_verbose/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_numbering_verbose/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_numbering_year/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_numbering_year/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_feminine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_feminine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_feminine_cont/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_feminine_cont/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_feminine_conts/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_feminine_conts/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_feminine_plural/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_feminine_plural/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine_adjective/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine_adjective/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine_cont/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine_cont/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine_conts/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine_conts/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_masculine_plural/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_masculine_plural/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.spellout_ordinal_verbose/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#spellout_ordinal_verbose/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.subcents_f/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#subcents_f/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.subcents_m/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#subcents_m/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.subcents_o/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#subcents_o/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.teen/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#teen/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.th/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#th/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.tieth/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#tieth/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.x_ty/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout.html#x_ty/2"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Time","doc":"","ref":"Bonfire.Common.Localise.Cldr.Time.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"Formats a time according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html)","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"* `{:ok, formatted_time}` or\n\n* `{:error, reason}`.","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2-returns"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"* `time` is a `%DateTime{}` or `%NaiveDateTime{}` struct or any map that contains the keys\n `hour`, `minute`, `second` and optionally `calendar` and `microsecond`\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string.\n The default is `:medium`.\n\n* `locale:` any locale returned by `Cldr.known_locale_names/1`. The default is `\n Cldr.get_locale()`.\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated.\n\n* `era: :variant` will use a variant for the era is one is available in the locale.\n In the \"en\" locale, for example, `era: :variant` will return \"BCE\" instead of \"BC\".\n\n* `period: :variant` will use a variant for the time period and flexible time period if\n one is available in the locale. For example, in the \"en\" locale `period: :variant` will\n return \"pm\" instead of \"PM\".","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Time.to_string/2","doc":"iex> Cldr.Time.to_string ~T[07:35:13.215217]\n {:ok, \"7:35:13 AM\"}\n\n iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :short\n {:ok, \"7:35 AM\"}\n\n iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :medium, locale: \"fr\"\n {:ok, \"07:35:13\"}\n\n iex> Cldr.Time.to_string ~T[07:35:13.215217], format: :medium\n {:ok, \"7:35:13 AM\"}\n\n iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], \"Etc/UTC\")\n iex> Cldr.Time.to_string datetime, format: :long\n {:ok, \"11:59:59 PM UTC\"}","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"Formats a time according to a format string\nas defined in CLDR and described in [TR35](http://unicode.org/reports/tr35/tr35-dates.html).","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"* `time` is a `%DateTime{}` or `%NaiveDateTime{}` struct or any map that contains the keys\n `hour`, `minute`, `second` and optionally `calendar` and `microsecond`\n\n* `options` is a keyword list of options for formatting.","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"* `format:` `:short` | `:medium` | `:long` | `:full` or a format string.\n The default is `:medium`.\n\n * `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n * `number_system:` a number system into which the formatted date digits should\n be transliterated.\n\n * `era: :variant` will use a variant for the era is one is available in the locale.\n In the \"en\" locale, for example, `era: :variant` will return \"BCE\" instead of \"BC\".\n\n * `period: :variant` will use a variant for the time period and flexible time period if\n one is available in the locale. For example, in the \"en\" locale `period: :variant` will\n return \"pm\" instead of \"PM\".","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"* `formatted_time_string` or\n\n* raises an exception.","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Time.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217]\n \"7:35:13 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217], format: :short\n \"7:35 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.to_string ~T[07:35:13.215217], format: :short, period: :variant\n {:ok, \"7:35 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217], format: :medium, locale: \"fr\"\n \"07:35:13\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.to_string! ~T[07:35:13.215217], format: :medium\n \"7:35:13 AM\"\n\n iex> {:ok, datetime} = DateTime.from_naive(~N[2000-01-01 23:59:59.0], \"Etc/UTC\")\n iex> Bonfire.Common.Localise.Cldr.Time.to_string! datetime, format: :long\n \"11:59:59 PM UTC\"","ref":"Bonfire.Common.Localise.Cldr.Time.html#to_string!/2-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Time.Interval","doc":"Interval formats allow for software to format intervals like \"Jan 10-12, 2008\" as a\nshorter and more natural format than \"Jan 10, 2008 - Jan 12, 2008\". They are designed\nto take a start and end date, time or datetime plus a formatting pattern\nand use that information to produce a localized format.\n\nSee `Cldr.Interval.to_string/3` and `Cldr.Time.Interval.to_string/3`","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.Interval.do_to_string/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#do_to_string/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.Interval.do_to_string!/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#do_to_string!/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"Returns a string representing the formatted\ninterval formed by two times.","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"* `from` is any map that conforms to the\n `Calendar.time` type.\n\n* `to` is any map that conforms to the\n `Calendar.time` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :time]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone time.","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The\n alternatives are `:time`, `:zone`,\n and `:flex`. The default is `:time`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"* `{:ok, string}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configured locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n time is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Time.Interval.to_string/3","doc":"iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :short\n {:ok, \"10 – 10 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :medium\n {:ok, \"10:00 – 10:03 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00], format: :long\n {:ok, \"10:00 – 10:03 AM\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00],\n ...> format: :long, style: :flex\n {:ok, \"10:00 – 10:03 in the morning\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],\n ...> format: :long, style: :flex\n {:ok, \"12:00 – 10:00 in the morning\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],\n ...> format: :long, style: :zone\n {:ok, \"12:00 – 10:00 AM Etc/UTC\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], ~T[10:03:00],\n ...> format: :long, style: :flex, locale: \"th\"\n {:ok, \"10:00 – 10:03 ในตอนเช้า\"}\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string ~T[10:00:00], nil\n {:ok, \"10:00:00 AM –\"}","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string/3-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"Returns a string representing the formatted\ninterval formed by two times or raises an\nexception.","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"* `from` is any map that conforms to the\n `Calendar.time` type.\n\n* `to` is any map that conforms to the\n `Calendar.time` type. `to` must occur\n on or after `from`.\n\n* `options` is a keyword list of options. The default is\n `[format: :medium, style: :time]`.\n\nEither `from` or `to` may also be `nil`, in which case an\nopen interval is formatted and the non-nil item is formatted\nas a standalone time.","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"* `:format` is one of `:short`, `:medium` or `:long` or a\n specific format type or a string representing of an interval\n format. The default is `:medium`.\n\n* `:style` supports dfferent formatting styles. The\n alternatives are `:time`, `:zone`,\n and `:flex`. The default is `:time`.\n\n* `locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Elixir.Bonfire.Common.Localise.Cldr.get_locale/0`\n\n* `number_system:` a number system into which the formatted date digits should\n be transliterated","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"* `string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"* For more information on interval format string\n see `Cldr.Interval`.\n\n* The available predefined formats that can be applied are the\n keys of the map returned by `Cldr.DateTime.Format.interval_formats(\"en\", :gregorian)`\n where `\"en\"` can be replaced by any configured locale name and `:gregorian`\n is the underlying CLDR calendar type.\n\n* In the case where `from` and `to` are equal, a single\n time is formatted instead of an interval","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Time.Interval.to_string!/3","doc":"iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00], format: :short\n \"10 – 10 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00], format: :medium\n \"10:00 – 10:03 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00], format: :long\n \"10:00 – 10:03 AM\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00],\n ...> format: :long, style: :flex\n \"10:00 – 10:03 in the morning\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],\n ...> format: :long, style: :flex\n \"12:00 – 10:00 in the morning\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~U[2020-01-01 00:00:00.0Z], ~U[2020-01-01 10:00:00.0Z],\n ...> format: :long, style: :zone\n \"12:00 – 10:00 AM Etc/UTC\"\n\n iex> Bonfire.Common.Localise.Cldr.Time.Interval.to_string! ~T[10:00:00], ~T[10:03:00],\n ...> format: :long, style: :flex, locale: \"th\"\n \"10:00 – 10:03 ในตอนเช้า\"","ref":"Bonfire.Common.Localise.Cldr.Time.Interval.html#to_string!/3-examples"},{"type":"module","title":"Bonfire.Common.Localise.Cldr.Unit","doc":"Supports the CLDR Units definitions which provide for the localization of many\nunit types.","ref":"Bonfire.Common.Localise.Cldr.Unit.html"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.add/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#add/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.add!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#add!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.compatible?/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#compatible?/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.convert/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#convert/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.convert!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#convert!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.decompose/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#decompose/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.default_gender/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#default_gender/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.default_style/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#default_style/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.display_name/2","doc":"Returns the localized display name\nfor a unit.\n\nThe returned text is generally suitable\nfor including in UI elements such as\nselection boxes.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#display_name/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.display_name/2","doc":"* `unit` is any `t:Cldr.Unit` or any\n unit name returned by `Cldr.Unit.known_units/0`.\n\n* `options` is a keyword list of options.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#display_name/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.display_name/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`.\n\n* `:style` is one of those returned by `Cldr.Unit.available_styles`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#display_name/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.display_name/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.display_name :liter\n \"liters\"\n\n iex> Bonfire.Common.Localise.Cldr.Unit.display_name :liter, locale: \"fr\"\n \"litres\"\n\n iex> Bonfire.Common.Localise.Cldr.Unit.display_name :liter, locale: \"fr\", style: :short\n \"l\"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#display_name/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.div/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#div/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.div!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#div!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.grammatical_features/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#grammatical_features/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.grammatical_gender/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#grammatical_gender/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.known_styles/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#known_styles/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.known_unit_categories/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#known_unit_categories/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.known_units/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#known_units/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.localize/1","doc":"Localizes a unit according to the current\nprocesses locale and backend.\n\nThe current process's locale is set with\n`Cldr.put_locale/1`.\n\nSee `Cldr.Unit.localize/3` for further\ndetails.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.localize/2","doc":"Localizes a unit according to a territory\n\nA territory can be derived from a `t:Cldr.Locale.locale_name`\nor `t:Cldr.LangaugeTag`.\n\nUse this function if you have a unit which\nshould be presented in a user interface using\nunits relevant to the audience. For example, a\nunit `#Cldr.Unit100, :meter>` might be better\npresented to a US audience as `#Cldr.Unit `.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.localize/2","doc":"* `unit` is any unit returned by `Cldr.Unit.new/2`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.localize/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `backend.get_locale/0`\n\n* `:territory` is any valid territory code returned by\n `Cldr.known_territories/0`. The default is the territory defined\n as part of the `:locale`. The option `:territory` has a precedence\n over the territory in a locale.\n\n* `:usage` is the way in which the unit is intended\n to be used. The available `usage` varyies according\n to the unit category. See `Cldr.Unit.preferred_units/3`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/2-options"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.localize/2","doc":"iex> unit = Cldr.Unit.new!(1.83, :meter)\n iex> Bonfire.Common.Localise.Cldr.Unit.localize(unit, usage: :person_height, territory: :US)\n [\n Cldr.Unit.new!(:foot, 6, usage: :person_height),\n Cldr.Unit.new!(:inch, \"0.04724409448818897637795275598\", usage: :person_height)\n ]","ref":"Bonfire.Common.Localise.Cldr.Unit.html#localize/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system?/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system?/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_for/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_for/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_for/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_for/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_for_territory/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_for_territory/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_for_territory/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_for_territory/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_from_locale/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_from_locale/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_from_locale/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_from_locale/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_system_from_locale/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_system_from_locale/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.measurement_systems_for_unit/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#measurement_systems_for_unit/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.mult/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#mult/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.mult!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#mult!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.new/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#new/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.new!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#new!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"Parse a string to create a new unit.\n\nThis function attempts to parse a string\ninto a `number` and `unit type`. If successful\nit attempts to create a new unit using\n`Cldr.Unit.new/3`.\n\nThe parsed `unit type` is aliased against all the\nknown unit names for a give locale (or the current\nlocale if no locale is specified). The known\naliases for unit types can be returned with\n`MyApp.Cldr.Unit.unit_strings_for/1` where `MyApp.Cldr`\nis the name of a backend module.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"* `unit string` is any string to be parsed and if\n possible used to create a new `t:Cldr.Unit`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"* `{:ok, unit}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.parse/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.parse \"1kg\"\n Cldr.Unit.new(1, :kilogram)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse \"1 tages\", locale: \"de\"\n Cldr.Unit.new(1, :day)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse \"1 tag\", locale: \"de\"\n Cldr.Unit.new(1, :day)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse(\"42 millispangels\")\n {:error, {Cldr.UnknownUnitError, \"Unknown unit was detected at \\\"spangels\\\"\"}}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"Parse a string to create a new unit or\nraises an exception.\n\nThis function attempts to parse a string\ninto a `number` and `unit type`. If successful\nit attempts to create a new unit using\n`Cldr.Unit.new/3`.\n\nThe parsed `unit type` is un-aliased against all the\nknown unit names for a give locale (or the current\nlocale if no locale is specified). The known\naliases for unit types can be returned with\n`MyApp.Cldr.Unit.unit_strings_for/1` where `MyApp.Cldr`\nis the name of a backend module.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"* `unit string` is any string to be parsed and if\n possible used to create a new `t:Cldr.Unit`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"* `unit` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.parse!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.parse! \"1kg\"\n Cldr.Unit.new!(1, :kilogram)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse! \"1 tages\", locale: \"de\"\n Cldr.Unit.new!(1, :day)\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse!(\"42 candela per lux\")\n Cldr.Unit.new!(42, \"candela per lux\")\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse!(\"42 millispangels\")\n ** (Cldr.UnknownUnitError) Unknown unit was detected at \"spangels\"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"Parse a string to find a matching unit-atom.\n\nThis function attempts to parse a string and\nextract the `unit type`.\n\nThe parsed `unit type` is aliased against all the\nknown unit names for a give locale (or the current\nlocale if no locale is specified). The known\naliases for unit types can be returned with\n`MyApp.Cldr.Unit.unit_strings_for/1` where `MyApp.Cldr`\nis the name of a backend module.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"* `unit_name_string` is any string to be parsed and converted into a `unit type`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\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\n* `:only` is a unit category or unit, or a list of unit categories and units.\n The parsed unit must match one of the categories or units in order to\n be valid. This is helpful when disambiguating parsed units. For example,\n parsing \"w\" could be either `:watt` or `:weeks`. Specifying `only: :duration`\n would return `:weeks`. Specifying `only: :power` would return `:watt`\n\n* `:except` is the oppostte of `:only`. The parsed unit must *not*\n match the specified unit or category, or unit categories and units.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"* `{:ok, unit_name}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"* When both `:only` and `:except` options are passed, both\n conditions must be true in order to return a parsed result.\n\n* Only units returned by `Cldr.Unit.known_units/0` can be\n used in the `:only` and `:except` filters.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"kg\"\n {:ok, :kilogram}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"w\"\n {:ok, :watt}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"w\", only: :duration\n {:ok, :week}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"m\", only: [:year, :month, :day]\n {:ok, :month}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"tages\", locale: \"de\"\n {:ok, :day}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name \"tag\", locale: \"de\"\n {:ok, :day}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name(\"millispangels\")\n {:error, {Cldr.UnknownUnitError, \"Unknown unit was detected at \\\"spangels\\\"\"}}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"Parse a string to find a matching unit-atom.\n\nThis function attempts to parse a string and\nextract the `unit type`.\n\nThe parsed `unit type` is aliased against all the\nknown unit names for a give locale (or the current\nlocale if no locale is specified). The known\naliases for unit types can be returned with\n`MyApp.Cldr.Unit.unit_strings_for/1` where `MyApp.Cldr`\nis the name of a backend module.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"* `unit_name_string` is any string to be parsed and converted into a `unit type`\n\n* `options` is a keyword list of options","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `t:Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\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\n* `:only` is a unit category or unit, or a list of unit categories and units.\n The parsed unit must match one of the categories or units in order to\n be valid. This is helpful when disambiguating parsed units. For example,\n parsing \"w\" could be either `watts` or `:week`. Specifying `only: :duration`\n would return `:week`. Specifying `only: :power` would return `:watts`\n\n* `:except` is the oppostte of `:only`. The parsed unit must *not*\n match the specified unit or category, or unit categories and units.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"* `unit_name` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"* When both `:only` and `:except` options are passed, both\n conditions must be true in order to return a parsed result.\n\n* Only units returned by `Cldr.Unit.known_units/0` can be\n used in the `:only` and `:except` filters.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"kg\"\n :kilogram\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"w\"\n :watt\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"w\", only: :duration\n :week\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"m\", only: [:year, :month, :day]\n :month\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"tages\", locale: \"de\"\n :day\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name! \"tag\", locale: \"de\"\n :day\n\n iex> Bonfire.Common.Localise.Cldr.Unit.parse_unit_name!(\"millispangels\")\n ** (Cldr.UnknownUnitError) Unknown unit was detected at \"spangels\"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#parse_unit_name!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"Returns a list of the preferred units for a given\nunit, locale, use case and scope.\n\nThe units used to represent length, volume and so on\ndepend on a given territory, measurement system and usage.\n\nFor example, in the US, people height is most commonly\nreferred to in `inches`, or informally as `feet and inches`.\nIn most of the rest of the world it is `centimeters`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"* `unit` is any unit returned by `Cldr.Unit.new/2`.\n\n* `backend` is any Cldr backend module. That is, any module\n that includes `use Cldr`. The default is `Cldr.default_backend/0`\n\n* `options` is a keyword list of options or a\n `Cldr.Unit.Conversion.Options` struct. The default\n is `[]`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"* `:usage` is the unit usage. for example `;person` for a unit\n type of length. The available usage for a given unit category can\n be seen with `Cldr.Unit.unit_category_usage/0`. The default is `nil`\n\n* `:scope` is either `:small` or `nil`. In some usage, the units\n used are different when the unit size is small. It is up to the\n developer to determine when `scope: :small` is appropriate.\n\n* `:alt` is either `:informal` or `nil`. Like `:scope`, the units\n in use depend on whether they are being used in a formal or informal\n context.\n\n* `:locale` is any locale returned by `Cldr.validate_locale/2`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"* `{:ok, unit_list, formatting_options}` or\n\n* `{:error, {exception, reason}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-returns"},{"type":"function","title":"Notes - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"`formatting_options` is a keyword list of options\nthat can be passed to `Cldr.Unit.to_string/3`. Its\nprimary intended usage is for localizing a unit that\ndecomposes into more than one unit (for example when\n2 meters might become 6 feet 6 inches.) In such\ncases, the last unit in the list (in this case the\ninches) is formatted with the `formatting_options`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-notes"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.preferred_units/2","doc":"iex> meter = Cldr.Unit.new!(:meter, 1)\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-US\", usage: :person_height\n {:ok, [:foot, :inch], []}\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-US\", usage: :person\n {:ok, [:inch], []}\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-AU\", usage: :person\n {:ok, [:centimeter], []}\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-US\", usage: :road\n {:ok, [:foot], [round_nearest: 1]}\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units meter, locale: \"en-AU\", usage: :road\n {:ok, [:meter], [round_nearest: 1]}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"Returns a list of the preferred units for a given\nunit, locale, use case and scope.\n\nThe units used to represent length, volume and so on\ndepend on a given territory, measurement system and usage.\n\nFor example, in the US, people height is most commonly\nreferred to in `inches`, or informally as `feet and inches`.\nIn most of the rest of the world it is `centimeters`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"* `unit` is any unit returned by `Cldr.Unit.new/2`.\n\n* `backend` is any Cldr backend module. That is, any module\n that includes `use Cldr`. The default is `Cldr.default_backend/0`\n\n* `options` is a keyword list of options or a\n `Cldr.Unit.Conversion.Options` struct. The default\n is `[]`.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"* `:usage` is the unit usage. for example `;person` for a unit\n type of length. The available usage for a given unit category can\n be seen with `Cldr.Unit.unit_category_usage/0`. The default is `nil`\n\n* `:scope` is either `:small` or `nil`. In some usage, the units\n used are different when the unit size is small. It is up to the\n developer to determine when `scope: :small` is appropriate.\n\n* `:alt` is either `:informal` or `nil`. Like `:scope`, the units\n in use depend on whether they are being used in a formal or informal\n context.\n\n* `:locale` is any locale returned by `Cldr.validate_locale/2`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"* `unit_list` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.preferred_units!/2","doc":"iex> meter = Cldr.Unit.new!(:meter, 2)\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: \"en-US\", usage: :person_height\n [:foot, :inch]\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: \"en-AU\", usage: :person\n [:centimeter]\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: \"en-US\", usage: :road\n [:foot]\n iex> Bonfire.Common.Localise.Cldr.Unit.preferred_units! meter, locale: \"en-AU\", usage: :road\n [:meter]","ref":"Bonfire.Common.Localise.Cldr.Unit.html#preferred_units!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.round/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#round/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.round/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#round/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.round/3","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#round/3"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.styles/0","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#styles/0"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.sub/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#sub/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.sub!/2","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#sub!/2"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"Formats a number into an iolist according to a unit definition\nfor a locale.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"* `list_or_number` is any number (integer, float or Decimal) or a\n `t:Cldr.Unit` struct or a list of `t:Cldr.Unit` structs\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"* `:unit` is any unit returned by `Cldr.Unit.known_units/0`. Ignored if\n the number to be formatted is a `t:Cldr.Unit` struct\n\n* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `:style` is one of those returned by `Cldr.Unit.known_styles`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`\n\n* `:grammatical_case` indicates that a localisation for the given\n locale and given grammatical case should be used. See `Cldr.Unit.known_grammatical_cases/0`\n for the list of known grammatical cases. Note that not all locales\n define all cases. However all locales do define the `:nominative`\n case, which is also the default.\n\n* `:gender` indicates that a localisation for the given\n locale and given grammatical gender should be used. See `Cldr.Unit.known_grammatical_genders/0`\n for the list of known grammatical genders. Note that not all locales\n define all genders. The default gender is `Bonfire.Common.Localise.Cldr.Unit.default_gender/1`\n for the given locale.\n\n* `:list_options` is a keyword list of options for formatting a list\n which is passed through to `Cldr.List.to_string/3`. This is only\n applicable when formatting a list of units.\n\n* Any other options are passed to `Cldr.Number.to_string/2`\n which is used to format the `number`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"* `{:ok, io_list}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.to_iolist/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist Cldr.Unit.new!(:gallon, 123)\n {:ok, [\"123\", \" gallons\"]}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"Formats a unit using `to_iolist/3` but raises if there is\nan error.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"* `list_or_number` is any number (integer, float or Decimal) or a\n `t:Cldr.Unit` struct or a list of `t:Cldr.Unit` structs\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"* `:unit` is any unit returned by `Cldr.Unit.known_units/0`. Ignored if\n the number to be formatted is a `t:Cldr.Unit` struct\n\n* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `:style` is one of those returned by `Cldr.Unit.known_styles/0`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`.\n\n* `:grammatical_case` indicates that a localisation for the given\n locale and given grammatical case should be used. See `Cldr.Unit.known_grammatical_cases/0`\n for the list of known grammatical cases. Note that not all locales\n define all cases. However all locales do define the `:nominative`\n case, which is also the default.\n\n* `:gender` indicates that a localisation for the given\n locale and given grammatical gender should be used. See `Cldr.Unit.known_grammatical_genders/0`\n for the list of known grammatical genders. Note that not all locales\n define all genders. The default gender is `Bonfire.Common.Localise.Cldr.Unit.default_gender/1`\n for the given locale.\n\n* `:list_options` is a keyword list of options for formatting a list\n which is passed through to `Cldr.List.to_string/3`. This is only\n applicable when formatting a list of units.\n\n* Any other options are passed to `Cldr.Number.to_string/2`\n which is used to format the `number`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"* `io_list` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.to_iolist!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.to_iolist! 123, unit: :gallon\n [\"123\", \" gallons\"]","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_iolist!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"Formats a number into a string according to a unit definition for a locale.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"* `list_or_number` is any number (integer, float or Decimal) or a\n `t:Cldr.Unit` struct or a list of `t:Cldr.Unit` structs\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"* `:unit` is any unit returned by `Cldr.Unit.known_units/0`. Ignored if\n the number to be formatted is a `t:Cldr.Unit` struct\n\n* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `:style` is one of those returned by `Cldr.Unit.known_styles`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`\n\n* `:grammatical_case` indicates that a localisation for the given\n locale and given grammatical case should be used. See `Cldr.Unit.known_grammatical_cases/0`\n for the list of known grammatical cases. Note that not all locales\n define all cases. However all locales do define the `:nominative`\n case, which is also the default.\n\n* `:gender` indicates that a localisation for the given\n locale and given grammatical gender should be used. See `Cldr.Unit.known_grammatical_genders/0`\n for the list of known grammatical genders. Note that not all locales\n define all genders. The default gender is `Bonfire.Common.Localise.Cldr.Unit.default_gender/1`\n for the given locale.\n\n* `:list_options` is a keyword list of options for formatting a list\n which is passed through to `Cldr.List.to_string/3`. This is only\n applicable when formatting a list of units.\n\n* Any other options are passed to `Cldr.Number.to_string/2`\n which is used to format the `number`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"* `{:ok, formatted_string}` or\n\n* `{:error, {exception, message}}`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.to_string/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 123)\n {:ok, \"123 gallons\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1)\n {:ok, \"1 gallon\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: \"af\"\n {:ok, \"1 gelling\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: \"af-NA\"\n {:ok, \"1 gelling\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1), locale: \"bs\"\n {:ok, \"1 galon\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :long\n {:ok, \"1 thousand gallons\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:gallon, 1234), format: :short\n {:ok, \"1K gallons\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234)\n {:ok, \"1,234 megahertz\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megahertz, 1234), style: :narrow\n {:ok, \"1,234MHz\"}\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string Cldr.Unit.new!(:megabyte, 1234), locale: \"en\", style: :unknown\n {:error, {Cldr.UnknownFormatError, \"The unit style :unknown is not known.\"}}","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"Formats a list using `to_string/3` but raises if there is\nan error.","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2"},{"type":"function","title":"Arguments - Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"* `list_or_number` is any number (integer, float or Decimal) or a\n `t:Cldr.Unit` struct or a list of `t:Cldr.Unit` structs\n\n* `options` is a keyword list","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2-arguments"},{"type":"function","title":"Options - Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"* `:unit` is any unit returned by `Cldr.Unit.known_units/0`. Ignored if\n the number to be formatted is a `t:Cldr.Unit` struct\n\n* `:locale` is any valid locale name returned by `Cldr.known_locale_names/0`\n or a `Cldr.LanguageTag` struct. The default is `Cldr.get_locale/0`\n\n* `:style` is one of those returned by `Cldr.Unit.known_styles`.\n The current styles are `:long`, `:short` and `:narrow`.\n The default is `style: :long`\n\n* `:grammatical_case` indicates that a localisation for the given\n locale and given grammatical case should be used. See `Cldr.Unit.known_grammatical_cases/0`\n for the list of known grammatical cases. Note that not all locales\n define all cases. However all locales do define the `:nominative`\n case, which is also the default.\n\n* `:gender` indicates that a localisation for the given\n locale and given grammatical gender should be used. See `Cldr.Unit.known_grammatical_genders/0`\n for the list of known grammatical genders. Note that not all locales\n define all genders. The default gender is `Bonfire.Common.Localise.Cldr.Unit.default_gender/1`\n for the given locale.\n\n* `:list_options` is a keyword list of options for formatting a list\n which is passed through to `Cldr.List.to_string/3`. This is only\n applicable when formatting a list of units.\n\n* Any other options are passed to `Cldr.Number.to_string/2`\n which is used to format the `number`","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2-options"},{"type":"function","title":"Returns - Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"* `formatted_string` or\n\n* raises an exception","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2-returns"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Cldr.Unit.to_string!/2","doc":"iex> Bonfire.Common.Localise.Cldr.Unit.to_string! 123, unit: :gallon\n \"123 gallons\"\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string! 1, unit: :gallon\n \"1 gallon\"\n\n iex> Bonfire.Common.Localise.Cldr.Unit.to_string! 1, unit: :gallon, locale: \"af\"\n \"1 gelling\"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#to_string!/2-examples"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.unit_category/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#unit_category/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.unit_strings_for/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#unit_strings_for/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.validate_style/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#validate_style/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.validate_unit/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#validate_unit/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.value/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#value/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.zero/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#zero/1"},{"type":"function","title":"Bonfire.Common.Localise.Cldr.Unit.zero?/1","doc":"","ref":"Bonfire.Common.Localise.Cldr.Unit.html#zero?/1"},{"type":"module","title":"Bonfire.Common.Localise.Gettext","doc":"Default Gettext module\nIt is recommended to use the more convenient macros in `Bonfire.Common.Localise.Gettext.Helpers` instead.","ref":"Bonfire.Common.Localise.Gettext.html"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dgettext/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dgettext/3"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dgettext_noop/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dgettext_noop/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dngettext/5","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dngettext/5"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dngettext_noop/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dngettext_noop/3"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dpgettext/4","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dpgettext/4"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dpgettext_noop/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dpgettext_noop/3"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dpngettext/6","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dpngettext/6"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.dpngettext_noop/4","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#dpngettext_noop/4"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.gettext/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#gettext/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.gettext_comment/1","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#gettext_comment/1"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.gettext_noop/1","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#gettext_noop/1"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.handle_missing_bindings/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#handle_missing_bindings/2"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.handle_missing_plural_translation/7","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#handle_missing_plural_translation/7"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.handle_missing_translation/5","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#handle_missing_translation/5"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.lgettext/5","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#lgettext/5"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.lngettext/7","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#lngettext/7"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.ngettext/4","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#ngettext/4"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.ngettext_noop/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#ngettext_noop/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.pgettext/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#pgettext/3"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.pgettext_noop/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#pgettext_noop/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.pngettext/5","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#pngettext/5"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.pngettext_noop/3","doc":"","ref":"Bonfire.Common.Localise.Gettext.html#pngettext_noop/3"},{"type":"module","title":"Bonfire.Common.Localise.Gettext.Helpers","doc":"A module providing Internationalization with a gettext-based API.\n\nBy using [Gettext](https://hexdocs.pm/gettext),\nyour module gains a set of macros for translations, for example:\n\n import Bonfire.Common.Localise.Gettext\n\n # Simple translation\n\n usage:\n \n \n \n\n\n output:\n Hello\n Hello Bookchin\n Hi\n\n\n # Plural translation\n\n usage:\n \n \n\n output:\n Hi friends\n Hiya Bookchin\n\nSee the [Gettext Docs](https://hexdocs.pm/gettext) for details.","ref":"Bonfire.Common.Localise.Gettext.Helpers.html"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.Helpers.l/4","doc":"","ref":"Bonfire.Common.Localise.Gettext.Helpers.html#l/4"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.Helpers.localise_dynamic/2","doc":"","ref":"Bonfire.Common.Localise.Gettext.Helpers.html#localise_dynamic/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.Helpers.localise_strings/2","doc":"Localise a list of strings at compile time","ref":"Bonfire.Common.Localise.Gettext.Helpers.html#localise_strings/2"},{"type":"macro","title":"Bonfire.Common.Localise.Gettext.Helpers.lp/6","doc":"","ref":"Bonfire.Common.Localise.Gettext.Helpers.html#lp/6"},{"type":"module","title":"Bonfire.Common.Localise.Gettext.Plural","doc":"Defines a plural forms module for Gettext that uses CLDR plural rules\nhttps://cldr.unicode.org/index/cldr-spec/plural-rules","ref":"Bonfire.Common.Localise.Gettext.Plural.html"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.Plural.nplurals/1","doc":"Returns the number of plural forms for a given locale.\n\n* `locale` is either a locale name in the list\n `{:__aliases__, [counter: {Bonfire.Common.Localise.Gettext.Plural, 2}, line: 6, column: 42], [:Bonfire, :Common, :Localise, :Cldr]}.known_locale_names/0` or\n a `%LanguageTag{}` as returned by `Cldr.Locale.new/2`","ref":"Bonfire.Common.Localise.Gettext.Plural.html#nplurals/1"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Gettext.Plural.nplurals/1","doc":"iex> Bonfire.Common.Localise.Gettext.Plural.nplurals(\"pl\")\n 4\n\n iex> Bonfire.Common.Localise.Gettext.Plural.nplurals(\"en\")\n 2","ref":"Bonfire.Common.Localise.Gettext.Plural.html#nplurals/1-examples"},{"type":"function","title":"Bonfire.Common.Localise.Gettext.Plural.plural/2","doc":"Returns the plural form of a number for a given\nlocale.\n\n* `locale` is either a locale name in the list `{:__aliases__, [counter: {Bonfire.Common.Localise.Gettext.Plural, 2}, line: 6, column: 42], [:Bonfire, :Common, :Localise, :Cldr]}.known_locale_names/0` or\n a `%LanguageTag{}` as returned by `Cldr.Locale.new/2`","ref":"Bonfire.Common.Localise.Gettext.Plural.html#plural/2"},{"type":"function","title":"Examples - Bonfire.Common.Localise.Gettext.Plural.plural/2","doc":"iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"pl\", 1)\n 0\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"pl\", 2)\n 1\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"pl\", 5)\n 2\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"pl\", 112)\n 2\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"en\", 1)\n 0\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"en\", 2)\n 1\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"en\", 112)\n 1\n\n iex> Bonfire.Common.Localise.Gettext.Plural.plural(\"en_GB\", 112)\n 1","ref":"Bonfire.Common.Localise.Gettext.Plural.html#plural/2-examples"},{"type":"module","title":"Bonfire.Common.Media","doc":"Helpers for handling images and media URLs","ref":"Bonfire.Common.Media.html"},{"type":"function","title":"Bonfire.Common.Media.avatar_fallback/1","doc":"","ref":"Bonfire.Common.Media.html#avatar_fallback/1"},{"type":"function","title":"Bonfire.Common.Media.avatar_media/1","doc":"Takes a Media map (or an object containing one) and returns the avatar's URL.","ref":"Bonfire.Common.Media.html#avatar_media/1"},{"type":"function","title":"Bonfire.Common.Media.avatar_url/1","doc":"","ref":"Bonfire.Common.Media.html#avatar_url/1"},{"type":"function","title":"Bonfire.Common.Media.banner_fallback/0","doc":"","ref":"Bonfire.Common.Media.html#banner_fallback/0"},{"type":"function","title":"Bonfire.Common.Media.banner_url/1","doc":"Takes a Media map (or an object containing one) and returns the banner's URL.","ref":"Bonfire.Common.Media.html#banner_url/1"},{"type":"function","title":"Bonfire.Common.Media.extract_tar/2","doc":"Returns a map containing all files and their contents from a tar or compressed tar.gz archive.","ref":"Bonfire.Common.Media.html#extract_tar/2"},{"type":"function","title":"Bonfire.Common.Media.image_url/1","doc":"Takes a Media map (or an object containing one) and returns the image's URL.","ref":"Bonfire.Common.Media.html#image_url/1"},{"type":"function","title":"Bonfire.Common.Media.maybe_dominant_color/4","doc":"","ref":"Bonfire.Common.Media.html#maybe_dominant_color/4"},{"type":"function","title":"Bonfire.Common.Media.media_url/1","doc":"Takes a Media map (or an object containing one) and returns a URL for the media","ref":"Bonfire.Common.Media.html#media_url/1"},{"type":"function","title":"Bonfire.Common.Media.read_tar_files/3","doc":"","ref":"Bonfire.Common.Media.html#read_tar_files/3"},{"type":"function","title":"Bonfire.Common.Media.thumbnail_url/1","doc":"","ref":"Bonfire.Common.Media.html#thumbnail_url/1"},{"type":"module","title":"Bonfire.Common.Modularity.DeclareHelpers","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html"},{"type":"function","title":"Bonfire.Common.Modularity.DeclareHelpers.app/1","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#app/1"},{"type":"function","title":"Bonfire.Common.Modularity.DeclareHelpers.component_props/1","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#component_props/1"},{"type":"function","title":"Bonfire.Common.Modularity.DeclareHelpers.component_type/1","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#component_type/1"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_extension/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_extension/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_nav_component/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_nav_component/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_nav_link/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_nav_link/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_settings_component/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_settings_component/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_settings_nav_component/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_settings_nav_component/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_settings_nav_link/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_settings_nav_link/2"},{"type":"macro","title":"Bonfire.Common.Modularity.DeclareHelpers.declare_widget/2","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#declare_widget/2"},{"type":"function","title":"Bonfire.Common.Modularity.DeclareHelpers.generate_link/3","doc":"","ref":"Bonfire.Common.Modularity.DeclareHelpers.html#generate_link/3"},{"type":"module","title":"Bonfire.Common.Module.Override","doc":"Utility to clone a module under a new name","ref":"Bonfire.Common.Module.Override.html"},{"type":"function","title":"Bonfire.Common.Module.Override.clone/2","doc":"Clone the existing module under a new name","ref":"Bonfire.Common.Module.Override.html#clone/2"},{"type":"function","title":"Bonfire.Common.Module.Override.clone_original/2","doc":"","ref":"Bonfire.Common.Module.Override.html#clone_original/2"},{"type":"function","title":"Bonfire.Common.Module.Override.module_name_atom/1","doc":"","ref":"Bonfire.Common.Module.Override.html#module_name_atom/1"},{"type":"function","title":"Bonfire.Common.Module.Override.module_name_string/1","doc":"","ref":"Bonfire.Common.Module.Override.html#module_name_string/1"},{"type":"function","title":"Bonfire.Common.Module.Override.module_original_name_atom/2","doc":"","ref":"Bonfire.Common.Module.Override.html#module_original_name_atom/2"},{"type":"function","title":"Bonfire.Common.Module.Override.module_original_name_str/2","doc":"","ref":"Bonfire.Common.Module.Override.html#module_original_name_str/2"},{"type":"module","title":"Bonfire.Common.Needles","doc":"","ref":"Bonfire.Common.Needles.html"},{"type":"function","title":"Bonfire.Common.Needles.dataloader/1","doc":"Batch loading of associations for GraphQL API","ref":"Bonfire.Common.Needles.html#dataloader/1"},{"type":"function","title":"Bonfire.Common.Needles.exists?/2","doc":"","ref":"Bonfire.Common.Needles.html#exists?/2"},{"type":"function","title":"Bonfire.Common.Needles.filter_one/1","doc":"","ref":"Bonfire.Common.Needles.html#filter_one/1"},{"type":"function","title":"Bonfire.Common.Needles.filters/3","doc":"","ref":"Bonfire.Common.Needles.html#filters/3"},{"type":"function","title":"Bonfire.Common.Needles.follow!/2","doc":"","ref":"Bonfire.Common.Needles.html#follow!/2"},{"type":"function","title":"Bonfire.Common.Needles.follow_function_error/2","doc":"","ref":"Bonfire.Common.Needles.html#follow_function_error/2"},{"type":"function","title":"Bonfire.Common.Needles.forge!/1","doc":"Forge a pointer from a pointable object\n\nDoes not hit the database.\n\nIs safe so long as the provided struct participates in the meta abstraction.","ref":"Bonfire.Common.Needles.html#forge!/1"},{"type":"function","title":"Bonfire.Common.Needles.forge!/2","doc":"Forges a pointer to a participating meta entity.\n\nDoes not hit the database, is safe so long as the entry we wish to\nsynthesise a pointer for represents a legitimate entry in the database.","ref":"Bonfire.Common.Needles.html#forge!/2"},{"type":"function","title":"Bonfire.Common.Needles.get/2","doc":"","ref":"Bonfire.Common.Needles.html#get/2"},{"type":"function","title":"Bonfire.Common.Needles.get!/2","doc":"","ref":"Bonfire.Common.Needles.html#get!/2"},{"type":"function","title":"Bonfire.Common.Needles.id_binary/1","doc":"","ref":"Bonfire.Common.Needles.html#id_binary/1"},{"type":"function","title":"Bonfire.Common.Needles.id_filter/2","doc":"","ref":"Bonfire.Common.Needles.html#id_filter/2"},{"type":"function","title":"Bonfire.Common.Needles.list!/2","doc":"","ref":"Bonfire.Common.Needles.html#list!/2"},{"type":"function","title":"Bonfire.Common.Needles.list_by_type!/3","doc":"","ref":"Bonfire.Common.Needles.html#list_by_type!/3"},{"type":"function","title":"Bonfire.Common.Needles.list_ids/0","doc":"","ref":"Bonfire.Common.Needles.html#list_ids/0"},{"type":"function","title":"Bonfire.Common.Needles.many/2","doc":"","ref":"Bonfire.Common.Needles.html#many/2"},{"type":"function","title":"Bonfire.Common.Needles.many!/2","doc":"","ref":"Bonfire.Common.Needles.html#many!/2"},{"type":"function","title":"Bonfire.Common.Needles.maybe_forge/1","doc":"Turns a thing into a pointer if it is not already or returns nil","ref":"Bonfire.Common.Needles.html#maybe_forge/1"},{"type":"function","title":"Bonfire.Common.Needles.maybe_forge!/1","doc":"Turns a thing into a pointer if it is not already. Errors if it cannot be performed","ref":"Bonfire.Common.Needles.html#maybe_forge!/1"},{"type":"function","title":"Bonfire.Common.Needles.maybe_resolve/4","doc":"","ref":"Bonfire.Common.Needles.html#maybe_resolve/4"},{"type":"function","title":"Bonfire.Common.Needles.one/2","doc":"","ref":"Bonfire.Common.Needles.html#one/2"},{"type":"function","title":"Bonfire.Common.Needles.one!/2","doc":"","ref":"Bonfire.Common.Needles.html#one!/2"},{"type":"function","title":"Bonfire.Common.Needles.pointer_preloads/2","doc":"","ref":"Bonfire.Common.Needles.html#pointer_preloads/2"},{"type":"function","title":"Bonfire.Common.Needles.pointer_query/2","doc":"Prepare a query for generic pointer objects","ref":"Bonfire.Common.Needles.html#pointer_query/2"},{"type":"function","title":"Bonfire.Common.Needles.preload!/2","doc":"Follows one or more pointers and adds the pointed records to the `pointed` attrs","ref":"Bonfire.Common.Needles.html#preload!/2"},{"type":"function","title":"Bonfire.Common.Needles.query/3","doc":"","ref":"Bonfire.Common.Needles.html#query/3"},{"type":"module","title":"Bonfire.Common.Needles.Pointers.Queries","doc":"","ref":"Bonfire.Common.Needles.Pointers.Queries.html"},{"type":"function","title":"Bonfire.Common.Needles.Pointers.Queries.filter/2","doc":"Filter the query according to arbitrary criteria","ref":"Bonfire.Common.Needles.Pointers.Queries.html#filter/2"},{"type":"function","title":"Bonfire.Common.Needles.Pointers.Queries.query/1","doc":"","ref":"Bonfire.Common.Needles.Pointers.Queries.html#query/1"},{"type":"function","title":"Bonfire.Common.Needles.Pointers.Queries.query/2","doc":"","ref":"Bonfire.Common.Needles.Pointers.Queries.html#query/2"},{"type":"function","title":"Bonfire.Common.Needles.Pointers.Queries.schema_module/0","doc":"","ref":"Bonfire.Common.Needles.Pointers.Queries.html#schema_module/0"},{"type":"module","title":"Bonfire.Common.Needles.Preload","doc":"","ref":"Bonfire.Common.Needles.Preload.html"},{"type":"function","title":"Bonfire.Common.Needles.Preload.maybe_preload_nested_pointers/3","doc":"","ref":"Bonfire.Common.Needles.Preload.html#maybe_preload_nested_pointers/3"},{"type":"function","title":"Bonfire.Common.Needles.Preload.maybe_preload_pointer/2","doc":"","ref":"Bonfire.Common.Needles.Preload.html#maybe_preload_pointer/2"},{"type":"function","title":"Bonfire.Common.Needles.Preload.maybe_preload_pointers/3","doc":"","ref":"Bonfire.Common.Needles.Preload.html#maybe_preload_pointers/3"},{"type":"module","title":"Bonfire.Common.Needles.Tables","doc":"","ref":"Bonfire.Common.Needles.Tables.html"},{"type":"function","title":"Bonfire.Common.Needles.Tables.list_ids/0","doc":"","ref":"Bonfire.Common.Needles.Tables.html#list_ids/0"},{"type":"function","title":"Bonfire.Common.Needles.Tables.list_schemas/0","doc":"","ref":"Bonfire.Common.Needles.Tables.html#list_schemas/0"},{"type":"function","title":"Bonfire.Common.Needles.Tables.list_tables/1","doc":"Lists all Pointable Tables","ref":"Bonfire.Common.Needles.Tables.html#list_tables/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.list_tables_debug/0","doc":"","ref":"Bonfire.Common.Needles.Tables.html#list_tables_debug/0"},{"type":"function","title":"Bonfire.Common.Needles.Tables.many/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#many/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.one/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#one/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.one!/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#one!/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.schema_or_table!/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#schema_or_table!/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.table!/1","doc":"Retrieves the Table that a pointer points to\nNote: Throws an error if the table cannot be found","ref":"Bonfire.Common.Needles.Tables.html#table!/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.table_fields/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#table_fields/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.table_fields_meta/1","doc":"","ref":"Bonfire.Common.Needles.Tables.html#table_fields_meta/1"},{"type":"module","title":"Bonfire.Common.Needles.Tables.Queries","doc":"","ref":"Bonfire.Common.Needles.Tables.Queries.html"},{"type":"function","title":"Bonfire.Common.Needles.Tables.Queries.filter/2","doc":"Filter the query according to arbitrary criteria","ref":"Bonfire.Common.Needles.Tables.Queries.html#filter/2"},{"type":"function","title":"Bonfire.Common.Needles.Tables.Queries.query/1","doc":"","ref":"Bonfire.Common.Needles.Tables.Queries.html#query/1"},{"type":"function","title":"Bonfire.Common.Needles.Tables.Queries.query/2","doc":"","ref":"Bonfire.Common.Needles.Tables.Queries.html#query/2"},{"type":"module","title":"Bonfire.Common.PubSub","doc":"","ref":"Bonfire.Common.PubSub.html"},{"type":"function","title":"Bonfire.Common.PubSub.broadcast/2","doc":"Broadcast some data for realtime updates, for example to a feed or thread","ref":"Bonfire.Common.PubSub.html#broadcast/2"},{"type":"macro","title":"Bonfire.Common.PubSub.broadcast_with_telemetry/2","doc":"Broadcast while attaching telemetry info. The receiving module must `use Bonfire.Common.PubSub` to correctly unwrap the Event","ref":"Bonfire.Common.PubSub.html#broadcast_with_telemetry/2"},{"type":"function","title":"Bonfire.Common.PubSub.broadcast_with_telemetry/3","doc":"","ref":"Bonfire.Common.PubSub.html#broadcast_with_telemetry/3"},{"type":"function","title":"Bonfire.Common.PubSub.current_function/1","doc":"","ref":"Bonfire.Common.PubSub.html#current_function/1"},{"type":"function","title":"Bonfire.Common.PubSub.subscribe/2","doc":"Subscribe to something for realtime updates, like a feed or thread","ref":"Bonfire.Common.PubSub.html#subscribe/2"},{"type":"module","title":"Bonfire.Common.PubSub.Event","doc":"","ref":"Bonfire.Common.PubSub.Event.html"},{"type":"behaviour","title":"Bonfire.Common.QueryModule","doc":"Properly query some data using the appropriate module depending on its schema.\n\nBack by a global cache of known query_modules to be queried by their schema, or vice versa.\n\nUse of the QueryModule Service requires:\n\n1. Exporting `query_module/0` in relevant modules (in schemas pointing to query modules and/or in query modules pointing to schemas), returning a Module atom\n2. To populate `:nee, :search_path` in config the list of OTP applications where query_modules are declared.\n3. Start the `Bonfire.Common.QueryModule` application before querying.\n4. OTP 21.2 or greater, though we recommend using the most recent\n release available.\n\nWhile this module is a GenServer, it is only responsible for setup\nof the cache and then exits with :ignore having done so. It is not\nrecommended to restart the service as this will lead to a stop the\nworld garbage collection of all processes and the copying of the\nentire cache to each process that has queried it since its last\nlocal garbage collection.","ref":"Bonfire.Common.QueryModule.html"},{"type":"function","title":"Bonfire.Common.QueryModule.app_modules/0","doc":"","ref":"Bonfire.Common.QueryModule.html#app_modules/0"},{"type":"function","title":"Bonfire.Common.QueryModule.apply_error/2","doc":"","ref":"Bonfire.Common.QueryModule.html#apply_error/2"},{"type":"callback","title":"Bonfire.Common.QueryModule.context_module/0","doc":"Points to the related context module","ref":"Bonfire.Common.QueryModule.html#c:context_module/0"},{"type":"function","title":"Bonfire.Common.QueryModule.linked_context_modules/0","doc":"","ref":"Bonfire.Common.QueryModule.html#linked_context_modules/0"},{"type":"function","title":"Bonfire.Common.QueryModule.linked_schema_modules/0","doc":"","ref":"Bonfire.Common.QueryModule.html#linked_schema_modules/0"},{"type":"function","title":"Bonfire.Common.QueryModule.maybe_query/3","doc":"","ref":"Bonfire.Common.QueryModule.html#maybe_query/3"},{"type":"function","title":"Bonfire.Common.QueryModule.maybe_query_module/1","doc":"","ref":"Bonfire.Common.QueryModule.html#maybe_query_module/1"},{"type":"function","title":"Bonfire.Common.QueryModule.modules/0","doc":"","ref":"Bonfire.Common.QueryModule.html#modules/0"},{"type":"function","title":"Bonfire.Common.QueryModule.query_function_error/3","doc":"","ref":"Bonfire.Common.QueryModule.html#query_function_error/3"},{"type":"callback","title":"Bonfire.Common.QueryModule.query_module/0","doc":"Declares a query module","ref":"Bonfire.Common.QueryModule.html#c:query_module/0"},{"type":"function","title":"Bonfire.Common.QueryModule.query_module/1","doc":"Get a Queryable identified by name or id.","ref":"Bonfire.Common.QueryModule.html#query_module/1"},{"type":"function","title":"Bonfire.Common.QueryModule.query_module!/1","doc":"Look up a Queryable by name or id, throw :not_found if not found.","ref":"Bonfire.Common.QueryModule.html#query_module!/1"},{"type":"function","title":"Bonfire.Common.QueryModule.query_modules/1","doc":"Look up many ids at once, throw :not_found if any of them are not found","ref":"Bonfire.Common.QueryModule.html#query_modules/1"},{"type":"callback","title":"Bonfire.Common.QueryModule.schema_module/0","doc":"Points to the related schema module","ref":"Bonfire.Common.QueryModule.html#c:schema_module/0"},{"type":"module","title":"Bonfire.Common.Repo","doc":"Ecto Repo and related common functions","ref":"Bonfire.Common.Repo.html"},{"type":"function","title":"Bonfire.Common.Repo.aggregate/3","doc":"","ref":"Bonfire.Common.Repo.html#aggregate/3"},{"type":"function","title":"Bonfire.Common.Repo.aggregate/4","doc":"","ref":"Bonfire.Common.Repo.html#aggregate/4"},{"type":"function","title":"Bonfire.Common.Repo.all/2","doc":"","ref":"Bonfire.Common.Repo.html#all/2"},{"type":"function","title":"Bonfire.Common.Repo.checked_out?/0","doc":"","ref":"Bonfire.Common.Repo.html#checked_out?/0"},{"type":"function","title":"Bonfire.Common.Repo.checkout/2","doc":"","ref":"Bonfire.Common.Repo.html#checkout/2"},{"type":"function","title":"Bonfire.Common.Repo.child_spec/1","doc":"","ref":"Bonfire.Common.Repo.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Repo.config/0","doc":"","ref":"Bonfire.Common.Repo.html#config/0"},{"type":"function","title":"Bonfire.Common.Repo.default_options/1","doc":"","ref":"Bonfire.Common.Repo.html#default_options/1"},{"type":"function","title":"Bonfire.Common.Repo.default_repo_opts/0","doc":"","ref":"Bonfire.Common.Repo.html#default_repo_opts/0"},{"type":"function","title":"Bonfire.Common.Repo.delete/2","doc":"","ref":"Bonfire.Common.Repo.html#delete/2"},{"type":"function","title":"Bonfire.Common.Repo.delete!/2","doc":"","ref":"Bonfire.Common.Repo.html#delete!/2"},{"type":"function","title":"Bonfire.Common.Repo.delete_all/2","doc":"","ref":"Bonfire.Common.Repo.html#delete_all/2"},{"type":"function","title":"Bonfire.Common.Repo.delete_many/1","doc":"Execute a query to delete all matching records.","ref":"Bonfire.Common.Repo.html#delete_many/1"},{"type":"function","title":"Bonfire.Common.Repo.disconnect_all/2","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":"Bonfire.Common.Repo.html#disconnect_all/2"},{"type":"function","title":"Bonfire.Common.Repo.exists?/2","doc":"","ref":"Bonfire.Common.Repo.html#exists?/2"},{"type":"function","title":"Bonfire.Common.Repo.explain/3","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":"Bonfire.Common.Repo.html#explain/3"},{"type":"function","title":"Bonfire.Common.Repo.fetch/2","doc":"Execute a query for one result where the primary key matches the given id, and return either an {:ok, result} tuple or a {:error, :not_found}","ref":"Bonfire.Common.Repo.html#fetch/2"},{"type":"function","title":"Bonfire.Common.Repo.fetch_all/2","doc":"Execute a query for multiple results given one or multiple IDs.","ref":"Bonfire.Common.Repo.html#fetch_all/2"},{"type":"function","title":"Bonfire.Common.Repo.fetch_by/2","doc":"Execute a query for one result (using a keyword list to specify the key/value to query with), and return either an {:ok, result} tuple or a {:error, :not_found}","ref":"Bonfire.Common.Repo.html#fetch_by/2"},{"type":"function","title":"Bonfire.Common.Repo.find/3","doc":"Like Repo.single, except on failure, adds an error to the changeset","ref":"Bonfire.Common.Repo.html#find/3"},{"type":"function","title":"Bonfire.Common.Repo.get/3","doc":"","ref":"Bonfire.Common.Repo.html#get/3"},{"type":"function","title":"Bonfire.Common.Repo.get!/3","doc":"","ref":"Bonfire.Common.Repo.html#get!/3"},{"type":"function","title":"Bonfire.Common.Repo.get_by/3","doc":"","ref":"Bonfire.Common.Repo.html#get_by/3"},{"type":"function","title":"Bonfire.Common.Repo.get_by!/3","doc":"","ref":"Bonfire.Common.Repo.html#get_by!/3"},{"type":"function","title":"Bonfire.Common.Repo.get_dynamic_repo/0","doc":"","ref":"Bonfire.Common.Repo.html#get_dynamic_repo/0"},{"type":"function","title":"Bonfire.Common.Repo.in_transaction?/0","doc":"","ref":"Bonfire.Common.Repo.html#in_transaction?/0"},{"type":"function","title":"Bonfire.Common.Repo.insert/2","doc":"","ref":"Bonfire.Common.Repo.html#insert/2"},{"type":"function","title":"Bonfire.Common.Repo.insert!/2","doc":"","ref":"Bonfire.Common.Repo.html#insert!/2"},{"type":"function","title":"Bonfire.Common.Repo.insert_all/3","doc":"","ref":"Bonfire.Common.Repo.html#insert_all/3"},{"type":"function","title":"Bonfire.Common.Repo.insert_all_or_ignore/2","doc":"","ref":"Bonfire.Common.Repo.html#insert_all_or_ignore/2"},{"type":"function","title":"Bonfire.Common.Repo.insert_or_ignore/1","doc":"","ref":"Bonfire.Common.Repo.html#insert_or_ignore/1"},{"type":"function","title":"Bonfire.Common.Repo.insert_or_ignore/2","doc":"","ref":"Bonfire.Common.Repo.html#insert_or_ignore/2"},{"type":"function","title":"Bonfire.Common.Repo.insert_or_update/2","doc":"","ref":"Bonfire.Common.Repo.html#insert_or_update/2"},{"type":"function","title":"Bonfire.Common.Repo.insert_or_update!/2","doc":"","ref":"Bonfire.Common.Repo.html#insert_or_update!/2"},{"type":"function","title":"Bonfire.Common.Repo.load/2","doc":"","ref":"Bonfire.Common.Repo.html#load/2"},{"type":"function","title":"Bonfire.Common.Repo.make_subquery/1","doc":"","ref":"Bonfire.Common.Repo.html#make_subquery/1"},{"type":"function","title":"Bonfire.Common.Repo.many/2","doc":"Execute a query for multiple results and return the results.","ref":"Bonfire.Common.Repo.html#many/2"},{"type":"function","title":"Bonfire.Common.Repo.many_paginated/3","doc":"Execute a query for multiple results and return one page of results.\nThis uses the main implementation for pagination, which is cursor-based and powered by the `Paginator` library.","ref":"Bonfire.Common.Repo.html#many_paginated/3"},{"type":"function","title":"Bonfire.Common.Repo.maybe_one/2","doc":"Execute a query for one result and return either an result or a fallback value (`nil` by default)","ref":"Bonfire.Common.Repo.html#maybe_one/2"},{"type":"function","title":"Bonfire.Common.Repo.maybe_preload/3","doc":"","ref":"Bonfire.Common.Repo.html#maybe_preload/3"},{"type":"function","title":"Bonfire.Common.Repo.migrate/0","doc":"","ref":"Bonfire.Common.Repo.html#migrate/0"},{"type":"function","title":"Bonfire.Common.Repo.one/2","doc":"","ref":"Bonfire.Common.Repo.html#one/2"},{"type":"function","title":"Bonfire.Common.Repo.one!/2","doc":"","ref":"Bonfire.Common.Repo.html#one!/2"},{"type":"function","title":"Bonfire.Common.Repo.paginate/2","doc":"Different implementation for pagination using Scrivener (used by eg. rauversion)","ref":"Bonfire.Common.Repo.html#paginate/2"},{"type":"function","title":"Bonfire.Common.Repo.preload/3","doc":"","ref":"Bonfire.Common.Repo.html#preload/3"},{"type":"function","title":"Bonfire.Common.Repo.preload_all/2","doc":"","ref":"Bonfire.Common.Repo.html#preload_all/2"},{"type":"function","title":"Bonfire.Common.Repo.preload_mixins/2","doc":"","ref":"Bonfire.Common.Repo.html#preload_mixins/2"},{"type":"function","title":"Bonfire.Common.Repo.prepare_query/3","doc":"","ref":"Bonfire.Common.Repo.html#prepare_query/3"},{"type":"function","title":"Bonfire.Common.Repo.put/1","doc":"Like `insert/1`, but understands remapping changeset errors to attr\nnames from config (and only config, no overrides at present!)","ref":"Bonfire.Common.Repo.html#put/1"},{"type":"function","title":"Bonfire.Common.Repo.put_dynamic_repo/1","doc":"","ref":"Bonfire.Common.Repo.html#put_dynamic_repo/1"},{"type":"function","title":"Bonfire.Common.Repo.put_many/1","doc":"Like `put/1` but for multiple `changesets`","ref":"Bonfire.Common.Repo.html#put_many/1"},{"type":"function","title":"Bonfire.Common.Repo.query/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Bonfire.Common.Repo.html#query/3"},{"type":"function","title":"Bonfire.Common.Repo.query!/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Bonfire.Common.Repo.html#query!/3"},{"type":"function","title":"Bonfire.Common.Repo.query_many/3","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":"Bonfire.Common.Repo.html#query_many/3"},{"type":"function","title":"Bonfire.Common.Repo.query_many!/3","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":"Bonfire.Common.Repo.html#query_many!/3"},{"type":"function","title":"Bonfire.Common.Repo.reload/2","doc":"","ref":"Bonfire.Common.Repo.html#reload/2"},{"type":"function","title":"Bonfire.Common.Repo.reload!/2","doc":"","ref":"Bonfire.Common.Repo.html#reload!/2"},{"type":"function","title":"Bonfire.Common.Repo.rollback/1","doc":"","ref":"Bonfire.Common.Repo.html#rollback/1"},{"type":"function","title":"Bonfire.Common.Repo.single/1","doc":"Execute a query for one result and return either an `{:ok, result}` or `{:error, :not_found}` tuple","ref":"Bonfire.Common.Repo.html#single/1"},{"type":"function","title":"Bonfire.Common.Repo.sql/3","doc":"","ref":"Bonfire.Common.Repo.html#sql/3"},{"type":"function","title":"Bonfire.Common.Repo.start_link/1","doc":"","ref":"Bonfire.Common.Repo.html#start_link/1"},{"type":"function","title":"Bonfire.Common.Repo.stop/1","doc":"","ref":"Bonfire.Common.Repo.html#stop/1"},{"type":"function","title":"Bonfire.Common.Repo.stream/2","doc":"","ref":"Bonfire.Common.Repo.html#stream/2"},{"type":"function","title":"Bonfire.Common.Repo.to_sql/2","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":"Bonfire.Common.Repo.html#to_sql/2"},{"type":"function","title":"Bonfire.Common.Repo.trace/1","doc":"Can be used to log specific queries (by calling function) in production","ref":"Bonfire.Common.Repo.html#trace/1"},{"type":"function","title":"Bonfire.Common.Repo.transact_many/1","doc":"","ref":"Bonfire.Common.Repo.html#transact_many/1"},{"type":"function","title":"Bonfire.Common.Repo.transact_with/1","doc":"Run a transaction, similar to `Repo.transaction/1`, but it expects an ok or error\ntuple. If an error tuple is returned, the transaction is aborted.","ref":"Bonfire.Common.Repo.html#transact_with/1"},{"type":"function","title":"Bonfire.Common.Repo.transaction/2","doc":"","ref":"Bonfire.Common.Repo.html#transaction/2"},{"type":"function","title":"Bonfire.Common.Repo.update/2","doc":"","ref":"Bonfire.Common.Repo.html#update/2"},{"type":"function","title":"Bonfire.Common.Repo.update!/2","doc":"","ref":"Bonfire.Common.Repo.html#update!/2"},{"type":"function","title":"Bonfire.Common.Repo.update_all/3","doc":"","ref":"Bonfire.Common.Repo.html#update_all/3"},{"type":"function","title":"Bonfire.Common.Repo.upsert/3","doc":"Inserts or updates data in the database with upsert semantics.\n\n* `cs` - The changeset or schema to insert or update.\n* `keys_or_attrs_to_update` - A list of keys or a map of attributes to update.\n* `conflict_target` - The column(s) or constraint to check for conflicts, defaults to `[:id]`.","ref":"Bonfire.Common.Repo.html#upsert/3"},{"type":"function","title":"Bonfire.Common.Repo.upsert_all/3","doc":"","ref":"Bonfire.Common.Repo.html#upsert_all/3"},{"type":"module","title":"Bonfire.Common.Repo.Delete","doc":"","ref":"Bonfire.Common.Repo.Delete.html"},{"type":"function","title":"Bonfire.Common.Repo.Delete.deletion_result/1","doc":"","ref":"Bonfire.Common.Repo.Delete.html#deletion_result/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.deletion_result!/1","doc":"","ref":"Bonfire.Common.Repo.Delete.html#deletion_result!/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.hard_delete/1","doc":"Actually deletes an entry from the database","ref":"Bonfire.Common.Repo.Delete.html#hard_delete/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.hard_delete!/1","doc":"Deletes an entry from the database, or throws an error","ref":"Bonfire.Common.Repo.Delete.html#hard_delete!/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.maybe_allow_delete?/2","doc":"","ref":"Bonfire.Common.Repo.Delete.html#maybe_allow_delete?/2"},{"type":"function","title":"Bonfire.Common.Repo.Delete.schema/1","doc":"","ref":"Bonfire.Common.Repo.Delete.html#schema/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.soft_delete/1","doc":"Just marks an entry as deleted in the database","ref":"Bonfire.Common.Repo.Delete.html#soft_delete/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.soft_delete!/1","doc":"Marks an entry as deleted in the database or throws an error","ref":"Bonfire.Common.Repo.Delete.html#soft_delete!/1"},{"type":"function","title":"Bonfire.Common.Repo.Delete.soft_delete_changeset/4","doc":"Creates a changeset for deleting an entity","ref":"Bonfire.Common.Repo.Delete.html#soft_delete_changeset/4"},{"type":"function","title":"Bonfire.Common.Repo.Delete.undelete/1","doc":"","ref":"Bonfire.Common.Repo.Delete.html#undelete/1"},{"type":"module","title":"Bonfire.Common.Repo.Preload","doc":"Preload helpers for Ecto Repo","ref":"Bonfire.Common.Repo.Preload.html"},{"type":"function","title":"Bonfire.Common.Repo.Preload.aggregate/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#aggregate/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.aggregate/4","doc":"","ref":"Bonfire.Common.Repo.Preload.html#aggregate/4"},{"type":"function","title":"Bonfire.Common.Repo.Preload.all/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#all/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.checked_out?/0","doc":"","ref":"Bonfire.Common.Repo.Preload.html#checked_out?/0"},{"type":"function","title":"Bonfire.Common.Repo.Preload.checkout/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#checkout/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.child_spec/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.config/0","doc":"","ref":"Bonfire.Common.Repo.Preload.html#config/0"},{"type":"function","title":"Bonfire.Common.Repo.Preload.default_options/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#default_options/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.delete/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#delete/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.delete!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#delete!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.delete_all/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#delete_all/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.disconnect_all/2","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":"Bonfire.Common.Repo.Preload.html#disconnect_all/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.exists?/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#exists?/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.explain/3","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":"Bonfire.Common.Repo.Preload.html#explain/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get!/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get!/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get_by/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get_by/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get_by!/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get_by!/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.get_dynamic_repo/0","doc":"","ref":"Bonfire.Common.Repo.Preload.html#get_dynamic_repo/0"},{"type":"function","title":"Bonfire.Common.Repo.Preload.in_transaction?/0","doc":"","ref":"Bonfire.Common.Repo.Preload.html#in_transaction?/0"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert_all/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert_all/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert_or_update/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert_or_update/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.insert_or_update!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#insert_or_update!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.load/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#load/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.maybe_preload/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#maybe_preload/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.maybe_preloads_per_nested_schema/4","doc":"","ref":"Bonfire.Common.Repo.Preload.html#maybe_preloads_per_nested_schema/4"},{"type":"function","title":"Bonfire.Common.Repo.Preload.maybe_preloads_per_schema/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#maybe_preloads_per_schema/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.one/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#one/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.one!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#one!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.preload/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#preload/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.preload_all/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#preload_all/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.preload_mixins/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#preload_mixins/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.prepare_query/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#prepare_query/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.put_dynamic_repo/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#put_dynamic_repo/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.query/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Bonfire.Common.Repo.Preload.html#query/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.query!/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Bonfire.Common.Repo.Preload.html#query!/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.query_many/3","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":"Bonfire.Common.Repo.Preload.html#query_many/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.query_many!/3","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":"Bonfire.Common.Repo.Preload.html#query_many!/3"},{"type":"function","title":"Bonfire.Common.Repo.Preload.reload/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#reload/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.reload!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#reload!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.rollback/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#rollback/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.schema_mixins/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#schema_mixins/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.start_link/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#start_link/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.stop/1","doc":"","ref":"Bonfire.Common.Repo.Preload.html#stop/1"},{"type":"function","title":"Bonfire.Common.Repo.Preload.stream/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#stream/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.to_sql/2","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":"Bonfire.Common.Repo.Preload.html#to_sql/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.transaction/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#transaction/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.update/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#update/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.update!/2","doc":"","ref":"Bonfire.Common.Repo.Preload.html#update!/2"},{"type":"function","title":"Bonfire.Common.Repo.Preload.update_all/3","doc":"","ref":"Bonfire.Common.Repo.Preload.html#update_all/3"},{"type":"module","title":"Bonfire.Common.Repo.Utils","doc":"Helper functions for changesets","ref":"Bonfire.Common.Repo.Utils.html"},{"type":"function","title":"Bonfire.Common.Repo.Utils.change_disabled/1","doc":"Keeps disabled_at in accord with is_disabled","ref":"Bonfire.Common.Repo.Utils.html#change_disabled/1"},{"type":"function","title":"Bonfire.Common.Repo.Utils.change_muted/1","doc":"Keeps muted_at in accord with is_muted","ref":"Bonfire.Common.Repo.Utils.html#change_muted/1"},{"type":"function","title":"Bonfire.Common.Repo.Utils.change_public/1","doc":"Keeps published_at in accord with is_public","ref":"Bonfire.Common.Repo.Utils.html#change_public/1"},{"type":"macro","title":"Bonfire.Common.Repo.Utils.match_admin/0","doc":"","ref":"Bonfire.Common.Repo.Utils.html#match_admin/0"},{"type":"function","title":"Bonfire.Common.Repo.Utils.validate_email/2","doc":"Validates an email for correctness","ref":"Bonfire.Common.Repo.Utils.html#validate_email/2"},{"type":"function","title":"Bonfire.Common.Repo.Utils.validate_email_domain/2","doc":"","ref":"Bonfire.Common.Repo.Utils.html#validate_email_domain/2"},{"type":"module","title":"Bonfire.Common.RepoTemplate","doc":"","ref":"Bonfire.Common.RepoTemplate.html"},{"type":"module","title":"Bonfire.Common.RuntimeConfig","doc":"","ref":"Bonfire.Common.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Common.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Common.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Common.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Common.RuntimeConfig.html#config_module/0"},{"type":"function","title":"Bonfire.Common.RuntimeConfig.skip_test_tags/1","doc":"","ref":"Bonfire.Common.RuntimeConfig.html#skip_test_tags/1"},{"type":"behaviour","title":"Bonfire.Common.SchemaModule","doc":"Find a context or query module via its schema, backed by a global cache of known schema modules to be queried by their schema, or vice versa (eg. via ContextModule).","ref":"Bonfire.Common.SchemaModule.html"},{"type":"function","title":"Bonfire.Common.SchemaModule.app_modules/0","doc":"","ref":"Bonfire.Common.SchemaModule.html#app_modules/0"},{"type":"callback","title":"Bonfire.Common.SchemaModule.context_module/0","doc":"Points to the related context module","ref":"Bonfire.Common.SchemaModule.html#c:context_module/0"},{"type":"function","title":"Bonfire.Common.SchemaModule.linked_context_modules/0","doc":"","ref":"Bonfire.Common.SchemaModule.html#linked_context_modules/0"},{"type":"function","title":"Bonfire.Common.SchemaModule.linked_query_modules/0","doc":"","ref":"Bonfire.Common.SchemaModule.html#linked_query_modules/0"},{"type":"function","title":"Bonfire.Common.SchemaModule.modules/0","doc":"","ref":"Bonfire.Common.SchemaModule.html#modules/0"},{"type":"callback","title":"Bonfire.Common.SchemaModule.query_module/0","doc":"Points to the related query module","ref":"Bonfire.Common.SchemaModule.html#c:query_module/0"},{"type":"callback","title":"Bonfire.Common.SchemaModule.schema_module/0","doc":"Declares a schema module","ref":"Bonfire.Common.SchemaModule.html#c:schema_module/0"},{"type":"module","title":"Bonfire.Common.Settings","doc":"","ref":"Bonfire.Common.Settings.html"},{"type":"function","title":"Bonfire.Common.Settings.get/3","doc":"Get config value for a config key (optionally from a specific OTP app or Bonfire extension)\n\nThese two calls have the same result (i.e. specifying a module as the first key will add the OTP app of that module as the first key):\n`get([:bonfire_me, Bonfire.Me.Users])`\n`get(Bonfire.Me.Users)`\n\nSame with these two (i.e. not specifying a module or app as the first key will default to the main OTP app):\n`get([:random_atom, :sub_key])`\n`get([:bonfire, :random_atom, :sub_key])`","ref":"Bonfire.Common.Settings.html#get/3"},{"type":"function","title":"Bonfire.Common.Settings.get!/2","doc":"","ref":"Bonfire.Common.Settings.html#get!/2"},{"type":"function","title":"Bonfire.Common.Settings.load_instance_settings/0","doc":"","ref":"Bonfire.Common.Settings.html#load_instance_settings/0"},{"type":"function","title":"Bonfire.Common.Settings.map_put_in/3","doc":"","ref":"Bonfire.Common.Settings.html#map_put_in/3"},{"type":"function","title":"Bonfire.Common.Settings.put/3","doc":"Put a setting using a key like `:key` or list of nested keys like `[:top_key, :sub_key]`","ref":"Bonfire.Common.Settings.html#put/3"},{"type":"function","title":"Bonfire.Common.Settings.reset_all/0","doc":"","ref":"Bonfire.Common.Settings.html#reset_all/0"},{"type":"function","title":"Bonfire.Common.Settings.reset_instance/0","doc":"","ref":"Bonfire.Common.Settings.html#reset_instance/0"},{"type":"function","title":"Bonfire.Common.Settings.set/2","doc":"Set several settings at once.\nAccepts nested attributes as map with string keys (which are transformed into keyword list), or a keyword list.\nDetermines what scope to use & sets/updates settings for it.","ref":"Bonfire.Common.Settings.html#set/2"},{"type":"module","title":"Bonfire.Common.Settings.LiveHandler","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.input_name/1","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#input_name/1"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.maybe_assign_input_value_from_keys/1","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#maybe_assign_input_value_from_keys/1"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.scoped/2","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#scoped/2"},{"type":"function","title":"Bonfire.Common.Settings.LiveHandler.set_image_setting/5","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#set_image_setting/5"},{"type":"macro","title":"Bonfire.Common.Settings.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Common.Settings.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Common.Settings.LoadInstanceConfig","doc":"Loads instance Settings from DB into Elixir's Config\n\nWhile this module is a GenServer, it is only responsible for querying the settings, putting them in Config, and then exits with :ignore having done so.","ref":"Bonfire.Common.Settings.LoadInstanceConfig.html"},{"type":"function","title":"Bonfire.Common.Settings.LoadInstanceConfig.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.Settings.LoadInstanceConfig.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Settings.LoadInstanceConfig.load_config/0","doc":"","ref":"Bonfire.Common.Settings.LoadInstanceConfig.html#load_config/0"},{"type":"function","title":"Bonfire.Common.Settings.LoadInstanceConfig.start_link/1","doc":"Populates the global cache with table data via introspection.","ref":"Bonfire.Common.Settings.LoadInstanceConfig.html#start_link/1"},{"type":"module","title":"Bonfire.Common.Simulation","doc":"","ref":"Bonfire.Common.Simulation.html"},{"type":"function","title":"Bonfire.Common.Simulation.ap_url_base/0","doc":"Picks a unique random url for an ap endpoint","ref":"Bonfire.Common.Simulation.html#ap_url_base/0"},{"type":"function","title":"Bonfire.Common.Simulation.base64/0","doc":"Generates random base64 text","ref":"Bonfire.Common.Simulation.html#base64/0"},{"type":"function","title":"Bonfire.Common.Simulation.bool/0","doc":"Generates a random boolean","ref":"Bonfire.Common.Simulation.html#bool/0"},{"type":"function","title":"Bonfire.Common.Simulation.canonical_url/0","doc":"Picks a random canonical url and makes it unique","ref":"Bonfire.Common.Simulation.html#canonical_url/0"},{"type":"function","title":"Bonfire.Common.Simulation.content_type/0","doc":"Generate a random content type","ref":"Bonfire.Common.Simulation.html#content_type/0"},{"type":"function","title":"Bonfire.Common.Simulation.content_url/0","doc":"Picks a remote url from a set of available ones.","ref":"Bonfire.Common.Simulation.html#content_url/0"},{"type":"function","title":"Bonfire.Common.Simulation.date_of_birth/0","doc":"Generates a random date of birth based on an age range of 18-99","ref":"Bonfire.Common.Simulation.html#date_of_birth/0"},{"type":"function","title":"Bonfire.Common.Simulation.domain/0","doc":"Generates a random domain name","ref":"Bonfire.Common.Simulation.html#domain/0"},{"type":"function","title":"Bonfire.Common.Simulation.email/0","doc":"Generates a random unique email","ref":"Bonfire.Common.Simulation.html#email/0"},{"type":"function","title":"Bonfire.Common.Simulation.email_user/0","doc":"Generates the first half of an email address","ref":"Bonfire.Common.Simulation.html#email_user/0"},{"type":"function","title":"Bonfire.Common.Simulation.falsehood/0","doc":"Returns false","ref":"Bonfire.Common.Simulation.html#falsehood/0"},{"type":"function","title":"Bonfire.Common.Simulation.float/0","doc":"Generate a random floating point number","ref":"Bonfire.Common.Simulation.html#float/0"},{"type":"function","title":"Bonfire.Common.Simulation.future_date/0","doc":"Picks a date up to 300 days in the future, not including today","ref":"Bonfire.Common.Simulation.html#future_date/0"},{"type":"function","title":"Bonfire.Common.Simulation.future_datetime/0","doc":"Picks a datetime up to 300 days in the future, not including today","ref":"Bonfire.Common.Simulation.html#future_datetime/0"},{"type":"function","title":"Bonfire.Common.Simulation.future_datetime_iso/0","doc":"Same as future_datetime, but as an ISO8601 formatted string.","ref":"Bonfire.Common.Simulation.html#future_datetime_iso/0"},{"type":"function","title":"Bonfire.Common.Simulation.icon/0","doc":"Picks an icon url","ref":"Bonfire.Common.Simulation.html#icon/0"},{"type":"function","title":"Bonfire.Common.Simulation.image/0","doc":"Picks an image url","ref":"Bonfire.Common.Simulation.html#image/0"},{"type":"function","title":"Bonfire.Common.Simulation.integer/0","doc":"Generate a random signed integer","ref":"Bonfire.Common.Simulation.html#integer/0"},{"type":"function","title":"Bonfire.Common.Simulation.license/0","doc":"A random license for content","ref":"Bonfire.Common.Simulation.html#license/0"},{"type":"function","title":"Bonfire.Common.Simulation.location/0","doc":"Returns a city and country","ref":"Bonfire.Common.Simulation.html#location/0"},{"type":"function","title":"Bonfire.Common.Simulation.long_count/0","doc":"","ref":"Bonfire.Common.Simulation.html#long_count/0"},{"type":"function","title":"Bonfire.Common.Simulation.long_list/1","doc":"","ref":"Bonfire.Common.Simulation.html#long_list/1"},{"type":"function","title":"Bonfire.Common.Simulation.markdown/0","doc":"","ref":"Bonfire.Common.Simulation.html#markdown/0"},{"type":"function","title":"Bonfire.Common.Simulation.maybe_bool/0","doc":"Generate a random boolean that can also be nil","ref":"Bonfire.Common.Simulation.html#maybe_bool/0"},{"type":"function","title":"Bonfire.Common.Simulation.maybe_one_of/1","doc":"","ref":"Bonfire.Common.Simulation.html#maybe_one_of/1"},{"type":"function","title":"Bonfire.Common.Simulation.med_count/0","doc":"","ref":"Bonfire.Common.Simulation.html#med_count/0"},{"type":"function","title":"Bonfire.Common.Simulation.med_list/1","doc":"","ref":"Bonfire.Common.Simulation.html#med_list/1"},{"type":"function","title":"Bonfire.Common.Simulation.name/0","doc":"Picks a name","ref":"Bonfire.Common.Simulation.html#name/0"},{"type":"function","title":"Bonfire.Common.Simulation.neg_integer/0","doc":"Generate a random negative integer","ref":"Bonfire.Common.Simulation.html#neg_integer/0"},{"type":"function","title":"Bonfire.Common.Simulation.one_of/1","doc":"","ref":"Bonfire.Common.Simulation.html#one_of/1"},{"type":"function","title":"Bonfire.Common.Simulation.paragraph/0","doc":"Generates a random paragraph","ref":"Bonfire.Common.Simulation.html#paragraph/0"},{"type":"function","title":"Bonfire.Common.Simulation.password/0","doc":"Generates a random password string","ref":"Bonfire.Common.Simulation.html#password/0"},{"type":"function","title":"Bonfire.Common.Simulation.past_date/0","doc":"Picks a date up to 300 days in the past, not including today","ref":"Bonfire.Common.Simulation.html#past_date/0"},{"type":"function","title":"Bonfire.Common.Simulation.past_datetime/0","doc":"Picks a datetime up to 300 days in the past, not including today","ref":"Bonfire.Common.Simulation.html#past_datetime/0"},{"type":"function","title":"Bonfire.Common.Simulation.past_datetime_iso/0","doc":"Same as past_datetime, but as an ISO8601 formatted string.","ref":"Bonfire.Common.Simulation.html#past_datetime_iso/0"},{"type":"function","title":"Bonfire.Common.Simulation.path/0","doc":"Picks a path from a set of available files.","ref":"Bonfire.Common.Simulation.html#path/0"},{"type":"function","title":"Bonfire.Common.Simulation.pos_integer/0","doc":"Generate a random positive integer","ref":"Bonfire.Common.Simulation.html#pos_integer/0"},{"type":"function","title":"Bonfire.Common.Simulation.preferred_username/0","doc":"Picks a unique preferred_username","ref":"Bonfire.Common.Simulation.html#preferred_username/0"},{"type":"function","title":"Bonfire.Common.Simulation.short_count/0","doc":"","ref":"Bonfire.Common.Simulation.html#short_count/0"},{"type":"function","title":"Bonfire.Common.Simulation.short_list/1","doc":"","ref":"Bonfire.Common.Simulation.html#short_list/1"},{"type":"function","title":"Bonfire.Common.Simulation.signing_key/0","doc":"Picks a fake signing key","ref":"Bonfire.Common.Simulation.html#signing_key/0"},{"type":"function","title":"Bonfire.Common.Simulation.some/2","doc":"Repeats a function count times if count_or_range is a positive integer.\n\nIf count_or_range is a positive range, a random number from this\nrange is selected and that value used as a count","ref":"Bonfire.Common.Simulation.html#some/2"},{"type":"function","title":"Bonfire.Common.Simulation.summary/0","doc":"Picks a summary text paragraph","ref":"Bonfire.Common.Simulation.html#summary/0"},{"type":"function","title":"Bonfire.Common.Simulation.title/0","doc":"","ref":"Bonfire.Common.Simulation.html#title/0"},{"type":"function","title":"Bonfire.Common.Simulation.truth/0","doc":"Returns true","ref":"Bonfire.Common.Simulation.html#truth/0"},{"type":"function","title":"Bonfire.Common.Simulation.ulid/0","doc":"Generates a random unique ulid","ref":"Bonfire.Common.Simulation.html#ulid/0"},{"type":"function","title":"Bonfire.Common.Simulation.url/0","doc":"Generates a random url","ref":"Bonfire.Common.Simulation.html#url/0"},{"type":"function","title":"Bonfire.Common.Simulation.username/0","doc":"Generates a random username","ref":"Bonfire.Common.Simulation.html#username/0"},{"type":"function","title":"Bonfire.Common.Simulation.uuid/0","doc":"Generates a random unique uuid","ref":"Bonfire.Common.Simulation.html#uuid/0"},{"type":"function","title":"Bonfire.Common.Simulation.verb/0","doc":"A verb to be used for an activity.","ref":"Bonfire.Common.Simulation.html#verb/0"},{"type":"function","title":"Bonfire.Common.Simulation.website/0","doc":"A website address","ref":"Bonfire.Common.Simulation.html#website/0"},{"type":"module","title":"Bonfire.Common.StartupTimer","doc":"Open the console without starting the app: `iex -S mix run --no-start` or `just imix run --no-start`\n\nAnd then run `Bonfire.Common.StartupTimer.run()`","ref":"Bonfire.Common.StartupTimer.html"},{"type":"function","title":"Bonfire.Common.StartupTimer.run/1","doc":"","ref":"Bonfire.Common.StartupTimer.html#run/1"},{"type":"module","title":"Bonfire.Common.Test.Interactive","doc":"This utility allows to get the same effect of using\n`fcwatch | mix test --stale --listen-on-stdin` to watch for\ncode changes and run stale tests, but with more control and\nwithout the starting time penalty.\n\nNote that watching requires fswatch on your system.\nEg on Mac run `brew install fswatch`.\n\nTo use it, in your project's `.iex` file add:\n```\nunless GenServer.whereis(Bonfire.Common.Test.Interactive) do\n {:ok, pid} = Bonfire.Common.Test.Interactive.start_link()\n # Process will not exit when the iex goes out\n Process.unlink(pid)\nend\nimport Bonfire.Common.Test.Interactive.Helpers\n```\nThen to call `iex` and run tests just do:\n```\nMIX_ENV=test iex -S mix\n```\nThe `Bonfire.Common.Test.Interactive.Helpers` allows to call `f` and `s` and `a`\nto run failed, stale and all tests respectively.\nYou can call `w` to watch tests and `uw` to unwatch.\nThere is a really simple throttle mecanism that disallow running the suite concurrently.","ref":"Bonfire.Common.Test.Interactive.html"},{"type":"function","title":"Bonfire.Common.Test.Interactive.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.Test.Interactive.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.run_all_tests/1","doc":"","ref":"Bonfire.Common.Test.Interactive.html#run_all_tests/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.run_failed_tests/1","doc":"","ref":"Bonfire.Common.Test.Interactive.html#run_failed_tests/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.run_stale_tests/1","doc":"","ref":"Bonfire.Common.Test.Interactive.html#run_stale_tests/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.setup_test_repo/1","doc":"Sets up database options for tests\n\nYou can tell a specific test to not wrap in a transaction and rollback with:\n`@tag db_sandbox: false`","ref":"Bonfire.Common.Test.Interactive.html#setup_test_repo/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.start_link/0","doc":"","ref":"Bonfire.Common.Test.Interactive.html#start_link/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.unlock/0","doc":"","ref":"Bonfire.Common.Test.Interactive.html#unlock/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.unwatch_tests/0","doc":"","ref":"Bonfire.Common.Test.Interactive.html#unwatch_tests/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.watch_tests/1","doc":"","ref":"Bonfire.Common.Test.Interactive.html#watch_tests/1"},{"type":"module","title":"Bonfire.Common.Test.Interactive.Helpers","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.f/1","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#f/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.ready/0","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#ready/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.s/1","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#s/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.ta/1","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#ta/1"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.uw/0","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#uw/0"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Helpers.w/1","doc":"","ref":"Bonfire.Common.Test.Interactive.Helpers.html#w/1"},{"type":"module","title":"Bonfire.Common.Test.Interactive.Observer","doc":"","ref":"Bonfire.Common.Test.Interactive.Observer.html"},{"type":"function","title":"Bonfire.Common.Test.Interactive.Observer.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Common.Test.Interactive.Observer.html#child_spec/1"},{"type":"module","title":"Bonfire.Common.TestInstanceRepo","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.aggregate/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#aggregate/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.aggregate/4","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#aggregate/4"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.all/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.apply/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#apply/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.checked_out?/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#checked_out?/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.checkout/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#checkout/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.child_spec/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#child_spec/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.config/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#config/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.default_endpoint/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#default_endpoint/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.default_options/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#default_options/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.default_repo/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#default_repo/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.default_repo_opts/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#default_repo_opts/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.delete/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#delete/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.delete!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#delete!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.delete_all/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#delete_all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.delete_many/1","doc":"Execute a query to delete all matching records.","ref":"Bonfire.Common.TestInstanceRepo.html#delete_many/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.disconnect_all/2","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":"Bonfire.Common.TestInstanceRepo.html#disconnect_all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.exists?/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#exists?/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.explain/3","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":"Bonfire.Common.TestInstanceRepo.html#explain/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.fetch/2","doc":"Execute a query for one result where the primary key matches the given id, and return either an {:ok, result} tuple or a {:error, :not_found}","ref":"Bonfire.Common.TestInstanceRepo.html#fetch/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.fetch_all/2","doc":"Execute a query for multiple results given one or multiple IDs.","ref":"Bonfire.Common.TestInstanceRepo.html#fetch_all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.fetch_by/2","doc":"Execute a query for one result (using a keyword list to specify the key/value to query with), and return either an {:ok, result} tuple or a {:error, :not_found}","ref":"Bonfire.Common.TestInstanceRepo.html#fetch_by/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.find/3","doc":"Like Repo.single, except on failure, adds an error to the changeset","ref":"Bonfire.Common.TestInstanceRepo.html#find/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get!/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get!/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get_by/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get_by/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get_by!/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get_by!/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.get_dynamic_repo/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#get_dynamic_repo/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.in_transaction?/0","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#in_transaction?/0"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_all/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_all/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_all_or_ignore/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_all_or_ignore/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_or_ignore/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_or_ignore/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_or_ignore/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_or_ignore/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_or_update/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_or_update/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.insert_or_update!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#insert_or_update!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.load/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#load/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.make_subquery/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#make_subquery/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.many/2","doc":"Execute a query for multiple results and return the results.","ref":"Bonfire.Common.TestInstanceRepo.html#many/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.many_paginated/3","doc":"Execute a query for multiple results and return one page of results.\nThis uses the main implementation for pagination, which is cursor-based and powered by the `Paginator` library.","ref":"Bonfire.Common.TestInstanceRepo.html#many_paginated/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.maybe_declare_test_instance/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#maybe_declare_test_instance/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.maybe_one/2","doc":"Execute a query for one result and return either an result or a fallback value (`nil` by default)","ref":"Bonfire.Common.TestInstanceRepo.html#maybe_one/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.maybe_preload/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#maybe_preload/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.one/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#one/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.one!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#one!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.paginate/2","doc":"Different implementation for pagination using Scrivener (used by eg. rauversion)","ref":"Bonfire.Common.TestInstanceRepo.html#paginate/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.preload/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#preload/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.preload_all/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#preload_all/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.preload_mixins/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#preload_mixins/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.prepare_query/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#prepare_query/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.process_put/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#process_put/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.put/1","doc":"Like `insert/1`, but understands remapping changeset errors to attr\nnames from config (and only config, no overrides at present!)","ref":"Bonfire.Common.TestInstanceRepo.html#put/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.put_dynamic_repo/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#put_dynamic_repo/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.put_many/1","doc":"Like `put/1` but for multiple `changesets`","ref":"Bonfire.Common.TestInstanceRepo.html#put_many/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.query/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query/4` for more information.","ref":"Bonfire.Common.TestInstanceRepo.html#query/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.query!/3","doc":"A convenience function for SQL-based repositories that executes the given query.\n\nSee `Ecto.Adapters.SQL.query!/4` for more information.","ref":"Bonfire.Common.TestInstanceRepo.html#query!/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.query_many/3","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":"Bonfire.Common.TestInstanceRepo.html#query_many/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.query_many!/3","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":"Bonfire.Common.TestInstanceRepo.html#query_many!/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.reload/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#reload/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.reload!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#reload!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.rollback/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#rollback/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.single/1","doc":"Execute a query for one result and return either an `{:ok, result}` or `{:error, :not_found}` tuple","ref":"Bonfire.Common.TestInstanceRepo.html#single/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.sql/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#sql/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.start_link/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#start_link/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.stop/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#stop/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.stream/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#stream/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.to_sql/2","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":"Bonfire.Common.TestInstanceRepo.html#to_sql/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.trace/1","doc":"Can be used to log specific queries (by calling function) in production","ref":"Bonfire.Common.TestInstanceRepo.html#trace/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.transact_many/1","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#transact_many/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.transact_with/1","doc":"Run a transaction, similar to `Repo.transaction/1`, but it expects an ok or error\ntuple. If an error tuple is returned, the transaction is aborted.","ref":"Bonfire.Common.TestInstanceRepo.html#transact_with/1"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.transaction/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#transaction/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.update/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#update/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.update!/2","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#update!/2"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.update_all/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#update_all/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.upsert/3","doc":"Inserts or updates data in the database with upsert semantics.\n\n* `cs` - The changeset or schema to insert or update.\n* `keys_or_attrs_to_update` - A list of keys or a map of attributes to update.\n* `conflict_target` - The column(s) or constraint to check for conflicts, defaults to `[:id]`.","ref":"Bonfire.Common.TestInstanceRepo.html#upsert/3"},{"type":"function","title":"Bonfire.Common.TestInstanceRepo.upsert_all/3","doc":"","ref":"Bonfire.Common.TestInstanceRepo.html#upsert_all/3"},{"type":"module","title":"Bonfire.Common.Text","doc":"","ref":"Bonfire.Common.Text.html"},{"type":"function","title":"Bonfire.Common.Text.blank?/1","doc":"","ref":"Bonfire.Common.Text.html#blank?/1"},{"type":"function","title":"Bonfire.Common.Text.camelise/1","doc":"","ref":"Bonfire.Common.Text.html#camelise/1"},{"type":"function","title":"Bonfire.Common.Text.code_syntax/2","doc":"","ref":"Bonfire.Common.Text.html#code_syntax/2"},{"type":"function","title":"Bonfire.Common.Text.contains?/2","doc":"","ref":"Bonfire.Common.Text.html#contains?/2"},{"type":"function","title":"Bonfire.Common.Text.contains_html?/1","doc":"","ref":"Bonfire.Common.Text.html#contains_html?/1"},{"type":"function","title":"Bonfire.Common.Text.hash/2","doc":"","ref":"Bonfire.Common.Text.html#hash/2"},{"type":"function","title":"Bonfire.Common.Text.list_checkboxes/1","doc":"","ref":"Bonfire.Common.Text.html#list_checkboxes/1"},{"type":"function","title":"Bonfire.Common.Text.list_checked_boxes/1","doc":"","ref":"Bonfire.Common.Text.html#list_checked_boxes/1"},{"type":"function","title":"Bonfire.Common.Text.list_unchecked_boxes/1","doc":"","ref":"Bonfire.Common.Text.html#list_unchecked_boxes/1"},{"type":"function","title":"Bonfire.Common.Text.make_local_links_live/1","doc":"","ref":"Bonfire.Common.Text.html#make_local_links_live/1"},{"type":"function","title":"Bonfire.Common.Text.markdown_as_html_earmark/2","doc":"","ref":"Bonfire.Common.Text.html#markdown_as_html_earmark/2"},{"type":"function","title":"Bonfire.Common.Text.markdown_as_html_mdex/2","doc":"","ref":"Bonfire.Common.Text.html#markdown_as_html_mdex/2"},{"type":"function","title":"Bonfire.Common.Text.markdown_checkboxes/1","doc":"","ref":"Bonfire.Common.Text.html#markdown_checkboxes/1"},{"type":"function","title":"Bonfire.Common.Text.maybe_emote/2","doc":"","ref":"Bonfire.Common.Text.html#maybe_emote/2"},{"type":"function","title":"Bonfire.Common.Text.maybe_markdown_to_html/2","doc":"","ref":"Bonfire.Common.Text.html#maybe_markdown_to_html/2"},{"type":"function","title":"Bonfire.Common.Text.maybe_normalize_html/1","doc":"","ref":"Bonfire.Common.Text.html#maybe_normalize_html/1"},{"type":"function","title":"Bonfire.Common.Text.maybe_render_templated/2","doc":"","ref":"Bonfire.Common.Text.html#maybe_render_templated/2"},{"type":"function","title":"Bonfire.Common.Text.maybe_sane_html/1","doc":"It is recommended to call this before storing any that data is coming in from the user or from a remote instance","ref":"Bonfire.Common.Text.html#maybe_sane_html/1"},{"type":"function","title":"Bonfire.Common.Text.maybe_to_snake/1","doc":"takes a string as input and converts it to snake_case","ref":"Bonfire.Common.Text.html#maybe_to_snake/1"},{"type":"function","title":"Bonfire.Common.Text.normalise_links/2","doc":"","ref":"Bonfire.Common.Text.html#normalise_links/2"},{"type":"function","title":"Bonfire.Common.Text.random_string/1","doc":"","ref":"Bonfire.Common.Text.html#random_string/1"},{"type":"function","title":"Bonfire.Common.Text.regex_list/2","doc":"","ref":"Bonfire.Common.Text.html#regex_list/2"},{"type":"function","title":"Bonfire.Common.Text.sentence_truncate/3","doc":"","ref":"Bonfire.Common.Text.html#sentence_truncate/3"},{"type":"function","title":"Bonfire.Common.Text.slug/1","doc":"","ref":"Bonfire.Common.Text.html#slug/1"},{"type":"function","title":"Bonfire.Common.Text.strlen/1","doc":"","ref":"Bonfire.Common.Text.html#strlen/1"},{"type":"function","title":"Bonfire.Common.Text.text_only/1","doc":"","ref":"Bonfire.Common.Text.html#text_only/1"},{"type":"function","title":"Bonfire.Common.Text.truncate/3","doc":"","ref":"Bonfire.Common.Text.html#truncate/3"},{"type":"function","title":"Bonfire.Common.Text.underscore_truncate/2","doc":"","ref":"Bonfire.Common.Text.html#underscore_truncate/2"},{"type":"function","title":"Bonfire.Common.Text.upcase_first/1","doc":"","ref":"Bonfire.Common.Text.html#upcase_first/1"},{"type":"function","title":"Bonfire.Common.Text.verb_infinitive/1","doc":"Uses the `Verbs` library to convert an English conjugated verb back to inifinitive form.\nCurrently only supports irregular verbs.","ref":"Bonfire.Common.Text.html#verb_infinitive/1"},{"type":"module","title":"Bonfire.Common.TextExtended","doc":"","ref":"Bonfire.Common.TextExtended.html"},{"type":"function","title":"Bonfire.Common.TextExtended.blank?/1","doc":"","ref":"Bonfire.Common.TextExtended.html#blank?/1"},{"type":"function","title":"Bonfire.Common.TextExtended.camelise/1","doc":"","ref":"Bonfire.Common.TextExtended.html#camelise/1"},{"type":"function","title":"Bonfire.Common.TextExtended.code_syntax/2","doc":"","ref":"Bonfire.Common.TextExtended.html#code_syntax/2"},{"type":"function","title":"Bonfire.Common.TextExtended.contains?/2","doc":"","ref":"Bonfire.Common.TextExtended.html#contains?/2"},{"type":"function","title":"Bonfire.Common.TextExtended.contains_html?/1","doc":"","ref":"Bonfire.Common.TextExtended.html#contains_html?/1"},{"type":"function","title":"Bonfire.Common.TextExtended.hash/1","doc":"","ref":"Bonfire.Common.TextExtended.html#hash/1"},{"type":"function","title":"Bonfire.Common.TextExtended.hash/2","doc":"","ref":"Bonfire.Common.TextExtended.html#hash/2"},{"type":"function","title":"Bonfire.Common.TextExtended.list_checkboxes/1","doc":"","ref":"Bonfire.Common.TextExtended.html#list_checkboxes/1"},{"type":"function","title":"Bonfire.Common.TextExtended.list_checked_boxes/1","doc":"","ref":"Bonfire.Common.TextExtended.html#list_checked_boxes/1"},{"type":"function","title":"Bonfire.Common.TextExtended.list_unchecked_boxes/1","doc":"","ref":"Bonfire.Common.TextExtended.html#list_unchecked_boxes/1"},{"type":"function","title":"Bonfire.Common.TextExtended.make_local_links_live/1","doc":"","ref":"Bonfire.Common.TextExtended.html#make_local_links_live/1"},{"type":"function","title":"Bonfire.Common.TextExtended.markdown_as_html_earmark/2","doc":"","ref":"Bonfire.Common.TextExtended.html#markdown_as_html_earmark/2"},{"type":"function","title":"Bonfire.Common.TextExtended.markdown_as_html_mdex/2","doc":"","ref":"Bonfire.Common.TextExtended.html#markdown_as_html_mdex/2"},{"type":"function","title":"Bonfire.Common.TextExtended.markdown_checkboxes/1","doc":"","ref":"Bonfire.Common.TextExtended.html#markdown_checkboxes/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_emote/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_emote/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_emote/2","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_emote/2"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_markdown_to_html/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_markdown_to_html/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_markdown_to_html/2","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_markdown_to_html/2"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_normalize_html/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_normalize_html/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_render_templated/2","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_render_templated/2"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_sane_html/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_sane_html/1"},{"type":"function","title":"Bonfire.Common.TextExtended.maybe_to_snake/1","doc":"","ref":"Bonfire.Common.TextExtended.html#maybe_to_snake/1"},{"type":"function","title":"Bonfire.Common.TextExtended.normalise_links/1","doc":"","ref":"Bonfire.Common.TextExtended.html#normalise_links/1"},{"type":"function","title":"Bonfire.Common.TextExtended.normalise_links/2","doc":"","ref":"Bonfire.Common.TextExtended.html#normalise_links/2"},{"type":"function","title":"Bonfire.Common.TextExtended.random_string/0","doc":"","ref":"Bonfire.Common.TextExtended.html#random_string/0"},{"type":"function","title":"Bonfire.Common.TextExtended.random_string/1","doc":"","ref":"Bonfire.Common.TextExtended.html#random_string/1"},{"type":"function","title":"Bonfire.Common.TextExtended.regex_list/2","doc":"","ref":"Bonfire.Common.TextExtended.html#regex_list/2"},{"type":"function","title":"Bonfire.Common.TextExtended.sentence_truncate/1","doc":"","ref":"Bonfire.Common.TextExtended.html#sentence_truncate/1"},{"type":"function","title":"Bonfire.Common.TextExtended.sentence_truncate/2","doc":"","ref":"Bonfire.Common.TextExtended.html#sentence_truncate/2"},{"type":"function","title":"Bonfire.Common.TextExtended.sentence_truncate/3","doc":"","ref":"Bonfire.Common.TextExtended.html#sentence_truncate/3"},{"type":"function","title":"Bonfire.Common.TextExtended.slug/1","doc":"","ref":"Bonfire.Common.TextExtended.html#slug/1"},{"type":"function","title":"Bonfire.Common.TextExtended.strlen/1","doc":"","ref":"Bonfire.Common.TextExtended.html#strlen/1"},{"type":"function","title":"Bonfire.Common.TextExtended.text_only/1","doc":"","ref":"Bonfire.Common.TextExtended.html#text_only/1"},{"type":"function","title":"Bonfire.Common.TextExtended.truncate/1","doc":"","ref":"Bonfire.Common.TextExtended.html#truncate/1"},{"type":"function","title":"Bonfire.Common.TextExtended.truncate/2","doc":"","ref":"Bonfire.Common.TextExtended.html#truncate/2"},{"type":"function","title":"Bonfire.Common.TextExtended.truncate/3","doc":"","ref":"Bonfire.Common.TextExtended.html#truncate/3"},{"type":"function","title":"Bonfire.Common.TextExtended.underscore_truncate/1","doc":"","ref":"Bonfire.Common.TextExtended.html#underscore_truncate/1"},{"type":"function","title":"Bonfire.Common.TextExtended.underscore_truncate/2","doc":"","ref":"Bonfire.Common.TextExtended.html#underscore_truncate/2"},{"type":"function","title":"Bonfire.Common.TextExtended.upcase_first/1","doc":"","ref":"Bonfire.Common.TextExtended.html#upcase_first/1"},{"type":"function","title":"Bonfire.Common.TextExtended.verb_infinitive/1","doc":"","ref":"Bonfire.Common.TextExtended.html#verb_infinitive/1"},{"type":"module","title":"Bonfire.Common.Types","doc":"","ref":"Bonfire.Common.Types.html"},{"type":"function","title":"Bonfire.Common.Types.all_object_type_names/0","doc":"Outputs the names all object types, for the purpose of adding to the localisation strings, as long as the output is piped through to localise_strings/1 at compile time.","ref":"Bonfire.Common.Types.html#all_object_type_names/0"},{"type":"function","title":"Bonfire.Common.Types.defines_struct?/1","doc":"Takes an object or module name and checks if it defines a struct","ref":"Bonfire.Common.Types.html#defines_struct?/1"},{"type":"function","title":"Bonfire.Common.Types.is_numeric/1","doc":"Takes a value and returns true if it's a number or can be converted to a float","ref":"Bonfire.Common.Types.html#is_numeric/1"},{"type":"function","title":"Bonfire.Common.Types.is_ulid?/1","doc":"Takes a string and returns true if it is a valid ULID (Universally Unique Lexicographically Sortable Identifier)","ref":"Bonfire.Common.Types.html#is_ulid?/1"},{"type":"function","title":"Bonfire.Common.Types.is_uuid?/1","doc":"Takes a string and returns true if it is a valid UUID (Universally Unique Identifier)","ref":"Bonfire.Common.Types.html#is_uuid?/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_convert_ulids/1","doc":"Takes a map or list of maps, and if the value of a key in the map is a ULID, it replaces it with the corresponding Crockford Base32 encoded string.","ref":"Bonfire.Common.Types.html#maybe_convert_ulids/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_atom/1","doc":"Takes a string and returns an atom if it can be converted to one, else returns the input itself","ref":"Bonfire.Common.Types.html#maybe_to_atom/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_atom!/1","doc":"Takes a string or an atom and returns an atom if it is one or can be converted to one, else returns nil.","ref":"Bonfire.Common.Types.html#maybe_to_atom!/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_atom_or_module/3","doc":"","ref":"Bonfire.Common.Types.html#maybe_to_atom_or_module/3"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_float/2","doc":"Converts a value to a floating-point number if possible. If the value cannot be converted to a float, it returns a fallback value (which defaults to 0 if not provided)","ref":"Bonfire.Common.Types.html#maybe_to_float/2"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_integer/2","doc":"Converts a value to an integer if possible. If the value is not an integer, it attempts to convert it to a float and then rounds it to the nearest integer. Otherwise it returns a fallback value (which defaults to 0 if not provided).","ref":"Bonfire.Common.Types.html#maybe_to_integer/2"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_module/2","doc":"Takes a string and returns the corresponding Elixir module if it exists and is not disabled in the app.","ref":"Bonfire.Common.Types.html#maybe_to_module/2"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_snake_atom/1","doc":"Takes a string as input, converts it to snake_case, and converts it to an atom if such an atom exists, otherwise returns nil.","ref":"Bonfire.Common.Types.html#maybe_to_snake_atom/1"},{"type":"function","title":"Bonfire.Common.Types.maybe_to_string/1","doc":"Handles multiple cases where the input value is of a different type (atom, list, tuple, etc.) and returns a string representation of it.","ref":"Bonfire.Common.Types.html#maybe_to_string/1"},{"type":"function","title":"Bonfire.Common.Types.module_to_human_readable/1","doc":"Takes a module name (as a string or an atom) and converts it to a human-readable string. It removes the `Elixir.` prefix (if it exists) and any other prefixes (eg. `Bonfire.Common.`) and converts the final part of the module name to a string in title case (eg. `Types`).","ref":"Bonfire.Common.Types.html#module_to_human_readable/1"},{"type":"function","title":"Bonfire.Common.Types.module_to_str/1","doc":"Takes a module atom and converts it to a string, or a string and removes the `Elixir.` prefix if it exists.","ref":"Bonfire.Common.Types.html#module_to_str/1"},{"type":"function","title":"Bonfire.Common.Types.object_type/1","doc":"Takes an object, module name, or string, and returns the type of the object. The function uses various patterns to match different object types (such as associations, Pointables, edges/verbs, etc.). If none of the patterns match, the function returns nil.","ref":"Bonfire.Common.Types.html#object_type/1"},{"type":"function","title":"Bonfire.Common.Types.object_type_display/1","doc":"","ref":"Bonfire.Common.Types.html#object_type_display/1"},{"type":"function","title":"Bonfire.Common.Types.sanitise_name/1","doc":"Used for mapping schema types to user-friendly names.\n\nGiven a string representing a schema type name, returns a sanitised version of it, or nil for object types (or mixins) that shouldn't be displayed.","ref":"Bonfire.Common.Types.html#sanitise_name/1"},{"type":"function","title":"Examples - Bonfire.Common.Types.sanitise_name/1","doc":"iex> sanitise_name(\"Apactivity\")\n \"Federated Object\"","ref":"Bonfire.Common.Types.html#sanitise_name/1-examples"},{"type":"function","title":"Bonfire.Common.Types.table_id/1","doc":"Given a schema module, returns its table ID (i.e. Pointable ULID).","ref":"Bonfire.Common.Types.html#table_id/1"},{"type":"function","title":"Examples - Bonfire.Common.Types.table_id/1","doc":"iex> table_id(Bonfire.Data.Social.APActivity)\n \"30NF1REAPACTTAB1ENVMBER0NE\"","ref":"Bonfire.Common.Types.html#table_id/1-examples"},{"type":"function","title":"Bonfire.Common.Types.table_type/1","doc":"Given an object or module name, returns its respective table table ID (i.e. Pointable ULID).","ref":"Bonfire.Common.Types.html#table_type/1"},{"type":"function","title":"Examples - Bonfire.Common.Types.table_type/1","doc":"iex> table_type(%Bonfire.Data.Social.APActivity{})\n \"30NF1REAPACTTAB1ENVMBER0NE\"\n \n iex> table_type(%Needle.Pointer{table_id: \"30NF1REAPACTTAB1ENVMBER0NE\"})\n \"30NF1REAPACTTAB1ENVMBER0NE\"\n\n iex> table_type(Bonfire.Data.Social.APActivity)\n \"30NF1REAPACTTAB1ENVMBER0NE\"","ref":"Bonfire.Common.Types.html#table_type/1-examples"},{"type":"function","title":"Bonfire.Common.Types.table_types/1","doc":"Given a list of schema types, returns a list of their respective table types. Filters out any empty values.","ref":"Bonfire.Common.Types.html#table_types/1"},{"type":"function","title":"Examples - Bonfire.Common.Types.table_types/1","doc":"iex> table_types([:activity, :person])\n [\"activities\", \"people\"]\n\nGiven a single schema type, returns its respective table type.","ref":"Bonfire.Common.Types.html#table_types/1-examples"},{"type":"function","title":"Examples - Bonfire.Common.Types.table_types/1","doc":"iex> table_types(:activity)\n \"activities\"","ref":"Bonfire.Common.Types.html#table_types/1-examples"},{"type":"function","title":"Bonfire.Common.Types.typeof/1","doc":"Takes an object and returns its data type as a module name or atom","ref":"Bonfire.Common.Types.html#typeof/1"},{"type":"function","title":"Bonfire.Common.Types.ulid/1","doc":"Takes an object or list of objects and returns the ULID (Universally Unique Lexicographically Sortable Identifier) ID(s) if present in the object.","ref":"Bonfire.Common.Types.html#ulid/1"},{"type":"function","title":"Bonfire.Common.Types.ulid!/1","doc":"Takes an object and returns the ULID (Universally Unique Lexicographically Sortable Identifier) ID if present in the object. Throws an error if the ULID ID is not present.","ref":"Bonfire.Common.Types.html#ulid!/1"},{"type":"function","title":"Bonfire.Common.Types.ulids/1","doc":"","ref":"Bonfire.Common.Types.html#ulids/1"},{"type":"function","title":"Bonfire.Common.Types.ulids_or/2","doc":"","ref":"Bonfire.Common.Types.html#ulids_or/2"},{"type":"module","title":"Bonfire.Common.URIs","doc":"","ref":"Bonfire.Common.URIs.html"},{"type":"function","title":"Bonfire.Common.URIs.base_domain/1","doc":"","ref":"Bonfire.Common.URIs.html#base_domain/1"},{"type":"function","title":"Bonfire.Common.URIs.base_uri/1","doc":"Return the homepage URI (as struct) of the local instance","ref":"Bonfire.Common.URIs.html#base_uri/1"},{"type":"function","title":"Bonfire.Common.URIs.base_url/1","doc":"Return the homepage URL (as string) of the local instance","ref":"Bonfire.Common.URIs.html#base_url/1"},{"type":"function","title":"Bonfire.Common.URIs.canonical_url/1","doc":"Returns the canonical URL (i.e. the one used for ActivityPub federation) of an object","ref":"Bonfire.Common.URIs.html#canonical_url/1"},{"type":"function","title":"Bonfire.Common.URIs.fallback/1","doc":"","ref":"Bonfire.Common.URIs.html#fallback/1"},{"type":"function","title":"Bonfire.Common.URIs.fallback/2","doc":"","ref":"Bonfire.Common.URIs.html#fallback/2"},{"type":"function","title":"Bonfire.Common.URIs.fallback/3","doc":"","ref":"Bonfire.Common.URIs.html#fallback/3"},{"type":"function","title":"Bonfire.Common.URIs.is_uri?/1","doc":"Returns true if the given string is a valid URI.","ref":"Bonfire.Common.URIs.html#is_uri?/1"},{"type":"function","title":"Bonfire.Common.URIs.maybe_generate_canonical_url/1","doc":"","ref":"Bonfire.Common.URIs.html#maybe_generate_canonical_url/1"},{"type":"function","title":"Bonfire.Common.URIs.path/3","doc":"Returns the path (URL on the local instance) for the given object/struct (eg. a User), view or schema module, or path name (atom defined in routes), along with optional arguments.","ref":"Bonfire.Common.URIs.html#path/3"},{"type":"function","title":"Bonfire.Common.URIs.path_by_id/4","doc":"","ref":"Bonfire.Common.URIs.html#path_by_id/4"},{"type":"function","title":"Bonfire.Common.URIs.remote_canonical_url/1","doc":"","ref":"Bonfire.Common.URIs.html#remote_canonical_url/1"},{"type":"function","title":"Bonfire.Common.URIs.url_path/2","doc":"Returns the full URL (including domain and path) for a given object, module, or path name.","ref":"Bonfire.Common.URIs.html#url_path/2"},{"type":"function","title":"Bonfire.Common.URIs.validate_uri/1","doc":"Validates a URI string.","ref":"Bonfire.Common.URIs.html#validate_uri/1"},{"type":"module","title":"Bonfire.Common.Utils","doc":"Various very commonly used utility functions for the Bonfire application.","ref":"Bonfire.Common.Utils.html"},{"type":"function","title":"Bonfire.Common.Utils.apply_error/3","doc":"","ref":"Bonfire.Common.Utils.html#apply_error/3"},{"type":"function","title":"Bonfire.Common.Utils.apply_task/3","doc":"Runs a function asynchronously in a Task. Simply a shorthand for calling functions in `Task` and `Task.Supervisor` but with support for multi-tenancy in the spawned process. \n\n- `Task.async/1` the caller creates a new process links and monitors it. Once the task action finishes, a message is sent to the caller with the result. `Task.await/2` is used to read the message sent by the task. When using `async`, you *must* `await` a reply as they are always sent. \n\n- `Task.start_link/1` is suggested instead if you are not expecting a reply. It starts a statically supervised task as part of a supervision tree, linked to the calling process (meaning it will be stopped when the caller stops). \n\n- `Task.start/1` can be used for fire-and-forget tasks, like side-effects, when you have no interest on its results nor if it completes successfully (because if the server is shut down it won't be restarted).\n\nFor more serious tasks, consider using `Oban` or `apply_task_supervised/3` for supervised tasks when possible:\n\n- `Task.Supervisor.start_child/2` allows you to start a fire-and-forget task when you don't care about its results or if it completes successfully or not.\n\n- `Task.Supervisor.async/2` + `Task.await/2` allows you to execute tasks concurrently and retrieve its result. If the task fails, the caller will also fail.","ref":"Bonfire.Common.Utils.html#apply_task/3"},{"type":"function","title":"Bonfire.Common.Utils.apply_task_supervised/3","doc":"","ref":"Bonfire.Common.Utils.html#apply_task_supervised/3"},{"type":"function","title":"Bonfire.Common.Utils.current_account/2","doc":"Returns the current account from socket, assigns, or options.","ref":"Bonfire.Common.Utils.html#current_account/2"},{"type":"function","title":"Bonfire.Common.Utils.current_account_and_or_user_ids/1","doc":"","ref":"Bonfire.Common.Utils.html#current_account_and_or_user_ids/1"},{"type":"function","title":"Bonfire.Common.Utils.current_account_auth!/2","doc":"","ref":"Bonfire.Common.Utils.html#current_account_auth!/2"},{"type":"function","title":"Bonfire.Common.Utils.current_account_id/2","doc":"","ref":"Bonfire.Common.Utils.html#current_account_id/2"},{"type":"function","title":"Bonfire.Common.Utils.current_user/2","doc":"Returns the current user from socket, assigns, or options.","ref":"Bonfire.Common.Utils.html#current_user/2"},{"type":"function","title":"Bonfire.Common.Utils.current_user_auth!/2","doc":"","ref":"Bonfire.Common.Utils.html#current_user_auth!/2"},{"type":"function","title":"Bonfire.Common.Utils.current_user_id/2","doc":"Returns the current user ID from socket, assigns, or options.","ref":"Bonfire.Common.Utils.html#current_user_id/2"},{"type":"function","title":"Bonfire.Common.Utils.current_user_required!/1","doc":"","ref":"Bonfire.Common.Utils.html#current_user_required!/1"},{"type":"function","title":"Bonfire.Common.Utils.e/2","doc":"Returns a value, or a fallback if nil/false","ref":"Bonfire.Common.Utils.html#e/2"},{"type":"function","title":"Bonfire.Common.Utils.e/3","doc":"Extracts a value from a map (and various other data structures), or returns a fallback if not present or empty. If more arguments are provided it looks for nested data (with the last argument always being the fallback).","ref":"Bonfire.Common.Utils.html#e/3"},{"type":"function","title":"Bonfire.Common.Utils.e/4","doc":"Returns a value from a nested map, or a fallback if not present","ref":"Bonfire.Common.Utils.html#e/4"},{"type":"function","title":"Bonfire.Common.Utils.e/5","doc":"","ref":"Bonfire.Common.Utils.html#e/5"},{"type":"function","title":"Bonfire.Common.Utils.e/6","doc":"","ref":"Bonfire.Common.Utils.html#e/6"},{"type":"function","title":"Bonfire.Common.Utils.e/7","doc":"","ref":"Bonfire.Common.Utils.html#e/7"},{"type":"function","title":"Bonfire.Common.Utils.e/8","doc":"","ref":"Bonfire.Common.Utils.html#e/8"},{"type":"function","title":"Bonfire.Common.Utils.empty?/1","doc":"Returns true if the given value is nil, an empty map, an empty list, or an empty string.","ref":"Bonfire.Common.Utils.html#empty?/1"},{"type":"function","title":"Bonfire.Common.Utils.maybe/2","doc":"Applies change_fn if the first parameter is not nil.","ref":"Bonfire.Common.Utils.html#maybe/2"},{"type":"function","title":"Bonfire.Common.Utils.maybe_apply/4","doc":"Helpers for calling hypothetical functions in other modules. Returns the result of calling a function with the given arguments, or the result of fallback function if the primary function is not defined (by default just logging an error message).","ref":"Bonfire.Common.Utils.html#maybe_apply/4"},{"type":"function","title":"Bonfire.Common.Utils.maybe_from_opts/3","doc":"Returns the value of a key from options keyword list or map, or a fallback if not present or empty.","ref":"Bonfire.Common.Utils.html#maybe_from_opts/3"},{"type":"function","title":"Bonfire.Common.Utils.ok_unwrap/2","doc":"Unwraps an `{:ok, val}` tuple, returning the value, or returns a fallback value (nil by default) if the tuple is `{:error, _}` or `:error`.","ref":"Bonfire.Common.Utils.html#ok_unwrap/2"},{"type":"function","title":"Bonfire.Common.Utils.round_nearest/1","doc":"","ref":"Bonfire.Common.Utils.html#round_nearest/1"},{"type":"function","title":"Bonfire.Common.Utils.round_nearest/2","doc":"","ref":"Bonfire.Common.Utils.html#round_nearest/2"},{"type":"function","title":"Bonfire.Common.Utils.socket_connected?/1","doc":"","ref":"Bonfire.Common.Utils.html#socket_connected?/1"},{"type":"function","title":"Bonfire.Common.Utils.to_options/1","doc":"Converts a map, user, socket, tuple, etc, to a keyword list for standardised use as function options.","ref":"Bonfire.Common.Utils.html#to_options/1"},{"type":"module","title":"Bonfire.Ecto","doc":"`Bonfire.Epics` helpers for working with `Ecto`","ref":"Bonfire.Ecto.html"},{"type":"module","title":"Bonfire.Ecto.Acts.Begin","doc":"An Act that enters a transaction unless it senses that it would be futile.","ref":"Bonfire.Ecto.Acts.Begin.html"},{"type":"function","title":"Bonfire.Ecto.Acts.Begin.run/2","doc":"","ref":"Bonfire.Ecto.Acts.Begin.html#run/2"},{"type":"module","title":"Bonfire.Ecto.Acts.Commit","doc":"A placeholder marker used by Begin to identify when to commit the transaction.","ref":"Bonfire.Ecto.Acts.Commit.html"},{"type":"function","title":"Bonfire.Ecto.Acts.Commit.run/2","doc":"","ref":"Bonfire.Ecto.Acts.Commit.html#run/2"},{"type":"module","title":"Bonfire.Ecto.Acts.Delete","doc":"An act that marks a changeset or struct for deletion","ref":"Bonfire.Ecto.Acts.Delete.html"},{"type":"function","title":"Bonfire.Ecto.Acts.Delete.maybe_delete/2","doc":"","ref":"Bonfire.Ecto.Acts.Delete.html#maybe_delete/2"},{"type":"function","title":"Bonfire.Ecto.Acts.Delete.run/2","doc":"","ref":"Bonfire.Ecto.Acts.Delete.html#run/2"},{"type":"module","title":"Bonfire.Ecto.Acts.Work","doc":"An act that performs queued up work in a transaction.\n\nWork is queued up with calls to `add/2` in earlier acts and when run, this act will apply the\nappropriate actions.\n\nOnly runs if there are no epic or changesets errors.","ref":"Bonfire.Ecto.Acts.Work.html"},{"type":"function","title":"Bonfire.Ecto.Acts.Work.add/2","doc":"Records that a particular key contains a changeset for processing.\n\nUse in earlier acts, to schedule work for in-transaction.\n\nIf you wish to delete, you must ensure you set the changeset's `:action` key to `:delete`.","ref":"Bonfire.Ecto.Acts.Work.html#add/2"},{"type":"module","title":"Bonfire.Epics","doc":"","ref":"Bonfire.Epics.html"},{"type":"macro","title":"Bonfire.Epics.maybe_debug/3","doc":"","ref":"Bonfire.Epics.html#maybe_debug/3"},{"type":"macro","title":"Bonfire.Epics.maybe_debug/4","doc":"","ref":"Bonfire.Epics.html#maybe_debug/4"},{"type":"macro","title":"Bonfire.Epics.smart/4","doc":"Like `debug`, but will omit fully outputting the inspectable thing\nand still print the message if only `:debug` is set","ref":"Bonfire.Epics.html#smart/4"},{"type":"behaviour","title":"Bonfire.Epics.Act","doc":"","ref":"Bonfire.Epics.Act.html"},{"type":"macro","title":"Bonfire.Epics.Act.debug/3","doc":"","ref":"Bonfire.Epics.Act.html#debug/3"},{"type":"function","title":"Bonfire.Epics.Act.new/1","doc":"","ref":"Bonfire.Epics.Act.html#new/1"},{"type":"function","title":"Bonfire.Epics.Act.new/2","doc":"","ref":"Bonfire.Epics.Act.html#new/2"},{"type":"function","title":"Bonfire.Epics.Act.new/3","doc":"","ref":"Bonfire.Epics.Act.html#new/3"},{"type":"callback","title":"Bonfire.Epics.Act.run/2","doc":"","ref":"Bonfire.Epics.Act.html#c:run/2"},{"type":"type","title":"Bonfire.Epics.Act.ret/0","doc":"","ref":"Bonfire.Epics.Act.html#t:ret/0"},{"type":"type","title":"Bonfire.Epics.Act.t/0","doc":"","ref":"Bonfire.Epics.Act.html#t:t/0"},{"type":"module","title":"Bonfire.Epics.Debug","doc":"","ref":"Bonfire.Epics.Debug.html"},{"type":"function","title":"Bonfire.Epics.Debug.do_maybe_debug/4","doc":"","ref":"Bonfire.Epics.Debug.html#do_maybe_debug/4"},{"type":"function","title":"Bonfire.Epics.Debug.opts/2","doc":"","ref":"Bonfire.Epics.Debug.html#opts/2"},{"type":"module","title":"Bonfire.Epics.Epic","doc":"","ref":"Bonfire.Epics.Epic.html"},{"type":"function","title":"Bonfire.Epics.Epic.add_error/2","doc":"","ref":"Bonfire.Epics.Epic.html#add_error/2"},{"type":"function","title":"Bonfire.Epics.Epic.add_error/5","doc":"","ref":"Bonfire.Epics.Epic.html#add_error/5"},{"type":"function","title":"Bonfire.Epics.Epic.append/2","doc":"","ref":"Bonfire.Epics.Epic.html#append/2"},{"type":"function","title":"Bonfire.Epics.Epic.assign/2","doc":"","ref":"Bonfire.Epics.Epic.html#assign/2"},{"type":"function","title":"Bonfire.Epics.Epic.assign/3","doc":"","ref":"Bonfire.Epics.Epic.html#assign/3"},{"type":"macro","title":"Bonfire.Epics.Epic.debug/3","doc":"","ref":"Bonfire.Epics.Epic.html#debug/3"},{"type":"function","title":"Bonfire.Epics.Epic.from_config!/2","doc":"Loads an epic from the app's config","ref":"Bonfire.Epics.Epic.html#from_config!/2"},{"type":"function","title":"Bonfire.Epics.Epic.from_spec!/1","doc":"Loads an epic from a specification of steps","ref":"Bonfire.Epics.Epic.html#from_spec!/1"},{"type":"macro","title":"Bonfire.Epics.Epic.maybe_debug/3","doc":"","ref":"Bonfire.Epics.Epic.html#maybe_debug/3"},{"type":"function","title":"Bonfire.Epics.Epic.new/1","doc":"","ref":"Bonfire.Epics.Epic.html#new/1"},{"type":"function","title":"Bonfire.Epics.Epic.prepend/2","doc":"","ref":"Bonfire.Epics.Epic.html#prepend/2"},{"type":"function","title":"Bonfire.Epics.Epic.render_errors/1","doc":"","ref":"Bonfire.Epics.Epic.html#render_errors/1"},{"type":"function","title":"Bonfire.Epics.Epic.run/1","doc":"","ref":"Bonfire.Epics.Epic.html#run/1"},{"type":"function","title":"Bonfire.Epics.Epic.update/4","doc":"","ref":"Bonfire.Epics.Epic.html#update/4"},{"type":"type","title":"Bonfire.Epics.Epic.t/0","doc":"","ref":"Bonfire.Epics.Epic.html#t:t/0"},{"type":"exception","title":"Bonfire.Epics.Error","doc":"","ref":"Bonfire.Epics.Error.html"},{"type":"function","title":"Bonfire.Epics.Error.message/1","doc":"","ref":"Bonfire.Epics.Error.html#message/1"},{"type":"module","title":"Bonfire.Epics.Test","doc":"","ref":"Bonfire.Epics.Test.html"},{"type":"macro","title":"Bonfire.Epics.Test.assert_epic_ok/1","doc":"","ref":"Bonfire.Epics.Test.html#assert_epic_ok/1"},{"type":"function","title":"Bonfire.Epics.Test.debug_error/1","doc":"","ref":"Bonfire.Epics.Test.html#debug_error/1"},{"type":"module","title":"Bonfire.Files","doc":"This module contains general functions for handling files, and also an Ecto schema which is a multimixin for storing one or more media attached to a Pointable object.\n\nAn uploader definition must be provided for each new upload, or will be automatically chosen based on the file type.\n\nA few definitions exist as defaults inside of this namespace, but you can also define\nyour own - a `Bonfire.Files.Definition` is an extension of `Waffle.Definition`,\nhowever the `allowed_media_types/0` and `max_file_size/0` callback are added, \nwith which you need to define what media types are accepted for these types of uploads.\n(You can also return `:all` to accept all media types).\n\nTo use the uploader:\n\n```\niex> {:ok, media} = Bonfire.Files.upload(MyUploader, context, %{path: \"./150.png\"})\niex> media.media_type\n\"image/png\"\niex> Bonfire.Files.remote_url(MyUploader, media)\n\"/uploads/my/01F3AY6JV30G06BY4DR9BTW5EH\"\n```","ref":"Bonfire.Files.html"},{"type":"function","title":"Bonfire.Files.ap_publish_activity/1","doc":"","ref":"Bonfire.Files.html#ap_publish_activity/1"},{"type":"function","title":"Bonfire.Files.ap_receive_attachments/2","doc":"","ref":"Bonfire.Files.html#ap_receive_attachments/2"},{"type":"function","title":"Bonfire.Files.data_url/2","doc":"","ref":"Bonfire.Files.html#data_url/2"},{"type":"function","title":"Bonfire.Files.extract_metadata/1","doc":"","ref":"Bonfire.Files.html#extract_metadata/1"},{"type":"function","title":"Bonfire.Files.file_extension/1","doc":"","ref":"Bonfire.Files.html#file_extension/1"},{"type":"function","title":"Bonfire.Files.file_extension_only/1","doc":"","ref":"Bonfire.Files.html#file_extension_only/1"},{"type":"function","title":"Bonfire.Files.full_url/2","doc":"","ref":"Bonfire.Files.html#full_url/2"},{"type":"function","title":"Bonfire.Files.normalise_size/2","doc":"","ref":"Bonfire.Files.html#normalise_size/2"},{"type":"function","title":"Bonfire.Files.remote_url/3","doc":"Return the URL that a local file has.","ref":"Bonfire.Files.html#remote_url/3"},{"type":"function","title":"Bonfire.Files.upload/5","doc":"Attempt to store a file, returning an upload, for any parent item that\nparticipates in the meta abstraction, providing the user/context of\nthe upload.","ref":"Bonfire.Files.html#upload/5"},{"type":"function","title":"Bonfire.Files.validate/3","doc":"","ref":"Bonfire.Files.html#validate/3"},{"type":"module","title":"Bonfire.Files.Acts.AttachMedia","doc":"Saves uploaded files as attachments to the post.\n\nAct Options:\n * `:changeset` - key in assigns to find changeset, required\n * `:attrs` - epic options key to find the attributes at, default: `:post_attrs`.\n * `:uploads` - epic options key to find the uploaded media objects at, default: `:uploaded_media`.","ref":"Bonfire.Files.Acts.AttachMedia.html"},{"type":"function","title":"Bonfire.Files.Acts.AttachMedia.cast/2","doc":"","ref":"Bonfire.Files.Acts.AttachMedia.html#cast/2"},{"type":"function","title":"Bonfire.Files.Acts.AttachMedia.run/2","doc":"","ref":"Bonfire.Files.Acts.AttachMedia.html#run/2"},{"type":"module","title":"Bonfire.Files.Acts.URLPreviews","doc":"Fetch and save metadata of URLs\n\nAct Options:\n * `:changeset` - key in assigns to find changeset, required\n * `:attrs` - epic options key to find the attributes at, default: `:post_attrs`.\n * `:uploads` - epic options key to find the uploaded media objects at, default: `:urls`.","ref":"Bonfire.Files.Acts.URLPreviews.html"},{"type":"function","title":"Bonfire.Files.Acts.URLPreviews.maybe_fetch_and_save/2","doc":"","ref":"Bonfire.Files.Acts.URLPreviews.html#maybe_fetch_and_save/2"},{"type":"function","title":"Bonfire.Files.Acts.URLPreviews.run/2","doc":"","ref":"Bonfire.Files.Acts.URLPreviews.html#run/2"},{"type":"module","title":"Bonfire.Files.BannerUploader","doc":"Uploader for larger images, for example, a profile page banner.\n\nDoes not do any type of image resizing/thumbnailing.","ref":"Bonfire.Files.BannerUploader.html"},{"type":"function","title":"Bonfire.Files.BannerUploader.acl/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#acl/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.allowed_media_types/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.asset_host/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.async/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#async/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.attach/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#attach/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.blurhash/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.blurred/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#blurred/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.bucket/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#bucket/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.bucket/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#bucket/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.default_url/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#default_url/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.default_url/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#default_url/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.delete/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#delete/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.filename/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#filename/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.max_file_size/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.prefix_dir/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.prepare/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#prepare/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.remote_file_headers/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.remote_url/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.s3_object_headers/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.storage_dir/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.BannerUploader.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.BannerUploader.store/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#store/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.transform/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#transform/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.upload/4","doc":"","ref":"Bonfire.Files.BannerUploader.html#upload/4"},{"type":"function","title":"Bonfire.Files.BannerUploader.url/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#url/1"},{"type":"function","title":"Bonfire.Files.BannerUploader.url/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#url/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.url/3","doc":"","ref":"Bonfire.Files.BannerUploader.html#url/3"},{"type":"function","title":"Bonfire.Files.BannerUploader.urls/2","doc":"","ref":"Bonfire.Files.BannerUploader.html#urls/2"},{"type":"function","title":"Bonfire.Files.BannerUploader.validate/1","doc":"","ref":"Bonfire.Files.BannerUploader.html#validate/1"},{"type":"module","title":"Bonfire.Files.Blurred","doc":"","ref":"Bonfire.Files.Blurred.html"},{"type":"function","title":"Bonfire.Files.Blurred.blurhash/2","doc":"","ref":"Bonfire.Files.Blurred.html#blurhash/2"},{"type":"function","title":"Bonfire.Files.Blurred.blurred/2","doc":"Create a blurred JPEG (deprecated in favour of blurhash)","ref":"Bonfire.Files.Blurred.html#blurred/2"},{"type":"module","title":"Bonfire.Files.CapsuleIntegration.Attacher","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html"},{"type":"function","title":"Bonfire.Files.CapsuleIntegration.Attacher.attach/3","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html#attach/3"},{"type":"function","title":"Bonfire.Files.CapsuleIntegration.Attacher.storages/2","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html#storages/2"},{"type":"function","title":"Bonfire.Files.CapsuleIntegration.Attacher.store/3","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html#store/3"},{"type":"function","title":"Bonfire.Files.CapsuleIntegration.Attacher.upload/3","doc":"","ref":"Bonfire.Files.CapsuleIntegration.Attacher.html#upload/3"},{"type":"behaviour","title":"Bonfire.Files.Definition","doc":"Extension to Waffle.Definition, adding support for checking against media types\nparsed through magic bytes instead of file extensions, which can be modified by the user.\n\nYou can still use validate/2 and other waffle callbacks.","ref":"Bonfire.Files.Definition.html"},{"type":"callback","title":"Bonfire.Files.Definition.allowed_media_types/0","doc":"","ref":"Bonfire.Files.Definition.html#c:allowed_media_types/0"},{"type":"module","title":"Bonfire.Files.DocumentUploader","doc":"","ref":"Bonfire.Files.DocumentUploader.html"},{"type":"function","title":"Bonfire.Files.DocumentUploader.acl/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#acl/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.allowed_media_types/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.asset_host/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.async/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#async/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.attach/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#attach/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.blurhash/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.blurred/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#blurred/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.bucket/0","doc":"Definition for any type of document, allows most media types\nthat support documents, archives, video and audio.","ref":"Bonfire.Files.DocumentUploader.html#bucket/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.bucket/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#bucket/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.default_url/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#default_url/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.default_url/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#default_url/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.delete/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#delete/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.filename/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#filename/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.max_file_size/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.prefix_dir/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.prepare/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#prepare/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.remote_file_headers/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.remote_url/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.s3_object_headers/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.storage_dir/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.DocumentUploader.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.DocumentUploader.store/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#store/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.transform/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#transform/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.upload/4","doc":"","ref":"Bonfire.Files.DocumentUploader.html#upload/4"},{"type":"function","title":"Bonfire.Files.DocumentUploader.url/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#url/1"},{"type":"function","title":"Bonfire.Files.DocumentUploader.url/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#url/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.url/3","doc":"","ref":"Bonfire.Files.DocumentUploader.html#url/3"},{"type":"function","title":"Bonfire.Files.DocumentUploader.urls/2","doc":"","ref":"Bonfire.Files.DocumentUploader.html#urls/2"},{"type":"function","title":"Bonfire.Files.DocumentUploader.validate/1","doc":"","ref":"Bonfire.Files.DocumentUploader.html#validate/1"},{"type":"module","title":"Bonfire.Files.FaviconStore","doc":"","ref":"Bonfire.Files.FaviconStore.html"},{"type":"function","title":"Bonfire.Files.FaviconStore.acl/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#acl/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.allowed_media_types/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.asset_host/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.async/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#async/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.attach/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#attach/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.blurhash/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.blurred/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#blurred/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.bucket/0","doc":"Definition for storing media types for a URL","ref":"Bonfire.Files.FaviconStore.html#bucket/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.bucket/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#bucket/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.cached_or_async_fetch_url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#cached_or_async_fetch_url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.cached_or_fetch/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#cached_or_fetch/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.default_url/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#default_url/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.default_url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#default_url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.delete/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#delete/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.favicon_url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#favicon_url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.filename/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#filename/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.max_file_size/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.prefix_dir/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.prepare/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#prepare/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.remote_file_headers/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.remote_url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.s3_object_headers/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.storage_dir/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.FaviconStore.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.FaviconStore.store/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#store/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.transform/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#transform/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.upload/4","doc":"","ref":"Bonfire.Files.FaviconStore.html#upload/4"},{"type":"function","title":"Bonfire.Files.FaviconStore.url/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#url/1"},{"type":"function","title":"Bonfire.Files.FaviconStore.url/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#url/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.url/3","doc":"","ref":"Bonfire.Files.FaviconStore.html#url/3"},{"type":"function","title":"Bonfire.Files.FaviconStore.urls/2","doc":"","ref":"Bonfire.Files.FaviconStore.html#urls/2"},{"type":"function","title":"Bonfire.Files.FaviconStore.validate/1","doc":"","ref":"Bonfire.Files.FaviconStore.html#validate/1"},{"type":"module","title":"Bonfire.Files.FileDenied","doc":"","ref":"Bonfire.Files.FileDenied.html"},{"type":"function","title":"Bonfire.Files.FileDenied.new/1","doc":"","ref":"Bonfire.Files.FileDenied.html#new/1"},{"type":"type","title":"Bonfire.Files.FileDenied.t/0","doc":"","ref":"Bonfire.Files.FileDenied.html#t:t/0"},{"type":"module","title":"Bonfire.Files.IconUploader","doc":"","ref":"Bonfire.Files.IconUploader.html"},{"type":"function","title":"Bonfire.Files.IconUploader.acl/2","doc":"","ref":"Bonfire.Files.IconUploader.html#acl/2"},{"type":"function","title":"Bonfire.Files.IconUploader.allowed_media_types/0","doc":"","ref":"Bonfire.Files.IconUploader.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.IconUploader.asset_host/0","doc":"","ref":"Bonfire.Files.IconUploader.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.IconUploader.async/0","doc":"","ref":"Bonfire.Files.IconUploader.html#async/0"},{"type":"function","title":"Bonfire.Files.IconUploader.attach/2","doc":"","ref":"Bonfire.Files.IconUploader.html#attach/2"},{"type":"function","title":"Bonfire.Files.IconUploader.blurhash/1","doc":"","ref":"Bonfire.Files.IconUploader.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.IconUploader.blurred/1","doc":"","ref":"Bonfire.Files.IconUploader.html#blurred/1"},{"type":"function","title":"Bonfire.Files.IconUploader.bucket/0","doc":"Uploader for smaller image icons, usually used as avatars.\n\nTODO: Support resizing.","ref":"Bonfire.Files.IconUploader.html#bucket/0"},{"type":"function","title":"Bonfire.Files.IconUploader.bucket/1","doc":"","ref":"Bonfire.Files.IconUploader.html#bucket/1"},{"type":"function","title":"Bonfire.Files.IconUploader.default_url/1","doc":"","ref":"Bonfire.Files.IconUploader.html#default_url/1"},{"type":"function","title":"Bonfire.Files.IconUploader.default_url/2","doc":"","ref":"Bonfire.Files.IconUploader.html#default_url/2"},{"type":"function","title":"Bonfire.Files.IconUploader.delete/1","doc":"","ref":"Bonfire.Files.IconUploader.html#delete/1"},{"type":"function","title":"Bonfire.Files.IconUploader.filename/2","doc":"","ref":"Bonfire.Files.IconUploader.html#filename/2"},{"type":"function","title":"Bonfire.Files.IconUploader.max_file_size/0","doc":"","ref":"Bonfire.Files.IconUploader.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.IconUploader.prefix_dir/0","doc":"","ref":"Bonfire.Files.IconUploader.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.IconUploader.prepare/1","doc":"","ref":"Bonfire.Files.IconUploader.html#prepare/1"},{"type":"function","title":"Bonfire.Files.IconUploader.remote_file_headers/1","doc":"","ref":"Bonfire.Files.IconUploader.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.IconUploader.remote_url/2","doc":"","ref":"Bonfire.Files.IconUploader.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.IconUploader.s3_object_headers/2","doc":"","ref":"Bonfire.Files.IconUploader.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.IconUploader.storage_dir/2","doc":"","ref":"Bonfire.Files.IconUploader.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.IconUploader.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.IconUploader.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.IconUploader.store/1","doc":"","ref":"Bonfire.Files.IconUploader.html#store/1"},{"type":"function","title":"Bonfire.Files.IconUploader.transform/2","doc":"","ref":"Bonfire.Files.IconUploader.html#transform/2"},{"type":"function","title":"Bonfire.Files.IconUploader.upload/4","doc":"","ref":"Bonfire.Files.IconUploader.html#upload/4"},{"type":"function","title":"Bonfire.Files.IconUploader.url/1","doc":"","ref":"Bonfire.Files.IconUploader.html#url/1"},{"type":"function","title":"Bonfire.Files.IconUploader.url/2","doc":"","ref":"Bonfire.Files.IconUploader.html#url/2"},{"type":"function","title":"Bonfire.Files.IconUploader.url/3","doc":"","ref":"Bonfire.Files.IconUploader.html#url/3"},{"type":"function","title":"Bonfire.Files.IconUploader.urls/2","doc":"","ref":"Bonfire.Files.IconUploader.html#urls/2"},{"type":"function","title":"Bonfire.Files.IconUploader.validate/1","doc":"","ref":"Bonfire.Files.IconUploader.html#validate/1"},{"type":"module","title":"Bonfire.Files.Image.Edit","doc":"","ref":"Bonfire.Files.Image.Edit.html"},{"type":"function","title":"Bonfire.Files.Image.Edit.banner/3","doc":"","ref":"Bonfire.Files.Image.Edit.html#banner/3"},{"type":"function","title":"Bonfire.Files.Image.Edit.blur/2","doc":"","ref":"Bonfire.Files.Image.Edit.html#blur/2"},{"type":"function","title":"Bonfire.Files.Image.Edit.dominant_color/3","doc":"Returns the dominant color of an image (given as path, binary, or stream) as HEX value.\n\n`bins` is an integer number of color frequency bins the image is divided into. The default is 10.","ref":"Bonfire.Files.Image.Edit.html#dominant_color/3"},{"type":"function","title":"Bonfire.Files.Image.Edit.image/3","doc":"","ref":"Bonfire.Files.Image.Edit.html#image/3"},{"type":"function","title":"Bonfire.Files.Image.Edit.thumbnail/1","doc":"","ref":"Bonfire.Files.Image.Edit.html#thumbnail/1"},{"type":"function","title":"Bonfire.Files.Image.Edit.thumbnail_image/2","doc":"","ref":"Bonfire.Files.Image.Edit.html#thumbnail_image/2"},{"type":"function","title":"Bonfire.Files.Image.Edit.thumbnail_pdf/1","doc":"","ref":"Bonfire.Files.Image.Edit.html#thumbnail_pdf/1"},{"type":"module","title":"Bonfire.Files.ImageUploader","doc":"Uploader for larger images, for example, a profile page banner.\n\nDoes not do any type of image resizing/thumbnailing.","ref":"Bonfire.Files.ImageUploader.html"},{"type":"function","title":"Bonfire.Files.ImageUploader.acl/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#acl/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.allowed_media_types/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#allowed_media_types/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.asset_host/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#asset_host/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.async/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#async/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.attach/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#attach/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.blurhash/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#blurhash/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.blurred/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#blurred/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.bucket/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#bucket/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.bucket/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#bucket/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.default_url/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#default_url/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.default_url/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#default_url/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.delete/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#delete/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.filename/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#filename/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.max_file_size/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#max_file_size/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.prefix_dir/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#prefix_dir/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.prepare/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#prepare/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.remote_file_headers/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#remote_file_headers/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.remote_url/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#remote_url/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.s3_object_headers/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#s3_object_headers/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.storage_dir/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#storage_dir/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.storage_dir_prefix/0","doc":"","ref":"Bonfire.Files.ImageUploader.html#storage_dir_prefix/0"},{"type":"function","title":"Bonfire.Files.ImageUploader.store/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#store/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.transform/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#transform/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.upload/4","doc":"","ref":"Bonfire.Files.ImageUploader.html#upload/4"},{"type":"function","title":"Bonfire.Files.ImageUploader.url/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#url/1"},{"type":"function","title":"Bonfire.Files.ImageUploader.url/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#url/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.url/3","doc":"","ref":"Bonfire.Files.ImageUploader.html#url/3"},{"type":"function","title":"Bonfire.Files.ImageUploader.urls/2","doc":"","ref":"Bonfire.Files.ImageUploader.html#urls/2"},{"type":"function","title":"Bonfire.Files.ImageUploader.validate/1","doc":"","ref":"Bonfire.Files.ImageUploader.html#validate/1"},{"type":"module","title":"Bonfire.Files.LiveHandler","doc":"","ref":"Bonfire.Files.LiveHandler.html"},{"type":"function","title":"Bonfire.Files.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Files.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Files.LiveHandler.handle_progress/3","doc":"","ref":"Bonfire.Files.LiveHandler.html#handle_progress/3"},{"type":"function","title":"Bonfire.Files.LiveHandler.set_fallback/5","doc":"","ref":"Bonfire.Files.LiveHandler.html#set_fallback/5"},{"type":"macro","title":"Bonfire.Files.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Files.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Files.Media","doc":"","ref":"Bonfire.Files.Media.html"},{"type":"function","title":"Bonfire.Files.Media.hard_delete/2","doc":"Delete an upload, removing any associated files.","ref":"Bonfire.Files.Media.html#hard_delete/2"},{"type":"function","title":"Bonfire.Files.Media.insert/4","doc":"","ref":"Bonfire.Files.Media.html#insert/4"},{"type":"function","title":"Bonfire.Files.Media.many/1","doc":"","ref":"Bonfire.Files.Media.html#many/1"},{"type":"function","title":"Bonfire.Files.Media.one/1","doc":"","ref":"Bonfire.Files.Media.html#one/1"},{"type":"function","title":"Bonfire.Files.Media.soft_delete/1","doc":"Delete an upload, removing it from indexing, but the files remain available.","ref":"Bonfire.Files.Media.html#soft_delete/1"},{"type":"function","title":"Bonfire.Files.Media.update_by/2","doc":"","ref":"Bonfire.Files.Media.html#update_by/2"},{"type":"type","title":"Bonfire.Files.Media.t/0","doc":"","ref":"Bonfire.Files.Media.html#t:t/0"},{"type":"module","title":"Bonfire.Files.Media.Queries","doc":"","ref":"Bonfire.Files.Media.Queries.html"},{"type":"function","title":"Bonfire.Files.Media.Queries.filter/2","doc":"Filter the query according to arbitrary criteria","ref":"Bonfire.Files.Media.Queries.html#filter/2"},{"type":"function","title":"Bonfire.Files.Media.Queries.query/1","doc":"","ref":"Bonfire.Files.Media.Queries.html#query/1"},{"type":"function","title":"Bonfire.Files.Media.Queries.query/2","doc":"","ref":"Bonfire.Files.Media.Queries.html#query/2"},{"type":"module","title":"Bonfire.Files.Prepare","doc":"","ref":"Bonfire.Files.Prepare.html"},{"type":"function","title":"Bonfire.Files.Prepare.prepare/2","doc":"","ref":"Bonfire.Files.Prepare.html#prepare/2"},{"type":"module","title":"Bonfire.Files.ResponsiveImage","doc":"Resizes images at compile time (when possible) or runtime:\n\n```\nuse Bonfire.Files.ResponsiveImage\n\n~H( )\nor\n~H( )\n\nor for paths only known at runtime:\n~H( )\nor\n~H( )\n```","ref":"Bonfire.Files.ResponsiveImage.html"},{"type":"macro","title":"Bonfire.Files.ResponsiveImage.compile_src/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#compile_src/2"},{"type":"macro","title":"Bonfire.Files.ResponsiveImage.compile_srcset/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#compile_srcset/2"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.resize/1","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#resize/1"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.resize/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#resize/2"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.resize_timed/1","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#resize_timed/1"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.src/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#src/2"},{"type":"function","title":"Bonfire.Files.ResponsiveImage.srcset/2","doc":"","ref":"Bonfire.Files.ResponsiveImage.html#srcset/2"},{"type":"module","title":"Bonfire.Files.Routes","doc":"","ref":"Bonfire.Files.Routes.html"},{"type":"module","title":"Bonfire.Files.RuntimeConfig","doc":"","ref":"Bonfire.Files.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Files.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Files.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Files.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Files.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Files.Simulation","doc":"","ref":"Bonfire.Files.Simulation.html"},{"type":"function","title":"Bonfire.Files.Simulation.cleanup/1","doc":"","ref":"Bonfire.Files.Simulation.html#cleanup/1"},{"type":"function","title":"Bonfire.Files.Simulation.fake_upload/2","doc":"","ref":"Bonfire.Files.Simulation.html#fake_upload/2"},{"type":"function","title":"Bonfire.Files.Simulation.geometry/1","doc":"","ref":"Bonfire.Files.Simulation.html#geometry/1"},{"type":"function","title":"Bonfire.Files.Simulation.icon_file/0","doc":"","ref":"Bonfire.Files.Simulation.html#icon_file/0"},{"type":"function","title":"Bonfire.Files.Simulation.image_file/0","doc":"","ref":"Bonfire.Files.Simulation.html#image_file/0"},{"type":"function","title":"Bonfire.Files.Simulation.pdf_file/0","doc":"","ref":"Bonfire.Files.Simulation.html#pdf_file/0"},{"type":"function","title":"Bonfire.Files.Simulation.text_file/0","doc":"","ref":"Bonfire.Files.Simulation.html#text_file/0"},{"type":"module","title":"Bonfire.Files.Versions","doc":"","ref":"Bonfire.Files.Versions.html"},{"type":"module","title":"Bonfire.Mailer","doc":"","ref":"Bonfire.Mailer.html"},{"type":"function","title":"Bonfire.Mailer.config/0","doc":"","ref":"Bonfire.Mailer.html#config/0"},{"type":"function","title":"Bonfire.Mailer.deliver/1","doc":"","ref":"Bonfire.Mailer.html#deliver/1"},{"type":"function","title":"Bonfire.Mailer.deliver_later/2","doc":"","ref":"Bonfire.Mailer.html#deliver_later/2"},{"type":"function","title":"Bonfire.Mailer.deliver_later!/2","doc":"","ref":"Bonfire.Mailer.html#deliver_later!/2"},{"type":"function","title":"Bonfire.Mailer.deliver_now/2","doc":"","ref":"Bonfire.Mailer.html#deliver_now/2"},{"type":"function","title":"Bonfire.Mailer.deliver_now!/2","doc":"","ref":"Bonfire.Mailer.html#deliver_now!/2"},{"type":"function","title":"Bonfire.Mailer.do_send/2","doc":"","ref":"Bonfire.Mailer.html#do_send/2"},{"type":"function","title":"Bonfire.Mailer.handle_error/2","doc":"","ref":"Bonfire.Mailer.html#handle_error/2"},{"type":"function","title":"Bonfire.Mailer.send/4","doc":"","ref":"Bonfire.Mailer.html#send/4"},{"type":"function","title":"Bonfire.Mailer.send_app_feedback/3","doc":"","ref":"Bonfire.Mailer.html#send_app_feedback/3"},{"type":"function","title":"Bonfire.Mailer.send_async/3","doc":"","ref":"Bonfire.Mailer.html#send_async/3"},{"type":"function","title":"Bonfire.Mailer.send_now/3","doc":"","ref":"Bonfire.Mailer.html#send_now/3"},{"type":"module","title":"Bonfire.Mailer.Checker","doc":"Functions for checking the validity of email addresses and domains","ref":"Bonfire.Mailer.Checker.html"},{"type":"function","title":"Bonfire.Mailer.Checker.validate_domain/1","doc":"Checks whether an email domain is valid, returns a reason if not","ref":"Bonfire.Mailer.Checker.html#validate_domain/1"},{"type":"function","title":"Bonfire.Mailer.Checker.validate_email/1","doc":"Checks whether an email is valid, returns a reason if not","ref":"Bonfire.Mailer.Checker.html#validate_email/1"},{"type":"type","title":"Bonfire.Mailer.Checker.error_reason/0","doc":"","ref":"Bonfire.Mailer.Checker.html#t:error_reason/0"},{"type":"module","title":"Bonfire.Mailer.RuntimeConfig","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Mailer.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Mailer.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html#config_module/0"},{"type":"function","title":"Bonfire.Mailer.RuntimeConfig.mail_blackhole/1","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html#mail_blackhole/1"},{"type":"function","title":"Bonfire.Mailer.RuntimeConfig.mail_service/2","doc":"","ref":"Bonfire.Mailer.RuntimeConfig.html#mail_service/2"},{"type":"module","title":"Bonfire.Web.Endpoint","doc":"","ref":"Bonfire.Web.Endpoint.html"},{"type":"function","title":"Bonfire.Web.Endpoint.broadcast/3","doc":"","ref":"Bonfire.Web.Endpoint.html#broadcast/3"},{"type":"function","title":"Bonfire.Web.Endpoint.broadcast!/3","doc":"","ref":"Bonfire.Web.Endpoint.html#broadcast!/3"},{"type":"function","title":"Bonfire.Web.Endpoint.broadcast_from/4","doc":"","ref":"Bonfire.Web.Endpoint.html#broadcast_from/4"},{"type":"function","title":"Bonfire.Web.Endpoint.broadcast_from!/4","doc":"","ref":"Bonfire.Web.Endpoint.html#broadcast_from!/4"},{"type":"function","title":"Bonfire.Web.Endpoint.call/2","doc":"","ref":"Bonfire.Web.Endpoint.html#call/2"},{"type":"function","title":"Bonfire.Web.Endpoint.child_spec/1","doc":"Returns the child specification to start the endpoint\nunder a supervision tree.","ref":"Bonfire.Web.Endpoint.html#child_spec/1"},{"type":"function","title":"Bonfire.Web.Endpoint.config/2","doc":"Returns the endpoint configuration for `key`\n\nReturns `default` if the key does not exist.","ref":"Bonfire.Web.Endpoint.html#config/2"},{"type":"function","title":"Bonfire.Web.Endpoint.config_change/2","doc":"Reloads the configuration given the application environment changes.","ref":"Bonfire.Web.Endpoint.html#config_change/2"},{"type":"function","title":"Bonfire.Web.Endpoint.generate_reverse_router!/1","doc":"(re)generates the reverse router (useful so it can be re-generated when extensions are enabled/disabled)","ref":"Bonfire.Web.Endpoint.html#generate_reverse_router!/1"},{"type":"function","title":"Bonfire.Web.Endpoint.host/0","doc":"Returns the host for the given endpoint.","ref":"Bonfire.Web.Endpoint.html#host/0"},{"type":"function","title":"Bonfire.Web.Endpoint.include_assets/1","doc":"","ref":"Bonfire.Web.Endpoint.html#include_assets/1"},{"type":"function","title":"Bonfire.Web.Endpoint.include_assets/2","doc":"","ref":"Bonfire.Web.Endpoint.html#include_assets/2"},{"type":"function","title":"Bonfire.Web.Endpoint.init/1","doc":"","ref":"Bonfire.Web.Endpoint.html#init/1"},{"type":"function","title":"Bonfire.Web.Endpoint.local_broadcast/3","doc":"","ref":"Bonfire.Web.Endpoint.html#local_broadcast/3"},{"type":"function","title":"Bonfire.Web.Endpoint.local_broadcast_from/4","doc":"","ref":"Bonfire.Web.Endpoint.html#local_broadcast_from/4"},{"type":"function","title":"Bonfire.Web.Endpoint.path/1","doc":"Generates the path information when routing to this endpoint.","ref":"Bonfire.Web.Endpoint.html#path/1"},{"type":"function","title":"Bonfire.Web.Endpoint.reload!/1","doc":"","ref":"Bonfire.Web.Endpoint.html#reload!/1"},{"type":"function","title":"Bonfire.Web.Endpoint.script_name/0","doc":"Generates the script name.","ref":"Bonfire.Web.Endpoint.html#script_name/0"},{"type":"function","title":"Bonfire.Web.Endpoint.server_info/1","doc":"Returns the address and port that the server is running on","ref":"Bonfire.Web.Endpoint.html#server_info/1"},{"type":"function","title":"Bonfire.Web.Endpoint.start_link/1","doc":"Starts the endpoint supervision tree.\n\nAll other options are merged into the endpoint configuration.","ref":"Bonfire.Web.Endpoint.html#start_link/1"},{"type":"function","title":"Bonfire.Web.Endpoint.static_integrity/1","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":"Bonfire.Web.Endpoint.html#static_integrity/1"},{"type":"function","title":"Bonfire.Web.Endpoint.static_lookup/1","doc":"Returns a two item tuple with the first item being the `static_path`\nand the second item being the `static_integrity`.","ref":"Bonfire.Web.Endpoint.html#static_lookup/1"},{"type":"function","title":"Bonfire.Web.Endpoint.static_path/1","doc":"Generates a route to a static file in `priv/static`.","ref":"Bonfire.Web.Endpoint.html#static_path/1"},{"type":"function","title":"Bonfire.Web.Endpoint.static_url/0","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":"Bonfire.Web.Endpoint.html#static_url/0"},{"type":"function","title":"Bonfire.Web.Endpoint.struct_url/0","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":"Bonfire.Web.Endpoint.html#struct_url/0"},{"type":"function","title":"Bonfire.Web.Endpoint.subscribe/2","doc":"","ref":"Bonfire.Web.Endpoint.html#subscribe/2"},{"type":"function","title":"Bonfire.Web.Endpoint.unsubscribe/1","doc":"","ref":"Bonfire.Web.Endpoint.html#unsubscribe/1"},{"type":"function","title":"Bonfire.Web.Endpoint.url/0","doc":"Generates the endpoint base URL without any path information.\n\nIt uses the configuration under `:url` to generate such.","ref":"Bonfire.Web.Endpoint.html#url/0"},{"type":"module","title":"Bonfire.Web.FakeRemoteEndpoint","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.broadcast/3","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#broadcast/3"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.broadcast!/3","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#broadcast!/3"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.broadcast_from/4","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#broadcast_from/4"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.broadcast_from!/4","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#broadcast_from!/4"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.call/2","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#call/2"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.child_spec/1","doc":"Returns the child specification to start the endpoint\nunder a supervision tree.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#child_spec/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.config/2","doc":"Returns the endpoint configuration for `key`\n\nReturns `default` if the key does not exist.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#config/2"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.config_change/2","doc":"Reloads the configuration given the application environment changes.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#config_change/2"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.host/0","doc":"Returns the host for the given endpoint.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#host/0"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.init/1","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#init/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.local_broadcast/3","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#local_broadcast/3"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.local_broadcast_from/4","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#local_broadcast_from/4"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.path/1","doc":"Generates the path information when routing to this endpoint.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#path/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.script_name/0","doc":"Generates the script name.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#script_name/0"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.server_info/1","doc":"Returns the address and port that the server is running on","ref":"Bonfire.Web.FakeRemoteEndpoint.html#server_info/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.start_link/1","doc":"Starts the endpoint supervision tree.\n\nAll other options are merged into the endpoint configuration.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#start_link/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.static_integrity/1","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":"Bonfire.Web.FakeRemoteEndpoint.html#static_integrity/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.static_lookup/1","doc":"Returns a two item tuple with the first item being the `static_path`\nand the second item being the `static_integrity`.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#static_lookup/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.static_path/1","doc":"Generates a route to a static file in `priv/static`.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#static_path/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.static_url/0","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":"Bonfire.Web.FakeRemoteEndpoint.html#static_url/0"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.struct_url/0","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":"Bonfire.Web.FakeRemoteEndpoint.html#struct_url/0"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.subscribe/2","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#subscribe/2"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.unsubscribe/1","doc":"","ref":"Bonfire.Web.FakeRemoteEndpoint.html#unsubscribe/1"},{"type":"function","title":"Bonfire.Web.FakeRemoteEndpoint.url/0","doc":"Generates the endpoint base URL without any path information.\n\nIt uses the configuration under `:url` to generate such.","ref":"Bonfire.Web.FakeRemoteEndpoint.html#url/0"},{"type":"module","title":"Bonfire.Web.Router","doc":"","ref":"Bonfire.Web.Router.html"},{"type":"function","title":"Bonfire.Web.Router.account_required/2","doc":"","ref":"Bonfire.Web.Router.html#account_required/2"},{"type":"function","title":"Bonfire.Web.Router.activity_json/2","doc":"","ref":"Bonfire.Web.Router.html#activity_json/2"},{"type":"function","title":"Bonfire.Web.Router.activity_json_or_html/2","doc":"","ref":"Bonfire.Web.Router.html#activity_json_or_html/2"},{"type":"function","title":"Bonfire.Web.Router.admin_required/2","doc":"","ref":"Bonfire.Web.Router.html#admin_required/2"},{"type":"function","title":"Bonfire.Web.Router.basic/2","doc":"","ref":"Bonfire.Web.Router.html#basic/2"},{"type":"function","title":"Bonfire.Web.Router.basic_html/2","doc":"","ref":"Bonfire.Web.Router.html#basic_html/2"},{"type":"function","title":"Bonfire.Web.Router.browser/2","doc":"","ref":"Bonfire.Web.Router.html#browser/2"},{"type":"function","title":"Bonfire.Web.Router.browser_unsafe/2","doc":"","ref":"Bonfire.Web.Router.html#browser_unsafe/2"},{"type":"function","title":"Bonfire.Web.Router.call/2","doc":"Callback invoked by Plug on every request.","ref":"Bonfire.Web.Router.html#call/2"},{"type":"function","title":"Bonfire.Web.Router.guest_only/2","doc":"","ref":"Bonfire.Web.Router.html#guest_only/2"},{"type":"function","title":"Bonfire.Web.Router.html_only/2","doc":"","ref":"Bonfire.Web.Router.html#html_only/2"},{"type":"function","title":"Bonfire.Web.Router.init/1","doc":"Callback required by Plug that initializes the router\nfor serving web requests.","ref":"Bonfire.Web.Router.html#init/1"},{"type":"function","title":"Bonfire.Web.Router.load_current_auth/2","doc":"","ref":"Bonfire.Web.Router.html#load_current_auth/2"},{"type":"function","title":"Bonfire.Web.Router.require_authenticated_user/2","doc":"","ref":"Bonfire.Web.Router.html#require_authenticated_user/2"},{"type":"function","title":"Bonfire.Web.Router.signed_activity_pub/2","doc":"","ref":"Bonfire.Web.Router.html#signed_activity_pub/2"},{"type":"function","title":"Bonfire.Web.Router.static/2","doc":"","ref":"Bonfire.Web.Router.html#static/2"},{"type":"function","title":"Bonfire.Web.Router.throttle_plug_attacks/2","doc":"","ref":"Bonfire.Web.Router.html#throttle_plug_attacks/2"},{"type":"function","title":"Bonfire.Web.Router.user_required/2","doc":"","ref":"Bonfire.Web.Router.html#user_required/2"},{"type":"function","title":"Bonfire.Web.Router.webfinger/2","doc":"","ref":"Bonfire.Web.Router.html#webfinger/2"},{"type":"function","title":"Bonfire.Web.Router.well_known_nodeinfo/2","doc":"","ref":"Bonfire.Web.Router.html#well_known_nodeinfo/2"},{"type":"module","title":"Bonfire.Web.Router.Reverse","doc":"","ref":"Bonfire.Web.Router.Reverse.html"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/2","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/2"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/3","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/3"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/4","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/4"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/5","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/5"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/6","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/6"},{"type":"function","title":"Bonfire.Web.Router.Reverse.path/7","doc":"","ref":"Bonfire.Web.Router.Reverse.html#path/7"},{"type":"module","title":"Bonfire.Web.Routes","doc":"","ref":"Bonfire.Web.Routes.html"},{"type":"module","title":"Bonfire.Web.Telemetry","doc":"","ref":"Bonfire.Web.Telemetry.html"},{"type":"function","title":"Bonfire.Web.Telemetry.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Web.Telemetry.html#child_spec/1"},{"type":"function","title":"Bonfire.Web.Telemetry.metrics/0","doc":"","ref":"Bonfire.Web.Telemetry.html#metrics/0"},{"type":"function","title":"Bonfire.Web.Telemetry.start_link/1","doc":"","ref":"Bonfire.Web.Telemetry.html#start_link/1"},{"type":"module","title":"Bonfire.Federate.ActivityPub","doc":"","ref":"Bonfire.Federate.ActivityPub.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.disable/1","doc":"","ref":"Bonfire.Federate.ActivityPub.html#disable/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.federating?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.html#federating?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.federating_default?/0","doc":"","ref":"Bonfire.Federate.ActivityPub.html#federating_default?/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.repo/0","doc":"","ref":"Bonfire.Federate.ActivityPub.html#repo/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.set_federating/2","doc":"","ref":"Bonfire.Federate.ActivityPub.html#set_federating/2"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Adapter","doc":"Adapter functions delegated from the `ActivityPub` Library","ref":"Bonfire.Federate.ActivityPub.Adapter.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.base_url/0","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#base_url/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.external_followers_for_activity/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#external_followers_for_activity/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.federate_actor?/3","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#federate_actor?/3"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_actor_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_actor_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_actor_by_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_actor_by_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_actor_by_username/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_actor_by_username/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_follower_local_ids/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_follower_local_ids/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_following_local_ids/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_following_local_ids/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_locale/0","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_locale/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_or_create_service_actor/0","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_or_create_service_actor/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.get_redirect_url/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#get_redirect_url/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.handle_activity/1","doc":"Process incoming activities","ref":"Bonfire.Federate.ActivityPub.Adapter.html#handle_activity/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.maybe_create_remote_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#maybe_create_remote_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.maybe_publish_object/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#maybe_publish_object/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.redirect_to_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#redirect_to_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.update_local_actor/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#update_local_actor/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.update_local_actor_cache/1","doc":"For updating an Actor in cache after a User/etc is updated","ref":"Bonfire.Federate.ActivityPub.Adapter.html#update_local_actor_cache/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.update_remote_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#update_remote_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Adapter.update_remote_actor/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Adapter.html#update_remote_actor/2"},{"type":"module","title":"Bonfire.Federate.ActivityPub.AdapterUtils","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.all_actors/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#all_actors/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.all_recipients/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#all_recipients/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.ap_base_url/0","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#ap_base_url/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.character_module/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#character_module/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.character_to_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#character_to_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.create_author_object/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#create_author_object/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.create_remote_actor/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#create_remote_actor/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.create_service_character/0","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#create_service_character/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.determine_recipients/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#determine_recipients/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.determine_recipients/3","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#determine_recipients/3"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.determine_recipients/4","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#determine_recipients/4"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.format_actor/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#format_actor/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_actor_by_ap_id/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_actor_by_ap_id/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_actor_username/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_actor_username/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_author/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_author/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_by_url_ap_id_or_username/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_by_url_ap_id_or_username/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character_by_ap_id!/1","doc":"without :ok / :error tuple","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character_by_ap_id!/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character_by_id/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character_by_id/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_character_by_username/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_character_by_username/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_context_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_context_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_creator_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_creator_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_different_creator_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_different_creator_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_in_reply_to/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_in_reply_to/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_local_actor_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_local_actor_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_local_character_by_ap_id/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_local_character_by_ap_id/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_object_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_object_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_object_ap_id!/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_object_ap_id!/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_object_or_actor_by_ap_id!/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_object_or_actor_by_ap_id!/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_or_create_service_character/0","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_or_create_service_character/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_or_fetch_and_create_by_uri/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_or_fetch_and_create_by_uri/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_or_fetch_and_create_by_username/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_or_fetch_and_create_by_username/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_or_fetch_character_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_or_fetch_character_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.get_pointer_id_by_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#get_pointer_id_by_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.id_or_object_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#id_or_object_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.is_follow?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#is_follow?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.is_local?/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#is_local?/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.is_local_collection?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#is_local_collection?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.is_local_collection_or_built_in?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#is_local_collection_or_built_in?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.local_actor_ids/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#local_actor_ids/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.log/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#log/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_add_aliases/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_add_aliases/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_apply_or/4","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_apply_or/4"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_attach_property_value/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_attach_property_value/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_create_banner_object/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_create_banner_object/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_create_icon_object/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_create_icon_object/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_create_image_object/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_create_image_object/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_fix_image_object/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_fix_image_object/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_format_image_object_from_path/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_format_image_object_from_path/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.maybe_pointer_id_for_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#maybe_pointer_id_for_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.preload_peered/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#preload_peered/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.public_uri/0","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#public_uri/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.return_pointable/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#return_pointable/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.return_pointer/2","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#return_pointer/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.the_ap_id/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#the_ap_id/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.AdapterUtils.validate_url/1","doc":"","ref":"Bonfire.Federate.ActivityPub.AdapterUtils.html#validate_url/1"},{"type":"module","title":"Bonfire.Federate.ActivityPub.BoundariesMRF","doc":"Filter activities depending on their origin instance, actor, or other criteria","ref":"Bonfire.Federate.ActivityPub.BoundariesMRF.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.BoundariesMRF.actor_blocked?/3","doc":"","ref":"Bonfire.Federate.ActivityPub.BoundariesMRF.html#actor_blocked?/3"},{"type":"behaviour","title":"Bonfire.Federate.ActivityPub.FederationModules","doc":"A automatically-generated global list of federation modules which can queried by activity and/or object type.\n\nTo add a module to this list, you should declare `@behaviour Bonfire.Federate.ActivityPub.FederationModules` in it and define a `federation_module/0` function which returns a list of object and/or activity types which that module handles.\n\nExample:\n```\n@behaviour Bonfire.Federate.ActivityPub.FederationModules\ndef federation_module,\n do: [\n \"Announce\",\n {\"Create\", \"Announce\"},\n {\"Undo\", \"Announce\"},\n {\"Delete\", \"Announce\"}\n ]\n```\n\nYou should also then implement these two functions:\n- for outgoing federation: `ap_publish_activity(subject_struct, verb, object_struct)`\n- for incoming federation: `ap_receive_activity(subject_struct, activity_json, object_json)`","ref":"Bonfire.Federate.ActivityPub.FederationModules.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.app_modules/0","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#app_modules/0"},{"type":"callback","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_module/0","doc":"Get a Federation Module identified by activity and/or object type, given a activity and/or object (string or {activity, object} tuple).","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#c:federation_module/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_module/2","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#federation_module/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_module!/2","doc":"Look up a Federation Module, throw :not_found if not found.","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#federation_module!/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_modules/1","doc":"Look up many types at once, throw :not_found if any of them are not found","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#federation_modules/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.federation_modules_data_types/0","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#federation_modules_data_types/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.maybe_federation_module/2","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#maybe_federation_module/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.FederationModules.modules/0","doc":"","ref":"Bonfire.Federate.ActivityPub.FederationModules.html#modules/0"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Incoming","doc":"","ref":"Bonfire.Federate.ActivityPub.Incoming.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Incoming.no_federation_module_match/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Incoming.html#no_federation_module_match/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Incoming.receive_activity/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Incoming.html#receive_activity/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Incoming.receive_activity/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Incoming.html#receive_activity/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Incoming.receive_object/2","doc":"Create an object without an activity","ref":"Bonfire.Federate.ActivityPub.Incoming.html#receive_object/2"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Instances","doc":"Federated instances\nContext for `Bonfire.Data.ActivityPub.Peer`","ref":"Bonfire.Federate.ActivityPub.Instances.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Instances.get/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Instances.html#get/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Instances.get_or_create/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Instances.html#get_or_create/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Instances.get_or_create_instance_circle/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Instances.html#get_or_create_instance_circle/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Instances.is_blocked?/3","doc":"","ref":"Bonfire.Federate.ActivityPub.Instances.html#is_blocked?/3"},{"type":"module","title":"Bonfire.Federate.ActivityPub.NodeinfoAdapter","doc":"","ref":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.base_url/0","doc":"","ref":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.html#base_url/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.gather_nodeinfo_data/0","doc":"","ref":"Bonfire.Federate.ActivityPub.NodeinfoAdapter.html#gather_nodeinfo_data/0"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Outgoing","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.ap_activity!/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#ap_activity!/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.federate_outgoing?/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#federate_outgoing?/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.maybe_federate/4","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#maybe_federate/4"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.preparation_error/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#preparation_error/2"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Outgoing.push_now!/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Outgoing.html#push_now!/1"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Peered","doc":"Federated actors or objects\nContext for `Bonfire.Data.ActivityPub.Peered`","ref":"Bonfire.Federate.ActivityPub.Peered.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.create/3","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#create/3"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.get/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#get/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.get_canonical_uri/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#get_canonical_uri/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.is_blocked?/3","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#is_blocked?/3"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Peered.save_canonical_uri/2","doc":"","ref":"Bonfire.Federate.ActivityPub.Peered.html#save_canonical_uri/2"},{"type":"module","title":"Bonfire.Federate.ActivityPub.RuntimeConfig","doc":"","ref":"Bonfire.Federate.ActivityPub.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Federate.ActivityPub.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Federate.ActivityPub.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Federate.ActivityPub.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Federate.ActivityPub.Simulate","doc":"","ref":"Bonfire.Federate.ActivityPub.Simulate.html"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Simulate.actor_json/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Simulate.html#actor_json/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Simulate.fake_remote_user/1","doc":"","ref":"Bonfire.Federate.ActivityPub.Simulate.html#fake_remote_user/1"},{"type":"function","title":"Bonfire.Federate.ActivityPub.Simulate.webfingered/0","doc":"","ref":"Bonfire.Federate.ActivityPub.Simulate.html#webfingered/0"},{"type":"module","title":"Bonfire.Invite.Links","doc":"","ref":"Bonfire.Invite.Links.html"},{"type":"function","title":"Bonfire.Invite.Links.create/2","doc":"","ref":"Bonfire.Invite.Links.html#create/2"},{"type":"function","title":"Bonfire.Invite.Links.date_expires/1","doc":"","ref":"Bonfire.Invite.Links.html#date_expires/1"},{"type":"function","title":"Bonfire.Invite.Links.expired?/1","doc":"","ref":"Bonfire.Invite.Links.html#expired?/1"},{"type":"function","title":"Bonfire.Invite.Links.get/2","doc":"","ref":"Bonfire.Invite.Links.html#get/2"},{"type":"function","title":"Bonfire.Invite.Links.list_paginated/2","doc":"","ref":"Bonfire.Invite.Links.html#list_paginated/2"},{"type":"function","title":"Bonfire.Invite.Links.one/2","doc":"","ref":"Bonfire.Invite.Links.html#one/2"},{"type":"function","title":"Bonfire.Invite.Links.query/2","doc":"","ref":"Bonfire.Invite.Links.html#query/2"},{"type":"function","title":"Bonfire.Invite.Links.redeem/1","doc":"","ref":"Bonfire.Invite.Links.html#redeem/1"},{"type":"function","title":"Bonfire.Invite.Links.redeemable?/1","doc":"","ref":"Bonfire.Invite.Links.html#redeemable?/1"},{"type":"module","title":"Bonfire.Invite.Links.Fake","doc":"","ref":"Bonfire.Invite.Links.Fake.html"},{"type":"module","title":"Bonfire.Invite.Links.Integration","doc":"","ref":"Bonfire.Invite.Links.Integration.html"},{"type":"function","title":"Bonfire.Invite.Links.Integration.repo/0","doc":"","ref":"Bonfire.Invite.Links.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Invite.Links.LiveHandler","doc":"","ref":"Bonfire.Invite.Links.LiveHandler.html"},{"type":"function","title":"Bonfire.Invite.Links.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Invite.Links.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Invite.Links.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Invite.Links.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Invite.Links.Web.Routes","doc":"","ref":"Bonfire.Invite.Links.Web.Routes.html"},{"type":"function","title":"Bonfire.Invite.Links.Web.Routes.declare_routes/0","doc":"","ref":"Bonfire.Invite.Links.Web.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.InviteLink","doc":"","ref":"Bonfire.InviteLink.html"},{"type":"function","title":"Bonfire.InviteLink.changeset/2","doc":"","ref":"Bonfire.InviteLink.html#changeset/2"},{"type":"module","title":"Bonfire.Localise","doc":"Runs at compile-time to include dynamic strings (like verb names and object types) in localisation string extraction.","ref":"Bonfire.Localise.html"},{"type":"module","title":"Bonfire.Logging","doc":"","ref":"Bonfire.Logging.html"},{"type":"function","title":"Bonfire.Logging.handle_event/4","doc":"","ref":"Bonfire.Logging.html#handle_event/4"},{"type":"function","title":"Bonfire.Logging.setup/2","doc":"","ref":"Bonfire.Logging.html#setup/2"},{"type":"function","title":"Bonfire.Logging.setup_oban/0","doc":"","ref":"Bonfire.Logging.html#setup_oban/0"},{"type":"function","title":"Bonfire.Logging.setup_opentelemetry/2","doc":"","ref":"Bonfire.Logging.html#setup_opentelemetry/2"},{"type":"module","title":"Bonfire.Me.Accounts","doc":"","ref":"Bonfire.Me.Accounts.html"},{"type":"function","title":"Bonfire.Me.Accounts.allow_signup?/1","doc":"","ref":"Bonfire.Me.Accounts.html#allow_signup?/1"},{"type":"function","title":"Bonfire.Me.Accounts.change_email/3","doc":"","ref":"Bonfire.Me.Accounts.html#change_email/3"},{"type":"function","title":"Bonfire.Me.Accounts.change_password/3","doc":"","ref":"Bonfire.Me.Accounts.html#change_password/3"},{"type":"function","title":"Bonfire.Me.Accounts.change_password/4","doc":"","ref":"Bonfire.Me.Accounts.html#change_password/4"},{"type":"function","title":"Bonfire.Me.Accounts.changeset/3","doc":"","ref":"Bonfire.Me.Accounts.html#changeset/3"},{"type":"function","title":"Bonfire.Me.Accounts.confirm_email/2","doc":"","ref":"Bonfire.Me.Accounts.html#confirm_email/2"},{"type":"function","title":"Bonfire.Me.Accounts.count/0","doc":"","ref":"Bonfire.Me.Accounts.html#count/0"},{"type":"function","title":"Bonfire.Me.Accounts.delete/2","doc":"Use `enqueue_delete/1` instead","ref":"Bonfire.Me.Accounts.html#delete/2"},{"type":"function","title":"Bonfire.Me.Accounts.do_signup/2","doc":"","ref":"Bonfire.Me.Accounts.html#do_signup/2"},{"type":"function","title":"Bonfire.Me.Accounts.enqueue_delete/1","doc":"","ref":"Bonfire.Me.Accounts.html#enqueue_delete/1"},{"type":"function","title":"Bonfire.Me.Accounts.fetch_current/1","doc":"","ref":"Bonfire.Me.Accounts.html#fetch_current/1"},{"type":"function","title":"Bonfire.Me.Accounts.get_by_email/1","doc":"","ref":"Bonfire.Me.Accounts.html#get_by_email/1"},{"type":"function","title":"Bonfire.Me.Accounts.get_current/1","doc":"","ref":"Bonfire.Me.Accounts.html#get_current/1"},{"type":"function","title":"Bonfire.Me.Accounts.instance_is_invite_only?/0","doc":"","ref":"Bonfire.Me.Accounts.html#instance_is_invite_only?/0"},{"type":"function","title":"Bonfire.Me.Accounts.is_admin?/1","doc":"","ref":"Bonfire.Me.Accounts.html#is_admin?/1"},{"type":"function","title":"Bonfire.Me.Accounts.is_first_account?/0","doc":"","ref":"Bonfire.Me.Accounts.html#is_first_account?/0"},{"type":"function","title":"Bonfire.Me.Accounts.login/2","doc":"Attempts to log in by password and either username or email.\n\nAccepts a map of parameters or a `LoginFields` changeset.\n\nOn success, returns `{:ok, account, user}` if a username was\nprovided and `{:ok, account, nil}` otherwise.\nOn error, returns `{:error, changeset}`","ref":"Bonfire.Me.Accounts.html#login/2"},{"type":"function","title":"Bonfire.Me.Accounts.login_valid?/2","doc":"","ref":"Bonfire.Me.Accounts.html#login_valid?/2"},{"type":"function","title":"Bonfire.Me.Accounts.maybe_redeem_invite/2","doc":"","ref":"Bonfire.Me.Accounts.html#maybe_redeem_invite/2"},{"type":"function","title":"Bonfire.Me.Accounts.redeemable_invite?/1","doc":"","ref":"Bonfire.Me.Accounts.html#redeemable_invite?/1"},{"type":"function","title":"Bonfire.Me.Accounts.request_confirm_email/2","doc":"","ref":"Bonfire.Me.Accounts.html#request_confirm_email/2"},{"type":"function","title":"Bonfire.Me.Accounts.request_forgot_password/1","doc":"","ref":"Bonfire.Me.Accounts.html#request_forgot_password/1"},{"type":"function","title":"Bonfire.Me.Accounts.signup/2","doc":"","ref":"Bonfire.Me.Accounts.html#signup/2"},{"type":"function","title":"Bonfire.Me.Accounts.update_is_admin/3","doc":"","ref":"Bonfire.Me.Accounts.html#update_is_admin/3"},{"type":"type","title":"Bonfire.Me.Accounts.changeset_name/0","doc":"","ref":"Bonfire.Me.Accounts.html#t:changeset_name/0"},{"type":"module","title":"Bonfire.Me.Accounts.ChangeEmailFields","doc":"","ref":"Bonfire.Me.Accounts.ChangeEmailFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.ChangeEmailFields.changeset/2","doc":"","ref":"Bonfire.Me.Accounts.ChangeEmailFields.html#changeset/2"},{"type":"module","title":"Bonfire.Me.Accounts.ChangePasswordFields","doc":"","ref":"Bonfire.Me.Accounts.ChangePasswordFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.ChangePasswordFields.changeset/3","doc":"","ref":"Bonfire.Me.Accounts.ChangePasswordFields.html#changeset/3"},{"type":"module","title":"Bonfire.Me.Accounts.ConfirmEmailFields","doc":"","ref":"Bonfire.Me.Accounts.ConfirmEmailFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.ConfirmEmailFields.changeset/2","doc":"","ref":"Bonfire.Me.Accounts.ConfirmEmailFields.html#changeset/2"},{"type":"module","title":"Bonfire.Me.Accounts.ForgotPasswordFields","doc":"","ref":"Bonfire.Me.Accounts.ForgotPasswordFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.ForgotPasswordFields.changeset/2","doc":"","ref":"Bonfire.Me.Accounts.ForgotPasswordFields.html#changeset/2"},{"type":"module","title":"Bonfire.Me.Accounts.LoginFields","doc":"","ref":"Bonfire.Me.Accounts.LoginFields.html"},{"type":"function","title":"Bonfire.Me.Accounts.LoginFields.changeset/2","doc":"","ref":"Bonfire.Me.Accounts.LoginFields.html#changeset/2"},{"type":"module","title":"Bonfire.Me.Accounts.Queries","doc":"","ref":"Bonfire.Me.Accounts.Queries.html"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.by_email/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#by_email/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.confirm_email/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#confirm_email/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.count/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#count/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.current/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#current/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.login_by_account_id/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#login_by_account_id/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.login_by_email/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#login_by_email/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.login_by_username/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#login_by_username/1"},{"type":"function","title":"Bonfire.Me.Accounts.Queries.request_confirm_email/1","doc":"","ref":"Bonfire.Me.Accounts.Queries.html#request_confirm_email/1"},{"type":"module","title":"Bonfire.Me.Accounts.SecondFactors","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.changeset/3","doc":"Sets or updates the TOTP secret.\nThe secret is a random 20 bytes binary that is used to generate the QR Code to\nenable 2FA using auth applications. It will only be updated if the OTP code\nsent is valid.","ref":"Bonfire.Me.Accounts.SecondFactors.html#changeset/3"},{"type":"function","title":"Examples - Bonfire.Me.Accounts.SecondFactors.changeset/3","doc":"iex> changeset(%AuthSecondFactor{secret: >}, code: \"123456\")\n %Ecto.Changeset{data: %AuthSecondFactor{}}","ref":"Bonfire.Me.Accounts.SecondFactors.html#changeset/3-examples"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.delete_account_totp/1","doc":"Disables the TOTP configuration for the given account.","ref":"Bonfire.Me.Accounts.SecondFactors.html#delete_account_totp/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.enabled?/0","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#enabled?/0"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.format_secret/1","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#format_secret/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.get_account_totp/1","doc":"Gets the %AuthSecondFactor{} entry, if any.","ref":"Bonfire.Me.Accounts.SecondFactors.html#get_account_totp/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.maybe_authenticate/2","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#maybe_authenticate/2"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.maybe_cast_totp_changeset/3","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#maybe_cast_totp_changeset/3"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.new/0","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#new/0"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.new_qrcode/1","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#new_qrcode/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.new_struct/1","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#new_struct/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.new_uri/1","doc":"","ref":"Bonfire.Me.Accounts.SecondFactors.html#new_uri/1"},{"type":"function","title":"Bonfire.Me.Accounts.SecondFactors.validate_account_totp/2","doc":"Validates if the given TOTP code is valid.","ref":"Bonfire.Me.Accounts.SecondFactors.html#validate_account_totp/2"},{"type":"module","title":"Bonfire.Me.Acts.Caretaker","doc":"An act that deals with maintaining a `Caretaker` record for a changeset.\n\nDuring insertion, adds an associated insert if a caretaker can be found in the epic options.\n\nDuring deletion, ensures that the related record will be cleaned up.\n\nEpic Options (insert):\n * `:caretaker` - user that will take care of the post, falls back to `:current_user`\n * `:current_user` - user that will taker care of the post, fallback if `:caretaker` is not set.\n\nAct Options:\n * `:on` - key to find changeset, required.","ref":"Bonfire.Me.Acts.Caretaker.html"},{"type":"function","title":"Bonfire.Me.Acts.Caretaker.run/2","doc":"","ref":"Bonfire.Me.Acts.Caretaker.html#run/2"},{"type":"module","title":"Bonfire.Me.Acts.Creator","doc":"An act that deals with maintaining a `Created` record for a changeset.\n\nDuring insertion, adds an associated insert if a creator can be found in the epic options.\n\nDuring deletion, ensures that the related record will be cleaned up.\n\nEpic Options (insert):\n * `:creator` - user that will create the post, falls back to `:current_user`\n * `:current_user` - user that will create the post, fallback if `:creator` is not set.\n\nAct Options:\n * `:on` - key to find changeset, required.","ref":"Bonfire.Me.Acts.Creator.html"},{"type":"module","title":"Bonfire.Me.Characters","doc":"","ref":"Bonfire.Me.Characters.html"},{"type":"function","title":"Bonfire.Me.Characters.by_username/1","doc":"","ref":"Bonfire.Me.Characters.html#by_username/1"},{"type":"function","title":"Bonfire.Me.Characters.by_username!/1","doc":"","ref":"Bonfire.Me.Characters.html#by_username!/1"},{"type":"function","title":"Bonfire.Me.Characters.by_username_q/1","doc":"","ref":"Bonfire.Me.Characters.html#by_username_q/1"},{"type":"function","title":"Bonfire.Me.Characters.changeset/3","doc":"","ref":"Bonfire.Me.Characters.html#changeset/3"},{"type":"function","title":"Bonfire.Me.Characters.character_mention_prefix/1","doc":"","ref":"Bonfire.Me.Characters.html#character_mention_prefix/1"},{"type":"function","title":"Bonfire.Me.Characters.character_url/1","doc":"","ref":"Bonfire.Me.Characters.html#character_url/1"},{"type":"function","title":"Bonfire.Me.Characters.clean_username/1","doc":"","ref":"Bonfire.Me.Characters.html#clean_username/1"},{"type":"function","title":"Bonfire.Me.Characters.display_username/4","doc":"","ref":"Bonfire.Me.Characters.html#display_username/4"},{"type":"function","title":"Bonfire.Me.Characters.get/1","doc":"","ref":"Bonfire.Me.Characters.html#get/1"},{"type":"function","title":"Bonfire.Me.Characters.hash_available?/1","doc":"","ref":"Bonfire.Me.Characters.html#hash_available?/1"},{"type":"function","title":"Bonfire.Me.Characters.hash_delete/1","doc":"","ref":"Bonfire.Me.Characters.html#hash_delete/1"},{"type":"function","title":"Bonfire.Me.Characters.indexing_object_format/1","doc":"","ref":"Bonfire.Me.Characters.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Me.Characters.q_by_id/1","doc":"","ref":"Bonfire.Me.Characters.html#q_by_id/1"},{"type":"function","title":"Bonfire.Me.Characters.remote_changeset/2","doc":"","ref":"Bonfire.Me.Characters.html#remote_changeset/2"},{"type":"function","title":"Bonfire.Me.Characters.schema_module/0","doc":"","ref":"Bonfire.Me.Characters.html#schema_module/0"},{"type":"function","title":"Bonfire.Me.Characters.update/2","doc":"","ref":"Bonfire.Me.Characters.html#update/2"},{"type":"function","title":"Bonfire.Me.Characters.username_available?/1","doc":"","ref":"Bonfire.Me.Characters.html#username_available?/1"},{"type":"module","title":"Bonfire.Me.DeleteWorker","doc":"","ref":"Bonfire.Me.DeleteWorker.html"},{"type":"function","title":"Bonfire.Me.DeleteWorker.care_taken/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#care_taken/1"},{"type":"function","title":"Bonfire.Me.DeleteWorker.closures/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#closures/1"},{"type":"function","title":"Bonfire.Me.DeleteWorker.delete/2","doc":"","ref":"Bonfire.Me.DeleteWorker.html#delete/2"},{"type":"function","title":"Bonfire.Me.DeleteWorker.delete_now/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#delete_now/1"},{"type":"function","title":"Bonfire.Me.DeleteWorker.enqueue_delete/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#enqueue_delete/1"},{"type":"function","title":"Bonfire.Me.DeleteWorker.perform/1","doc":"","ref":"Bonfire.Me.DeleteWorker.html#perform/1"},{"type":"module","title":"Bonfire.Me.Fake","doc":"","ref":"Bonfire.Me.Fake.html"},{"type":"function","title":"Bonfire.Me.Fake.fake_account!/2","doc":"","ref":"Bonfire.Me.Fake.html#fake_account!/2"},{"type":"function","title":"Bonfire.Me.Fake.fake_user!/3","doc":"","ref":"Bonfire.Me.Fake.html#fake_user!/3"},{"type":"module","title":"Bonfire.Me.Fake.Helpers","doc":"","ref":"Bonfire.Me.Fake.Helpers.html"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.atusername/0","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#atusername/0"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.avatar_url/0","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#avatar_url/0"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.avatar_url/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#avatar_url/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.character_subform/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#character_subform/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.confirm_token/0","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#confirm_token/0"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.create_user_form/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#create_user_form/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.credential_subform/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#credential_subform/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.email_subform/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#email_subform/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.icon_url/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#icon_url/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.image/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#image/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.image_url/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#image_url/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.profile_subform/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#profile_subform/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.signup_form/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#signup_form/1"},{"type":"function","title":"Bonfire.Me.Fake.Helpers.user_live/1","doc":"","ref":"Bonfire.Me.Fake.Helpers.html#user_live/1"},{"type":"module","title":"Bonfire.Me.Integration","doc":"","ref":"Bonfire.Me.Integration.html"},{"type":"function","title":"Bonfire.Me.Integration.indexing_format_created/2","doc":"","ref":"Bonfire.Me.Integration.html#indexing_format_created/2"},{"type":"function","title":"Bonfire.Me.Integration.indexing_format_creator/2","doc":"","ref":"Bonfire.Me.Integration.html#indexing_format_creator/2"},{"type":"function","title":"Bonfire.Me.Integration.is_local?/1","doc":"","ref":"Bonfire.Me.Integration.html#is_local?/1"},{"type":"function","title":"Bonfire.Me.Integration.mailer/0","doc":"","ref":"Bonfire.Me.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Me.Integration.maybe_index/1","doc":"","ref":"Bonfire.Me.Integration.html#maybe_index/1"},{"type":"function","title":"Bonfire.Me.Integration.repo/0","doc":"","ref":"Bonfire.Me.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Me.Mails","doc":"","ref":"Bonfire.Me.Mails.html"},{"type":"function","title":"Bonfire.Me.Mails.confirm_email/2","doc":"","ref":"Bonfire.Me.Mails.html#confirm_email/2"},{"type":"function","title":"Bonfire.Me.Mails.forgot_password/1","doc":"","ref":"Bonfire.Me.Mails.html#forgot_password/1"},{"type":"function","title":"Bonfire.Me.Mails.render/3","doc":"","ref":"Bonfire.Me.Mails.html#render/3"},{"type":"function","title":"Bonfire.Me.Mails.signup_confirm_email/1","doc":"","ref":"Bonfire.Me.Mails.html#signup_confirm_email/1"},{"type":"module","title":"Bonfire.Me.Mails.EmailView","doc":"","ref":"Bonfire.Me.Mails.EmailView.html"},{"type":"function","title":"Bonfire.Me.Mails.EmailView.render_template/2","doc":"","ref":"Bonfire.Me.Mails.EmailView.html#render_template/2"},{"type":"module","title":"Bonfire.Me.Profiles","doc":"","ref":"Bonfire.Me.Profiles.html"},{"type":"function","title":"Bonfire.Me.Profiles.changeset/2","doc":"","ref":"Bonfire.Me.Profiles.html#changeset/2"},{"type":"function","title":"Bonfire.Me.Profiles.changeset_simple/2","doc":"","ref":"Bonfire.Me.Profiles.html#changeset_simple/2"},{"type":"function","title":"Bonfire.Me.Profiles.indexing_object_format/1","doc":"","ref":"Bonfire.Me.Profiles.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Me.Profiles.schema_module/0","doc":"","ref":"Bonfire.Me.Profiles.html#schema_module/0"},{"type":"module","title":"Bonfire.Me.Profiles.LiveHandler","doc":"","ref":"Bonfire.Me.Profiles.LiveHandler.html"},{"type":"function","title":"Bonfire.Me.Profiles.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Me.Profiles.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Me.Profiles.LiveHandler.set_profile_image/5","doc":"","ref":"Bonfire.Me.Profiles.LiveHandler.html#set_profile_image/5"},{"type":"macro","title":"Bonfire.Me.Profiles.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Me.Profiles.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Me.RuntimeConfig","doc":"","ref":"Bonfire.Me.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Me.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Me.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Me.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Me.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Me.SharedUsers","doc":"","ref":"Bonfire.Me.SharedUsers.html"},{"type":"function","title":"Bonfire.Me.SharedUsers.add_account/3","doc":"","ref":"Bonfire.Me.SharedUsers.html#add_account/3"},{"type":"function","title":"Bonfire.Me.SharedUsers.add_accounts/3","doc":"","ref":"Bonfire.Me.SharedUsers.html#add_accounts/3"},{"type":"function","title":"Bonfire.Me.SharedUsers.by_account/1","doc":"","ref":"Bonfire.Me.SharedUsers.html#by_account/1"},{"type":"function","title":"Bonfire.Me.SharedUsers.by_username_and_account_query/2","doc":"","ref":"Bonfire.Me.SharedUsers.html#by_username_and_account_query/2"},{"type":"function","title":"Bonfire.Me.SharedUsers.federation_module/0","doc":"","ref":"Bonfire.Me.SharedUsers.html#federation_module/0"},{"type":"function","title":"Bonfire.Me.SharedUsers.init_shared_user/2","doc":"","ref":"Bonfire.Me.SharedUsers.html#init_shared_user/2"},{"type":"module","title":"Bonfire.Me.Users","doc":"","ref":"Bonfire.Me.Users.html"},{"type":"function","title":"Bonfire.Me.Users.ap_receive_activity/3","doc":"","ref":"Bonfire.Me.Users.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Me.Users.by_account/1","doc":"","ref":"Bonfire.Me.Users.html#by_account/1"},{"type":"function","title":"Bonfire.Me.Users.by_ap_id/1","doc":"","ref":"Bonfire.Me.Users.html#by_ap_id/1"},{"type":"function","title":"Bonfire.Me.Users.by_ap_id!/1","doc":"","ref":"Bonfire.Me.Users.html#by_ap_id!/1"},{"type":"function","title":"Bonfire.Me.Users.by_canonical_uri/1","doc":"","ref":"Bonfire.Me.Users.html#by_canonical_uri/1"},{"type":"function","title":"Bonfire.Me.Users.by_id/2","doc":"","ref":"Bonfire.Me.Users.html#by_id/2"},{"type":"function","title":"Bonfire.Me.Users.by_username/2","doc":"","ref":"Bonfire.Me.Users.html#by_username/2"},{"type":"function","title":"Bonfire.Me.Users.by_username!/1","doc":"","ref":"Bonfire.Me.Users.html#by_username!/1"},{"type":"function","title":"Bonfire.Me.Users.by_username_and_account/2","doc":"Used for switch-user functionality","ref":"Bonfire.Me.Users.html#by_username_and_account/2"},{"type":"function","title":"Bonfire.Me.Users.changeset/4","doc":"","ref":"Bonfire.Me.Users.html#changeset/4"},{"type":"function","title":"Bonfire.Me.Users.check_active/1","doc":"","ref":"Bonfire.Me.Users.html#check_active/1"},{"type":"function","title":"Bonfire.Me.Users.check_active!/1","doc":"","ref":"Bonfire.Me.Users.html#check_active!/1"},{"type":"function","title":"Bonfire.Me.Users.count/1","doc":"","ref":"Bonfire.Me.Users.html#count/1"},{"type":"function","title":"Bonfire.Me.Users.create/2","doc":"","ref":"Bonfire.Me.Users.html#create/2"},{"type":"function","title":"Bonfire.Me.Users.create_remote/1","doc":"Creates a remote user","ref":"Bonfire.Me.Users.html#create_remote/1"},{"type":"function","title":"Bonfire.Me.Users.delete/2","doc":"Use `enqueue_delete/1` instead","ref":"Bonfire.Me.Users.html#delete/2"},{"type":"function","title":"Bonfire.Me.Users.enqueue_delete/1","doc":"","ref":"Bonfire.Me.Users.html#enqueue_delete/1"},{"type":"function","title":"Bonfire.Me.Users.federation_module/0","doc":"","ref":"Bonfire.Me.Users.html#federation_module/0"},{"type":"function","title":"Bonfire.Me.Users.fetch_current/1","doc":"","ref":"Bonfire.Me.Users.html#fetch_current/1"},{"type":"function","title":"Bonfire.Me.Users.flatten/1","doc":"","ref":"Bonfire.Me.Users.html#flatten/1"},{"type":"function","title":"Bonfire.Me.Users.format_actor/1","doc":"","ref":"Bonfire.Me.Users.html#format_actor/1"},{"type":"function","title":"Bonfire.Me.Users.get_current/1","doc":"","ref":"Bonfire.Me.Users.html#get_current/1"},{"type":"function","title":"Bonfire.Me.Users.get_current/2","doc":"","ref":"Bonfire.Me.Users.html#get_current/2"},{"type":"function","title":"Bonfire.Me.Users.get_only_in_account/1","doc":"","ref":"Bonfire.Me.Users.html#get_only_in_account/1"},{"type":"function","title":"Bonfire.Me.Users.indexing_object_format/1","doc":"","ref":"Bonfire.Me.Users.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Me.Users.is_active?/1","doc":"","ref":"Bonfire.Me.Users.html#is_active?/1"},{"type":"function","title":"Bonfire.Me.Users.is_first_user?/0","doc":"","ref":"Bonfire.Me.Users.html#is_first_user?/0"},{"type":"function","title":"Bonfire.Me.Users.list/1","doc":"","ref":"Bonfire.Me.Users.html#list/1"},{"type":"function","title":"Bonfire.Me.Users.list_admins/0","doc":"","ref":"Bonfire.Me.Users.html#list_admins/0"},{"type":"function","title":"Bonfire.Me.Users.list_all/1","doc":"","ref":"Bonfire.Me.Users.html#list_all/1"},{"type":"function","title":"Bonfire.Me.Users.list_paginated/2","doc":"","ref":"Bonfire.Me.Users.html#list_paginated/2"},{"type":"function","title":"Bonfire.Me.Users.make_admin/1","doc":"Grants a user superpowers.","ref":"Bonfire.Me.Users.html#make_admin/1"},{"type":"function","title":"Bonfire.Me.Users.maybe_count/1","doc":"","ref":"Bonfire.Me.Users.html#maybe_count/1"},{"type":"function","title":"Bonfire.Me.Users.maybe_index_user/1","doc":"","ref":"Bonfire.Me.Users.html#maybe_index_user/1"},{"type":"function","title":"Bonfire.Me.Users.query/2","doc":"","ref":"Bonfire.Me.Users.html#query/2"},{"type":"function","title":"Bonfire.Me.Users.query_module/0","doc":"","ref":"Bonfire.Me.Users.html#query_module/0"},{"type":"function","title":"Bonfire.Me.Users.remote_fetcher/0","doc":"","ref":"Bonfire.Me.Users.html#remote_fetcher/0"},{"type":"function","title":"Bonfire.Me.Users.revoke_admin/1","doc":"Revokes a user's superpowers.","ref":"Bonfire.Me.Users.html#revoke_admin/1"},{"type":"function","title":"Bonfire.Me.Users.schema_module/0","doc":"A User is a logical identity within the system belonging to an Account.","ref":"Bonfire.Me.Users.html#schema_module/0"},{"type":"function","title":"Bonfire.Me.Users.search/1","doc":"","ref":"Bonfire.Me.Users.html#search/1"},{"type":"function","title":"Bonfire.Me.Users.search_db/1","doc":"","ref":"Bonfire.Me.Users.html#search_db/1"},{"type":"function","title":"Bonfire.Me.Users.update/3","doc":"","ref":"Bonfire.Me.Users.html#update/3"},{"type":"function","title":"Bonfire.Me.Users.update_local_actor/2","doc":"","ref":"Bonfire.Me.Users.html#update_local_actor/2"},{"type":"function","title":"Bonfire.Me.Users.update_remote_actor/2","doc":"Updates a remote user","ref":"Bonfire.Me.Users.html#update_remote_actor/2"},{"type":"type","title":"Bonfire.Me.Users.changeset_extra/0","doc":"","ref":"Bonfire.Me.Users.html#t:changeset_extra/0"},{"type":"type","title":"Bonfire.Me.Users.changeset_name/0","doc":"","ref":"Bonfire.Me.Users.html#t:changeset_name/0"},{"type":"module","title":"Bonfire.Me.Users.LiveHandler","doc":"","ref":"Bonfire.Me.Users.LiveHandler.html"},{"type":"function","title":"Bonfire.Me.Users.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Me.Users.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Me.Users.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Me.Users.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Me.Users.LiveHandler.to_tuple/1","doc":"","ref":"Bonfire.Me.Users.LiveHandler.html#to_tuple/1"},{"type":"module","title":"Bonfire.Me.Users.Queries","doc":"","ref":"Bonfire.Me.Users.Queries.html"},{"type":"function","title":"Bonfire.Me.Users.Queries.admins/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#admins/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.base_by_id/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#base_by_id/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_account/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_account/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_canonical_uri/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_canonical_uri/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_id/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_id/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_username_and_account/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_username_and_account/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_username_or_id/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_username_or_id/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.by_username_query/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#by_username_query/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.count/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#count/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.current/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#current/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.current/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#current/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.join_peered/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#join_peered/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.list/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#list/1"},{"type":"function","title":"Bonfire.Me.Users.Queries.query/2","doc":"","ref":"Bonfire.Me.Users.Queries.html#query/2"},{"type":"function","title":"Bonfire.Me.Users.Queries.schema_module/0","doc":"","ref":"Bonfire.Me.Users.Queries.html#schema_module/0"},{"type":"function","title":"Bonfire.Me.Users.Queries.search/1","doc":"","ref":"Bonfire.Me.Users.Queries.html#search/1"},{"type":"module","title":"Bonfire.Messages","doc":"","ref":"Bonfire.Messages.html"},{"type":"function","title":"Bonfire.Messages.ap_publish_activity/3","doc":"","ref":"Bonfire.Messages.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Messages.ap_receive_activity/3","doc":"","ref":"Bonfire.Messages.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Messages.changeset/4","doc":"","ref":"Bonfire.Messages.html#changeset/4"},{"type":"function","title":"Bonfire.Messages.draft/2","doc":"","ref":"Bonfire.Messages.html#draft/2"},{"type":"function","title":"Bonfire.Messages.federation_module/0","doc":"","ref":"Bonfire.Messages.html#federation_module/0"},{"type":"function","title":"Bonfire.Messages.filter/3","doc":"","ref":"Bonfire.Messages.html#filter/3"},{"type":"function","title":"Bonfire.Messages.list/3","doc":"List posts created by the user and which are in their outbox, which are not replies","ref":"Bonfire.Messages.html#list/3"},{"type":"function","title":"Bonfire.Messages.list/4","doc":"","ref":"Bonfire.Messages.html#list/4"},{"type":"function","title":"Bonfire.Messages.read/2","doc":"","ref":"Bonfire.Messages.html#read/2"},{"type":"function","title":"Bonfire.Messages.schema_module/0","doc":"","ref":"Bonfire.Messages.html#schema_module/0"},{"type":"function","title":"Bonfire.Messages.send/3","doc":"TODO: check boundaries, right now anyone can message anyone :/","ref":"Bonfire.Messages.html#send/3"},{"type":"module","title":"Bonfire.Messages.Fake","doc":"","ref":"Bonfire.Messages.Fake.html"},{"type":"function","title":"Bonfire.Messages.Fake.fake_comment!/4","doc":"","ref":"Bonfire.Messages.Fake.html#fake_comment!/4"},{"type":"function","title":"Bonfire.Messages.Fake.fake_post!/4","doc":"","ref":"Bonfire.Messages.Fake.html#fake_post!/4"},{"type":"function","title":"Bonfire.Messages.Fake.fake_remote_user!/0","doc":"","ref":"Bonfire.Messages.Fake.html#fake_remote_user!/0"},{"type":"module","title":"Bonfire.Messages.Integration","doc":"","ref":"Bonfire.Messages.Integration.html"},{"type":"function","title":"Bonfire.Messages.Integration.mailer/0","doc":"","ref":"Bonfire.Messages.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Messages.Integration.repo/0","doc":"","ref":"Bonfire.Messages.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Messages.LiveHandler","doc":"","ref":"Bonfire.Messages.LiveHandler.html"},{"type":"function","title":"Bonfire.Messages.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Messages.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Messages.LiveHandler.handle_params/3","doc":"","ref":"Bonfire.Messages.LiveHandler.html#handle_params/3"},{"type":"function","title":"Bonfire.Messages.LiveHandler.list_threads/3","doc":"","ref":"Bonfire.Messages.LiveHandler.html#list_threads/3"},{"type":"function","title":"Bonfire.Messages.LiveHandler.live_more/3","doc":"","ref":"Bonfire.Messages.LiveHandler.html#live_more/3"},{"type":"function","title":"Bonfire.Messages.LiveHandler.send_message/2","doc":"","ref":"Bonfire.Messages.LiveHandler.html#send_message/2"},{"type":"macro","title":"Bonfire.Messages.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Messages.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Messages.LiveHandler.thread_meta/4","doc":"","ref":"Bonfire.Messages.LiveHandler.html#thread_meta/4"},{"type":"function","title":"Bonfire.Messages.LiveHandler.thread_meta/5","doc":"","ref":"Bonfire.Messages.LiveHandler.html#thread_meta/5"},{"type":"function","title":"Bonfire.Messages.LiveHandler.thread_participants/4","doc":"","ref":"Bonfire.Messages.LiveHandler.html#thread_participants/4"},{"type":"function","title":"Bonfire.Messages.LiveHandler.threads_widget/3","doc":"","ref":"Bonfire.Messages.LiveHandler.html#threads_widget/3"},{"type":"module","title":"Bonfire.Posts","doc":"","ref":"Bonfire.Posts.html"},{"type":"function","title":"Bonfire.Posts.ap_publish_activity/3","doc":"","ref":"Bonfire.Posts.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Posts.ap_receive_activity/4","doc":"record an incoming ActivityPub post","ref":"Bonfire.Posts.html#ap_receive_activity/4"},{"type":"function","title":"Bonfire.Posts.changeset/4","doc":"","ref":"Bonfire.Posts.html#changeset/4"},{"type":"function","title":"Bonfire.Posts.count_total/0","doc":"","ref":"Bonfire.Posts.html#count_total/0"},{"type":"function","title":"Bonfire.Posts.delete/2","doc":"You should call `Objects.delete/2` instead","ref":"Bonfire.Posts.html#delete/2"},{"type":"function","title":"Bonfire.Posts.draft/2","doc":"","ref":"Bonfire.Posts.html#draft/2"},{"type":"function","title":"Bonfire.Posts.federation_module/0","doc":"","ref":"Bonfire.Posts.html#federation_module/0"},{"type":"function","title":"Bonfire.Posts.filter/3","doc":"","ref":"Bonfire.Posts.html#filter/3"},{"type":"function","title":"Bonfire.Posts.indexing_object_format/2","doc":"","ref":"Bonfire.Posts.html#indexing_object_format/2"},{"type":"function","title":"Bonfire.Posts.list_by/2","doc":"List posts created by the user and which are in their outbox, which are not replies","ref":"Bonfire.Posts.html#list_by/2"},{"type":"function","title":"Bonfire.Posts.list_paginated/2","doc":"List posts with pagination","ref":"Bonfire.Posts.html#list_paginated/2"},{"type":"function","title":"Bonfire.Posts.prepare_post_attrs/1","doc":"","ref":"Bonfire.Posts.html#prepare_post_attrs/1"},{"type":"function","title":"Bonfire.Posts.publish/1","doc":"","ref":"Bonfire.Posts.html#publish/1"},{"type":"function","title":"Bonfire.Posts.query/2","doc":"","ref":"Bonfire.Posts.html#query/2"},{"type":"function","title":"Bonfire.Posts.query_module/0","doc":"","ref":"Bonfire.Posts.html#query_module/0"},{"type":"function","title":"Bonfire.Posts.query_paginated/2","doc":"Query posts with pagination","ref":"Bonfire.Posts.html#query_paginated/2"},{"type":"function","title":"Bonfire.Posts.read/2","doc":"","ref":"Bonfire.Posts.html#read/2"},{"type":"function","title":"Bonfire.Posts.run_epic/3","doc":"","ref":"Bonfire.Posts.html#run_epic/3"},{"type":"function","title":"Bonfire.Posts.schema_module/0","doc":"","ref":"Bonfire.Posts.html#schema_module/0"},{"type":"module","title":"Bonfire.Posts.Acts.Posts.Publish","doc":"Creates a changeset for publishing a post\n\nEpic Options:\n * `:current_user` - user that will create the post, required.\n * `:post_attrs` (configurable) - attrs to create the post from, required.\n * `:post_id` (configurable) - id to use for the created post (handy for creating\n activitypub objects with an id representing their reported creation time)\n\nAct Options:\n * `:id` - epic options key to find an id to force override with at, default: `:post_id`\n * `:as` - key to assign changeset to, default: `:post`.\n * `:attrs` - epic options key to find the attributes at, default: `:post_attrs`.","ref":"Bonfire.Posts.Acts.Posts.Publish.html"},{"type":"module","title":"Bonfire.Posts.Fake","doc":"","ref":"Bonfire.Posts.Fake.html"},{"type":"function","title":"Bonfire.Posts.Fake.fake_comment!/4","doc":"","ref":"Bonfire.Posts.Fake.html#fake_comment!/4"},{"type":"function","title":"Bonfire.Posts.Fake.fake_post!/4","doc":"","ref":"Bonfire.Posts.Fake.html#fake_post!/4"},{"type":"function","title":"Bonfire.Posts.Fake.fake_remote_user!/0","doc":"","ref":"Bonfire.Posts.Fake.html#fake_remote_user!/0"},{"type":"module","title":"Bonfire.Posts.Integration","doc":"","ref":"Bonfire.Posts.Integration.html"},{"type":"function","title":"Bonfire.Posts.Integration.mailer/0","doc":"","ref":"Bonfire.Posts.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Posts.Integration.repo/0","doc":"","ref":"Bonfire.Posts.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Posts.LiveHandler","doc":"","ref":"Bonfire.Posts.LiveHandler.html"},{"type":"function","title":"Bonfire.Posts.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Posts.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Posts.LiveHandler.post_changeset/2","doc":"","ref":"Bonfire.Posts.LiveHandler.html#post_changeset/2"},{"type":"macro","title":"Bonfire.Posts.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Posts.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Posts.LiveHandler.write_feedback/2","doc":"","ref":"Bonfire.Posts.LiveHandler.html#write_feedback/2"},{"type":"module","title":"Bonfire.RuntimeConfig","doc":"","ref":"Bonfire.RuntimeConfig.html"},{"type":"function","title":"Bonfire.RuntimeConfig.config/0","doc":"NOTE: you can override this default config in your app's runtime.exs, by placing similarly-named config keys below the `Bonfire.Common.Config.LoadExtensionsConfig.load_configs` line","ref":"Bonfire.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Search","doc":"","ref":"Bonfire.Search.html"},{"type":"function","title":"Bonfire.Search.adapter/0","doc":"","ref":"Bonfire.Search.html#adapter/0"},{"type":"function","title":"Bonfire.Search.facet_from_map/1","doc":"","ref":"Bonfire.Search.html#facet_from_map/1"},{"type":"function","title":"Bonfire.Search.public_index/0","doc":"","ref":"Bonfire.Search.html#public_index/0"},{"type":"function","title":"Bonfire.Search.search/2","doc":"","ref":"Bonfire.Search.html#search/2"},{"type":"function","title":"Bonfire.Search.search/4","doc":"","ref":"Bonfire.Search.html#search/4"},{"type":"function","title":"Bonfire.Search.search_by_type/2","doc":"","ref":"Bonfire.Search.html#search_by_type/2"},{"type":"module","title":"Bonfire.Search.Acts.Queue","doc":"An act that enqueues publish/update/delete requests to meilisearch via an oban job queue.","ref":"Bonfire.Search.Acts.Queue.html"},{"type":"function","title":"Bonfire.Search.Acts.Queue.maybe_indexable_object/2","doc":"","ref":"Bonfire.Search.Acts.Queue.html#maybe_indexable_object/2"},{"type":"function","title":"Bonfire.Search.Acts.Queue.maybe_unindex/1","doc":"","ref":"Bonfire.Search.Acts.Queue.html#maybe_unindex/1"},{"type":"function","title":"Bonfire.Search.Acts.Queue.prepare_object/1","doc":"","ref":"Bonfire.Search.Acts.Queue.html#prepare_object/1"},{"type":"module","title":"Bonfire.Search.Fuzzy","doc":"","ref":"Bonfire.Search.Fuzzy.html"},{"type":"function","title":"Bonfire.Search.Fuzzy.do_search/4","doc":"","ref":"Bonfire.Search.Fuzzy.html#do_search/4"},{"type":"function","title":"Bonfire.Search.Fuzzy.search/4","doc":"","ref":"Bonfire.Search.Fuzzy.html#search/4"},{"type":"function","title":"Bonfire.Search.Fuzzy.search_filtered/2","doc":"","ref":"Bonfire.Search.Fuzzy.html#search_filtered/2"},{"type":"module","title":"Bonfire.Search.HTTP","doc":"","ref":"Bonfire.Search.HTTP.html"},{"type":"function","title":"Bonfire.Search.HTTP.http_adapter/0","doc":"","ref":"Bonfire.Search.HTTP.html#http_adapter/0"},{"type":"function","title":"Bonfire.Search.HTTP.http_error/5","doc":"","ref":"Bonfire.Search.HTTP.html#http_error/5"},{"type":"function","title":"Bonfire.Search.HTTP.http_request/4","doc":"","ref":"Bonfire.Search.HTTP.html#http_request/4"},{"type":"module","title":"Bonfire.Search.Indexer","doc":"","ref":"Bonfire.Search.Indexer.html"},{"type":"function","title":"Bonfire.Search.Indexer.host/1","doc":"","ref":"Bonfire.Search.Indexer.html#host/1"},{"type":"function","title":"Bonfire.Search.Indexer.index_public_object/1","doc":"","ref":"Bonfire.Search.Indexer.html#index_public_object/1"},{"type":"function","title":"Bonfire.Search.Indexer.init_index/2","doc":"","ref":"Bonfire.Search.Indexer.html#init_index/2"},{"type":"function","title":"Bonfire.Search.Indexer.maybe_delete_object/2","doc":"","ref":"Bonfire.Search.Indexer.html#maybe_delete_object/2"},{"type":"function","title":"Bonfire.Search.Indexer.maybe_index_object/1","doc":"","ref":"Bonfire.Search.Indexer.html#maybe_index_object/1"},{"type":"function","title":"Bonfire.Search.Indexer.maybe_indexable_and_discoverable/2","doc":"","ref":"Bonfire.Search.Indexer.html#maybe_indexable_and_discoverable/2"},{"type":"function","title":"Bonfire.Search.Indexer.maybe_indexable_object/1","doc":"","ref":"Bonfire.Search.Indexer.html#maybe_indexable_object/1"},{"type":"module","title":"Bonfire.Search.LiveHandler","doc":"","ref":"Bonfire.Search.LiveHandler.html"},{"type":"function","title":"Bonfire.Search.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Search.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Search.LiveHandler.live_search/4","doc":"","ref":"Bonfire.Search.LiveHandler.html#live_search/4"},{"type":"macro","title":"Bonfire.Search.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Search.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Search.Meili","doc":"","ref":"Bonfire.Search.Meili.html"},{"type":"function","title":"Bonfire.Search.Meili.api/4","doc":"","ref":"Bonfire.Search.Meili.html#api/4"},{"type":"function","title":"Bonfire.Search.Meili.create_index/2","doc":"","ref":"Bonfire.Search.Meili.html#create_index/2"},{"type":"function","title":"Bonfire.Search.Meili.delete/3","doc":"","ref":"Bonfire.Search.Meili.html#delete/3"},{"type":"function","title":"Bonfire.Search.Meili.get/1","doc":"","ref":"Bonfire.Search.Meili.html#get/1"},{"type":"function","title":"Bonfire.Search.Meili.get/3","doc":"","ref":"Bonfire.Search.Meili.html#get/3"},{"type":"function","title":"Bonfire.Search.Meili.index_exists/1","doc":"","ref":"Bonfire.Search.Meili.html#index_exists/1"},{"type":"function","title":"Bonfire.Search.Meili.list_facets/1","doc":"","ref":"Bonfire.Search.Meili.html#list_facets/1"},{"type":"function","title":"Bonfire.Search.Meili.patch/3","doc":"","ref":"Bonfire.Search.Meili.html#patch/3"},{"type":"function","title":"Bonfire.Search.Meili.post/3","doc":"","ref":"Bonfire.Search.Meili.html#post/3"},{"type":"function","title":"Bonfire.Search.Meili.put/3","doc":"","ref":"Bonfire.Search.Meili.html#put/3"},{"type":"function","title":"Bonfire.Search.Meili.search/2","doc":"","ref":"Bonfire.Search.Meili.html#search/2"},{"type":"function","title":"Bonfire.Search.Meili.set_facets/2","doc":"","ref":"Bonfire.Search.Meili.html#set_facets/2"},{"type":"function","title":"Bonfire.Search.Meili.set_searchable_fields/2","doc":"","ref":"Bonfire.Search.Meili.html#set_searchable_fields/2"},{"type":"function","title":"Bonfire.Search.Meili.settings/2","doc":"","ref":"Bonfire.Search.Meili.html#settings/2"},{"type":"module","title":"Bonfire.Search.RuntimeConfig","doc":"","ref":"Bonfire.Search.RuntimeConfig.html"},{"type":"function","title":"Bonfire.Search.RuntimeConfig.config/0","doc":"","ref":"Bonfire.Search.RuntimeConfig.html#config/0"},{"type":"function","title":"Bonfire.Search.RuntimeConfig.config_module/0","doc":"","ref":"Bonfire.Search.RuntimeConfig.html#config_module/0"},{"type":"module","title":"Bonfire.Search.Stopwords","doc":"Handles matching of needs & offers","ref":"Bonfire.Search.Stopwords.html"},{"type":"function","title":"Bonfire.Search.Stopwords.filter/2","doc":"Filters out pre-defined stop words.","ref":"Bonfire.Search.Stopwords.html#filter/2"},{"type":"function","title":"Bonfire.Search.Stopwords.split_sentences/1","doc":"","ref":"Bonfire.Search.Stopwords.html#split_sentences/1"},{"type":"function","title":"Bonfire.Search.Stopwords.split_words/1","doc":"","ref":"Bonfire.Search.Stopwords.html#split_words/1"},{"type":"function","title":"Bonfire.Search.Stopwords.stop_words/1","doc":"","ref":"Bonfire.Search.Stopwords.html#stop_words/1"},{"type":"module","title":"Bonfire.Search.Web.Routes","doc":"","ref":"Bonfire.Search.Web.Routes.html"},{"type":"function","title":"Bonfire.Search.Web.Routes.declare_routes/0","doc":"","ref":"Bonfire.Search.Web.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.Seeder","doc":"A way to have data seeds that work similarly to migrations.\n\nTo generate a new seed: `mix phil_columns.gen.seed my_seed_name` will create a new module in `priv/repo/seeds`\n\nTo actually insert the seeds into your app, if that's not configured to be done automatically in your mix aliases, run `mix phil_columns.seed`\n\nTo roll-back: `mix phil_columns.rollback`","ref":"Bonfire.Seeder.html"},{"type":"module","title":"Bonfire.Social.APActivities","doc":"","ref":"Bonfire.Social.APActivities.html"},{"type":"function","title":"Bonfire.Social.APActivities.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.APActivities.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.APActivities.create/4","doc":"","ref":"Bonfire.Social.APActivities.html#create/4"},{"type":"function","title":"Bonfire.Social.APActivities.insert/3","doc":"","ref":"Bonfire.Social.APActivities.html#insert/3"},{"type":"function","title":"Bonfire.Social.APActivities.maybe_attach_video_oembed/3","doc":"","ref":"Bonfire.Social.APActivities.html#maybe_attach_video_oembed/3"},{"type":"module","title":"Bonfire.Social.Activities","doc":"","ref":"Bonfire.Social.Activities.html"},{"type":"function","title":"Bonfire.Social.Activities.activity_preloads/2","doc":"","ref":"Bonfire.Social.Activities.html#activity_preloads/2"},{"type":"function","title":"Bonfire.Social.Activities.activity_preloads/3","doc":"","ref":"Bonfire.Social.Activities.html#activity_preloads/3"},{"type":"function","title":"Bonfire.Social.Activities.activity_under_object/1","doc":"","ref":"Bonfire.Social.Activities.html#activity_under_object/1"},{"type":"function","title":"Bonfire.Social.Activities.activity_under_object/2","doc":"","ref":"Bonfire.Social.Activities.html#activity_under_object/2"},{"type":"function","title":"Bonfire.Social.Activities.activity_with_object_from_assigns/1","doc":"","ref":"Bonfire.Social.Activities.html#activity_with_object_from_assigns/1"},{"type":"function","title":"Bonfire.Social.Activities.all_verb_names/0","doc":"Outputs the names all object verbs, for the purpose of adding to the localisation strings, as long as the output is piped through to localise_strings/1 at compile time.","ref":"Bonfire.Social.Activities.html#all_verb_names/0"},{"type":"function","title":"Bonfire.Social.Activities.all_verb_names_extra/0","doc":"","ref":"Bonfire.Social.Activities.html#all_verb_names_extra/0"},{"type":"function","title":"Bonfire.Social.Activities.as_permitted_for/3","doc":"","ref":"Bonfire.Social.Activities.html#as_permitted_for/3"},{"type":"function","title":"Bonfire.Social.Activities.build_assoc/3","doc":"","ref":"Bonfire.Social.Activities.html#build_assoc/3"},{"type":"function","title":"Bonfire.Social.Activities.build_assoc/4","doc":"","ref":"Bonfire.Social.Activities.html#build_assoc/4"},{"type":"function","title":"Bonfire.Social.Activities.by_subject_verb_object_q/3","doc":"","ref":"Bonfire.Social.Activities.html#by_subject_verb_object_q/3"},{"type":"function","title":"Bonfire.Social.Activities.cast/4","doc":"","ref":"Bonfire.Social.Activities.html#cast/4"},{"type":"function","title":"Bonfire.Social.Activities.count_total/0","doc":"","ref":"Bonfire.Social.Activities.html#count_total/0"},{"type":"function","title":"Bonfire.Social.Activities.create/4","doc":"Create an Activity\nNOTE: you will usually want to use `cast/3` instead","ref":"Bonfire.Social.Activities.html#create/4"},{"type":"function","title":"Bonfire.Social.Activities.delete/1","doc":"Delete activities, using specific filters","ref":"Bonfire.Social.Activities.html#delete/1"},{"type":"function","title":"Bonfire.Social.Activities.delete_by_subject_verb_object/3","doc":"Delete an activity (usage by things like unlike)","ref":"Bonfire.Social.Activities.html#delete_by_subject_verb_object/3"},{"type":"function","title":"Bonfire.Social.Activities.delete_object/1","doc":"","ref":"Bonfire.Social.Activities.html#delete_object/1"},{"type":"function","title":"Bonfire.Social.Activities.fetch_cursor_value_fun/2","doc":"","ref":"Bonfire.Social.Activities.html#fetch_cursor_value_fun/2"},{"type":"function","title":"Bonfire.Social.Activities.get/2","doc":"Get an activity by its ID","ref":"Bonfire.Social.Activities.html#get/2"},{"type":"function","title":"Bonfire.Social.Activities.load_object/2","doc":"","ref":"Bonfire.Social.Activities.html#load_object/2"},{"type":"function","title":"Bonfire.Social.Activities.maybe_join_creator/2","doc":"query optimisation: only includes the subject if different from subject or current_user","ref":"Bonfire.Social.Activities.html#maybe_join_creator/2"},{"type":"function","title":"Bonfire.Social.Activities.maybe_join_subject/2","doc":"","ref":"Bonfire.Social.Activities.html#maybe_join_subject/2"},{"type":"function","title":"Bonfire.Social.Activities.maybe_remove_for_deleters_feeds/1","doc":"","ref":"Bonfire.Social.Activities.html#maybe_remove_for_deleters_feeds/1"},{"type":"function","title":"Bonfire.Social.Activities.object_from_activity/1","doc":"","ref":"Bonfire.Social.Activities.html#object_from_activity/1"},{"type":"function","title":"Bonfire.Social.Activities.object_preload_activity/2","doc":"","ref":"Bonfire.Social.Activities.html#object_preload_activity/2"},{"type":"function","title":"Bonfire.Social.Activities.object_preload_create_activity/1","doc":"","ref":"Bonfire.Social.Activities.html#object_preload_create_activity/1"},{"type":"function","title":"Bonfire.Social.Activities.object_under_activity/2","doc":"","ref":"Bonfire.Social.Activities.html#object_under_activity/2"},{"type":"function","title":"Bonfire.Social.Activities.order_cursor_fields/2","doc":"","ref":"Bonfire.Social.Activities.html#order_cursor_fields/2"},{"type":"function","title":"Bonfire.Social.Activities.order_pagination_opts/2","doc":"","ref":"Bonfire.Social.Activities.html#order_pagination_opts/2"},{"type":"function","title":"Bonfire.Social.Activities.put_assoc/3","doc":"","ref":"Bonfire.Social.Activities.html#put_assoc/3"},{"type":"function","title":"Bonfire.Social.Activities.put_assoc/4","doc":"","ref":"Bonfire.Social.Activities.html#put_assoc/4"},{"type":"function","title":"Bonfire.Social.Activities.query/2","doc":"","ref":"Bonfire.Social.Activities.html#query/2"},{"type":"function","title":"Bonfire.Social.Activities.query_module/0","doc":"","ref":"Bonfire.Social.Activities.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Activities.query_object_preload_activity/4","doc":"","ref":"Bonfire.Social.Activities.html#query_object_preload_activity/4"},{"type":"function","title":"Bonfire.Social.Activities.query_object_preload_create_activity/2","doc":"","ref":"Bonfire.Social.Activities.html#query_object_preload_create_activity/2"},{"type":"function","title":"Bonfire.Social.Activities.query_order/3","doc":"","ref":"Bonfire.Social.Activities.html#query_order/3"},{"type":"function","title":"Bonfire.Social.Activities.read/2","doc":"Get an activity by its object ID (usually a create activity)","ref":"Bonfire.Social.Activities.html#read/2"},{"type":"function","title":"Bonfire.Social.Activities.read_query/2","doc":"","ref":"Bonfire.Social.Activities.html#read_query/2"},{"type":"function","title":"Bonfire.Social.Activities.reply_to_as_permitted_for/3","doc":"","ref":"Bonfire.Social.Activities.html#reply_to_as_permitted_for/3"},{"type":"function","title":"Bonfire.Social.Activities.schema_module/0","doc":"","ref":"Bonfire.Social.Activities.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Activities.verb_congugate/1","doc":"","ref":"Bonfire.Social.Activities.html#verb_congugate/1"},{"type":"function","title":"Bonfire.Social.Activities.verb_display/1","doc":"","ref":"Bonfire.Social.Activities.html#verb_display/1"},{"type":"function","title":"Bonfire.Social.Activities.verb_id/1","doc":"","ref":"Bonfire.Social.Activities.html#verb_id/1"},{"type":"function","title":"Bonfire.Social.Activities.verb_maybe_modify/2","doc":"","ref":"Bonfire.Social.Activities.html#verb_maybe_modify/2"},{"type":"function","title":"Bonfire.Social.Activities.verb_name/1","doc":"","ref":"Bonfire.Social.Activities.html#verb_name/1"},{"type":"module","title":"Bonfire.Social.Acts.Activity","doc":"","ref":"Bonfire.Social.Acts.Activity.html"},{"type":"function","title":"Bonfire.Social.Acts.Activity.run/2","doc":"","ref":"Bonfire.Social.Acts.Activity.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Activity.UnderObject","doc":"","ref":"Bonfire.Social.Acts.Activity.UnderObject.html"},{"type":"function","title":"Bonfire.Social.Acts.Activity.UnderObject.run/2","doc":"","ref":"Bonfire.Social.Acts.Activity.UnderObject.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Federate","doc":"An Act that translates a post or changeset into some jobs for the\nAP publish worker. Handles creation, update and delete\n\nAct Options:\n * `on` - key in assigns to find the post, default: `:post`\n * `as` - key in assigns to assign indexable object, default: `:post_index`","ref":"Bonfire.Social.Acts.Federate.html"},{"type":"function","title":"Bonfire.Social.Acts.Federate.run/2","doc":"","ref":"Bonfire.Social.Acts.Federate.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Feeds","doc":"NOT USED - Finds a list of appropriate feeds into which to post.\n\nEpic Options:\n * `:current_user` - current user. required.\n * `:boundary` - preset string or custom boundaries. default: nil\n\nAct Options:\n * `:changeset` - key in assigns to find changeset, required","ref":"Bonfire.Social.Acts.Feeds.html"},{"type":"function","title":"Bonfire.Social.Acts.Feeds.run/2","doc":"","ref":"Bonfire.Social.Acts.Feeds.html#run/2"},{"type":"function","title":"Bonfire.Social.Acts.Feeds.thread_id/1","doc":"","ref":"Bonfire.Social.Acts.Feeds.html#thread_id/1"},{"type":"module","title":"Bonfire.Social.Acts.LivePush","doc":"","ref":"Bonfire.Social.Acts.LivePush.html"},{"type":"function","title":"Bonfire.Social.Acts.LivePush.run/2","doc":"","ref":"Bonfire.Social.Acts.LivePush.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Objects.Delete","doc":"Delete something + specified associations with a changeset","ref":"Bonfire.Social.Acts.Objects.Delete.html"},{"type":"module","title":"Bonfire.Social.Acts.PostContents","doc":"","ref":"Bonfire.Social.Acts.PostContents.html"},{"type":"function","title":"Bonfire.Social.Acts.PostContents.run/2","doc":"","ref":"Bonfire.Social.Acts.PostContents.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Sensitivity","doc":"","ref":"Bonfire.Social.Acts.Sensitivity.html"},{"type":"function","title":"Bonfire.Social.Acts.Sensitivity.run/2","doc":"","ref":"Bonfire.Social.Acts.Sensitivity.html#run/2"},{"type":"module","title":"Bonfire.Social.Acts.Threaded","doc":"","ref":"Bonfire.Social.Acts.Threaded.html"},{"type":"function","title":"Bonfire.Social.Acts.Threaded.run/2","doc":"","ref":"Bonfire.Social.Acts.Threaded.html#run/2"},{"type":"module","title":"Bonfire.Social.Bookmarks","doc":"","ref":"Bonfire.Social.Bookmarks.html"},{"type":"function","title":"Bonfire.Social.Bookmarks.bookmark/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#bookmark/3"},{"type":"function","title":"Bonfire.Social.Bookmarks.bookmarked?/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#bookmarked?/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.by_bookmarked/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#by_bookmarked/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.by_bookmarker/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#by_bookmarker/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.count/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#count/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.get/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#get/3"},{"type":"function","title":"Bonfire.Social.Bookmarks.get!/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#get!/3"},{"type":"function","title":"Bonfire.Social.Bookmarks.insert/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#insert/3"},{"type":"function","title":"Bonfire.Social.Bookmarks.list_by/2","doc":"List bookmarks by a user","ref":"Bonfire.Social.Bookmarks.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.list_my/1","doc":"List the current user's bookmarks","ref":"Bonfire.Social.Bookmarks.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Bookmarks.list_of/2","doc":"List bookmarkers of something(s)","ref":"Bonfire.Social.Bookmarks.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.query/2","doc":"","ref":"Bonfire.Social.Bookmarks.html#query/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.query_module/0","doc":"","ref":"Bonfire.Social.Bookmarks.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Bookmarks.schema_module/0","doc":"","ref":"Bonfire.Social.Bookmarks.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Bookmarks.unbookmark/3","doc":"","ref":"Bonfire.Social.Bookmarks.html#unbookmark/3"},{"type":"module","title":"Bonfire.Social.Bookmarks.LiveHandler","doc":"","ref":"Bonfire.Social.Bookmarks.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Bookmarks.LiveHandler.bookmarker_count/1","doc":"","ref":"Bonfire.Social.Bookmarks.LiveHandler.html#bookmarker_count/1"},{"type":"function","title":"Bonfire.Social.Bookmarks.LiveHandler.do_bookmark/3","doc":"","ref":"Bonfire.Social.Bookmarks.LiveHandler.html#do_bookmark/3"},{"type":"function","title":"Bonfire.Social.Bookmarks.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Bookmarks.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Social.Bookmarks.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Bookmarks.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.LiveHandler.update_many/2","doc":"","ref":"Bonfire.Social.Bookmarks.LiveHandler.html#update_many/2"},{"type":"function","title":"Bonfire.Social.Bookmarks.LiveHandler.update_many_opts/1","doc":"","ref":"Bonfire.Social.Bookmarks.LiveHandler.html#update_many_opts/1"},{"type":"module","title":"Bonfire.Social.Boosts","doc":"","ref":"Bonfire.Social.Boosts.html"},{"type":"function","title":"Bonfire.Social.Boosts.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Boosts.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Boosts.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Boosts.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Boosts.boost/3","doc":"","ref":"Bonfire.Social.Boosts.html#boost/3"},{"type":"function","title":"Bonfire.Social.Boosts.boosted?/2","doc":"","ref":"Bonfire.Social.Boosts.html#boosted?/2"},{"type":"function","title":"Bonfire.Social.Boosts.count/2","doc":"","ref":"Bonfire.Social.Boosts.html#count/2"},{"type":"function","title":"Bonfire.Social.Boosts.date_last_boosted/2","doc":"","ref":"Bonfire.Social.Boosts.html#date_last_boosted/2"},{"type":"function","title":"Bonfire.Social.Boosts.federation_module/0","doc":"","ref":"Bonfire.Social.Boosts.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Boosts.get/3","doc":"","ref":"Bonfire.Social.Boosts.html#get/3"},{"type":"function","title":"Bonfire.Social.Boosts.get!/3","doc":"","ref":"Bonfire.Social.Boosts.html#get!/3"},{"type":"function","title":"Bonfire.Social.Boosts.list_by/2","doc":"List boosts by the user","ref":"Bonfire.Social.Boosts.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Boosts.list_my/1","doc":"List current user's boosts","ref":"Bonfire.Social.Boosts.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Boosts.list_of/2","doc":"List boost of an object","ref":"Bonfire.Social.Boosts.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Boosts.list_paginated/2","doc":"","ref":"Bonfire.Social.Boosts.html#list_paginated/2"},{"type":"function","title":"Bonfire.Social.Boosts.maybe_boost/3","doc":"","ref":"Bonfire.Social.Boosts.html#maybe_boost/3"},{"type":"function","title":"Bonfire.Social.Boosts.query/2","doc":"","ref":"Bonfire.Social.Boosts.html#query/2"},{"type":"function","title":"Bonfire.Social.Boosts.query_module/0","doc":"","ref":"Bonfire.Social.Boosts.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Boosts.schema_module/0","doc":"","ref":"Bonfire.Social.Boosts.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Boosts.unboost/3","doc":"","ref":"Bonfire.Social.Boosts.html#unboost/3"},{"type":"module","title":"Bonfire.Social.Boosts.LiveHandler","doc":"","ref":"Bonfire.Social.Boosts.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Boosts.LiveHandler.do_boost/3","doc":"","ref":"Bonfire.Social.Boosts.LiveHandler.html#do_boost/3"},{"type":"function","title":"Bonfire.Social.Boosts.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Boosts.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Social.Boosts.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Boosts.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Social.Boosts.LiveHandler.update_many/2","doc":"","ref":"Bonfire.Social.Boosts.LiveHandler.html#update_many/2"},{"type":"function","title":"Bonfire.Social.Boosts.LiveHandler.update_many_opts/1","doc":"","ref":"Bonfire.Social.Boosts.LiveHandler.html#update_many_opts/1"},{"type":"module","title":"Bonfire.Social.Edges","doc":"","ref":"Bonfire.Social.Edges.html"},{"type":"function","title":"Bonfire.Social.Edges.changeset/5","doc":"","ref":"Bonfire.Social.Edges.html#changeset/5"},{"type":"function","title":"Bonfire.Social.Edges.changeset_base/4","doc":"","ref":"Bonfire.Social.Edges.html#changeset_base/4"},{"type":"function","title":"Bonfire.Social.Edges.count/3","doc":"","ref":"Bonfire.Social.Edges.html#count/3"},{"type":"function","title":"Bonfire.Social.Edges.count_for_subject/4","doc":"","ref":"Bonfire.Social.Edges.html#count_for_subject/4"},{"type":"function","title":"Bonfire.Social.Edges.delete_by_both/3","doc":"","ref":"Bonfire.Social.Edges.html#delete_by_both/3"},{"type":"function","title":"Bonfire.Social.Edges.delete_by_object/1","doc":"","ref":"Bonfire.Social.Edges.html#delete_by_object/1"},{"type":"function","title":"Bonfire.Social.Edges.delete_by_subject/1","doc":"","ref":"Bonfire.Social.Edges.html#delete_by_subject/1"},{"type":"function","title":"Bonfire.Social.Edges.edge_module_query/2","doc":"","ref":"Bonfire.Social.Edges.html#edge_module_query/2"},{"type":"function","title":"Bonfire.Social.Edges.exists?/4","doc":"","ref":"Bonfire.Social.Edges.html#exists?/4"},{"type":"function","title":"Bonfire.Social.Edges.filters_from_opts/1","doc":"","ref":"Bonfire.Social.Edges.html#filters_from_opts/1"},{"type":"function","title":"Bonfire.Social.Edges.get/4","doc":"","ref":"Bonfire.Social.Edges.html#get/4"},{"type":"function","title":"Bonfire.Social.Edges.get!/4","doc":"","ref":"Bonfire.Social.Edges.html#get!/4"},{"type":"function","title":"Bonfire.Social.Edges.insert/3","doc":"","ref":"Bonfire.Social.Edges.html#insert/3"},{"type":"function","title":"Bonfire.Social.Edges.insert/5","doc":"","ref":"Bonfire.Social.Edges.html#insert/5"},{"type":"function","title":"Bonfire.Social.Edges.last/4","doc":"retrieves the last edge of a given type, subject, and object from the database","ref":"Bonfire.Social.Edges.html#last/4"},{"type":"function","title":"Bonfire.Social.Edges.last_date/4","doc":"retrieves the date of the last edge of a given type, subject, and object from the database","ref":"Bonfire.Social.Edges.html#last_date/4"},{"type":"function","title":"Bonfire.Social.Edges.put_edge_assoc/3","doc":"","ref":"Bonfire.Social.Edges.html#put_edge_assoc/3"},{"type":"function","title":"Bonfire.Social.Edges.put_edge_assoc/4","doc":"","ref":"Bonfire.Social.Edges.html#put_edge_assoc/4"},{"type":"function","title":"Bonfire.Social.Edges.query/2","doc":"","ref":"Bonfire.Social.Edges.html#query/2"},{"type":"function","title":"Bonfire.Social.Edges.query_parent/3","doc":"","ref":"Bonfire.Social.Edges.html#query_parent/3"},{"type":"module","title":"Bonfire.Social.Fake","doc":"","ref":"Bonfire.Social.Fake.html"},{"type":"function","title":"Bonfire.Social.Fake.fake_remote_user!/0","doc":"","ref":"Bonfire.Social.Fake.html#fake_remote_user!/0"},{"type":"module","title":"Bonfire.Social.FeedActivities","doc":"","ref":"Bonfire.Social.FeedActivities.html"},{"type":"function","title":"Bonfire.Social.FeedActivities.cast/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#cast/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.cast/3","doc":"","ref":"Bonfire.Social.FeedActivities.html#cast/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.count/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#count/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.count_subjects/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#count_subjects/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.count_total/0","doc":"","ref":"Bonfire.Social.FeedActivities.html#count_total/0"},{"type":"function","title":"Bonfire.Social.FeedActivities.delete/1","doc":"Remove activities from feeds, using specific filters","ref":"Bonfire.Social.FeedActivities.html#delete/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.delete/2","doc":"Remove one or more activities from all feeds","ref":"Bonfire.Social.FeedActivities.html#delete/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed/2","doc":"Gets a feed by id or ids or a thing/things containing an id/ids.","ref":"Bonfire.Social.FeedActivities.html#feed/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_contains?/3","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_contains?/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_ids_and_opts/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_ids_and_opts/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_many_paginated/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_many_paginated/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_name/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_name/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_paginated/2","doc":"Return a page of Feed Activities (reverse chronological) + pagination metadata\nTODO: consolidate with `feed/2`","ref":"Bonfire.Social.FeedActivities.html#feed_paginated/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_paginated/3","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_paginated/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.feed_with_object/3","doc":"","ref":"Bonfire.Social.FeedActivities.html#feed_with_object/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.feeds_for_activity/1","doc":"Gets a list of feed ids this activity was published to from the database.\n\nCurrently only used by the ActivityPub integration.","ref":"Bonfire.Social.FeedActivities.html#feeds_for_activity/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.filters_from_opts/1","doc":"","ref":"Bonfire.Social.FeedActivities.html#filters_from_opts/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.get_feed_ids/1","doc":"Computes the feed ids for `get_feed_publishes/2`.\n\nOptions:\n* `:inbox` - list of objects whose inbox we should attempt to insert into.\n* `:outbox` - list of objects whose outbox we should attempt to insert into.\n* `:notifications` - list of objects whose notifications we should attempt to insert into.\n* `:feeds` - list of ids (or objects containing IDs of feeds to post to.","ref":"Bonfire.Social.FeedActivities.html#get_feed_ids/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.get_feed_publishes/1","doc":"Creates the underlying data for `put_feed_publishes/2`.","ref":"Bonfire.Social.FeedActivities.html#get_feed_publishes/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.mark_all_seen/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#mark_all_seen/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.maybe_feed_publish/5","doc":"Creates a new local activity or takes an existing one and publishes to specified feeds","ref":"Bonfire.Social.FeedActivities.html#maybe_feed_publish/5"},{"type":"function","title":"Bonfire.Social.FeedActivities.my_feed/2","doc":"Gets a user's home feed, a combination of all feeds the user is subscribed to.","ref":"Bonfire.Social.FeedActivities.html#my_feed/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.publish/4","doc":"Creates a new local activity and publishes to appropriate feeds\nTODO: make this re-use the changeset-based code like in Epics instead of duplicating logic (currently it is only used in VF extension anyway)","ref":"Bonfire.Social.FeedActivities.html#publish/4"},{"type":"function","title":"Bonfire.Social.FeedActivities.put_feed_publishes/2","doc":"Arranges for an insert changeset to also publish to feeds related to some objects.\n\nOptions: see `get_feed_ids/1`","ref":"Bonfire.Social.FeedActivities.html#put_feed_publishes/2"},{"type":"function","title":"Bonfire.Social.FeedActivities.query/3","doc":"Return a boundarised query for a feed","ref":"Bonfire.Social.FeedActivities.html#query/3"},{"type":"function","title":"Bonfire.Social.FeedActivities.query_module/0","doc":"","ref":"Bonfire.Social.FeedActivities.html#query_module/0"},{"type":"function","title":"Bonfire.Social.FeedActivities.schema_module/0","doc":"","ref":"Bonfire.Social.FeedActivities.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.FeedActivities.skip_verbs_default/0","doc":"","ref":"Bonfire.Social.FeedActivities.html#skip_verbs_default/0"},{"type":"function","title":"Bonfire.Social.FeedActivities.the_object/1","doc":"","ref":"Bonfire.Social.FeedActivities.html#the_object/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.to_feed_options/1","doc":"","ref":"Bonfire.Social.FeedActivities.html#to_feed_options/1"},{"type":"function","title":"Bonfire.Social.FeedActivities.unseen_count/2","doc":"","ref":"Bonfire.Social.FeedActivities.html#unseen_count/2"},{"type":"module","title":"Bonfire.Social.Feeds","doc":"","ref":"Bonfire.Social.Feeds.html"},{"type":"function","title":"Bonfire.Social.Feeds.admin_notifications/1","doc":"","ref":"Bonfire.Social.Feeds.html#admin_notifications/1"},{"type":"function","title":"Bonfire.Social.Feeds.admins_notifications/0","doc":"","ref":"Bonfire.Social.Feeds.html#admins_notifications/0"},{"type":"function","title":"Bonfire.Social.Feeds.admins_notifications/1","doc":"","ref":"Bonfire.Social.Feeds.html#admins_notifications/1"},{"type":"function","title":"Bonfire.Social.Feeds.do_target_feeds/5","doc":"","ref":"Bonfire.Social.Feeds.html#do_target_feeds/5"},{"type":"function","title":"Bonfire.Social.Feeds.feed_id/2","doc":"","ref":"Bonfire.Social.Feeds.html#feed_id/2"},{"type":"function","title":"Bonfire.Social.Feeds.feed_id!/2","doc":"","ref":"Bonfire.Social.Feeds.html#feed_id!/2"},{"type":"function","title":"Bonfire.Social.Feeds.feed_ids/2","doc":"","ref":"Bonfire.Social.Feeds.html#feed_ids/2"},{"type":"function","title":"Bonfire.Social.Feeds.feed_ids_to_publish/3","doc":"","ref":"Bonfire.Social.Feeds.html#feed_ids_to_publish/3"},{"type":"function","title":"Bonfire.Social.Feeds.feed_ids_to_publish/4","doc":"","ref":"Bonfire.Social.Feeds.html#feed_ids_to_publish/4"},{"type":"function","title":"Bonfire.Social.Feeds.inbox_of_obj_creator/1","doc":"","ref":"Bonfire.Social.Feeds.html#inbox_of_obj_creator/1"},{"type":"function","title":"Bonfire.Social.Feeds.maybe_create_feed/2","doc":"","ref":"Bonfire.Social.Feeds.html#maybe_create_feed/2"},{"type":"function","title":"Bonfire.Social.Feeds.maybe_creator_notification/3","doc":"","ref":"Bonfire.Social.Feeds.html#maybe_creator_notification/3"},{"type":"function","title":"Bonfire.Social.Feeds.maybe_custom_feeds/1","doc":"","ref":"Bonfire.Social.Feeds.html#maybe_custom_feeds/1"},{"type":"function","title":"Bonfire.Social.Feeds.maybe_my_outbox_feed_id/2","doc":"","ref":"Bonfire.Social.Feeds.html#maybe_my_outbox_feed_id/2"},{"type":"function","title":"Bonfire.Social.Feeds.my_feed_id/2","doc":"","ref":"Bonfire.Social.Feeds.html#my_feed_id/2"},{"type":"function","title":"Bonfire.Social.Feeds.my_home_feed_ids/2","doc":"","ref":"Bonfire.Social.Feeds.html#my_home_feed_ids/2"},{"type":"function","title":"Bonfire.Social.Feeds.named_feed_id/2","doc":"","ref":"Bonfire.Social.Feeds.html#named_feed_id/2"},{"type":"function","title":"Bonfire.Social.Feeds.reply_and_or_mentions_notifications_feeds/5","doc":"","ref":"Bonfire.Social.Feeds.html#reply_and_or_mentions_notifications_feeds/5"},{"type":"function","title":"Bonfire.Social.Feeds.schema_module/0","doc":"","ref":"Bonfire.Social.Feeds.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Feeds.target_feeds/3","doc":"","ref":"Bonfire.Social.Feeds.html#target_feeds/3"},{"type":"type","title":"Bonfire.Social.Feeds.feed_name/0","doc":"Names a predefined feed attached to a user","ref":"Bonfire.Social.Feeds.html#t:feed_name/0"},{"type":"module","title":"Bonfire.Social.Feeds.LiveHandler","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.actions_update_many/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#actions_update_many/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.activity_update_many/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#activity_update_many/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.assign_feed/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#assign_feed/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.feed_assigns_maybe_async/4","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#feed_assigns_maybe_async/4"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.feed_default_assigns/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#feed_default_assigns/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.feed_extra_preloads_list/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#feed_extra_preloads_list/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.feed_live_update_many_preloads?/0","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#feed_live_update_many_preloads?/0"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.handle_info/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#handle_info/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.handle_params/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#handle_params/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.insert_feed/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#insert_feed/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.load_user_feed_assigns/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#load_user_feed_assigns/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.load_user_feed_assigns/4","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#load_user_feed_assigns/4"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.object_preloads/0","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#object_preloads/0"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.paginate_feed/4","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#paginate_feed/4"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.paginate_fetch_assign_default/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#paginate_fetch_assign_default/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.paginate_opts/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#paginate_opts/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.preload_activity_and_object_assocs/3","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#preload_activity_and_object_assocs/3"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.remove_activity/1","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#remove_activity/1"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.reply_to_activity/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#reply_to_activity/2"},{"type":"macro","title":"Bonfire.Social.Feeds.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Social.Feeds.LiveHandler.user_feed_assign_or_load_async/4","doc":"","ref":"Bonfire.Social.Feeds.LiveHandler.html#user_feed_assign_or_load_async/4"},{"type":"module","title":"Bonfire.Social.Flags","doc":"","ref":"Bonfire.Social.Flags.html"},{"type":"function","title":"Bonfire.Social.Flags.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Flags.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Flags.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Flags.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Flags.by_flagged/1","doc":"","ref":"Bonfire.Social.Flags.html#by_flagged/1"},{"type":"function","title":"Bonfire.Social.Flags.by_flagger/1","doc":"","ref":"Bonfire.Social.Flags.html#by_flagger/1"},{"type":"function","title":"Bonfire.Social.Flags.federation_module/0","doc":"","ref":"Bonfire.Social.Flags.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Flags.flag/3","doc":"","ref":"Bonfire.Social.Flags.html#flag/3"},{"type":"function","title":"Bonfire.Social.Flags.flagged?/2","doc":"","ref":"Bonfire.Social.Flags.html#flagged?/2"},{"type":"function","title":"Bonfire.Social.Flags.get/3","doc":"","ref":"Bonfire.Social.Flags.html#get/3"},{"type":"function","title":"Bonfire.Social.Flags.get!/3","doc":"","ref":"Bonfire.Social.Flags.html#get!/3"},{"type":"function","title":"Bonfire.Social.Flags.instance_moderators/0","doc":"","ref":"Bonfire.Social.Flags.html#instance_moderators/0"},{"type":"function","title":"Bonfire.Social.Flags.list/1","doc":"","ref":"Bonfire.Social.Flags.html#list/1"},{"type":"function","title":"Bonfire.Social.Flags.list_by/2","doc":"List flags by the user and which are in their outbox","ref":"Bonfire.Social.Flags.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Flags.list_my/1","doc":"List current user's flags, which are in their outbox","ref":"Bonfire.Social.Flags.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Flags.list_of/2","doc":"List flag of an object and which are in a feed","ref":"Bonfire.Social.Flags.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Flags.list_paginated/2","doc":"","ref":"Bonfire.Social.Flags.html#list_paginated/2"},{"type":"function","title":"Bonfire.Social.Flags.list_preloaded/1","doc":"","ref":"Bonfire.Social.Flags.html#list_preloaded/1"},{"type":"function","title":"Bonfire.Social.Flags.moderators/1","doc":"","ref":"Bonfire.Social.Flags.html#moderators/1"},{"type":"function","title":"Bonfire.Social.Flags.query/2","doc":"","ref":"Bonfire.Social.Flags.html#query/2"},{"type":"function","title":"Bonfire.Social.Flags.query_module/0","doc":"","ref":"Bonfire.Social.Flags.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Flags.schema_module/0","doc":"","ref":"Bonfire.Social.Flags.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Flags.unflag/2","doc":"","ref":"Bonfire.Social.Flags.html#unflag/2"},{"type":"module","title":"Bonfire.Social.Flags.LiveHandler","doc":"","ref":"Bonfire.Social.Flags.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Flags.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Flags.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Social.Flags.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Flags.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Social.Graph","doc":"","ref":"Bonfire.Social.Graph.html"},{"type":"function","title":"Bonfire.Social.Graph.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Social.Graph.html#child_spec/1"},{"type":"function","title":"Bonfire.Social.Graph.graph_add/3","doc":"","ref":"Bonfire.Social.Graph.html#graph_add/3"},{"type":"function","title":"Bonfire.Social.Graph.graph_clear/0","doc":"","ref":"Bonfire.Social.Graph.html#graph_clear/0"},{"type":"function","title":"Bonfire.Social.Graph.graph_conn/0","doc":"","ref":"Bonfire.Social.Graph.html#graph_conn/0"},{"type":"function","title":"Bonfire.Social.Graph.graph_distance/2","doc":"","ref":"Bonfire.Social.Graph.html#graph_distance/2"},{"type":"function","title":"Bonfire.Social.Graph.graph_distances/1","doc":"","ref":"Bonfire.Social.Graph.html#graph_distances/1"},{"type":"function","title":"Bonfire.Social.Graph.graph_meta/1","doc":"","ref":"Bonfire.Social.Graph.html#graph_meta/1"},{"type":"function","title":"Bonfire.Social.Graph.graph_query/2","doc":"","ref":"Bonfire.Social.Graph.html#graph_query/2"},{"type":"function","title":"Bonfire.Social.Graph.graph_remove/3","doc":"","ref":"Bonfire.Social.Graph.html#graph_remove/3"},{"type":"function","title":"Bonfire.Social.Graph.init/1","doc":"","ref":"Bonfire.Social.Graph.html#init/1"},{"type":"function","title":"Bonfire.Social.Graph.init_and_load/0","doc":"","ref":"Bonfire.Social.Graph.html#init_and_load/0"},{"type":"function","title":"Bonfire.Social.Graph.load_from_db/0","doc":"","ref":"Bonfire.Social.Graph.html#load_from_db/0"},{"type":"function","title":"Bonfire.Social.Graph.maybe_applications/0","doc":"","ref":"Bonfire.Social.Graph.html#maybe_applications/0"},{"type":"function","title":"Bonfire.Social.Graph.start_link/1","doc":"","ref":"Bonfire.Social.Graph.html#start_link/1"},{"type":"module","title":"Bonfire.Social.Graph.Aliases","doc":"","ref":"Bonfire.Social.Graph.Aliases.html"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.add/3","doc":"Alias someone/something.","ref":"Bonfire.Social.Graph.Aliases.html#add/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.all_by_object/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#all_by_object/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.all_by_subject/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#all_by_subject/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.all_objects_by_subject/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#all_objects_by_subject/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.all_subjects_by_object/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#all_subjects_by_object/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.exists?/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#exists?/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.federation_module/0","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.get/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#get/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.get!/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#get!/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.insert/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#insert/3"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.list_aliased/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#list_aliased/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.list_aliases/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#list_aliases/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.list_my_aliased/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#list_my_aliased/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.list_my_aliases/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#list_my_aliases/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.move/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#move/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.move_following/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#move_following/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.query/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#query/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.query_module/0","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.remove/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#remove/2"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.schema_module/0","doc":"","ref":"Bonfire.Social.Graph.Aliases.html#schema_module/0"},{"type":"module","title":"Bonfire.Social.Graph.Aliases.LiveHandler","doc":"","ref":"Bonfire.Social.Graph.Aliases.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Graph.Aliases.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Graph.Aliases.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Social.Graph.Aliases.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Graph.Aliases.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Social.Graph.Fake","doc":"","ref":"Bonfire.Social.Graph.Fake.html"},{"type":"function","title":"Bonfire.Social.Graph.Fake.fake_follow!/0","doc":"","ref":"Bonfire.Social.Graph.Fake.html#fake_follow!/0"},{"type":"function","title":"Bonfire.Social.Graph.Fake.fake_incoming_follow!/0","doc":"","ref":"Bonfire.Social.Graph.Fake.html#fake_incoming_follow!/0"},{"type":"function","title":"Bonfire.Social.Graph.Fake.fake_outgoing_follow!/0","doc":"","ref":"Bonfire.Social.Graph.Fake.html#fake_outgoing_follow!/0"},{"type":"function","title":"Bonfire.Social.Graph.Fake.fake_remote_user!/0","doc":"","ref":"Bonfire.Social.Graph.Fake.html#fake_remote_user!/0"},{"type":"module","title":"Bonfire.Social.Graph.Follows","doc":"","ref":"Bonfire.Social.Graph.Follows.html"},{"type":"function","title":"Bonfire.Social.Graph.Follows.accept/2","doc":"Accepts a follow request, publishes to feeds and federates.\nParameter are a Request (or its ID) plus the subject as current_user","ref":"Bonfire.Social.Graph.Follows.html#accept/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.accept_from/2","doc":"Accepts a follow request, publishes to feeds and federates.\nParameters are the requester plus the subject as current_user","ref":"Bonfire.Social.Graph.Follows.html#accept_from/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_by_object/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_by_object/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_by_subject/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_by_subject/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_followed_outboxes/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_followed_outboxes/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_objects_by_subject/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_objects_by_subject/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.all_subjects_by_object/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#all_subjects_by_object/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.federation_module/0","doc":"","ref":"Bonfire.Social.Graph.Follows.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Follows.follow/3","doc":"Follow someone/something. In case of success, publishes to feeds and federates.\n\nIf the user is not permitted to follow the object, or the object is\na remote actor, will instead request to follow.","ref":"Bonfire.Social.Graph.Follows.html#follow/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.following?/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#following?/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.get/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#get/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.get!/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#get!/3"},{"type":"function","title":"Bonfire.Social.Graph.Follows.ignore/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#ignore/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.invalidate_followed_outboxes_cache/1","doc":"","ref":"Bonfire.Social.Graph.Follows.html#invalidate_followed_outboxes_cache/1"},{"type":"function","title":"Bonfire.Social.Graph.Follows.list_followed/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#list_followed/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.list_followers/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#list_followers/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.list_my_followed/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#list_my_followed/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.list_my_followers/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#list_my_followers/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.query/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#query/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.query_module/0","doc":"","ref":"Bonfire.Social.Graph.Follows.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Follows.requested?/2","doc":"","ref":"Bonfire.Social.Graph.Follows.html#requested?/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.schema_module/0","doc":"","ref":"Bonfire.Social.Graph.Follows.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Follows.unfollow/3","doc":"","ref":"Bonfire.Social.Graph.Follows.html#unfollow/3"},{"type":"module","title":"Bonfire.Social.Graph.Follows.LiveHandler","doc":"","ref":"Bonfire.Social.Graph.Follows.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Graph.Follows.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Graph.Follows.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Social.Graph.Follows.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Graph.Follows.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.LiveHandler.update_many/2","doc":"","ref":"Bonfire.Social.Graph.Follows.LiveHandler.html#update_many/2"},{"type":"function","title":"Bonfire.Social.Graph.Follows.LiveHandler.update_many_opts/1","doc":"","ref":"Bonfire.Social.Graph.Follows.LiveHandler.html#update_many_opts/1"},{"type":"module","title":"Bonfire.Social.Graph.Import","doc":"","ref":"Bonfire.Social.Graph.Import.html"},{"type":"function","title":"Bonfire.Social.Graph.Import.blocks_from_csv/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#blocks_from_csv/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.blocks_from_csv_file/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#blocks_from_csv_file/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.follows_from_csv/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#follows_from_csv/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.follows_from_csv_file/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#follows_from_csv_file/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.ghosts_from_csv/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#ghosts_from_csv/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.ghosts_from_csv_file/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#ghosts_from_csv_file/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.import_from_csv_file/3","doc":"","ref":"Bonfire.Social.Graph.Import.html#import_from_csv_file/3"},{"type":"function","title":"Bonfire.Social.Graph.Import.perform/1","doc":"","ref":"Bonfire.Social.Graph.Import.html#perform/1"},{"type":"function","title":"Bonfire.Social.Graph.Import.perform/3","doc":"","ref":"Bonfire.Social.Graph.Import.html#perform/3"},{"type":"function","title":"Bonfire.Social.Graph.Import.silences_from_csv/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#silences_from_csv/2"},{"type":"function","title":"Bonfire.Social.Graph.Import.silences_from_csv_file/2","doc":"","ref":"Bonfire.Social.Graph.Import.html#silences_from_csv_file/2"},{"type":"module","title":"Bonfire.Social.Graph.Integration","doc":"","ref":"Bonfire.Social.Graph.Integration.html"},{"type":"function","title":"Bonfire.Social.Graph.Integration.mailer/0","doc":"","ref":"Bonfire.Social.Graph.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Social.Graph.Integration.repo/0","doc":"","ref":"Bonfire.Social.Graph.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Social.Graph.Requests","doc":"","ref":"Bonfire.Social.Graph.Requests.html"},{"type":"function","title":"Bonfire.Social.Graph.Requests.accept/2","doc":"Request someone/something, and federate it","ref":"Bonfire.Social.Graph.Requests.html#accept/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_by_object/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_by_object/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_by_subject/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_by_subject/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_objects_by_subject/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_objects_by_subject/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_requested_outboxes/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_requested_outboxes/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.all_subjects_by_object/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#all_subjects_by_object/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.exists?/4","doc":"","ref":"Bonfire.Social.Graph.Requests.html#exists?/4"},{"type":"function","title":"Bonfire.Social.Graph.Requests.get/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#get/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.get/4","doc":"","ref":"Bonfire.Social.Graph.Requests.html#get/4"},{"type":"function","title":"Bonfire.Social.Graph.Requests.get!/4","doc":"","ref":"Bonfire.Social.Graph.Requests.html#get!/4"},{"type":"function","title":"Bonfire.Social.Graph.Requests.ignore/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#ignore/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.list_my_requested/1","doc":"","ref":"Bonfire.Social.Graph.Requests.html#list_my_requested/1"},{"type":"function","title":"Bonfire.Social.Graph.Requests.list_my_requesters/1","doc":"","ref":"Bonfire.Social.Graph.Requests.html#list_my_requesters/1"},{"type":"function","title":"Bonfire.Social.Graph.Requests.list_requested/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#list_requested/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.list_requesters/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#list_requesters/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.many/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#many/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.query/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#query/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.query_module/0","doc":"","ref":"Bonfire.Social.Graph.Requests.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Requests.request/4","doc":"Request someone/something, and federate it","ref":"Bonfire.Social.Graph.Requests.html#request/4"},{"type":"function","title":"Bonfire.Social.Graph.Requests.requested/2","doc":"","ref":"Bonfire.Social.Graph.Requests.html#requested/2"},{"type":"function","title":"Bonfire.Social.Graph.Requests.requested?/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#requested?/3"},{"type":"function","title":"Bonfire.Social.Graph.Requests.schema_module/0","doc":"","ref":"Bonfire.Social.Graph.Requests.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Graph.Requests.unrequest/3","doc":"","ref":"Bonfire.Social.Graph.Requests.html#unrequest/3"},{"type":"module","title":"Bonfire.Social.Integration","doc":"","ref":"Bonfire.Social.Integration.html"},{"type":"function","title":"Bonfire.Social.Integration.federate_outgoing?/1","doc":"","ref":"Bonfire.Social.Integration.html#federate_outgoing?/1"},{"type":"function","title":"Bonfire.Social.Integration.federating?/1","doc":"","ref":"Bonfire.Social.Integration.html#federating?/1"},{"type":"function","title":"Bonfire.Social.Integration.is_local?/1","doc":"","ref":"Bonfire.Social.Integration.html#is_local?/1"},{"type":"function","title":"Bonfire.Social.Integration.mailer/0","doc":"","ref":"Bonfire.Social.Integration.html#mailer/0"},{"type":"function","title":"Bonfire.Social.Integration.many/3","doc":"","ref":"Bonfire.Social.Integration.html#many/3"},{"type":"function","title":"Bonfire.Social.Integration.maybe_federate/5","doc":"","ref":"Bonfire.Social.Integration.html#maybe_federate/5"},{"type":"function","title":"Bonfire.Social.Integration.maybe_federate_and_gift_wrap_activity/4","doc":"","ref":"Bonfire.Social.Integration.html#maybe_federate_and_gift_wrap_activity/4"},{"type":"function","title":"Bonfire.Social.Integration.repo/0","doc":"","ref":"Bonfire.Social.Integration.html#repo/0"},{"type":"module","title":"Bonfire.Social.Likes","doc":"","ref":"Bonfire.Social.Likes.html"},{"type":"function","title":"Bonfire.Social.Likes.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Likes.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Likes.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Likes.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Likes.by_liked/2","doc":"","ref":"Bonfire.Social.Likes.html#by_liked/2"},{"type":"function","title":"Bonfire.Social.Likes.by_liker/2","doc":"","ref":"Bonfire.Social.Likes.html#by_liker/2"},{"type":"function","title":"Bonfire.Social.Likes.count/2","doc":"","ref":"Bonfire.Social.Likes.html#count/2"},{"type":"function","title":"Bonfire.Social.Likes.do_like/3","doc":"","ref":"Bonfire.Social.Likes.html#do_like/3"},{"type":"function","title":"Bonfire.Social.Likes.federation_module/0","doc":"","ref":"Bonfire.Social.Likes.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Likes.get/3","doc":"","ref":"Bonfire.Social.Likes.html#get/3"},{"type":"function","title":"Bonfire.Social.Likes.get!/3","doc":"","ref":"Bonfire.Social.Likes.html#get!/3"},{"type":"function","title":"Bonfire.Social.Likes.like/3","doc":"","ref":"Bonfire.Social.Likes.html#like/3"},{"type":"function","title":"Bonfire.Social.Likes.liked?/2","doc":"","ref":"Bonfire.Social.Likes.html#liked?/2"},{"type":"function","title":"Bonfire.Social.Likes.list_by/2","doc":"List likes by a user","ref":"Bonfire.Social.Likes.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Likes.list_my/1","doc":"List the current user's likes","ref":"Bonfire.Social.Likes.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Likes.list_of/2","doc":"List likers of something(s)","ref":"Bonfire.Social.Likes.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Likes.list_paginated/2","doc":"","ref":"Bonfire.Social.Likes.html#list_paginated/2"},{"type":"function","title":"Bonfire.Social.Likes.query/2","doc":"","ref":"Bonfire.Social.Likes.html#query/2"},{"type":"function","title":"Bonfire.Social.Likes.query_module/0","doc":"","ref":"Bonfire.Social.Likes.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Likes.schema_module/0","doc":"","ref":"Bonfire.Social.Likes.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Likes.unlike/3","doc":"","ref":"Bonfire.Social.Likes.html#unlike/3"},{"type":"module","title":"Bonfire.Social.Likes.LiveHandler","doc":"","ref":"Bonfire.Social.Likes.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Likes.LiveHandler.do_like/3","doc":"","ref":"Bonfire.Social.Likes.LiveHandler.html#do_like/3"},{"type":"function","title":"Bonfire.Social.Likes.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Likes.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Social.Likes.LiveHandler.liker_count/1","doc":"","ref":"Bonfire.Social.Likes.LiveHandler.html#liker_count/1"},{"type":"macro","title":"Bonfire.Social.Likes.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Likes.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Social.Likes.LiveHandler.update_many/2","doc":"","ref":"Bonfire.Social.Likes.LiveHandler.html#update_many/2"},{"type":"function","title":"Bonfire.Social.Likes.LiveHandler.update_many_opts/1","doc":"","ref":"Bonfire.Social.Likes.LiveHandler.html#update_many_opts/1"},{"type":"module","title":"Bonfire.Social.LivePush","doc":"","ref":"Bonfire.Social.LivePush.html"},{"type":"function","title":"Bonfire.Social.LivePush.hide_activity/2","doc":"","ref":"Bonfire.Social.LivePush.html#hide_activity/2"},{"type":"function","title":"Bonfire.Social.LivePush.notify/2","doc":"","ref":"Bonfire.Social.LivePush.html#notify/2"},{"type":"function","title":"Bonfire.Social.LivePush.notify/4","doc":"","ref":"Bonfire.Social.LivePush.html#notify/4"},{"type":"function","title":"Bonfire.Social.LivePush.notify_of_message/4","doc":"","ref":"Bonfire.Social.LivePush.html#notify_of_message/4"},{"type":"function","title":"Bonfire.Social.LivePush.notify_users/4","doc":"Sends a notification about an activity to a list of users, excluding the author/subject","ref":"Bonfire.Social.LivePush.html#notify_users/4"},{"type":"function","title":"Bonfire.Social.LivePush.prepare_activity/2","doc":"","ref":"Bonfire.Social.LivePush.html#prepare_activity/2"},{"type":"function","title":"Bonfire.Social.LivePush.push_activity/3","doc":"Receives an activity with a nested object, or vice versa, uses PubSub to pushes to feeds and optionally notifications","ref":"Bonfire.Social.LivePush.html#push_activity/3"},{"type":"function","title":"Bonfire.Social.LivePush.push_activity_object/4","doc":"Receives an activity *and* object, uses PubSub to pushes to feeds and optionally notifications, and returns an Activity.","ref":"Bonfire.Social.LivePush.html#push_activity_object/4"},{"type":"module","title":"Bonfire.Social.Objects","doc":"","ref":"Bonfire.Social.Objects.html"},{"type":"function","title":"Bonfire.Social.Objects.ap_maybe_delete/2","doc":"","ref":"Bonfire.Social.Objects.html#ap_maybe_delete/2"},{"type":"function","title":"Bonfire.Social.Objects.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.Objects.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.Objects.as_permitted_for/3","doc":"","ref":"Bonfire.Social.Objects.html#as_permitted_for/3"},{"type":"function","title":"Bonfire.Social.Objects.cast/4","doc":"Handles casting:\n* Creator\n* Caretaker\n* Threaded replies (when present)\n* Tags/Mentions (when present)\n* Acls\n* Activity","ref":"Bonfire.Social.Objects.html#cast/4"},{"type":"function","title":"Bonfire.Social.Objects.cast_acl/3","doc":"","ref":"Bonfire.Social.Objects.html#cast_acl/3"},{"type":"function","title":"Bonfire.Social.Objects.cast_basic/4","doc":"Handles casting:\n* Creator\n* Caretaker\n* Acls","ref":"Bonfire.Social.Objects.html#cast_basic/4"},{"type":"function","title":"Bonfire.Social.Objects.cast_caretaker/2","doc":"","ref":"Bonfire.Social.Objects.html#cast_caretaker/2"},{"type":"function","title":"Bonfire.Social.Objects.cast_creator/2","doc":"","ref":"Bonfire.Social.Objects.html#cast_creator/2"},{"type":"function","title":"Bonfire.Social.Objects.cast_creator_caretaker/2","doc":"","ref":"Bonfire.Social.Objects.html#cast_creator_caretaker/2"},{"type":"function","title":"Bonfire.Social.Objects.cast_mini/4","doc":"Handles casting:\n* Acls","ref":"Bonfire.Social.Objects.html#cast_mini/4"},{"type":"function","title":"Bonfire.Social.Objects.cast_publish/4","doc":"Handles casting:\n* Acls\n* Activity\n* Feed Publishes","ref":"Bonfire.Social.Objects.html#cast_publish/4"},{"type":"function","title":"Bonfire.Social.Objects.cast_sensitivity/2","doc":"","ref":"Bonfire.Social.Objects.html#cast_sensitivity/2"},{"type":"function","title":"Bonfire.Social.Objects.changeset_named/2","doc":"","ref":"Bonfire.Social.Objects.html#changeset_named/2"},{"type":"function","title":"Bonfire.Social.Objects.delete/2","doc":"","ref":"Bonfire.Social.Objects.html#delete/2"},{"type":"function","title":"Bonfire.Social.Objects.delete_apply_error/2","doc":"","ref":"Bonfire.Social.Objects.html#delete_apply_error/2"},{"type":"function","title":"Bonfire.Social.Objects.do_delete/2","doc":"","ref":"Bonfire.Social.Objects.html#do_delete/2"},{"type":"function","title":"Bonfire.Social.Objects.federation_module/0","doc":"","ref":"Bonfire.Social.Objects.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Objects.list_query/2","doc":"","ref":"Bonfire.Social.Objects.html#list_query/2"},{"type":"function","title":"Bonfire.Social.Objects.maybe_generic_delete/3","doc":"","ref":"Bonfire.Social.Objects.html#maybe_generic_delete/3"},{"type":"function","title":"Bonfire.Social.Objects.maybe_preload_activity_object/2","doc":"","ref":"Bonfire.Social.Objects.html#maybe_preload_activity_object/2"},{"type":"function","title":"Bonfire.Social.Objects.object_creator/1","doc":"","ref":"Bonfire.Social.Objects.html#object_creator/1"},{"type":"function","title":"Bonfire.Social.Objects.preload_creator/1","doc":"","ref":"Bonfire.Social.Objects.html#preload_creator/1"},{"type":"function","title":"Bonfire.Social.Objects.preload_reply_creator/1","doc":"","ref":"Bonfire.Social.Objects.html#preload_reply_creator/1"},{"type":"function","title":"Bonfire.Social.Objects.publish/5","doc":"","ref":"Bonfire.Social.Objects.html#publish/5"},{"type":"function","title":"Bonfire.Social.Objects.query_base/1","doc":"Returns a basic query over undeleted pointable objects in the system,\noptionally limited to one or more types.","ref":"Bonfire.Social.Objects.html#query_base/1"},{"type":"function","title":"Bonfire.Social.Objects.read/2","doc":"","ref":"Bonfire.Social.Objects.html#read/2"},{"type":"function","title":"Bonfire.Social.Objects.reset_preset_boundary/5","doc":"","ref":"Bonfire.Social.Objects.html#reset_preset_boundary/5"},{"type":"function","title":"Bonfire.Social.Objects.run_epic/3","doc":"","ref":"Bonfire.Social.Objects.html#run_epic/3"},{"type":"function","title":"Bonfire.Social.Objects.set_boundaries/4","doc":"","ref":"Bonfire.Social.Objects.html#set_boundaries/4"},{"type":"function","title":"Bonfire.Social.Objects.set_name/3","doc":"","ref":"Bonfire.Social.Objects.html#set_name/3"},{"type":"function","title":"Bonfire.Social.Objects.set_sensitivity/2","doc":"","ref":"Bonfire.Social.Objects.html#set_sensitivity/2"},{"type":"module","title":"Bonfire.Social.Objects.LiveHandler","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Objects.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Social.Objects.LiveHandler.load_object_assigns/1","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#load_object_assigns/1"},{"type":"function","title":"Bonfire.Social.Objects.LiveHandler.load_object_assigns/2","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#load_object_assigns/2"},{"type":"function","title":"Bonfire.Social.Objects.LiveHandler.not_found_fallback/3","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#not_found_fallback/3"},{"type":"macro","title":"Bonfire.Social.Objects.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Objects.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Social.Pins","doc":"","ref":"Bonfire.Social.Pins.html"},{"type":"function","title":"Bonfire.Social.Pins.ap_publish_activity/3","doc":"","ref":"Bonfire.Social.Pins.html#ap_publish_activity/3"},{"type":"function","title":"Bonfire.Social.Pins.by_pinned/2","doc":"","ref":"Bonfire.Social.Pins.html#by_pinned/2"},{"type":"function","title":"Bonfire.Social.Pins.by_pinner/2","doc":"","ref":"Bonfire.Social.Pins.html#by_pinner/2"},{"type":"function","title":"Bonfire.Social.Pins.federation_module/0","doc":"","ref":"Bonfire.Social.Pins.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.Pins.get/3","doc":"","ref":"Bonfire.Social.Pins.html#get/3"},{"type":"function","title":"Bonfire.Social.Pins.get!/3","doc":"","ref":"Bonfire.Social.Pins.html#get!/3"},{"type":"function","title":"Bonfire.Social.Pins.list_by/2","doc":"List pins by a user","ref":"Bonfire.Social.Pins.html#list_by/2"},{"type":"function","title":"Bonfire.Social.Pins.list_instance_pins/1","doc":"","ref":"Bonfire.Social.Pins.html#list_instance_pins/1"},{"type":"function","title":"Bonfire.Social.Pins.list_my/1","doc":"List the current user's pins","ref":"Bonfire.Social.Pins.html#list_my/1"},{"type":"function","title":"Bonfire.Social.Pins.list_of/2","doc":"List pinners of something(s)","ref":"Bonfire.Social.Pins.html#list_of/2"},{"type":"function","title":"Bonfire.Social.Pins.pin/4","doc":"","ref":"Bonfire.Social.Pins.html#pin/4"},{"type":"function","title":"Bonfire.Social.Pins.pinned?/2","doc":"","ref":"Bonfire.Social.Pins.html#pinned?/2"},{"type":"function","title":"Bonfire.Social.Pins.query/2","doc":"","ref":"Bonfire.Social.Pins.html#query/2"},{"type":"function","title":"Bonfire.Social.Pins.query_module/0","doc":"","ref":"Bonfire.Social.Pins.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Pins.rank_pin/3","doc":"","ref":"Bonfire.Social.Pins.html#rank_pin/3"},{"type":"function","title":"Bonfire.Social.Pins.schema_module/0","doc":"","ref":"Bonfire.Social.Pins.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Pins.unpin/3","doc":"","ref":"Bonfire.Social.Pins.html#unpin/3"},{"type":"module","title":"Bonfire.Social.Pins.LiveHandler","doc":"","ref":"Bonfire.Social.Pins.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Pins.LiveHandler.do_pin/3","doc":"","ref":"Bonfire.Social.Pins.LiveHandler.html#do_pin/3"},{"type":"function","title":"Bonfire.Social.Pins.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Pins.LiveHandler.html#handle_event/3"},{"type":"macro","title":"Bonfire.Social.Pins.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Pins.LiveHandler.html#sigil_p/2"},{"type":"module","title":"Bonfire.Social.PostContents","doc":"Query and manipulate post contents","ref":"Bonfire.Social.PostContents.html"},{"type":"function","title":"Bonfire.Social.PostContents.all_text_content/1","doc":"","ref":"Bonfire.Social.PostContents.html#all_text_content/1"},{"type":"function","title":"Bonfire.Social.PostContents.ap_receive_activity/3","doc":"","ref":"Bonfire.Social.PostContents.html#ap_receive_activity/3"},{"type":"function","title":"Bonfire.Social.PostContents.ap_receive_attrs_prepare/4","doc":"","ref":"Bonfire.Social.PostContents.html#ap_receive_attrs_prepare/4"},{"type":"function","title":"Bonfire.Social.PostContents.cast/5","doc":"Given a changeset, post content attributes, creator, boundary and options, returns a changeset prepared with relevant attributes and associations","ref":"Bonfire.Social.PostContents.html#cast/5"},{"type":"function","title":"Bonfire.Social.PostContents.changeset/2","doc":"","ref":"Bonfire.Social.PostContents.html#changeset/2"},{"type":"function","title":"Bonfire.Social.PostContents.diff/2","doc":"","ref":"Bonfire.Social.PostContents.html#diff/2"},{"type":"function","title":"Bonfire.Social.PostContents.edit/3","doc":"","ref":"Bonfire.Social.PostContents.html#edit/3"},{"type":"function","title":"Bonfire.Social.PostContents.editor_output_content_type/1","doc":"","ref":"Bonfire.Social.PostContents.html#editor_output_content_type/1"},{"type":"function","title":"Bonfire.Social.PostContents.federation_module/0","doc":"","ref":"Bonfire.Social.PostContents.html#federation_module/0"},{"type":"function","title":"Bonfire.Social.PostContents.get/2","doc":"Given a post content ID, returns the corresponding post content","ref":"Bonfire.Social.PostContents.html#get/2"},{"type":"function","title":"Bonfire.Social.PostContents.get_versions/1","doc":"","ref":"Bonfire.Social.PostContents.html#get_versions/1"},{"type":"function","title":"Bonfire.Social.PostContents.get_versions_diffed/1","doc":"","ref":"Bonfire.Social.PostContents.html#get_versions_diffed/1"},{"type":"function","title":"Bonfire.Social.PostContents.indexing_object_format/1","doc":"","ref":"Bonfire.Social.PostContents.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Social.PostContents.maybe_detect_languages/2","doc":"","ref":"Bonfire.Social.PostContents.html#maybe_detect_languages/2"},{"type":"function","title":"Bonfire.Social.PostContents.maybe_prepare_contents/4","doc":"Given post content attributes, creator, boundary, and options, prepares the post contents for processing by detecting languages, mentions, hashtags, and urls.","ref":"Bonfire.Social.PostContents.html#maybe_prepare_contents/4"},{"type":"function","title":"Bonfire.Social.PostContents.merge_with_body_or_nil/2","doc":"","ref":"Bonfire.Social.PostContents.html#merge_with_body_or_nil/2"},{"type":"function","title":"Bonfire.Social.PostContents.no_known_output/2","doc":"","ref":"Bonfire.Social.PostContents.html#no_known_output/2"},{"type":"function","title":"Bonfire.Social.PostContents.one/2","doc":"Given a set of filters, returns a single post content matching those filters","ref":"Bonfire.Social.PostContents.html#one/2"},{"type":"function","title":"Bonfire.Social.PostContents.prepare_text/3","doc":"","ref":"Bonfire.Social.PostContents.html#prepare_text/3"},{"type":"function","title":"Bonfire.Social.PostContents.query/2","doc":"Given a set of filters, returns an Ecto.Query for matching post contents.","ref":"Bonfire.Social.PostContents.html#query/2"},{"type":"function","title":"Bonfire.Social.PostContents.query_base/0","doc":"","ref":"Bonfire.Social.PostContents.html#query_base/0"},{"type":"module","title":"Bonfire.Social.Seen","doc":"Track seen/unseen (similar to read/unread, but only indicates that it was displayed in a feed or other listing for the user, not that they actually read it) status of things (usually `Activities`)","ref":"Bonfire.Social.Seen.html"},{"type":"function","title":"Bonfire.Social.Seen.get/3","doc":"","ref":"Bonfire.Social.Seen.html#get/3"},{"type":"function","title":"Bonfire.Social.Seen.get!/3","doc":"","ref":"Bonfire.Social.Seen.html#get!/3"},{"type":"function","title":"Bonfire.Social.Seen.mark_seen/2","doc":"","ref":"Bonfire.Social.Seen.html#mark_seen/2"},{"type":"function","title":"Bonfire.Social.Seen.mark_unseen/2","doc":"","ref":"Bonfire.Social.Seen.html#mark_unseen/2"},{"type":"function","title":"Bonfire.Social.Seen.query/2","doc":"","ref":"Bonfire.Social.Seen.html#query/2"},{"type":"function","title":"Bonfire.Social.Seen.query_module/0","doc":"","ref":"Bonfire.Social.Seen.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Seen.schema_module/0","doc":"","ref":"Bonfire.Social.Seen.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Seen.seen?/2","doc":"","ref":"Bonfire.Social.Seen.html#seen?/2"},{"type":"module","title":"Bonfire.Social.Tags","doc":"","ref":"Bonfire.Social.Tags.html"},{"type":"function","title":"Bonfire.Social.Tags.auto_boost/2","doc":"","ref":"Bonfire.Social.Tags.html#auto_boost/2"},{"type":"function","title":"Bonfire.Social.Tags.cast/4","doc":"","ref":"Bonfire.Social.Tags.html#cast/4"},{"type":"function","title":"Bonfire.Social.Tags.indexing_format_tags/1","doc":"","ref":"Bonfire.Social.Tags.html#indexing_format_tags/1"},{"type":"function","title":"Bonfire.Social.Tags.maybe_auto_boost/3","doc":"","ref":"Bonfire.Social.Tags.html#maybe_auto_boost/3"},{"type":"function","title":"Bonfire.Social.Tags.maybe_boostable_categories/2","doc":"","ref":"Bonfire.Social.Tags.html#maybe_boostable_categories/2"},{"type":"function","title":"Bonfire.Social.Tags.maybe_process/3","doc":"","ref":"Bonfire.Social.Tags.html#maybe_process/3"},{"type":"function","title":"Bonfire.Social.Tags.maybe_tag/4","doc":"","ref":"Bonfire.Social.Tags.html#maybe_tag/4"},{"type":"module","title":"Bonfire.Social.Threads","doc":"","ref":"Bonfire.Social.Threads.html"},{"type":"function","title":"Bonfire.Social.Threads.ap_prepare/2","doc":"Key can be for eg. :thread_id or :reply_to_id","ref":"Bonfire.Social.Threads.html#ap_prepare/2"},{"type":"function","title":"Bonfire.Social.Threads.arrange_replies/2","doc":"","ref":"Bonfire.Social.Threads.html#arrange_replies/2"},{"type":"function","title":"Bonfire.Social.Threads.arrange_replies_tree/2","doc":"","ref":"Bonfire.Social.Threads.html#arrange_replies_tree/2"},{"type":"function","title":"Bonfire.Social.Threads.base_query/0","doc":"","ref":"Bonfire.Social.Threads.html#base_query/0"},{"type":"function","title":"Bonfire.Social.Threads.cast/4","doc":"Handles casting related to the reply and threading.\nIf it's not a reply or the user is not permitted to reply to the thing, a new thread will be created.","ref":"Bonfire.Social.Threads.html#cast/4"},{"type":"function","title":"Bonfire.Social.Threads.changeset/2","doc":"","ref":"Bonfire.Social.Threads.html#changeset/2"},{"type":"function","title":"Bonfire.Social.Threads.count_participants/2","doc":"Count participants in a thread (depending on user's boundaries)","ref":"Bonfire.Social.Threads.html#count_participants/2"},{"type":"function","title":"Bonfire.Social.Threads.fetch_participants/2","doc":"List participants in a thread (depending on user's boundaries)","ref":"Bonfire.Social.Threads.html#fetch_participants/2"},{"type":"function","title":"Bonfire.Social.Threads.filter/3","doc":"Group per-thread","ref":"Bonfire.Social.Threads.html#filter/3"},{"type":"function","title":"Bonfire.Social.Threads.find_reply_to/2","doc":"Returns `{:ok, reply}` or `{:error, reason}`, where `reason` may be:\n* `:not_found` - we could not find the object you are replying to.\n* `:not_permitted` - you do not have permission to reply to this.","ref":"Bonfire.Social.Threads.html#find_reply_to/2"},{"type":"function","title":"Bonfire.Social.Threads.find_thread/2","doc":"","ref":"Bonfire.Social.Threads.html#find_thread/2"},{"type":"function","title":"Bonfire.Social.Threads.list_participants/3","doc":"List participants of an activity or thread (depending on user's boundaries)","ref":"Bonfire.Social.Threads.html#list_participants/3"},{"type":"function","title":"Bonfire.Social.Threads.list_replies/2","doc":"","ref":"Bonfire.Social.Threads.html#list_replies/2"},{"type":"function","title":"Bonfire.Social.Threads.mark_all_seen/2","doc":"","ref":"Bonfire.Social.Threads.html#mark_all_seen/2"},{"type":"function","title":"Bonfire.Social.Threads.maybe_re_order_result/2","doc":"re-order distinct threads after DISTINCT ON ordered them by thread_id - Note: does not support pagination","ref":"Bonfire.Social.Threads.html#maybe_re_order_result/2"},{"type":"function","title":"Bonfire.Social.Threads.query/2","doc":"","ref":"Bonfire.Social.Threads.html#query/2"},{"type":"function","title":"Bonfire.Social.Threads.query_module/0","doc":"","ref":"Bonfire.Social.Threads.html#query_module/0"},{"type":"function","title":"Bonfire.Social.Threads.re_order_using_subquery/2","doc":"re-order distinct threads after DISTINCT ON ordered them by thread_id - Note: this results in (Ecto.QueryError) cannot preload associations in subquery in query","ref":"Bonfire.Social.Threads.html#re_order_using_subquery/2"},{"type":"function","title":"Bonfire.Social.Threads.read/2","doc":"","ref":"Bonfire.Social.Threads.html#read/2"},{"type":"function","title":"Bonfire.Social.Threads.schema_module/0","doc":"","ref":"Bonfire.Social.Threads.html#schema_module/0"},{"type":"function","title":"Bonfire.Social.Threads.unseen_count/2","doc":"","ref":"Bonfire.Social.Threads.html#unseen_count/2"},{"type":"function","title":"Bonfire.Social.Threads.unseen_query/2","doc":"","ref":"Bonfire.Social.Threads.html#unseen_query/2"},{"type":"module","title":"Bonfire.Social.Threads.LiveHandler","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.handle_event/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#handle_event/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.handle_info/2","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#handle_info/2"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.handle_params/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#handle_params/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.insert_comments/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#insert_comments/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.live_more/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#live_more/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.load_thread/1","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#load_thread/1"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.load_thread_assigns/1","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#load_thread_assigns/1"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.load_thread_maybe_async/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#load_thread_maybe_async/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.max_depth/1","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#max_depth/1"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.maybe_subscribe/2","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#maybe_subscribe/2"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.reply/3","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#reply/3"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.send_thread_updates/4","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#send_thread_updates/4"},{"type":"macro","title":"Bonfire.Social.Threads.LiveHandler.sigil_p/2","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#sigil_p/2"},{"type":"function","title":"Bonfire.Social.Threads.LiveHandler.thread_init/1","doc":"","ref":"Bonfire.Social.Threads.LiveHandler.html#thread_init/1"},{"type":"module","title":"Bonfire.System.OS.Monitor","doc":"","ref":"Bonfire.System.OS.Monitor.html"},{"type":"function","title":"Bonfire.System.OS.Monitor.format_bytes/1","doc":"Formats bytes.","ref":"Bonfire.System.OS.Monitor.html#format_bytes/1"},{"type":"function","title":"Bonfire.System.OS.Monitor.format_percent/1","doc":"Formats percent.","ref":"Bonfire.System.OS.Monitor.html#format_percent/1"},{"type":"function","title":"Bonfire.System.OS.Monitor.handle_alarm/2","doc":"","ref":"Bonfire.System.OS.Monitor.html#handle_alarm/2"},{"type":"function","title":"Bonfire.System.OS.Monitor.handle_event/2","doc":"","ref":"Bonfire.System.OS.Monitor.html#handle_event/2"},{"type":"function","title":"Bonfire.System.OS.Monitor.init/1","doc":"","ref":"Bonfire.System.OS.Monitor.html#init/1"},{"type":"module","title":"Bonfire.Tag","doc":"","ref":"Bonfire.Tag.html"},{"type":"function","title":"Bonfire.Tag.context_module/0","doc":"","ref":"Bonfire.Tag.html#context_module/0"},{"type":"function","title":"Bonfire.Tag.query_module/0","doc":"","ref":"Bonfire.Tag.html#query_module/0"},{"type":"function","title":"Bonfire.Tag.tag_things_changeset/2","doc":"Add things (Pointer objects) to a tag. You usually want to add tags to a thing instead, see `thing_tags_changeset`","ref":"Bonfire.Tag.html#tag_things_changeset/2"},{"type":"function","title":"Bonfire.Tag.thing_tags_changeset/2","doc":"Add tags to a thing (any Pointer object which defines a many_to_many relation to tag). This function applies to your object schema but is here for convenience.","ref":"Bonfire.Tag.html#thing_tags_changeset/2"},{"type":"function","title":"Bonfire.Tag.thing_tags_insert/2","doc":"","ref":"Bonfire.Tag.html#thing_tags_insert/2"},{"type":"module","title":"Bonfire.Tag.Autocomplete","doc":"","ref":"Bonfire.Tag.Autocomplete.html"},{"type":"function","title":"Bonfire.Tag.Autocomplete.api_tag_lookup/3","doc":"","ref":"Bonfire.Tag.Autocomplete.html#api_tag_lookup/3"},{"type":"function","title":"Bonfire.Tag.Autocomplete.api_tag_lookup_public/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#api_tag_lookup_public/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.filter_results/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#filter_results/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.find_all_tags/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#find_all_tags/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.maybe_find_tags/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#maybe_find_tags/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.maybe_search/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#maybe_search/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.prefix_index/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#prefix_index/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.search_or_lookup/3","doc":"","ref":"Bonfire.Tag.Autocomplete.html#search_or_lookup/3"},{"type":"function","title":"Bonfire.Tag.Autocomplete.search_prefix/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#search_prefix/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.search_type/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#search_type/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_add_field/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_add_field/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_hit_prepare/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_hit_prepare/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_lookup_public/4","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_lookup_public/4"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_search/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_search/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_search_from_tags/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_search_from_tags/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tag_search_from_text/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tag_search_from_text/2"},{"type":"function","title":"Bonfire.Tag.Autocomplete.tags_split/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#tags_split/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.try_all_prefixes/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#try_all_prefixes/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.try_prefixes/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#try_prefixes/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.try_tag_search/1","doc":"","ref":"Bonfire.Tag.Autocomplete.html#try_tag_search/1"},{"type":"function","title":"Bonfire.Tag.Autocomplete.try_tag_search/2","doc":"","ref":"Bonfire.Tag.Autocomplete.html#try_tag_search/2"},{"type":"module","title":"Bonfire.Tag.Hashtag","doc":"","ref":"Bonfire.Tag.Hashtag.html"},{"type":"function","title":"Bonfire.Tag.Hashtag.changeset/2","doc":"","ref":"Bonfire.Tag.Hashtag.html#changeset/2"},{"type":"function","title":"Bonfire.Tag.Hashtag.get_or_create_by_name/1","doc":"","ref":"Bonfire.Tag.Hashtag.html#get_or_create_by_name/1"},{"type":"function","title":"Bonfire.Tag.Hashtag.normalize_name/1","doc":"","ref":"Bonfire.Tag.Hashtag.html#normalize_name/1"},{"type":"module","title":"Bonfire.Tag.Queries","doc":"","ref":"Bonfire.Tag.Queries.html"},{"type":"function","title":"Bonfire.Tag.Queries.filter/2","doc":"Filter the query according to arbitrary criteria","ref":"Bonfire.Tag.Queries.html#filter/2"},{"type":"function","title":"Bonfire.Tag.Queries.join_to/3","doc":"","ref":"Bonfire.Tag.Queries.html#join_to/3"},{"type":"function","title":"Bonfire.Tag.Queries.list_trending/3","doc":"","ref":"Bonfire.Tag.Queries.html#list_trending/3"},{"type":"function","title":"Bonfire.Tag.Queries.queries/4","doc":"","ref":"Bonfire.Tag.Queries.html#queries/4"},{"type":"function","title":"Bonfire.Tag.Queries.query/1","doc":"","ref":"Bonfire.Tag.Queries.html#query/1"},{"type":"function","title":"Bonfire.Tag.Queries.query/2","doc":"","ref":"Bonfire.Tag.Queries.html#query/2"},{"type":"module","title":"Bonfire.Tag.Simulate","doc":"","ref":"Bonfire.Tag.Simulate.html"},{"type":"module","title":"Bonfire.Tag.Tagged","doc":"","ref":"Bonfire.Tag.Tagged.html"},{"type":"function","title":"Bonfire.Tag.Tagged.all/0","doc":"","ref":"Bonfire.Tag.Tagged.html#all/0"},{"type":"function","title":"Bonfire.Tag.Tagged.changeset/2","doc":"","ref":"Bonfire.Tag.Tagged.html#changeset/2"},{"type":"function","title":"Bonfire.Tag.Tagged.latest/1","doc":"Get the latest tag added to a thing","ref":"Bonfire.Tag.Tagged.html#latest/1"},{"type":"function","title":"Bonfire.Tag.Tagged.q_with_tag/1","doc":"List the things tagged with a certain tag","ref":"Bonfire.Tag.Tagged.html#q_with_tag/1"},{"type":"function","title":"Bonfire.Tag.Tagged.q_with_thing/1","doc":"List the tags of a thing","ref":"Bonfire.Tag.Tagged.html#q_with_thing/1"},{"type":"function","title":"Bonfire.Tag.Tagged.q_with_type/1","doc":"List by type of tagged thing","ref":"Bonfire.Tag.Tagged.html#q_with_type/1"},{"type":"function","title":"Bonfire.Tag.Tagged.with_tag/1","doc":"","ref":"Bonfire.Tag.Tagged.html#with_tag/1"},{"type":"function","title":"Bonfire.Tag.Tagged.with_thing/1","doc":"","ref":"Bonfire.Tag.Tagged.html#with_thing/1"},{"type":"function","title":"Bonfire.Tag.Tagged.with_type/1","doc":"","ref":"Bonfire.Tag.Tagged.html#with_type/1"},{"type":"module","title":"Bonfire.Tag.Tags","doc":"","ref":"Bonfire.Tag.Tags.html"},{"type":"function","title":"Bonfire.Tag.Tags.find/2","doc":"","ref":"Bonfire.Tag.Tags.html#find/2"},{"type":"function","title":"Bonfire.Tag.Tags.get/2","doc":"","ref":"Bonfire.Tag.Tags.html#get/2"},{"type":"function","title":"Bonfire.Tag.Tags.indexing_object_format/1","doc":"","ref":"Bonfire.Tag.Tags.html#indexing_object_format/1"},{"type":"function","title":"Bonfire.Tag.Tags.indexing_object_format_name/1","doc":"","ref":"Bonfire.Tag.Tags.html#indexing_object_format_name/1"},{"type":"function","title":"Bonfire.Tag.Tags.list_trending/2","doc":"","ref":"Bonfire.Tag.Tags.html#list_trending/2"},{"type":"function","title":"Bonfire.Tag.Tags.list_trending_reset/2","doc":"","ref":"Bonfire.Tag.Tags.html#list_trending_reset/2"},{"type":"function","title":"Bonfire.Tag.Tags.many/2","doc":"Retrieves a list of tags by arbitrary filters.\nUsed by:\n* Various parts of the codebase that need to query for tags (inc. tests)","ref":"Bonfire.Tag.Tags.html#many/2"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_find_tag/3","doc":"Try to find one (best-match) tag","ref":"Bonfire.Tag.Tags.html#maybe_find_tag/3"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_find_tags/3","doc":"Search / autocomplete for tags by name","ref":"Bonfire.Tag.Tags.html#maybe_find_tags/3"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_lookup_tag/2","doc":"Lookup a single for a tag by its name/username","ref":"Bonfire.Tag.Tags.html#maybe_lookup_tag/2"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_tag/4","doc":"Maybe tag something","ref":"Bonfire.Tag.Tags.html#maybe_tag/4"},{"type":"function","title":"Bonfire.Tag.Tags.maybe_taxonomy_tag/2","doc":"","ref":"Bonfire.Tag.Tags.html#maybe_taxonomy_tag/2"},{"type":"function","title":"Bonfire.Tag.Tags.one/2","doc":"Retrieves a single tag by arbitrary filters.\nUsed by:\n* GraphQL Item queries\n* ActivityPub integration\n* Various parts of the codebase that need to query for tags (inc. tests)","ref":"Bonfire.Tag.Tags.html#one/2"},{"type":"function","title":"Bonfire.Tag.Tags.tag_ids/1","doc":"","ref":"Bonfire.Tag.Tags.html#tag_ids/1"},{"type":"function","title":"Bonfire.Tag.Tags.tag_something/4","doc":"tag existing thing with one or multiple Tags, Needle, or anything that can be made into a tag","ref":"Bonfire.Tag.Tags.html#tag_something/4"},{"type":"module","title":"Bonfire.Tag.TextContent.Formatter","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.escape_mention_handler/4","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html#escape_mention_handler/4"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.linkify/2","doc":"Parses a text and replace plain text links with HTML. Returns a tuple with a result text, mentions, and hashtags.\n\nIf the 'safe_mention' option is given, only consecutive mentions at the start the post are actually mentioned.","ref":"Bonfire.Tag.TextContent.Formatter.html#linkify/2"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.nothing_handler/3","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html#nothing_handler/3"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.tag_handler/4","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html#tag_handler/4"},{"type":"function","title":"Bonfire.Tag.TextContent.Formatter.url_handler/3","doc":"","ref":"Bonfire.Tag.TextContent.Formatter.html#url_handler/3"},{"type":"module","title":"Bonfire.Tag.TextContent.Process","doc":"","ref":"Bonfire.Tag.TextContent.Process.html"},{"type":"function","title":"Bonfire.Tag.TextContent.Process.html_escape/2","doc":"","ref":"Bonfire.Tag.TextContent.Process.html#html_escape/2"},{"type":"function","title":"Bonfire.Tag.TextContent.Process.process/3","doc":"For use for things like a bio, where we want links but not to actually trigger mentions.","ref":"Bonfire.Tag.TextContent.Process.html#process/3"},{"type":"module","title":"Bonfire.Tag.Web.Routes","doc":"","ref":"Bonfire.Tag.Web.Routes.html"},{"type":"function","title":"Bonfire.Tag.Web.Routes.declare_routes/0","doc":"","ref":"Bonfire.Tag.Web.Routes.html#declare_routes/0"},{"type":"module","title":"Bonfire.Tags.Acts.AutoBoost","doc":"","ref":"Bonfire.Tags.Acts.AutoBoost.html"},{"type":"function","title":"Bonfire.Tags.Acts.AutoBoost.run/2","doc":"","ref":"Bonfire.Tags.Acts.AutoBoost.html#run/2"},{"type":"module","title":"Bonfire.Tags.Acts.Tag","doc":"","ref":"Bonfire.Tags.Acts.Tag.html"},{"type":"function","title":"Bonfire.Tags.Acts.Tag.run/2","doc":"","ref":"Bonfire.Tags.Acts.Tag.html#run/2"},{"type":"module","title":"Bonfire.Telemetry.Storage","doc":"","ref":"Bonfire.Telemetry.Storage.html"},{"type":"function","title":"Bonfire.Telemetry.Storage.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Bonfire.Telemetry.Storage.html#child_spec/1"},{"type":"function","title":"Bonfire.Telemetry.Storage.handle_event/4","doc":"","ref":"Bonfire.Telemetry.Storage.html#handle_event/4"},{"type":"function","title":"Bonfire.Telemetry.Storage.metrics_history/1","doc":"","ref":"Bonfire.Telemetry.Storage.html#metrics_history/1"},{"type":"function","title":"Bonfire.Telemetry.Storage.start_link/1","doc":"","ref":"Bonfire.Telemetry.Storage.html#start_link/1"},{"type":"module","title":"ActivityPub","doc":"Entrypoint to the ActivityPub API for processing incoming and outgoing federated objects (normalising, saving the the Object storage, passing them to the adapter, and queueing outgoing activities to be pushed out).\n\nIn general, the functions in this module take object-like map.\nThat includes a struct as the input for actor parameters. Use the functions in the `ActivityPub.Actor` module (`ActivityPub.Actor.get_cached/1` for example) to retrieve those.","ref":"ActivityPub.html"},{"type":"function","title":"ActivityPub.accept/1","doc":"Generates and federates an Accept activity via the data passed through `params`.","ref":"ActivityPub.html#accept/1"},{"type":"function","title":"ActivityPub.accept_activity/1","doc":"","ref":"ActivityPub.html#accept_activity/1"},{"type":"function","title":"ActivityPub.announce/1","doc":"","ref":"ActivityPub.html#announce/1"},{"type":"function","title":"ActivityPub.block/1","doc":"","ref":"ActivityPub.html#block/1"},{"type":"function","title":"ActivityPub.create/1","doc":"Generates and federates a Create activity via the data passed through `params`.","ref":"ActivityPub.html#create/1"},{"type":"function","title":"ActivityPub.delete/3","doc":"","ref":"ActivityPub.html#delete/3"},{"type":"function","title":"ActivityPub.flag/1","doc":"","ref":"ActivityPub.html#flag/1"},{"type":"function","title":"ActivityPub.follow/1","doc":"Generates and federates a Follow activity.\n\nNote: the follow should be reflected as a Follow on the host database side only after receiving an `Accept` activity in response (though you could register it as a Request if your app has that concept)","ref":"ActivityPub.html#follow/1"},{"type":"function","title":"ActivityPub.like/1","doc":"Record a Like","ref":"ActivityPub.html#like/1"},{"type":"function","title":"ActivityPub.move/4","doc":"","ref":"ActivityPub.html#move/4"},{"type":"function","title":"ActivityPub.reject/1","doc":"Generates and federates a Reject activity via the data passed through `params`.","ref":"ActivityPub.html#reject/1"},{"type":"function","title":"ActivityPub.unannounce/1","doc":"","ref":"ActivityPub.html#unannounce/1"},{"type":"function","title":"ActivityPub.unblock/1","doc":"","ref":"ActivityPub.html#unblock/1"},{"type":"function","title":"ActivityPub.unfollow/1","doc":"Generates and federates an Unfollow activity.","ref":"ActivityPub.html#unfollow/1"},{"type":"function","title":"ActivityPub.unlike/1","doc":"","ref":"ActivityPub.html#unlike/1"},{"type":"function","title":"ActivityPub.update/1","doc":"","ref":"ActivityPub.html#update/1"},{"type":"module","title":"ActivityPub.Actor","doc":"An ActivityPub Actor type and functions for dealing with actors.","ref":"ActivityPub.Actor.html"},{"type":"function","title":"ActivityPub.Actor.actor?/1","doc":"","ref":"ActivityPub.Actor.html#actor?/1"},{"type":"function","title":"ActivityPub.Actor.actor_url/1","doc":"","ref":"ActivityPub.Actor.html#actor_url/1"},{"type":"function","title":"ActivityPub.Actor.check_actor_is_active/1","doc":"","ref":"ActivityPub.Actor.html#check_actor_is_active/1"},{"type":"function","title":"ActivityPub.Actor.deactivate/1","doc":"","ref":"ActivityPub.Actor.html#deactivate/1"},{"type":"function","title":"ActivityPub.Actor.delete/1","doc":"","ref":"ActivityPub.Actor.html#delete/1"},{"type":"function","title":"ActivityPub.Actor.fetch_by_username/2","doc":"Fetches a remote actor by username in `username@domain.tld` format","ref":"ActivityPub.Actor.html#fetch_by_username/2"},{"type":"function","title":"ActivityPub.Actor.format_remote_actor/1","doc":"","ref":"ActivityPub.Actor.html#format_remote_actor/1"},{"type":"function","title":"ActivityPub.Actor.format_username/1","doc":"","ref":"ActivityPub.Actor.html#format_username/1"},{"type":"function","title":"ActivityPub.Actor.format_username/2","doc":"","ref":"ActivityPub.Actor.html#format_username/2"},{"type":"function","title":"ActivityPub.Actor.get_cached/1","doc":"","ref":"ActivityPub.Actor.html#get_cached/1"},{"type":"function","title":"ActivityPub.Actor.get_cached!/1","doc":"","ref":"ActivityPub.Actor.html#get_cached!/1"},{"type":"function","title":"ActivityPub.Actor.get_cached_or_fetch/1","doc":"Tries to get a local actor by username or tries to fetch it remotely if username is provided in `username@domain.tld` format.","ref":"ActivityPub.Actor.html#get_cached_or_fetch/1"},{"type":"function","title":"ActivityPub.Actor.get_external_followers/1","doc":"","ref":"ActivityPub.Actor.html#get_external_followers/1"},{"type":"function","title":"ActivityPub.Actor.get_followers/1","doc":"","ref":"ActivityPub.Actor.html#get_followers/1"},{"type":"function","title":"ActivityPub.Actor.get_followings/1","doc":"","ref":"ActivityPub.Actor.html#get_followings/1"},{"type":"function","title":"ActivityPub.Actor.invalidate_cache/1","doc":"","ref":"ActivityPub.Actor.html#invalidate_cache/1"},{"type":"function","title":"ActivityPub.Actor.maybe_create_actor_from_object/1","doc":"","ref":"ActivityPub.Actor.html#maybe_create_actor_from_object/1"},{"type":"function","title":"ActivityPub.Actor.reactivate/1","doc":"","ref":"ActivityPub.Actor.html#reactivate/1"},{"type":"function","title":"ActivityPub.Actor.save_actor_tombstone/2","doc":"","ref":"ActivityPub.Actor.html#save_actor_tombstone/2"},{"type":"function","title":"ActivityPub.Actor.set_cache/1","doc":"","ref":"ActivityPub.Actor.html#set_cache/1"},{"type":"function","title":"ActivityPub.Actor.swap_or_create_actor_tombstone/1","doc":"","ref":"ActivityPub.Actor.html#swap_or_create_actor_tombstone/1"},{"type":"function","title":"ActivityPub.Actor.update_actor/1","doc":"Updates an existing actor struct by its AP ID.","ref":"ActivityPub.Actor.html#update_actor/1"},{"type":"function","title":"ActivityPub.Actor.update_actor/2","doc":"","ref":"ActivityPub.Actor.html#update_actor/2"},{"type":"type","title":"ActivityPub.Actor.t/0","doc":"","ref":"ActivityPub.Actor.html#t:t/0"},{"type":"module","title":"ActivityPub.Config","doc":"","ref":"ActivityPub.Config.html"},{"type":"function","title":"ActivityPub.Config.actors_and_collections/0","doc":"","ref":"ActivityPub.Config.html#actors_and_collections/0"},{"type":"function","title":"ActivityPub.Config.collection_types/0","doc":"","ref":"ActivityPub.Config.html#collection_types/0"},{"type":"function","title":"ActivityPub.Config.delete/1","doc":"","ref":"ActivityPub.Config.html#delete/1"},{"type":"function","title":"ActivityPub.Config.env/0","doc":"","ref":"ActivityPub.Config.html#env/0"},{"type":"function","title":"ActivityPub.Config.federating?/0","doc":"","ref":"ActivityPub.Config.html#federating?/0"},{"type":"function","title":"ActivityPub.Config.get/1","doc":"","ref":"ActivityPub.Config.html#get/1"},{"type":"function","title":"ActivityPub.Config.get/2","doc":"","ref":"ActivityPub.Config.html#get/2"},{"type":"function","title":"ActivityPub.Config.get!/1","doc":"","ref":"ActivityPub.Config.html#get!/1"},{"type":"macro","title":"ActivityPub.Config.is_in/2","doc":"For matching against the above list in guards TODO: use runtime config","ref":"ActivityPub.Config.html#is_in/2"},{"type":"function","title":"ActivityPub.Config.public_uri/0","doc":"","ref":"ActivityPub.Config.html#public_uri/0"},{"type":"function","title":"ActivityPub.Config.public_uris/0","doc":"","ref":"ActivityPub.Config.html#public_uris/0"},{"type":"function","title":"ActivityPub.Config.put/2","doc":"","ref":"ActivityPub.Config.html#put/2"},{"type":"function","title":"ActivityPub.Config.supported_activity_types/0","doc":"","ref":"ActivityPub.Config.html#supported_activity_types/0"},{"type":"function","title":"ActivityPub.Config.supported_actor_types/0","doc":"","ref":"ActivityPub.Config.html#supported_actor_types/0"},{"type":"exception","title":"ActivityPub.Config.Error","doc":"","ref":"ActivityPub.Config.Error.html"},{"type":"module","title":"ActivityPub.Federator","doc":"","ref":"ActivityPub.Federator.html"},{"type":"function","title":"ActivityPub.Federator.enqueue_incoming_ap_doc/1","doc":"","ref":"ActivityPub.Federator.html#enqueue_incoming_ap_doc/1"},{"type":"function","title":"ActivityPub.Federator.perform/2","doc":"","ref":"ActivityPub.Federator.html#perform/2"},{"type":"function","title":"ActivityPub.Federator.perform/3","doc":"","ref":"ActivityPub.Federator.html#perform/3"},{"type":"function","title":"ActivityPub.Federator.publish/1","doc":"","ref":"ActivityPub.Federator.html#publish/1"},{"type":"module","title":"ActivityPub.Federator.APPublisher","doc":"","ref":"ActivityPub.Federator.APPublisher.html"},{"type":"function","title":"ActivityPub.Federator.APPublisher.determine_inbox/4","doc":"Determine a user inbox to use based on heuristics. These heuristics\nare based on an approximation of the ``sharedInbox`` rules in the\n[ActivityPub specification][ap-sharedinbox].\n\n [ap-sharedinbox]: https://www.w3.org/TR/activitypub/#shared-inbox-delivery","ref":"ActivityPub.Federator.APPublisher.html#determine_inbox/4"},{"type":"function","title":"ActivityPub.Federator.APPublisher.gather_webfinger_links/1","doc":"","ref":"ActivityPub.Federator.APPublisher.html#gather_webfinger_links/1"},{"type":"function","title":"ActivityPub.Federator.APPublisher.is_representable?/1","doc":"","ref":"ActivityPub.Federator.APPublisher.html#is_representable?/1"},{"type":"function","title":"ActivityPub.Federator.APPublisher.maybe_federate_to_search_index/2","doc":"If you put the URL of the shared inbox of an ActivityPub instance in the following env variable, all public content will be pushed there via AP federation for search indexing purposes: PUSH_ALL_PUBLIC_CONTENT_TO_INSTANCE\n#TODO: move to adapter","ref":"ActivityPub.Federator.APPublisher.html#maybe_federate_to_search_index/2"},{"type":"function","title":"ActivityPub.Federator.APPublisher.publish/2","doc":"","ref":"ActivityPub.Federator.APPublisher.html#publish/2"},{"type":"function","title":"ActivityPub.Federator.APPublisher.publish_one/1","doc":"Publish a single message to a peer. Takes a struct with the following\nparameters set:\n\n* `inbox`: the inbox to publish to\n* `json`: the JSON message body representing the ActivityPub message\n* `actor`: the actor which is signing the message\n* `id`: the ActivityStreams URI of the message","ref":"ActivityPub.Federator.APPublisher.html#publish_one/1"},{"type":"behaviour","title":"ActivityPub.Federator.Adapter","doc":"Contract for ActivityPub module adapters","ref":"ActivityPub.Federator.Adapter.html"},{"type":"function","title":"ActivityPub.Federator.Adapter.adapter/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#adapter/0"},{"type":"function","title":"ActivityPub.Federator.Adapter.base_url/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#base_url/0"},{"type":"callback","title":"ActivityPub.Federator.Adapter.base_url/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:base_url/0"},{"type":"function","title":"ActivityPub.Federator.Adapter.call_or/3","doc":"Run function from adapter if defined, otherwise return fallback value","ref":"ActivityPub.Federator.Adapter.html#call_or/3"},{"type":"function","title":"ActivityPub.Federator.Adapter.external_followers_for_activity/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#external_followers_for_activity/2"},{"type":"callback","title":"ActivityPub.Federator.Adapter.external_followers_for_activity/2","doc":"Compute and return a subset of followers that should receive a specific activity (optional)","ref":"ActivityPub.Federator.Adapter.html#c:external_followers_for_activity/2"},{"type":"function","title":"ActivityPub.Federator.Adapter.federate_actor?/3","doc":"Whether this (local or remote) actor has federation enabled and/or is blocked on this instance\n\nactor: the actor to check (eg. Alice)\ndirection: :in or :out - whether we're dealing with incoming federation or outgoing (optional)\nby_actor: optionally another actor (eg. if Alice is sending something to Bob, this would be Bob)","ref":"ActivityPub.Federator.Adapter.html#federate_actor?/3"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_actor_by_ap_id/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_actor_by_ap_id/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_actor_by_ap_id/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_actor_by_ap_id/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_actor_by_id/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_actor_by_id/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_actor_by_id/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_actor_by_id/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_actor_by_username/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_actor_by_username/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_actor_by_username/1","doc":"Fetch an actor given its preferred username","ref":"ActivityPub.Federator.Adapter.html#c:get_actor_by_username/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_follower_local_ids/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_follower_local_ids/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_follower_local_ids/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_follower_local_ids/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_following_local_ids/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_following_local_ids/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_following_local_ids/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_following_local_ids/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_locale/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_locale/0"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_locale/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:get_locale/0"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_or_create_service_actor/0","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_or_create_service_actor/0"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_or_create_service_actor/0","doc":"Creates an internal service actor by username, if missing.","ref":"ActivityPub.Federator.Adapter.html#c:get_or_create_service_actor/0"},{"type":"function","title":"ActivityPub.Federator.Adapter.get_redirect_url/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#get_redirect_url/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.get_redirect_url/1","doc":"Gets local url of an AP object to redirect in browser. Can take pointer id or an actor username.","ref":"ActivityPub.Federator.Adapter.html#c:get_redirect_url/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.handle_activity/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#handle_activity/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.handle_activity/1","doc":"Passes data to be handled by the host application","ref":"ActivityPub.Federator.Adapter.html#c:handle_activity/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.maybe_create_remote_actor/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#maybe_create_remote_actor/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.maybe_create_remote_actor/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:maybe_create_remote_actor/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.maybe_handle_activity/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#maybe_handle_activity/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.maybe_publish_object/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#maybe_publish_object/2"},{"type":"callback","title":"ActivityPub.Federator.Adapter.maybe_publish_object/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:maybe_publish_object/2"},{"type":"function","title":"ActivityPub.Federator.Adapter.update_local_actor/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#update_local_actor/2"},{"type":"callback","title":"ActivityPub.Federator.Adapter.update_local_actor/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:update_local_actor/2"},{"type":"function","title":"ActivityPub.Federator.Adapter.update_remote_actor/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#update_remote_actor/1"},{"type":"callback","title":"ActivityPub.Federator.Adapter.update_remote_actor/1","doc":"","ref":"ActivityPub.Federator.Adapter.html#c:update_remote_actor/1"},{"type":"function","title":"ActivityPub.Federator.Adapter.update_remote_actor/2","doc":"","ref":"ActivityPub.Federator.Adapter.html#update_remote_actor/2"},{"type":"module","title":"ActivityPub.Federator.Fetcher","doc":"Handles fetching AS2 objects from remote instances.","ref":"ActivityPub.Federator.Fetcher.html"},{"type":"function","title":"ActivityPub.Federator.Fetcher.allowed_recursion?/2","doc":"Returns `true` if the distance to target object does not exceed max configured value.\nServes to prevent fetching of very long threads, especially useful on smaller instances.\nAddresses memory leaks on recursive replies fetching.\nApplies to fetching of both ancestor (reply-to) and child (reply) objects.","ref":"ActivityPub.Federator.Fetcher.html#allowed_recursion?/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.enqueue_fetch/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#enqueue_fetch/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_collection/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_collection/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_fresh_object_from_id/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_fresh_object_from_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_object_from_id/2","doc":"Checks if an object exists in the AP and Adapter databases and fetches and creates it if not.","ref":"ActivityPub.Federator.Fetcher.html#fetch_object_from_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_objects_from_id/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_objects_from_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_outbox/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_outbox/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_remote_object_from_id/2","doc":"Fetches an AS2 object from remote AP ID.","ref":"ActivityPub.Federator.Fetcher.html#fetch_remote_object_from_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.fetch_replies/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#fetch_replies/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.get_cached_object_or_fetch_ap_id/2","doc":"Checks if an object exists in the AP database and fetches it if not (but does not send to Adapter).","ref":"ActivityPub.Federator.Fetcher.html#get_cached_object_or_fetch_ap_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.get_cached_object_or_fetch_pointer_id/2","doc":"Checks if an object exists in the AP database and prepares it if not (local objects only).","ref":"ActivityPub.Federator.Fetcher.html#get_cached_object_or_fetch_pointer_id/2"},{"type":"function","title":"ActivityPub.Federator.Fetcher.maybe_fetch/2","doc":"","ref":"ActivityPub.Federator.Fetcher.html#maybe_fetch/2"},{"type":"module","title":"ActivityPub.Federator.HTTP","doc":"Module for building and performing HTTP requests.","ref":"ActivityPub.Federator.HTTP.html"},{"type":"function","title":"ActivityPub.Federator.HTTP.delete/4","doc":"Makes a DELETE request\n\nsee `ActivityPub.Federator.HTTP.http_request/5`","ref":"ActivityPub.Federator.HTTP.html#delete/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.get/3","doc":"Makes a GET request\n\nsee `ActivityPub.Federator.HTTP.http_request/5`","ref":"ActivityPub.Federator.HTTP.html#get/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.http_request/5","doc":"Builds and perform http request.\n\n# Arguments:\n`method` - :get, :post, :put, :delete\n`url`\n`body`\n`headers` - a keyworld list of headers, e.g. `[{\"content-type\", \"text/plain\"}]`\n`options` - custom, per-request middleware or adapter options\n\n# Returns:\n`{:ok, %Tesla.Env{}}` or `{:error, error}`","ref":"ActivityPub.Federator.HTTP.html#http_request/5"},{"type":"function","title":"ActivityPub.Federator.HTTP.post/4","doc":"Makes a POST request\n\nsee `ActivityPub.Federator.HTTP.http_request/5`","ref":"ActivityPub.Federator.HTTP.html#post/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.put/4","doc":"Makes a PUT request\n\nsee `ActivityPub.Federator.HTTP.http_request/5`","ref":"ActivityPub.Federator.HTTP.html#put/4"},{"type":"type","title":"ActivityPub.Federator.HTTP.t/0","doc":"","ref":"ActivityPub.Federator.HTTP.html#t:t/0"},{"type":"module","title":"ActivityPub.Federator.HTTP.Connection","doc":"Specifies connection options for HTTP requests","ref":"ActivityPub.Federator.HTTP.Connection.html"},{"type":"function","title":"ActivityPub.Federator.HTTP.Connection.adapter_options/2","doc":"","ref":"ActivityPub.Federator.HTTP.Connection.html#adapter_options/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.Connection.new/1","doc":"","ref":"ActivityPub.Federator.HTTP.Connection.html#new/1"},{"type":"module","title":"ActivityPub.Federator.HTTP.RateLimit","doc":"Rate limit middleware for Tesla using Hammer\nBased on `TeslaExtra.RateLimit` and `TeslaExtra.RetryAfter`","ref":"ActivityPub.Federator.HTTP.RateLimit.html"},{"type":"module","title":"ActivityPub.Federator.HTTP.RequestBuilder","doc":"Helper functions for building HTTP requests","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.add_param/4","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#add_param/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.headers/2","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#headers/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.method/2","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#method/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.opts/2","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#opts/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.RequestBuilder.url/2","doc":"","ref":"ActivityPub.Federator.HTTP.RequestBuilder.html#url/2"},{"type":"module","title":"ActivityPub.Federator.HTTP.RetryAfter","doc":"Takes into account the Retry-After header returned by the server when the rate limit is exceeded.\n\nBased on `TeslaExtra.RetryAfter`","ref":"ActivityPub.Federator.HTTP.RetryAfter.html"},{"type":"module","title":"ActivityPub.Federator.HTTP.Tesla","doc":"","ref":"ActivityPub.Federator.HTTP.Tesla.html"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.delete/3","doc":"Perform a DELETE request.\n\nSee `request/1` or `request/2` for options definition.\n\n delete(\"/users\")\n delete(\"/users\", query: [scope: \"admin\"])\n delete(client, \"/users\")\n delete(client, \"/users\", query: [scope: \"admin\"])\n delete(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#delete/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.delete!/3","doc":"Perform a DELETE request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n delete!(\"/users\")\n delete!(\"/users\", query: [scope: \"admin\"])\n delete!(client, \"/users\")\n delete!(client, \"/users\", query: [scope: \"admin\"])\n delete!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#delete!/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.get/3","doc":"Perform a GET request.\n\nSee `request/1` or `request/2` for options definition.\n\n get(\"/users\")\n get(\"/users\", query: [scope: \"admin\"])\n get(client, \"/users\")\n get(client, \"/users\", query: [scope: \"admin\"])\n get(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#get/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.get!/3","doc":"Perform a GET request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n get!(\"/users\")\n get!(\"/users\", query: [scope: \"admin\"])\n get!(client, \"/users\")\n get!(client, \"/users\", query: [scope: \"admin\"])\n get!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#get!/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.head/3","doc":"Perform a HEAD request.\n\nSee `request/1` or `request/2` for options definition.\n\n head(\"/users\")\n head(\"/users\", query: [scope: \"admin\"])\n head(client, \"/users\")\n head(client, \"/users\", query: [scope: \"admin\"])\n head(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#head/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.head!/3","doc":"Perform a HEAD request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n head!(\"/users\")\n head!(\"/users\", query: [scope: \"admin\"])\n head!(client, \"/users\")\n head!(client, \"/users\", query: [scope: \"admin\"])\n head!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#head!/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.options/3","doc":"Perform a OPTIONS request.\n\nSee `request/1` or `request/2` for options definition.\n\n options(\"/users\")\n options(\"/users\", query: [scope: \"admin\"])\n options(client, \"/users\")\n options(client, \"/users\", query: [scope: \"admin\"])\n options(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#options/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.options!/3","doc":"Perform a OPTIONS request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n options!(\"/users\")\n options!(\"/users\", query: [scope: \"admin\"])\n options!(client, \"/users\")\n options!(client, \"/users\", query: [scope: \"admin\"])\n options!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#options!/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.patch/4","doc":"Perform a PATCH request.\n\nSee `request/1` or `request/2` for options definition.\n\n patch(\"/users\", %{name: \"Jon\"})\n patch(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n patch(client, \"/users\", %{name: \"Jon\"})\n patch(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#patch/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.patch!/4","doc":"Perform a PATCH request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n patch!(\"/users\", %{name: \"Jon\"})\n patch!(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n patch!(client, \"/users\", %{name: \"Jon\"})\n patch!(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#patch!/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.post/4","doc":"Perform a POST request.\n\nSee `request/1` or `request/2` for options definition.\n\n post(\"/users\", %{name: \"Jon\"})\n post(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n post(client, \"/users\", %{name: \"Jon\"})\n post(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#post/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.post!/4","doc":"Perform a POST request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n post!(\"/users\", %{name: \"Jon\"})\n post!(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n post!(client, \"/users\", %{name: \"Jon\"})\n post!(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#post!/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.put/4","doc":"Perform a PUT request.\n\nSee `request/1` or `request/2` for options definition.\n\n put(\"/users\", %{name: \"Jon\"})\n put(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n put(client, \"/users\", %{name: \"Jon\"})\n put(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#put/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.put!/4","doc":"Perform a PUT request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n put!(\"/users\", %{name: \"Jon\"})\n put!(\"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])\n put!(client, \"/users\", %{name: \"Jon\"})\n put!(client, \"/users\", %{name: \"Jon\"}, query: [scope: \"admin\"])","ref":"ActivityPub.Federator.HTTP.Tesla.html#put!/4"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.request/2","doc":"Perform a request.","ref":"ActivityPub.Federator.HTTP.Tesla.html#request/2"},{"type":"function","title":"Options - ActivityPub.Federator.HTTP.Tesla.request/2","doc":"- `:method` - the request method, one of [`:head`, `:get`, `:delete`, `:trace`, `:options`, `:post`, `:put`, `:patch`]\n- `:url` - either full url e.g. \"http://example.com/some/path\" or just \"/some/path\" if using `Tesla.Middleware.BaseUrl`\n- `:query` - a keyword list of query params, e.g. `[page: 1, per_page: 100]`\n- `:headers` - a keyworld list of headers, e.g. `[{\"content-type\", \"text/plain\"}]`\n- `:body` - depends on used middleware:\n - by default it can be a binary\n - if using e.g. JSON encoding middleware it can be a nested map\n - if adapter supports it it can be a Stream with any of the above\n- `:opts` - custom, per-request middleware or adapter options","ref":"ActivityPub.Federator.HTTP.Tesla.html#request/2-options"},{"type":"function","title":"Examples - ActivityPub.Federator.HTTP.Tesla.request/2","doc":"ExampleApi.request(method: :get, url: \"/users/path\")\n\n # use shortcut methods\n ExampleApi.get(\"/users/1\")\n ExampleApi.post(client, \"/users\", %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#request/2-examples"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.request!/2","doc":"Perform request and raise in case of error.\n\nThis is similar to `request/2` behaviour from Tesla 0.x\n\nSee `request/2` for list of available options.","ref":"ActivityPub.Federator.HTTP.Tesla.html#request!/2"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.trace/3","doc":"Perform a TRACE request.\n\nSee `request/1` or `request/2` for options definition.\n\n trace(\"/users\")\n trace(\"/users\", query: [scope: \"admin\"])\n trace(client, \"/users\")\n trace(client, \"/users\", query: [scope: \"admin\"])\n trace(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#trace/3"},{"type":"function","title":"ActivityPub.Federator.HTTP.Tesla.trace!/3","doc":"Perform a TRACE request.\n\nSee `request!/1` or `request!/2` for options definition.\n\n trace!(\"/users\")\n trace!(\"/users\", query: [scope: \"admin\"])\n trace!(client, \"/users\")\n trace!(client, \"/users\", query: [scope: \"admin\"])\n trace!(client, \"/users\", body: %{name: \"Jon\"})","ref":"ActivityPub.Federator.HTTP.Tesla.html#trace!/3"},{"type":"type","title":"ActivityPub.Federator.HTTP.Tesla.option/0","doc":"Options that may be passed to a request function. See `request/2` for detailed descriptions.","ref":"ActivityPub.Federator.HTTP.Tesla.html#t:option/0"},{"type":"behaviour","title":"ActivityPub.Federator.Publisher","doc":"Defines the contract used by federation implementations to publish messages to\ntheir peers.\n# TODO: why not use `APPublisher` directly instead?","ref":"ActivityPub.Federator.Publisher.html"},{"type":"function","title":"ActivityPub.Federator.Publisher.enqueue_one/2","doc":"Enqueue publishing a single activity.","ref":"ActivityPub.Federator.Publisher.html#enqueue_one/2"},{"type":"function","title":"ActivityPub.Federator.Publisher.gather_webfinger_links/1","doc":"","ref":"ActivityPub.Federator.Publisher.html#gather_webfinger_links/1"},{"type":"callback","title":"ActivityPub.Federator.Publisher.gather_webfinger_links/1","doc":"Gathers links used by an outgoing federation module for WebFinger output.","ref":"ActivityPub.Federator.Publisher.html#c:gather_webfinger_links/1"},{"type":"callback","title":"ActivityPub.Federator.Publisher.is_representable?/1","doc":"Determine whether an activity can be relayed using the federation module.","ref":"ActivityPub.Federator.Publisher.html#c:is_representable?/1"},{"type":"function","title":"ActivityPub.Federator.Publisher.publish/2","doc":"","ref":"ActivityPub.Federator.Publisher.html#publish/2"},{"type":"callback","title":"ActivityPub.Federator.Publisher.publish/2","doc":"Relays an activity to all specified peers.","ref":"ActivityPub.Federator.Publisher.html#c:publish/2"},{"type":"callback","title":"ActivityPub.Federator.Publisher.publish_one/1","doc":"Relays an activity to a specified peer, determined by the parameters. The\nparameters used are controlled by the federation module.","ref":"ActivityPub.Federator.Publisher.html#c:publish_one/1"},{"type":"module","title":"ActivityPub.Federator.Transformer","doc":"This module normalises outgoing data to conform with AS2/AP specs\nand handles incoming objects and activities","ref":"ActivityPub.Federator.Transformer.html"},{"type":"function","title":"ActivityPub.Federator.Transformer.add_emoji_tags/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#add_emoji_tags/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.determine_explicit_mentions/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#determine_explicit_mentions/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_actor/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_actor/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_addressing/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_addressing/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_addressing_list/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_addressing_list/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_attachments/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_attachments/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_content_map/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_content_map/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_context/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_context/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_emoji/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_emoji/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_explicit_addressing/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_explicit_addressing/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_in_reply_to/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_in_reply_to/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_object/2","doc":"Modifies an incoming AP object (mastodon format) to our internal format.","ref":"ActivityPub.Federator.Transformer.html#fix_object/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_quote_url/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_quote_url/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_replies/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_replies/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_summary/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_summary/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_tag/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_tag/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.fix_url/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#fix_url/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.format_input/3","doc":"","ref":"ActivityPub.Federator.Transformer.html#format_input/3"},{"type":"function","title":"ActivityPub.Federator.Transformer.handle_incoming/1","doc":"Handles incoming data, inserts it into the database and triggers side effects if the data is a supported activity type.","ref":"ActivityPub.Federator.Transformer.html#handle_incoming/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.maybe_handle_other_activity/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#maybe_handle_other_activity/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.maybe_handle_other_object/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#maybe_handle_other_object/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.prepare_outgoing/1","doc":"Translates MN Entity to an AP compatible format","ref":"ActivityPub.Federator.Transformer.html#prepare_outgoing/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.preserve_privacy_of_outgoing/2","doc":"","ref":"ActivityPub.Federator.Transformer.html#preserve_privacy_of_outgoing/2"},{"type":"function","title":"ActivityPub.Federator.Transformer.replies/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#replies/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.set_replies/1","doc":"Serialized Mastodon-compatible `replies` collection containing _self-replies_.\nBased on Mastodon's ActivityPub::NoteSerializer#replies.","ref":"ActivityPub.Federator.Transformer.html#set_replies/1"},{"type":"function","title":"ActivityPub.Federator.Transformer.take_emoji_tags/1","doc":"","ref":"ActivityPub.Federator.Transformer.html#take_emoji_tags/1"},{"type":"module","title":"ActivityPub.Federator.WebFinger","doc":"Serves and fetches data (mainly actor URI) necessary for federation when only the username and host is known.","ref":"ActivityPub.Federator.WebFinger.html"},{"type":"function","title":"ActivityPub.Federator.WebFinger.base_url/1","doc":"","ref":"ActivityPub.Federator.WebFinger.html#base_url/1"},{"type":"function","title":"ActivityPub.Federator.WebFinger.finger/1","doc":"Fetches webfinger data for an account given in \"@username@domain.tld\" format.","ref":"ActivityPub.Federator.WebFinger.html#finger/1"},{"type":"function","title":"ActivityPub.Federator.WebFinger.output/1","doc":"Serves a webfinger response for the requested username.","ref":"ActivityPub.Federator.WebFinger.html#output/1"},{"type":"function","title":"ActivityPub.Federator.WebFinger.represent_user/1","doc":"Formats gathered data into a JRD format.","ref":"ActivityPub.Federator.WebFinger.html#represent_user/1"},{"type":"function","title":"ActivityPub.Federator.WebFinger.webfinger_from_json/1","doc":"","ref":"ActivityPub.Federator.WebFinger.html#webfinger_from_json/1"},{"type":"module","title":"ActivityPub.Federator.Worker","doc":"Helpers for workers to `use`","ref":"ActivityPub.Federator.Worker.html"},{"type":"function","title":"ActivityPub.Federator.Worker.worker_args/1","doc":"","ref":"ActivityPub.Federator.Worker.html#worker_args/1"},{"type":"module","title":"ActivityPub.Federator.Workers.PublisherWorker","doc":"","ref":"ActivityPub.Federator.Workers.PublisherWorker.html"},{"type":"function","title":"ActivityPub.Federator.Workers.PublisherWorker.enqueue/3","doc":"","ref":"ActivityPub.Federator.Workers.PublisherWorker.html#enqueue/3"},{"type":"function","title":"ActivityPub.Federator.Workers.PublisherWorker.enqueueable/3","doc":"","ref":"ActivityPub.Federator.Workers.PublisherWorker.html#enqueueable/3"},{"type":"module","title":"ActivityPub.Federator.Workers.ReceiverWorker","doc":"","ref":"ActivityPub.Federator.Workers.ReceiverWorker.html"},{"type":"function","title":"ActivityPub.Federator.Workers.ReceiverWorker.enqueue/3","doc":"","ref":"ActivityPub.Federator.Workers.ReceiverWorker.html#enqueue/3"},{"type":"function","title":"ActivityPub.Federator.Workers.ReceiverWorker.enqueueable/3","doc":"","ref":"ActivityPub.Federator.Workers.ReceiverWorker.html#enqueueable/3"},{"type":"module","title":"ActivityPub.Federator.Workers.RemoteFetcherWorker","doc":"","ref":"ActivityPub.Federator.Workers.RemoteFetcherWorker.html"},{"type":"function","title":"ActivityPub.Federator.Workers.RemoteFetcherWorker.enqueue/3","doc":"","ref":"ActivityPub.Federator.Workers.RemoteFetcherWorker.html#enqueue/3"},{"type":"function","title":"ActivityPub.Federator.Workers.RemoteFetcherWorker.enqueueable/3","doc":"","ref":"ActivityPub.Federator.Workers.RemoteFetcherWorker.html#enqueueable/3"},{"type":"module","title":"ActivityPub.Fixtures","doc":"","ref":"ActivityPub.Fixtures.html"},{"type":"function","title":"ActivityPub.Fixtures.file/1","doc":"","ref":"ActivityPub.Fixtures.html#file/1"},{"type":"function","title":"ActivityPub.Fixtures.fixtures/0","doc":"","ref":"ActivityPub.Fixtures.html#fixtures/0"},{"type":"function","title":"ActivityPub.Fixtures.fixtures_generic/0","doc":"","ref":"ActivityPub.Fixtures.html#fixtures_generic/0"},{"type":"function","title":"ActivityPub.Fixtures.fixtures_get/0","doc":"","ref":"ActivityPub.Fixtures.html#fixtures_get/0"},{"type":"function","title":"ActivityPub.Fixtures.get/4","doc":"","ref":"ActivityPub.Fixtures.html#get/4"},{"type":"function","title":"ActivityPub.Fixtures.head/4","doc":"","ref":"ActivityPub.Fixtures.html#head/4"},{"type":"function","title":"ActivityPub.Fixtures.insert/1","doc":"","ref":"ActivityPub.Fixtures.html#insert/1"},{"type":"function","title":"ActivityPub.Fixtures.insert_all/0","doc":"","ref":"ActivityPub.Fixtures.html#insert_all/0"},{"type":"function","title":"ActivityPub.Fixtures.maybe_get_local/4","doc":"","ref":"ActivityPub.Fixtures.html#maybe_get_local/4"},{"type":"function","title":"ActivityPub.Fixtures.mock_global/1","doc":"","ref":"ActivityPub.Fixtures.html#mock_global/1"},{"type":"function","title":"ActivityPub.Fixtures.none/4","doc":"","ref":"ActivityPub.Fixtures.html#none/4"},{"type":"function","title":"ActivityPub.Fixtures.post/4","doc":"","ref":"ActivityPub.Fixtures.html#post/4"},{"type":"function","title":"ActivityPub.Fixtures.request/1","doc":"","ref":"ActivityPub.Fixtures.html#request/1"},{"type":"module","title":"ActivityPub.Instances","doc":"Instances context.","ref":"ActivityPub.Instances.html"},{"type":"function","title":"ActivityPub.Instances.filter_reachable/1","doc":"","ref":"ActivityPub.Instances.html#filter_reachable/1"},{"type":"function","title":"ActivityPub.Instances.host/1","doc":"","ref":"ActivityPub.Instances.html#host/1"},{"type":"function","title":"ActivityPub.Instances.reachability_datetime_threshold/0","doc":"","ref":"ActivityPub.Instances.html#reachability_datetime_threshold/0"},{"type":"function","title":"ActivityPub.Instances.reachable?/1","doc":"","ref":"ActivityPub.Instances.html#reachable?/1"},{"type":"function","title":"ActivityPub.Instances.set_consistently_unreachable/1","doc":"","ref":"ActivityPub.Instances.html#set_consistently_unreachable/1"},{"type":"function","title":"ActivityPub.Instances.set_reachable/1","doc":"","ref":"ActivityPub.Instances.html#set_reachable/1"},{"type":"function","title":"ActivityPub.Instances.set_unreachable/2","doc":"","ref":"ActivityPub.Instances.html#set_unreachable/2"},{"type":"module","title":"ActivityPub.Instances.Instance","doc":"Instance.","ref":"ActivityPub.Instances.Instance.html"},{"type":"function","title":"ActivityPub.Instances.Instance.changeset/2","doc":"","ref":"ActivityPub.Instances.Instance.html#changeset/2"},{"type":"function","title":"ActivityPub.Instances.Instance.do_set_reachable/1","doc":"","ref":"ActivityPub.Instances.Instance.html#do_set_reachable/1"},{"type":"function","title":"ActivityPub.Instances.Instance.filter_reachable/1","doc":"","ref":"ActivityPub.Instances.Instance.html#filter_reachable/1"},{"type":"function","title":"ActivityPub.Instances.Instance.host/1","doc":"","ref":"ActivityPub.Instances.Instance.html#host/1"},{"type":"function","title":"ActivityPub.Instances.Instance.reachable?/1","doc":"","ref":"ActivityPub.Instances.Instance.html#reachable?/1"},{"type":"function","title":"ActivityPub.Instances.Instance.set_reachable/1","doc":"","ref":"ActivityPub.Instances.Instance.html#set_reachable/1"},{"type":"function","title":"ActivityPub.Instances.Instance.set_unreachable/2","doc":"","ref":"ActivityPub.Instances.Instance.html#set_unreachable/2"},{"type":"behaviour","title":"ActivityPub.MRF","doc":"","ref":"ActivityPub.MRF.html"},{"type":"function","title":"ActivityPub.MRF.filter/2","doc":"","ref":"ActivityPub.MRF.html#filter/2"},{"type":"callback","title":"ActivityPub.MRF.filter/2","doc":"","ref":"ActivityPub.MRF.html#c:filter/2"},{"type":"function","title":"ActivityPub.MRF.filter/3","doc":"","ref":"ActivityPub.MRF.html#filter/3"},{"type":"function","title":"ActivityPub.MRF.get_policies/0","doc":"","ref":"ActivityPub.MRF.html#get_policies/0"},{"type":"function","title":"ActivityPub.MRF.subdomain_match?/2","doc":"","ref":"ActivityPub.MRF.html#subdomain_match?/2"},{"type":"function","title":"ActivityPub.MRF.subdomains_regex/1","doc":"","ref":"ActivityPub.MRF.html#subdomains_regex/1"},{"type":"module","title":"ActivityPub.MRF.SimplePolicy","doc":"Filter activities depending on their origin instance","ref":"ActivityPub.MRF.SimplePolicy.html"},{"type":"function","title":"ActivityPub.MRF.SimplePolicy.check_reject/2","doc":"","ref":"ActivityPub.MRF.SimplePolicy.html#check_reject/2"},{"type":"module","title":"ActivityPub.Object","doc":"","ref":"ActivityPub.Object.html"},{"type":"function","title":"ActivityPub.Object.actor_from_data/1","doc":"","ref":"ActivityPub.Object.html#actor_from_data/1"},{"type":"function","title":"ActivityPub.Object.actor_id_from_data/1","doc":"","ref":"ActivityPub.Object.html#actor_id_from_data/1"},{"type":"function","title":"ActivityPub.Object.changeset/1","doc":"","ref":"ActivityPub.Object.html#changeset/1"},{"type":"function","title":"ActivityPub.Object.changeset/2","doc":"","ref":"ActivityPub.Object.html#changeset/2"},{"type":"function","title":"ActivityPub.Object.common_changeset/1","doc":"","ref":"ActivityPub.Object.html#common_changeset/1"},{"type":"function","title":"ActivityPub.Object.delete/1","doc":"","ref":"ActivityPub.Object.html#delete/1"},{"type":"function","title":"ActivityPub.Object.do_insert/1","doc":"","ref":"ActivityPub.Object.html#do_insert/1"},{"type":"function","title":"ActivityPub.Object.do_update_existing/2","doc":"","ref":"ActivityPub.Object.html#do_update_existing/2"},{"type":"function","title":"ActivityPub.Object.fetch_latest_block/2","doc":"","ref":"ActivityPub.Object.html#fetch_latest_block/2"},{"type":"function","title":"ActivityPub.Object.fetch_latest_follow/2","doc":"","ref":"ActivityPub.Object.html#fetch_latest_follow/2"},{"type":"function","title":"ActivityPub.Object.get_activity_for_object_ap_id/2","doc":"","ref":"ActivityPub.Object.html#get_activity_for_object_ap_id/2"},{"type":"function","title":"ActivityPub.Object.get_ap_id/1","doc":"","ref":"ActivityPub.Object.html#get_ap_id/1"},{"type":"function","title":"ActivityPub.Object.get_cached/1","doc":"","ref":"ActivityPub.Object.html#get_cached/1"},{"type":"function","title":"ActivityPub.Object.get_cached!/1","doc":"","ref":"ActivityPub.Object.html#get_cached!/1"},{"type":"function","title":"ActivityPub.Object.get_existing_announce/2","doc":"Retruns an existing announce activity if the notice has already been announced","ref":"ActivityPub.Object.html#get_existing_announce/2"},{"type":"function","title":"ActivityPub.Object.get_existing_like/2","doc":"Returns an existing like if a user already liked an object","ref":"ActivityPub.Object.html#get_existing_like/2"},{"type":"function","title":"ActivityPub.Object.get_follow_activity/2","doc":"","ref":"ActivityPub.Object.html#get_follow_activity/2"},{"type":"function","title":"ActivityPub.Object.get_outbox_for_actor/2","doc":"","ref":"ActivityPub.Object.html#get_outbox_for_actor/2"},{"type":"function","title":"ActivityPub.Object.get_outbox_for_instance/0","doc":"","ref":"ActivityPub.Object.html#get_outbox_for_instance/0"},{"type":"function","title":"ActivityPub.Object.get_uncached/1","doc":"","ref":"ActivityPub.Object.html#get_uncached/1"},{"type":"function","title":"ActivityPub.Object.hard_delete/1","doc":"","ref":"ActivityPub.Object.html#hard_delete/1"},{"type":"function","title":"ActivityPub.Object.hashtags/1","doc":"","ref":"ActivityPub.Object.html#hashtags/1"},{"type":"function","title":"ActivityPub.Object.invalidate_cache/1","doc":"","ref":"ActivityPub.Object.html#invalidate_cache/1"},{"type":"function","title":"ActivityPub.Object.make_tombstone/2","doc":"","ref":"ActivityPub.Object.html#make_tombstone/2"},{"type":"function","title":"ActivityPub.Object.maybe_fetch/2","doc":"","ref":"ActivityPub.Object.html#maybe_fetch/2"},{"type":"function","title":"ActivityPub.Object.maybe_upsert/3","doc":"","ref":"ActivityPub.Object.html#maybe_upsert/3"},{"type":"function","title":"ActivityPub.Object.normalize/3","doc":"","ref":"ActivityPub.Object.html#normalize/3"},{"type":"function","title":"ActivityPub.Object.normalize_actors/1","doc":"","ref":"ActivityPub.Object.html#normalize_actors/1"},{"type":"function","title":"ActivityPub.Object.normalize_params/3","doc":"","ref":"ActivityPub.Object.html#normalize_params/3"},{"type":"function","title":"ActivityPub.Object.object_url/1","doc":"","ref":"ActivityPub.Object.html#object_url/1"},{"type":"function","title":"ActivityPub.Object.prepare_data/4","doc":"Prepares a struct to be inserted into the objects table","ref":"ActivityPub.Object.html#prepare_data/4"},{"type":"function","title":"ActivityPub.Object.self_replies_ids/2","doc":"","ref":"ActivityPub.Object.html#self_replies_ids/2"},{"type":"function","title":"ActivityPub.Object.set_cache/1","doc":"","ref":"ActivityPub.Object.html#set_cache/1"},{"type":"function","title":"ActivityPub.Object.swap_object_with_tombstone/1","doc":"","ref":"ActivityPub.Object.html#swap_object_with_tombstone/1"},{"type":"function","title":"ActivityPub.Object.update_and_set_cache/1","doc":"","ref":"ActivityPub.Object.html#update_and_set_cache/1"},{"type":"function","title":"ActivityPub.Object.update_changeset/2","doc":"","ref":"ActivityPub.Object.html#update_changeset/2"},{"type":"function","title":"ActivityPub.Object.update_existing/2","doc":"","ref":"ActivityPub.Object.html#update_existing/2"},{"type":"function","title":"ActivityPub.Object.update_state/3","doc":"Updates a follow activity's state (for locked accounts).","ref":"ActivityPub.Object.html#update_state/3"},{"type":"type","title":"ActivityPub.Object.t/0","doc":"","ref":"ActivityPub.Object.html#t:t/0"},{"type":"module","title":"ActivityPub.Pruner","doc":"Prunes objects from the database.","ref":"ActivityPub.Pruner.html"},{"type":"function","title":"ActivityPub.Pruner.prune_all/1","doc":"","ref":"ActivityPub.Pruner.html#prune_all/1"},{"type":"function","title":"ActivityPub.Pruner.prune_deletes/1","doc":"","ref":"ActivityPub.Pruner.html#prune_deletes/1"},{"type":"function","title":"ActivityPub.Pruner.prune_objects/1","doc":"","ref":"ActivityPub.Pruner.html#prune_objects/1"},{"type":"function","title":"ActivityPub.Pruner.prune_orphaned_activities/0","doc":"","ref":"ActivityPub.Pruner.html#prune_orphaned_activities/0"},{"type":"function","title":"ActivityPub.Pruner.prune_removes/1","doc":"","ref":"ActivityPub.Pruner.html#prune_removes/1"},{"type":"function","title":"ActivityPub.Pruner.prune_stale_follow_requests/1","doc":"","ref":"ActivityPub.Pruner.html#prune_stale_follow_requests/1"},{"type":"function","title":"ActivityPub.Pruner.prune_tombstones/1","doc":"","ref":"ActivityPub.Pruner.html#prune_tombstones/1"},{"type":"function","title":"ActivityPub.Pruner.prune_undos/1","doc":"","ref":"ActivityPub.Pruner.html#prune_undos/1"},{"type":"function","title":"ActivityPub.Pruner.remove_embedded_objects/0","doc":"","ref":"ActivityPub.Pruner.html#remove_embedded_objects/0"},{"type":"module","title":"ActivityPub.Pruner.PruneDatabaseWorker","doc":"The worker to prune old data from the database.","ref":"ActivityPub.Pruner.PruneDatabaseWorker.html"},{"type":"module","title":"ActivityPub.Queries","doc":"Contains queries for Object.","ref":"ActivityPub.Queries.html"},{"type":"function","title":"ActivityPub.Queries.activity_by_object_ap_id/2","doc":"","ref":"ActivityPub.Queries.html#activity_by_object_ap_id/2"},{"type":"function","title":"ActivityPub.Queries.by_actor/2","doc":"","ref":"ActivityPub.Queries.html#by_actor/2"},{"type":"function","title":"ActivityPub.Queries.by_ap_id/2","doc":"","ref":"ActivityPub.Queries.html#by_ap_id/2"},{"type":"function","title":"ActivityPub.Queries.by_id/2","doc":"","ref":"ActivityPub.Queries.html#by_id/2"},{"type":"function","title":"ActivityPub.Queries.by_object_id/2","doc":"","ref":"ActivityPub.Queries.html#by_object_id/2"},{"type":"function","title":"ActivityPub.Queries.by_object_in_reply_to_id/3","doc":"","ref":"ActivityPub.Queries.html#by_object_in_reply_to_id/3"},{"type":"function","title":"ActivityPub.Queries.by_type/2","doc":"","ref":"ActivityPub.Queries.html#by_type/2"},{"type":"function","title":"ActivityPub.Queries.exclude_type/2","doc":"","ref":"ActivityPub.Queries.html#exclude_type/2"},{"type":"function","title":"ActivityPub.Queries.find_by_object_ap_id/2","doc":"","ref":"ActivityPub.Queries.html#find_by_object_ap_id/2"},{"type":"function","title":"ActivityPub.Queries.last_follow/2","doc":"","ref":"ActivityPub.Queries.html#last_follow/2"},{"type":"function","title":"ActivityPub.Queries.replies/2","doc":"","ref":"ActivityPub.Queries.html#replies/2"},{"type":"function","title":"ActivityPub.Queries.self_replies/1","doc":"","ref":"ActivityPub.Queries.html#self_replies/1"},{"type":"function","title":"ActivityPub.Queries.with_joined_activity/3","doc":"","ref":"ActivityPub.Queries.html#with_joined_activity/3"},{"type":"function","title":"ActivityPub.Queries.with_joined_object/2","doc":"","ref":"ActivityPub.Queries.html#with_joined_object/2"},{"type":"function","title":"ActivityPub.Queries.with_preloaded_object/2","doc":"","ref":"ActivityPub.Queries.html#with_preloaded_object/2"},{"type":"type","title":"ActivityPub.Queries.query/0","doc":"","ref":"ActivityPub.Queries.html#t:query/0"},{"type":"module","title":"ActivityPub.Safety.Containment","doc":"This module contains some useful functions for containing objects to specific\norigins and determining those origins. They previously lived in the\nActivityPub `Transformer` module.\n\nObject containment is an important step in validating remote objects to prevent\nspoofing, therefore removal of object containment functions is NOT recommended.","ref":"ActivityPub.Safety.Containment.html"},{"type":"function","title":"ActivityPub.Safety.Containment.contain_child/1","doc":"","ref":"ActivityPub.Safety.Containment.html#contain_child/1"},{"type":"function","title":"ActivityPub.Safety.Containment.contain_origin/2","doc":"Checks that an imported AP object's actor matches the host it came from.","ref":"ActivityPub.Safety.Containment.html#contain_origin/2"},{"type":"function","title":"ActivityPub.Safety.Containment.contain_origin_from_id/2","doc":"","ref":"ActivityPub.Safety.Containment.html#contain_origin_from_id/2"},{"type":"function","title":"ActivityPub.Safety.Containment.contain_uri/2","doc":"","ref":"ActivityPub.Safety.Containment.html#contain_uri/2"},{"type":"function","title":"ActivityPub.Safety.Containment.get_object/1","doc":"","ref":"ActivityPub.Safety.Containment.html#get_object/1"},{"type":"function","title":"ActivityPub.Safety.Containment.is_public?/1","doc":"","ref":"ActivityPub.Safety.Containment.html#is_public?/1"},{"type":"function","title":"ActivityPub.Safety.Containment.restrict_unauthenticated_access?/1","doc":"","ref":"ActivityPub.Safety.Containment.html#restrict_unauthenticated_access?/1"},{"type":"function","title":"ActivityPub.Safety.Containment.restrict_unauthenticated_access?/2","doc":"","ref":"ActivityPub.Safety.Containment.html#restrict_unauthenticated_access?/2"},{"type":"function","title":"ActivityPub.Safety.Containment.visible_for_user?/2","doc":"","ref":"ActivityPub.Safety.Containment.html#visible_for_user?/2"},{"type":"module","title":"ActivityPub.Safety.Keys","doc":"Handles RSA keys for Actors & helpers for HTTP signatures","ref":"ActivityPub.Safety.Keys.html"},{"type":"function","title":"ActivityPub.Safety.Keys.add_public_key/2","doc":"","ref":"ActivityPub.Safety.Keys.html#add_public_key/2"},{"type":"function","title":"ActivityPub.Safety.Keys.cast_uri/1","doc":"","ref":"ActivityPub.Safety.Keys.html#cast_uri/1"},{"type":"function","title":"ActivityPub.Safety.Keys.ensure_keys_present/1","doc":"Checks if an actor struct has a non-nil keys field and generates a PEM if it doesn't.","ref":"ActivityPub.Safety.Keys.html#ensure_keys_present/1"},{"type":"function","title":"ActivityPub.Safety.Keys.generate_rsa_pem/0","doc":"","ref":"ActivityPub.Safety.Keys.html#generate_rsa_pem/0"},{"type":"function","title":"ActivityPub.Safety.Keys.get_public_key_for_ap_id/1","doc":"Fetches the public key for given actor AP ID.","ref":"ActivityPub.Safety.Keys.html#get_public_key_for_ap_id/1"},{"type":"function","title":"ActivityPub.Safety.Keys.http_host/1","doc":"","ref":"ActivityPub.Safety.Keys.html#http_host/1"},{"type":"function","title":"ActivityPub.Safety.Keys.key_id_to_actor_id/1","doc":"","ref":"ActivityPub.Safety.Keys.html#key_id_to_actor_id/1"},{"type":"function","title":"ActivityPub.Safety.Keys.keypair_from_pem/1","doc":"","ref":"ActivityPub.Safety.Keys.html#keypair_from_pem/1"},{"type":"function","title":"ActivityPub.Safety.Keys.maybe_add_fetch_signature_headers/3","doc":"","ref":"ActivityPub.Safety.Keys.html#maybe_add_fetch_signature_headers/3"},{"type":"function","title":"ActivityPub.Safety.Keys.public_key_decode/1","doc":"","ref":"ActivityPub.Safety.Keys.html#public_key_decode/1"},{"type":"function","title":"ActivityPub.Safety.Keys.public_key_from_data/1","doc":"","ref":"ActivityPub.Safety.Keys.html#public_key_from_data/1"},{"type":"function","title":"ActivityPub.Safety.Keys.sign/2","doc":"","ref":"ActivityPub.Safety.Keys.html#sign/2"},{"type":"module","title":"ActivityPub.Safety.Signatures","doc":"Implementation for behaviour from `HTTPSignatures` library","ref":"ActivityPub.Safety.Signatures.html"},{"type":"function","title":"ActivityPub.Safety.Signatures.fetch_public_key/1","doc":"","ref":"ActivityPub.Safety.Signatures.html#fetch_public_key/1"},{"type":"function","title":"ActivityPub.Safety.Signatures.refetch_public_key/1","doc":"","ref":"ActivityPub.Safety.Signatures.html#refetch_public_key/1"},{"type":"module","title":"ActivityPub.Utils","doc":"Misc functions used for federation","ref":"ActivityPub.Utils.html"},{"type":"function","title":"ActivityPub.Utils.activitypub_object_headers/0","doc":"","ref":"ActivityPub.Utils.html#activitypub_object_headers/0"},{"type":"function","title":"ActivityPub.Utils.adapter_fallback/0","doc":"","ref":"ActivityPub.Utils.html#adapter_fallback/0"},{"type":"function","title":"ActivityPub.Utils.ap_base_url/0","doc":"","ref":"ActivityPub.Utils.html#ap_base_url/0"},{"type":"function","title":"ActivityPub.Utils.ap_id/1","doc":"","ref":"ActivityPub.Utils.html#ap_id/1"},{"type":"function","title":"ActivityPub.Utils.as_local_public/0","doc":"","ref":"ActivityPub.Utils.html#as_local_public/0"},{"type":"function","title":"ActivityPub.Utils.cache_clear/0","doc":"","ref":"ActivityPub.Utils.html#cache_clear/0"},{"type":"function","title":"ActivityPub.Utils.cachex_fetch/4","doc":"","ref":"ActivityPub.Utils.html#cachex_fetch/4"},{"type":"function","title":"ActivityPub.Utils.error_json/3","doc":"","ref":"ActivityPub.Utils.html#error_json/3"},{"type":"function","title":"ActivityPub.Utils.format_date/1","doc":"","ref":"ActivityPub.Utils.html#format_date/1"},{"type":"function","title":"ActivityPub.Utils.generate_id/1","doc":"","ref":"ActivityPub.Utils.html#generate_id/1"},{"type":"function","title":"ActivityPub.Utils.generate_object_id/0","doc":"","ref":"ActivityPub.Utils.html#generate_object_id/0"},{"type":"function","title":"ActivityPub.Utils.get_with_cache/4","doc":"","ref":"ActivityPub.Utils.html#get_with_cache/4"},{"type":"function","title":"ActivityPub.Utils.is_ulid?/1","doc":"","ref":"ActivityPub.Utils.html#is_ulid?/1"},{"type":"function","title":"ActivityPub.Utils.is_uuid?/1","doc":"Takes a string and returns true if it is a valid UUID (Universally Unique Identifier)","ref":"ActivityPub.Utils.html#is_uuid?/1"},{"type":"function","title":"ActivityPub.Utils.json_with_cache/6","doc":"","ref":"ActivityPub.Utils.html#json_with_cache/6"},{"type":"function","title":"ActivityPub.Utils.label_in_message?/2","doc":"","ref":"ActivityPub.Utils.html#label_in_message?/2"},{"type":"function","title":"ActivityPub.Utils.make_date/0","doc":"","ref":"ActivityPub.Utils.html#make_date/0"},{"type":"function","title":"ActivityPub.Utils.make_json_ld_header/1","doc":"","ref":"ActivityPub.Utils.html#make_json_ld_header/1"},{"type":"function","title":"ActivityPub.Utils.maybe_put/3","doc":"conditionally update a map","ref":"ActivityPub.Utils.html#maybe_put/3"},{"type":"function","title":"ActivityPub.Utils.maybe_to_atom/1","doc":"","ref":"ActivityPub.Utils.html#maybe_to_atom/1"},{"type":"function","title":"ActivityPub.Utils.maybe_to_string/1","doc":"Handles multiple cases where the input value is of a different type (atom, list, tuple, etc.) and returns a string representation of it.","ref":"ActivityPub.Utils.html#maybe_to_string/1"},{"type":"function","title":"ActivityPub.Utils.ok_unwrap/2","doc":"","ref":"ActivityPub.Utils.html#ok_unwrap/2"},{"type":"function","title":"ActivityPub.Utils.public?/1","doc":"","ref":"ActivityPub.Utils.html#public?/1"},{"type":"function","title":"ActivityPub.Utils.public?/2","doc":"Determines if an object or an activity is public.","ref":"ActivityPub.Utils.html#public?/2"},{"type":"function","title":"ActivityPub.Utils.put_if_present/4","doc":"","ref":"ActivityPub.Utils.html#put_if_present/4"},{"type":"function","title":"ActivityPub.Utils.repo/0","doc":"","ref":"ActivityPub.Utils.html#repo/0"},{"type":"function","title":"ActivityPub.Utils.request_ip/1","doc":"","ref":"ActivityPub.Utils.html#request_ip/1"},{"type":"function","title":"ActivityPub.Utils.return_json/4","doc":"","ref":"ActivityPub.Utils.html#return_json/4"},{"type":"function","title":"ActivityPub.Utils.safe_put_in/3","doc":"","ref":"ActivityPub.Utils.html#safe_put_in/3"},{"type":"function","title":"ActivityPub.Utils.service_actor/0","doc":"","ref":"ActivityPub.Utils.html#service_actor/0"},{"type":"function","title":"ActivityPub.Utils.set_repo/1","doc":"","ref":"ActivityPub.Utils.html#set_repo/1"},{"type":"function","title":"ActivityPub.Utils.single_ap_id/1","doc":"","ref":"ActivityPub.Utils.html#single_ap_id/1"},{"type":"function","title":"ActivityPub.Utils.single_ap_id_or_object/1","doc":"","ref":"ActivityPub.Utils.html#single_ap_id_or_object/1"},{"type":"function","title":"ActivityPub.Utils.stringify_keys/2","doc":"Takes a map or keyword list, and returns a map with any atom keys converted to string keys. It can optionally do so recursively.","ref":"ActivityPub.Utils.html#stringify_keys/2"},{"type":"function","title":"ActivityPub.Utils.ulid/1","doc":"","ref":"ActivityPub.Utils.html#ulid/1"},{"type":"module","title":"ActivityPub.Web","doc":"The entrypoint for defining your web interface, such\nas controllers, views, channels and so on.\n\nThis can be used in your application as:\n\n use ActivityPub.Web, :controller\n use ActivityPub.Web, :view\n\nThe definitions below will be executed for every view,\ncontroller, etc, so keep them short and clean, focused\non imports, uses and aliases.\n\nDo NOT define functions inside the quoted expressions\nbelow. Instead, define any helper function in modules\nand import those modules here.","ref":"ActivityPub.Web.html"},{"type":"macro","title":"ActivityPub.Web.__using__/1","doc":"When used, dispatch to the appropriate controller/view/etc.","ref":"ActivityPub.Web.html#__using__/1"},{"type":"function","title":"ActivityPub.Web.base_url/0","doc":"","ref":"ActivityPub.Web.html#base_url/0"},{"type":"function","title":"ActivityPub.Web.channel/0","doc":"","ref":"ActivityPub.Web.html#channel/0"},{"type":"function","title":"ActivityPub.Web.controller/0","doc":"","ref":"ActivityPub.Web.html#controller/0"},{"type":"function","title":"ActivityPub.Web.rate_limit_reached/2","doc":"","ref":"ActivityPub.Web.html#rate_limit_reached/2"},{"type":"function","title":"ActivityPub.Web.router/0","doc":"","ref":"ActivityPub.Web.html#router/0"},{"type":"function","title":"ActivityPub.Web.view/0","doc":"","ref":"ActivityPub.Web.html#view/0"},{"type":"module","title":"ActivityPub.Web.ActivityPubController","doc":"Endpoints for serving objects and collections, so the ActivityPub API can be used to read information from the server.\n\nEven though we store the data in AS format, some changes need to be applied to the entity before serving it in the AP REST response. This is done in `ActivityPub.Web.ActivityPubView`.","ref":"ActivityPub.Web.ActivityPubController.html"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.actor/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#actor/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.ap_route_helper/1","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#ap_route_helper/1"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.followers/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#followers/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.following/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#following/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.inbox/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#inbox/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.inbox_info/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#inbox_info/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.json_object_with_cache/3","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#json_object_with_cache/3"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.noop/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#noop/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.object/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#object/2"},{"type":"function","title":"ActivityPub.Web.ActivityPubController.outbox/2","doc":"","ref":"ActivityPub.Web.ActivityPubController.html#outbox/2"},{"type":"module","title":"ActivityPub.Web.ActorView","doc":"","ref":"ActivityPub.Web.ActorView.html"},{"type":"function","title":"ActivityPub.Web.ActorView.actor_json/1","doc":"","ref":"ActivityPub.Web.ActorView.html#actor_json/1"},{"type":"function","title":"ActivityPub.Web.ActorView.collection/4","doc":"","ref":"ActivityPub.Web.ActorView.html#collection/4"},{"type":"function","title":"ActivityPub.Web.ActorView.render/2","doc":"","ref":"ActivityPub.Web.ActorView.html#render/2"},{"type":"module","title":"ActivityPub.Web.Endpoint","doc":"","ref":"ActivityPub.Web.Endpoint.html"},{"type":"function","title":"ActivityPub.Web.Endpoint.broadcast/3","doc":"","ref":"ActivityPub.Web.Endpoint.html#broadcast/3"},{"type":"function","title":"ActivityPub.Web.Endpoint.broadcast!/3","doc":"","ref":"ActivityPub.Web.Endpoint.html#broadcast!/3"},{"type":"function","title":"ActivityPub.Web.Endpoint.broadcast_from/4","doc":"","ref":"ActivityPub.Web.Endpoint.html#broadcast_from/4"},{"type":"function","title":"ActivityPub.Web.Endpoint.broadcast_from!/4","doc":"","ref":"ActivityPub.Web.Endpoint.html#broadcast_from!/4"},{"type":"function","title":"ActivityPub.Web.Endpoint.call/2","doc":"","ref":"ActivityPub.Web.Endpoint.html#call/2"},{"type":"function","title":"ActivityPub.Web.Endpoint.child_spec/1","doc":"Returns the child specification to start the endpoint\nunder a supervision tree.","ref":"ActivityPub.Web.Endpoint.html#child_spec/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.config/2","doc":"Returns the endpoint configuration for `key`\n\nReturns `default` if the key does not exist.","ref":"ActivityPub.Web.Endpoint.html#config/2"},{"type":"function","title":"ActivityPub.Web.Endpoint.config_change/2","doc":"Reloads the configuration given the application environment changes.","ref":"ActivityPub.Web.Endpoint.html#config_change/2"},{"type":"function","title":"ActivityPub.Web.Endpoint.host/0","doc":"Returns the host for the given endpoint.","ref":"ActivityPub.Web.Endpoint.html#host/0"},{"type":"function","title":"ActivityPub.Web.Endpoint.init/1","doc":"","ref":"ActivityPub.Web.Endpoint.html#init/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.local_broadcast/3","doc":"","ref":"ActivityPub.Web.Endpoint.html#local_broadcast/3"},{"type":"function","title":"ActivityPub.Web.Endpoint.local_broadcast_from/4","doc":"","ref":"ActivityPub.Web.Endpoint.html#local_broadcast_from/4"},{"type":"function","title":"ActivityPub.Web.Endpoint.path/1","doc":"Generates the path information when routing to this endpoint.","ref":"ActivityPub.Web.Endpoint.html#path/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.script_name/0","doc":"Generates the script name.","ref":"ActivityPub.Web.Endpoint.html#script_name/0"},{"type":"function","title":"ActivityPub.Web.Endpoint.server_info/1","doc":"Returns the address and port that the server is running on","ref":"ActivityPub.Web.Endpoint.html#server_info/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.start_link/1","doc":"Starts the endpoint supervision tree.\n\nAll other options are merged into the endpoint configuration.","ref":"ActivityPub.Web.Endpoint.html#start_link/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.static_integrity/1","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":"ActivityPub.Web.Endpoint.html#static_integrity/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.static_lookup/1","doc":"Returns a two item tuple with the first item being the `static_path`\nand the second item being the `static_integrity`.","ref":"ActivityPub.Web.Endpoint.html#static_lookup/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.static_path/1","doc":"Generates a route to a static file in `priv/static`.","ref":"ActivityPub.Web.Endpoint.html#static_path/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.static_url/0","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":"ActivityPub.Web.Endpoint.html#static_url/0"},{"type":"function","title":"ActivityPub.Web.Endpoint.struct_url/0","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":"ActivityPub.Web.Endpoint.html#struct_url/0"},{"type":"function","title":"ActivityPub.Web.Endpoint.subscribe/2","doc":"","ref":"ActivityPub.Web.Endpoint.html#subscribe/2"},{"type":"function","title":"ActivityPub.Web.Endpoint.unsubscribe/1","doc":"","ref":"ActivityPub.Web.Endpoint.html#unsubscribe/1"},{"type":"function","title":"ActivityPub.Web.Endpoint.url/0","doc":"Generates the endpoint base URL without any path information.\n\nIt uses the configuration under `:url` to generate such.","ref":"ActivityPub.Web.Endpoint.html#url/0"},{"type":"module","title":"ActivityPub.Web.ErrorHelpers","doc":"Conveniences for translating and building error messages.","ref":"ActivityPub.Web.ErrorHelpers.html"},{"type":"function","title":"ActivityPub.Web.ErrorHelpers.error_tag/2","doc":"Generates tag for inlined form input errors.","ref":"ActivityPub.Web.ErrorHelpers.html#error_tag/2"},{"type":"module","title":"ActivityPub.Web.ErrorView","doc":"Standard error view","ref":"ActivityPub.Web.ErrorView.html"},{"type":"function","title":"ActivityPub.Web.ErrorView.render/2","doc":"","ref":"ActivityPub.Web.ErrorView.html#render/2"},{"type":"function","title":"ActivityPub.Web.ErrorView.template_not_found/2","doc":"By default, Phoenix returns the status message from the template name. For example, \"404.html\" becomes \"Not Found\".","ref":"ActivityPub.Web.ErrorView.html#template_not_found/2"},{"type":"module","title":"ActivityPub.Web.LayoutView","doc":"","ref":"ActivityPub.Web.LayoutView.html"},{"type":"function","title":"ActivityPub.Web.LayoutView.render/2","doc":"","ref":"ActivityPub.Web.LayoutView.html#render/2"},{"type":"module","title":"ActivityPub.Web.ObjectView","doc":"","ref":"ActivityPub.Web.ObjectView.html"},{"type":"function","title":"ActivityPub.Web.ObjectView.collection/4","doc":"","ref":"ActivityPub.Web.ObjectView.html#collection/4"},{"type":"function","title":"ActivityPub.Web.ObjectView.render/2","doc":"","ref":"ActivityPub.Web.ObjectView.html#render/2"},{"type":"module","title":"ActivityPub.Web.Plugs.DigestPlug","doc":"","ref":"ActivityPub.Web.Plugs.DigestPlug.html"},{"type":"function","title":"ActivityPub.Web.Plugs.DigestPlug.read_body/2","doc":"","ref":"ActivityPub.Web.Plugs.DigestPlug.html#read_body/2"},{"type":"module","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug","doc":"Ensures HTTP signature has been validated by previous plugs on ActivityPub requests.","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.call/2","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#call/2"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.ignore/1","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#ignore/1"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.init/1","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#init/1"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.maybe_reject!/2","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#maybe_reject!/2"},{"type":"function","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.unauthorized/1","doc":"","ref":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug.html#unauthorized/1"},{"type":"module","title":"ActivityPub.Web.Plugs.HTTPSignaturePlug","doc":"","ref":"ActivityPub.Web.Plugs.HTTPSignaturePlug.html"},{"type":"function","title":"ActivityPub.Web.Plugs.HTTPSignaturePlug.call/2","doc":"","ref":"ActivityPub.Web.Plugs.HTTPSignaturePlug.html#call/2"},{"type":"function","title":"ActivityPub.Web.Plugs.HTTPSignaturePlug.init/1","doc":"","ref":"ActivityPub.Web.Plugs.HTTPSignaturePlug.html#init/1"},{"type":"module","title":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug","doc":"","ref":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html"},{"type":"function","title":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.call/2","doc":"","ref":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html#call/2"},{"type":"function","title":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.init/1","doc":"","ref":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug.html#init/1"},{"type":"module","title":"ActivityPub.Web.RedirectController","doc":"","ref":"ActivityPub.Web.RedirectController.html"},{"type":"function","title":"ActivityPub.Web.RedirectController.actor/2","doc":"","ref":"ActivityPub.Web.RedirectController.html#actor/2"},{"type":"function","title":"ActivityPub.Web.RedirectController.object/2","doc":"","ref":"ActivityPub.Web.RedirectController.html#object/2"},{"type":"function","title":"ActivityPub.Web.RedirectController.remote_interaction/2","doc":"","ref":"ActivityPub.Web.RedirectController.html#remote_interaction/2"},{"type":"module","title":"ActivityPub.Web.Router","doc":"","ref":"ActivityPub.Web.Router.html"},{"type":"module","title":"ActivityPub.Web.Telemetry","doc":"","ref":"ActivityPub.Web.Telemetry.html"},{"type":"function","title":"ActivityPub.Web.Telemetry.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"ActivityPub.Web.Telemetry.html#child_spec/1"},{"type":"function","title":"ActivityPub.Web.Telemetry.metrics/0","doc":"","ref":"ActivityPub.Web.Telemetry.html#metrics/0"},{"type":"function","title":"ActivityPub.Web.Telemetry.start_link/1","doc":"","ref":"ActivityPub.Web.Telemetry.html#start_link/1"},{"type":"module","title":"ActivityPub.Web.UserSocket","doc":"","ref":"ActivityPub.Web.UserSocket.html"},{"type":"module","title":"ActivityPub.Web.WebFingerController","doc":"","ref":"ActivityPub.Web.WebFingerController.html"},{"type":"function","title":"ActivityPub.Web.WebFingerController.webfinger/2","doc":"","ref":"ActivityPub.Web.WebFingerController.html#webfinger/2"},{"type":"module","title":"AnimalAvatarGenerator","doc":"Generate SVG avatars from a string seed. It should always return the same avatar for the corresponding seed.\n\nBased on https://www.npmjs.com/package/animal-avatar-generator (translated to Elixir, mostly by ChatGPT)","ref":"AnimalAvatarGenerator.html"},{"type":"function","title":"AnimalAvatarGenerator.avatar/2","doc":"","ref":"AnimalAvatarGenerator.html#avatar/2"},{"type":"function","title":"AnimalAvatarGenerator.avatar_face/2","doc":"","ref":"AnimalAvatarGenerator.html#avatar_face/2"},{"type":"function","title":"AnimalAvatarGenerator.brows/0","doc":"","ref":"AnimalAvatarGenerator.html#brows/0"},{"type":"function","title":"AnimalAvatarGenerator.clamp/3","doc":"","ref":"AnimalAvatarGenerator.html#clamp/3"},{"type":"function","title":"AnimalAvatarGenerator.create_background/3","doc":"","ref":"AnimalAvatarGenerator.html#create_background/3"},{"type":"function","title":"AnimalAvatarGenerator.create_blackout/1","doc":"","ref":"AnimalAvatarGenerator.html#create_blackout/1"},{"type":"function","title":"AnimalAvatarGenerator.create_svg/2","doc":"","ref":"AnimalAvatarGenerator.html#create_svg/2"},{"type":"function","title":"AnimalAvatarGenerator.darken/2","doc":"","ref":"AnimalAvatarGenerator.html#darken/2"},{"type":"function","title":"AnimalAvatarGenerator.ears/0","doc":"","ref":"AnimalAvatarGenerator.html#ears/0"},{"type":"function","title":"AnimalAvatarGenerator.empty_shape/0","doc":"","ref":"AnimalAvatarGenerator.html#empty_shape/0"},{"type":"function","title":"AnimalAvatarGenerator.eyes/0","doc":"","ref":"AnimalAvatarGenerator.html#eyes/0"},{"type":"function","title":"AnimalAvatarGenerator.faces/0","doc":"","ref":"AnimalAvatarGenerator.html#faces/0"},{"type":"function","title":"AnimalAvatarGenerator.hairs/0","doc":"","ref":"AnimalAvatarGenerator.html#hairs/0"},{"type":"function","title":"AnimalAvatarGenerator.muzzles/0","doc":"","ref":"AnimalAvatarGenerator.html#muzzles/0"},{"type":"function","title":"AnimalAvatarGenerator.patterns/0","doc":"","ref":"AnimalAvatarGenerator.html#patterns/0"},{"type":"module","title":"Arrows","doc":"A handful of (mostly) arrow macros with superpowers.","ref":"Arrows.html"},{"type":"macro","title":"Arrows.<|>/2","doc":"Like `||`, except only defaults if the left is nil (i.e. false is valid)","ref":"Arrows.html#%3C%7C%3E/2"},{"type":"macro","title":"Arrows.<~>/2","doc":"Like `||`, except with the logic applied by `~>`","ref":"Arrows.html#%3C~%3E/2"},{"type":"function","title":"Arrows.from_ok/1","doc":"","ref":"Arrows.html#from_ok/1"},{"type":"function","title":"Arrows.ok/1","doc":"","ref":"Arrows.html#ok/1"},{"type":"function","title":"Arrows.ok_or/2","doc":"","ref":"Arrows.html#ok_or/2"},{"type":"function","title":"Arrows.to_ok/1","doc":"","ref":"Arrows.html#to_ok/1"},{"type":"macro","title":"Arrows.|>/2","doc":"A more flexible drop-in replacement for the standard elixir pipe operator.\n\nSpecial features are unlocked when using the `...` (ellipsis) on the right hand side:\n\n* The right hand side need not be a function, it can be any expression containing the ellipsis.\n* The ellipsis will be replaced with the result of evaluating the hand side expression.\n* You may use the ellipsis multiple times and the left hand side will be calculated exactly once.\n\nYou can do crazy stuff with the ellipsis, but remember that people have to read it!","ref":"Arrows.html#%7C%3E/2"},{"type":"macro","title":"Arrows.~>/2","doc":"Like `OK.~>`","ref":"Arrows.html#~%3E/2"},{"type":"module","title":"ConsoleHelpers","doc":"","ref":"ConsoleHelpers.html"},{"type":"module","title":"DaisyTheme","doc":"","ref":"DaisyTheme.html"},{"type":"function","title":"DaisyTheme.adjust/5","doc":"","ref":"DaisyTheme.html#adjust/5"},{"type":"function","title":"DaisyTheme.clamp/3","doc":"","ref":"DaisyTheme.html#clamp/3"},{"type":"function","title":"DaisyTheme.darken/2","doc":"","ref":"DaisyTheme.html#darken/2"},{"type":"function","title":"DaisyTheme.darker/5","doc":"","ref":"DaisyTheme.html#darker/5"},{"type":"function","title":"DaisyTheme.default_theme/0","doc":"","ref":"DaisyTheme.html#default_theme/0"},{"type":"function","title":"DaisyTheme.generate/1","doc":"","ref":"DaisyTheme.html#generate/1"},{"type":"function","title":"DaisyTheme.is_dark?/1","doc":"","ref":"DaisyTheme.html#is_dark?/1"},{"type":"function","title":"DaisyTheme.keys/0","doc":"","ref":"DaisyTheme.html#keys/0"},{"type":"function","title":"DaisyTheme.lighten/2","doc":"","ref":"DaisyTheme.html#lighten/2"},{"type":"function","title":"DaisyTheme.style_attr/1","doc":"","ref":"DaisyTheme.html#style_attr/1"},{"type":"function","title":"DaisyTheme.theme/1","doc":"","ref":"DaisyTheme.html#theme/1"},{"type":"module","title":"DummyAdapter","doc":"","ref":"DummyAdapter.html"},{"type":"module","title":"EctoSparkles","doc":"`query_filter` brings convenience and shortens the boilterplate of ecto queries\n\nCommon filters available include:\n\n- `preload` - Preloads fields onto the query results\n- `start_date` - Query for items inserted after this date\n- `end_date` - Query for items inserted before this date\n- `before` - Get items with IDs before this value\n- `after` - Get items with IDs after this value\n- `ids` - Get items with a list of ids\n- `first` - Gets the first n items\n- `last` - Gets the last n items\n- `limit` - Gets the first n items\n- `offset` - Offsets limit by n items\n- `search` - ***Warning:*** This requires schemas using this to have a `&by_search(query, val)` function\n\nYou are also able to filter on any natural field of a model, as well as use\n\n- gte/gt\n- lte/lt\n- like/ilike\n- is_nil/not(is_nil)\n\n```elixir\nquery_filter(User, %{name: %{ilike: \"steve\"}})\nquery_filter(User, %{name: %{ilike: \"steve\"}}, :last_name, :asc)\nquery_filter(User, %{name: %{age: %{gte: 18, lte: 30}}})\nquery_filter(User, %{name: %{is_banned: %{!=: nil}}})\nquery_filter(User, %{name: %{is_banned: %{==: nil}}})\n\nmy_query = query_filter(User, %{name: \"Billy\"})\nquery_filter(my_query, %{last_name: \"Joe\"})\n```","ref":"EctoSparkles.html"},{"type":"macro","title":"EctoSparkles.join_preload/2","doc":"`join_preload` is a helper for preloading associations using joins.\n\nBy default, Ecto preloads associations using a separate query for each association, which can degrade performance.\nYou could make it run faster by using a combination of join/preload, but that requires a bit of boilerplate (see example below).\n\nWith `EctoSparkles`, you can accomplish this with just one line of code.","ref":"EctoSparkles.html#join_preload/2"},{"type":"macro","title":"Example using just Ecto - EctoSparkles.join_preload/2","doc":"```\nimport Ecto.Query\nInvoice\n|> join(:left, [i], assoc(i, :customer), as: :customer)\n|> join(:left, [i, c], assoc(c, :account), as: :account)\n|> join(:left, [i], assoc(i, :lines), as: :lines)\n|> preload([lines: v, customers: c, account: a], lines: v, customer: {c, [a: account]})\n|> Repo.all()\n```","ref":"EctoSparkles.html#join_preload/2-example-using-just-ecto"},{"type":"macro","title":"Example using `join_preload` - EctoSparkles.join_preload/2","doc":"```\nimport EctoSparkles\nInvoice\n|> join_preload([:customer, :account])\n|> join_preload([:lines])\n|> Repo.all()\n```","ref":"EctoSparkles.html#join_preload/2-example-using-join_preload"},{"type":"macro","title":"EctoSparkles.proload/3","doc":"AKA `join_preload++`. It's more powerful, but it does it with more (and different!) syntax.\n\ne.g.\n```\nproload(query, activity: [\n :verb, :boost_count, :like_count, :replied,\n # relations under object will have their aliases prefixed with object_, i.e.\n # :object_message, :object_post, :object_post_content\n # the original names will still be used for the associations.\n object: {\"object_\", [:message, :post, :post_content]}\n])\n```","ref":"EctoSparkles.html#proload/3"},{"type":"function","title":"EctoSparkles.query_filter/4","doc":"","ref":"EctoSparkles.html#query_filter/4"},{"type":"macro","title":"EctoSparkles.reusable_join/5","doc":"`reusable_join` is similar to `Ecto.Query.join/{4,5}`, but can be called multiple times with the same alias.\n\nNote that only the first join operation is performed, the subsequent ones that use the same alias\nare just ignored. Also note that because of this behaviour, it is mandatory to specify an alias when\nusing this function.\n\nThis is helpful when you need to perform a join while building queries one filter at a time,\nbecause the same filter could be used multiple times or you could have multiple filters that\nrequire the same join, which poses a problem with how the `filter/3` callback work, as you\nneed to return a dynamic with the filtering, which means that the join must have an alias,\nand by default Ecto raises an error when you add multiple joins with the same alias.\n\nTo solve this, it is recommended to use this macro instead of the default `Ecto.Query.join/{4,5}`,\nin which case there will be only one join in the query that can be reused by multiple filters.","ref":"EctoSparkles.html#reusable_join/5"},{"type":"module","title":"EctoSparkles.AutoMigrator","doc":"Runs ecto migrations automatically on startup (add this to your app's supervision tree)","ref":"EctoSparkles.AutoMigrator.html"},{"type":"function","title":"EctoSparkles.AutoMigrator.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"EctoSparkles.AutoMigrator.html#child_spec/1"},{"type":"function","title":"EctoSparkles.AutoMigrator.init/1","doc":"","ref":"EctoSparkles.AutoMigrator.html#init/1"},{"type":"function","title":"EctoSparkles.AutoMigrator.start_link/1","doc":"","ref":"EctoSparkles.AutoMigrator.html#start_link/1"},{"type":"function","title":"EctoSparkles.AutoMigrator.startup_migrations/0","doc":"","ref":"EctoSparkles.AutoMigrator.html#startup_migrations/0"},{"type":"module","title":"EctoSparkles.Changesets","doc":"Helper functions for changesets","ref":"EctoSparkles.Changesets.html"},{"type":"function","title":"EctoSparkles.Changesets.change_synced_timestamp/3","doc":"If a changeset includes a change to `bool_field`, we ensure that the\n`timestamp` field is updated if required. In the case of true, this\nmeans setting it to now if it is null and in the case of false, this\nmeans setting it to null if it is not null.","ref":"EctoSparkles.Changesets.html#change_synced_timestamp/3"},{"type":"function","title":"EctoSparkles.Changesets.change_synced_timestamps/5","doc":"If a changeset includes a change to `bool_field`, we change two\ntimestamps columns (representing activated and deactivated) so that\nonly one is set to a non-null value at a time.","ref":"EctoSparkles.Changesets.html#change_synced_timestamps/5"},{"type":"function","title":"EctoSparkles.Changesets.validate_exactly_one/3","doc":"","ref":"EctoSparkles.Changesets.html#validate_exactly_one/3"},{"type":"function","title":"EctoSparkles.Changesets.validate_http_url/2","doc":"Validates that a URL uses HTTP(S) and has a correct format.","ref":"EctoSparkles.Changesets.html#validate_http_url/2"},{"type":"function","title":"EctoSparkles.Changesets.validate_not_expired/4","doc":"Validates that the entity has not expired","ref":"EctoSparkles.Changesets.html#validate_not_expired/4"},{"type":"module","title":"EctoSparkles.Changesets.Errors","doc":"","ref":"EctoSparkles.Changesets.Errors.html"},{"type":"function","title":"EctoSparkles.Changesets.Errors.changeset_errors_string/2","doc":"","ref":"EctoSparkles.Changesets.Errors.html#changeset_errors_string/2"},{"type":"function","title":"EctoSparkles.Changesets.Errors.error/2","doc":"","ref":"EctoSparkles.Changesets.Errors.html#error/2"},{"type":"behaviour","title":"EctoSparkles.DataMigration","doc":"A behaviour implemented by our data migrations (generally backfills).\n\nBased on [A microframework for backfill migrations in Elixir's Ecto](https://tylerayoung.com/2023/08/13/migrations/), in turn based on David Bernheisel's [template for deterministic backfills](https://fly.io/phoenix-files/backfilling-data/#batching-deterministic-data).\n\nA data migration using this behaviour may look like this (which you can put simply put in Ecto migrations, eg. `priv/repo/migrations/priv/repo/migrations/20231019004944_data_onboarding_step.exs`):\n\n```elixir\ndefmodule MyApp.Repo.Migrations.BackfillOnboardingStep do\n alias EctoSparkles.DataMigration\n use DataMigration\n \n @impl DataMigration\n def base_query do\n # NOTE: This works in cases where:\n # 1. The data can be queried with a condition that not longer applies after the migration ran, so you can repeatedly query the data and update the data until the query result is empty. For example, if a column is currently null and will be updated to not be null, then you can query for the null records and pick up where you left off.\n # 2. The migration is written in such a way that it can be ran several times on the same data without causing data loss or duplication (or crashing).\n\n from(u in \"users\", # Notice how we do not use Ecto schemas here.\n where: is_nil(u.onboarding_step),\n select: %{id: u.id}\n )\n end\n\n @impl DataMigration\n def config do\n %DataMigration.Config{batch_size: 100, throttle_ms: 1_000, repo: MyApp.Repo}\n end\n\n @impl DataMigration\n def migrate(results) do\n Enum.each(results, fn %{id: user_id} ->\n # hooks into a context module, which is more likely to be kept up to date as the app evolves, to avoid having to update old migrations\n user_id\n |> MyApp.Users.set_onboarding_step!()\n end)\n end\nend\n```","ref":"EctoSparkles.DataMigration.html"},{"type":"callback","title":"EctoSparkles.DataMigration.base_query/0","doc":"The core of the query you want to use to SELECT a map of your data.\nThe `DataMigration.Runner` will take care of limiting this to a batch size, ordering\nit by row ID, and restricting it to rows you haven't yet handled.\nThe query *must* select a map, and that map must have an `:id` key for the\nmigration runner to reference as the last-modified row in your table.","ref":"EctoSparkles.DataMigration.html#c:base_query/0"},{"type":"callback","title":"EctoSparkles.DataMigration.config/0","doc":"","ref":"EctoSparkles.DataMigration.html#c:config/0"},{"type":"callback","title":"EctoSparkles.DataMigration.migrate/1","doc":"The callback to operate on a result set from your query.\nImplementers should `raise` an error if you're unable to process the batch.","ref":"EctoSparkles.DataMigration.html#c:migrate/1"},{"type":"module","title":"EctoSparkles.DataMigration.Config","doc":"Configuration for a `DataMigration` behaviour module, used by the `DataMigration.Runner`.\n\nbatch size: how many elements from your table to migrate at a time. \n\nthrottle time: the amount of downtime the runner should sleep between batches.\n\nasync: Whether to run the migration in an async process, meaning the execution of the rest of the migrations (and the app startup if you're auto-migrating on start) won't be delayed. WARNING: this means the migration will be marked as done as soon as it starts, so if the process is interrupted it won't be re-run automatically.\n\nfirst_id: The very first ID when sorting UUIDs in ascending order. If you use integer IDs instead, this would be 0.","ref":"EctoSparkles.DataMigration.Config.html"},{"type":"module","title":"EctoSparkles.DataMigration.Runner","doc":"Runs a `DataMigration`","ref":"EctoSparkles.DataMigration.Runner.html"},{"type":"function","title":"EctoSparkles.DataMigration.Runner.run/1","doc":"","ref":"EctoSparkles.DataMigration.Runner.html#run/1"},{"type":"module","title":"EctoSparkles.ErlangTermBinary","doc":"A custom Ecto type for handling the serialization of arbitrary\ndata types stored as binary data in the database. Requires the\nunderlying DB field to be a binary.","ref":"EctoSparkles.ErlangTermBinary.html"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.cast/1","doc":"","ref":"EctoSparkles.ErlangTermBinary.html#cast/1"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.cast/2","doc":"Provides custom casting rules for params. Nothing changes here.\nWe only need to handle deserialization.","ref":"EctoSparkles.ErlangTermBinary.html#cast/2"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.dump/1","doc":"Converting the data structure to binary for storage.","ref":"EctoSparkles.ErlangTermBinary.html#dump/1"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.embed_as/1","doc":"","ref":"EctoSparkles.ErlangTermBinary.html#embed_as/1"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.equal?/2","doc":"","ref":"EctoSparkles.ErlangTermBinary.html#equal?/2"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.load/1","doc":"Convert the raw binary value from the database back to\nthe desired term.\n\nUses `Plug.Crypto.non_executable_binary_to_term/2` - a restricted version of `:erlang.binary_to_term/2` that forbids executable terms, such as anonymous functions.\n\nBy default this function does not restrict atoms, except if compiled in prod env, then the [:safe] option is set, so only existing (and loaded) atoms will be deserialized.","ref":"EctoSparkles.ErlangTermBinary.html#load/1"},{"type":"function","title":"EctoSparkles.ErlangTermBinary.type/0","doc":"","ref":"EctoSparkles.ErlangTermBinary.html#type/0"},{"type":"module","title":"EctoSparkles.Log","doc":"Log slow Ecto queries","ref":"EctoSparkles.Log.html"},{"type":"function","title":"EctoSparkles.Log.check_if_n_plus_1/1","doc":"","ref":"EctoSparkles.Log.html#check_if_n_plus_1/1"},{"type":"function","title":"EctoSparkles.Log.format_log/4","doc":"","ref":"EctoSparkles.Log.html#format_log/4"},{"type":"function","title":"EctoSparkles.Log.format_stacktrace_sliced/3","doc":"","ref":"EctoSparkles.Log.html#format_stacktrace_sliced/3"},{"type":"function","title":"EctoSparkles.Log.handle_event/4","doc":"","ref":"EctoSparkles.Log.html#handle_event/4"},{"type":"function","title":"EctoSparkles.Log.inline_params/3","doc":"","ref":"EctoSparkles.Log.html#inline_params/3"},{"type":"function","title":"EctoSparkles.Log.log_query/4","doc":"","ref":"EctoSparkles.Log.html#log_query/4"},{"type":"function","title":"EctoSparkles.Log.setup/1","doc":"","ref":"EctoSparkles.Log.html#setup/1"},{"type":"module","title":"EctoSparkles.Migrator","doc":"","ref":"EctoSparkles.Migrator.html"},{"type":"function","title":"EctoSparkles.Migrator.create/0","doc":"","ref":"EctoSparkles.Migrator.html#create/0"},{"type":"function","title":"EctoSparkles.Migrator.create/2","doc":"","ref":"EctoSparkles.Migrator.html#create/2"},{"type":"function","title":"EctoSparkles.Migrator.migrate/0","doc":"","ref":"EctoSparkles.Migrator.html#migrate/0"},{"type":"function","title":"EctoSparkles.Migrator.migrate/1","doc":"","ref":"EctoSparkles.Migrator.html#migrate/1"},{"type":"function","title":"EctoSparkles.Migrator.rollback/2","doc":"","ref":"EctoSparkles.Migrator.html#rollback/2"},{"type":"function","title":"EctoSparkles.Migrator.rollback_all/0","doc":"","ref":"EctoSparkles.Migrator.html#rollback_all/0"},{"type":"function","title":"EctoSparkles.Migrator.rollback_all/1","doc":"","ref":"EctoSparkles.Migrator.html#rollback_all/1"},{"type":"function","title":"EctoSparkles.Migrator.rollback_to/1","doc":"","ref":"EctoSparkles.Migrator.html#rollback_to/1"},{"type":"function","title":"EctoSparkles.Migrator.rollback_to/2","doc":"","ref":"EctoSparkles.Migrator.html#rollback_to/2"},{"type":"function","title":"EctoSparkles.Migrator.status/0","doc":"Print the migration status for configured Repos' migrations.","ref":"EctoSparkles.Migrator.html#status/0"},{"type":"module","title":"EctoSparkles.NPlus1Detector","doc":"Checks a query against the previous one and increments counter of collisions or swaps previous query with the last one.","ref":"EctoSparkles.NPlus1Detector.html"},{"type":"function","title":"EctoSparkles.NPlus1Detector.check/1","doc":"","ref":"EctoSparkles.NPlus1Detector.html#check/1"},{"type":"function","title":"EctoSparkles.NPlus1Detector.do_check/2","doc":"","ref":"EctoSparkles.NPlus1Detector.html#do_check/2"},{"type":"module","title":"EctoSparkles.SanitiseStrings","doc":"Provides functions for sanitising input on `Ecto.Changeset` string fields.","ref":"EctoSparkles.SanitiseStrings.html"},{"type":"function","title":"EctoSparkles.SanitiseStrings.clean_html/2","doc":"","ref":"EctoSparkles.SanitiseStrings.html#clean_html/2"},{"type":"function","title":"EctoSparkles.SanitiseStrings.sanitise_strings/2","doc":"","ref":"EctoSparkles.SanitiseStrings.html#sanitise_strings/2"},{"type":"function","title":"EctoSparkles.SanitiseStrings.strip_all_tags/2","doc":"Sanitises all changes in the given changeset that apply to field which are of the `:string` `Ecto` type.\n\nBy default it uses the `HtmlSanitizeEx.strip_tags/1` function on any change that satisfies all of the following conditions:\n1. The field associated with the change is of the type `:string`.\n2. The field associated with the change is not in the blacklisted_fields list of `opts` as defined using the `:except` key in `opts`.\nNote that this function will change the value in the `:changes` map of an\n`%Ecto.Changeset{}` struct if the given changes are sanitized.","ref":"EctoSparkles.SanitiseStrings.html#strip_all_tags/2"},{"type":"function","title":"Examples - EctoSparkles.SanitiseStrings.strip_all_tags/2","doc":"iex> attrs = %{string_field: \" Bad \"}\n iex> result_changeset =\n ...> attrs\n ...> |> FakeEctoSchema.changeset()\n ...> |> EctoSparkles.SanitiseStrings.strip_all_tags()\n iex> result_changeset.changes\n %{string_field: \"Bad\"}\nFields can be exempted from sanitization via the `:except` option.\n iex> attrs = %{string_field: \" Bad \"}\n iex> result_changeset =\n ...> attrs\n ...> |> FakeEctoSchema.changeset()\n ...> |> EctoSparkles.SanitiseStrings.strip_all_tags(except: [:string_field])\n iex> result_changeset.changes\n %{string_field: \" Bad \"}\n\n#","ref":"EctoSparkles.SanitiseStrings.html#strip_all_tags/2-examples"},{"type":"function","title":"You can also specify a specific scrubber (by passing a function as reference): - EctoSparkles.SanitiseStrings.strip_all_tags/2","doc":"ies> attrs\n ...> |> FakeEctoSchema.changeset()\n ...> |> EctoSparkles.SanitiseStrings.sanitise_strings(scrubber: HtmlSanitizeEx.Scrubber.html5/1)","ref":"EctoSparkles.SanitiseStrings.html#strip_all_tags/2-you-can-also-specify-a-specific-scrubber-by-passing-a-function-as-reference"},{"type":"module","title":"Exto","doc":"Configuration-driven Ecto Schemata.","ref":"Exto.html"},{"type":"macro","title":"Exto.flex_schema/1","doc":"Adds additional associations dynamically from app config.\n\nReads config for the given OTP application, under the name of the\ncurrent module. Each key maps to an Ecto.Schema function:\n\n* `belongs_to`\n* `field`\n* `has_many`\n* `has_one`\n* `many_to_many`\n\nEach of these keys should map to a keyword list where the key is the\nname of the field or association and the value is one of:\n\n* A type\n* A tuple of type and options (keyword list)\n\nExample Schema:\n\n```\ndefmodule My.Schema do\n use Ecto.Schema\n import Exto, only: [flex_schema: 1]\n\n schema \"my_table\" do\n field :name, :string # just normal schema things\n flex_schema(:my_app) # boom! give me the stuff\n end\nend\n```\n\nExample configuration:\n\n```\nconfig :my_app, My.Schema,\n belongs_to: [\n foo: Foo, # belongs_to :foo, Foo\n bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer\n ],\n field: [\n foo: :string, # field :foo, :string\n bar: {:integer, default: 4}, # field :foo, :integer, default: 4\n ],\n has_one: [\n foo: Foo, # has_one :foo, Foo\n bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id\n ]\n has_many: [\n foo: Foo, # has_many :foo, Foo\n bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id\n ]\n many_to_many: [\n foo: Foo, # many_to_many :foo, Foo\n bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar\n ]\n```\n\nThis one won't work very well because we define `foo` and `bar` 5\ntimes each, but I think you get the point.\n\nReading of configuration is done during compile time. The relations\nwill be baked in during compilation, thus:\n\n* Do not expect this to work in runtime config.\n* You will need to rebuild all dependencies which use this macro\n when you change their configuration.","ref":"Exto.html#flex_schema/1"},{"type":"module","title":"Import2Alias","doc":"","ref":"Import2Alias.html"},{"type":"function","title":"Import2Alias.import2alias/2","doc":"","ref":"Import2Alias.html#import2alias/2"},{"type":"module","title":"Import2Alias.CallerTracer","doc":"","ref":"Import2Alias.CallerTracer.html"},{"type":"function","title":"Import2Alias.CallerTracer.trace/2","doc":"","ref":"Import2Alias.CallerTracer.html#trace/2"},{"type":"module","title":"Import2Alias.Server","doc":"","ref":"Import2Alias.Server.html"},{"type":"function","title":"Import2Alias.Server.child_spec/1","doc":"Returns a specification to start this module under a supervisor.\n\nSee `Supervisor`.","ref":"Import2Alias.Server.html#child_spec/1"},{"type":"function","title":"Import2Alias.Server.entries/0","doc":"","ref":"Import2Alias.Server.html#entries/0"},{"type":"function","title":"Import2Alias.Server.record/6","doc":"","ref":"Import2Alias.Server.html#record/6"},{"type":"function","title":"Import2Alias.Server.start_link/1","doc":"","ref":"Import2Alias.Server.html#start_link/1"},{"type":"module","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive","doc":"","ref":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html"},{"type":"function","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.class_tree/1","doc":"","ref":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive.html#class_tree/1"},{"type":"module","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView","doc":"","ref":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html"},{"type":"function","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.class_tree/1","doc":"","ref":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView.html#class_tree/1"},{"type":"task","title":"mix bonfire.account.new","doc":"Creates an account in the database, automatically activated","ref":"Mix.Tasks.Bonfire.Account.New.html"},{"type":"task","title":"Usage - mix bonfire.account.new","doc":"```\nmix bonfire.account.new [email@address]\n```\n\nYou will be prompted for a password and an email if it was not provided.","ref":"Mix.Tasks.Bonfire.Account.New.html#module-usage"},{"type":"function","title":"Mix.Tasks.Bonfire.Account.New.run/1","doc":"","ref":"Mix.Tasks.Bonfire.Account.New.html#run/1"},{"type":"task","title":"mix bonfire.deps.compile","doc":"(re)compiles dependencies.\n\nTODO: check if we still need this now that we treat extensions as umbrella apps in dev...\n\nThis is a modified version of Elixir's `Mix.Tasks.Deps.Compile` which was needed to compile dependencies and extract localisable strings in `Mix.Tasks.Bonfire.Localise.Extract`\n\nBy default, compile all dependencies. A list of dependencies\ncan be given compile multiple dependencies in order.\n\nThis task attempts to detect if the project contains one of\nthe following files and act accordingly:\n\n * `mix.exs` - invokes `mix compile`\n * otherwise skip\n\nIf a list of dependencies is given, Mix will attempt to compile\nthem as is. For example, if project `a` depends on `b`, calling\n`mix deps.compile a` will compile `a` even if `b` is out of\ndate. This is to allow parts of the dependency tree to be\nrecompiled without propagating those changes upstream. To ensure\n`b` is included in the compilation step, pass `--include-children`.","ref":"Mix.Tasks.Bonfire.Deps.Compile.html"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.force_compile/2","doc":"","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#force_compile/2"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.loaded_by_name/3","doc":"Receives a list of dependency names and returns loaded `Mix.Dep`s.\nLogs a message if the dependency could not be found.","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#loaded_by_name/3"},{"type":"function","title":"Exceptions - Mix.Tasks.Bonfire.Deps.Compile.loaded_by_name/3","doc":"This function raises an exception if any of the dependencies\nprovided in the project are in the wrong format.","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#loaded_by_name/3-exceptions"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.run/1","doc":"","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#run/1"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.touch_manifests/0","doc":"","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#touch_manifests/0"},{"type":"function","title":"Mix.Tasks.Bonfire.Deps.Compile.try_compile/2","doc":"","ref":"Mix.Tasks.Bonfire.Deps.Compile.html#try_compile/2"},{"type":"task","title":"mix bonfire.localise.extract","doc":"Extracts translations by recompiling the Elixir source code.\n\n mix gettext.extract [OPTIONS]\n\nTranslations are extracted into POT (Portable Object Template) files (with a\n`.pot` extension). The location of these files is determined by the `:otp_app`\nand `:priv` options given by Gettext modules when they call `use Gettext`. One\nPOT file is generated for each translation domain.\n\nIt is possible to give the `--merge` option to perform merging\nfor every Gettext backend updated during merge:\n\n mix gettext.extract --merge\n\nAll other options passed to `gettext.extract` are forwarded to the\n`gettext.merge` task (`Mix.Tasks.Gettext.Merge`), which is called internally\nby this task. For example:\n\n mix gettext.extract --merge --no-fuzzy","ref":"Mix.Tasks.Bonfire.Localise.Extract.html"},{"type":"function","title":"Mix.Tasks.Bonfire.Localise.Extract.run/1","doc":"","ref":"Mix.Tasks.Bonfire.Localise.Extract.html#run/1"},{"type":"task","title":"mix bonfire.release","doc":"","ref":"Mix.Tasks.Bonfire.Release.html"},{"type":"function","title":"Mix.Tasks.Bonfire.Release.main/1","doc":"","ref":"Mix.Tasks.Bonfire.Release.html#main/1"},{"type":"function","title":"Mix.Tasks.Bonfire.Release.run/1","doc":"","ref":"Mix.Tasks.Bonfire.Release.html#run/1"},{"type":"task","title":"mix bonfire.secrets","doc":"Generates secrets and prints to the terminal.\n mix bonfire.secrets [length]\nBy default, it generates keys 64 characters long.\nThe minimum value for `length` is 32.","ref":"Mix.Tasks.Bonfire.Secrets.html"},{"type":"function","title":"Mix.Tasks.Bonfire.Secrets.main/1","doc":"","ref":"Mix.Tasks.Bonfire.Secrets.html#main/1"},{"type":"task","title":"mix bonfire.user.admin.promote","doc":"Creates an account in the database, automatically activated","ref":"Mix.Tasks.Bonfire.User.Admin.Promote.html"},{"type":"task","title":"Usage - mix bonfire.user.admin.promote","doc":"```\nmix bonfire.user.admin.promote username\n```","ref":"Mix.Tasks.Bonfire.User.Admin.Promote.html#module-usage"},{"type":"function","title":"Mix.Tasks.Bonfire.User.Admin.Promote.run/1","doc":"","ref":"Mix.Tasks.Bonfire.User.Admin.Promote.html#run/1"},{"type":"task","title":"mix docs.deps","doc":"`mix docs.deps`","ref":"Mix.Tasks.Docs.Deps.html"},{"type":"task","title":"Command line options - mix docs.deps","doc":"* `--only` - the environment to include dependencies for\n * `--target` - the target to include dependencies for\n * `--exclude` - exclude dependencies which you do not want to see in docs.\n * any arguments supported by `mix docs` will be passed along","ref":"Mix.Tasks.Docs.Deps.html#module-command-line-options"},{"type":"task","title":"mix import2alias","doc":"","ref":"Mix.Tasks.Import2alias.html"},{"type":"behaviour","title":"Paginator","doc":"Defines a paginator.\n\nThis module adds a `paginate/3` function to your `Ecto.Repo` so that you can\npaginate through results using opaque cursors.","ref":"Paginator.html"},{"type":"behaviour","title":"Usage - Paginator","doc":"defmodule MyApp.Repo do\n use Ecto.Repo, otp_app: :my_app\n use Paginator\n end","ref":"Paginator.html#module-usage"},{"type":"behaviour","title":"Options - Paginator","doc":"`Paginator` can take any options accepted by `paginate/3`. This is useful when\nyou want to enforce some options globally across your project.\n\n#","ref":"Paginator.html#module-options"},{"type":"behaviour","title":"Example - Paginator","doc":"defmodule MyApp.Repo do\n use Ecto.Repo, otp_app: :my_app\n use Paginator,\n limit: 10, # sets the default limit to 10\n maximum_limit: 100, # sets the maximum limit to 100\n include_total_count: true, # include total count by default\n total_count_primary_key_field: :uuid # sets the total_count_primary_key_field to uuid for calculate total_count\n end\n\nNote that these values can be still be overriden when `paginate/3` is called.\n\n#","ref":"Paginator.html#module-example"},{"type":"behaviour","title":"Use without macros - Paginator","doc":"If you wish to avoid use of macros or you wish to use a different name for\nthe pagination function you can define your own function like so:\n\n defmodule MyApp.Repo do\n use Ecto.Repo, otp_app: :my_app\n\n def my_paginate_function(queryable, opts \\ [], repo_opts \\ []) do\n defaults = [limit: 10] # Default options of your choice here\n opts = Keyword.merge(defaults, opts)\n Paginator.paginate(queryable, opts, __MODULE__, repo_opts)\n end\n end","ref":"Paginator.html#module-use-without-macros"},{"type":"function","title":"Paginator.cursor_for_record/3","doc":"Generate a cursor for the supplied record, in the same manner as the\n`before` and `after` cursors generated by `paginate/3`.\n\nFor the cursor to be compatible with `paginate/3`, `cursor_fields`\nmust have the same value as the `cursor_fields` option passed to it.\n\n#","ref":"Paginator.html#cursor_for_record/3"},{"type":"function","title":"Example - Paginator.cursor_for_record/3","doc":"iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1}, [:id])\n \"g3QAAAABZAACaWRhAQ==\"\n\n iex> Paginator.cursor_for_record(%Paginator.Customer{id: 1, name: \"Alice\"}, [id: :asc, name: :desc])\n \"g3QAAAACZAACaWRhAWQABG5hbWVtAAAABUFsaWNl\"","ref":"Paginator.html#cursor_for_record/3-example"},{"type":"function","title":"Paginator.default_fetch_cursor_value/2","doc":"Default function used to get the value of a cursor field from the supplied\nmap. This function can be overriden in the `Paginator.Config` using the\n`fetch_cursor_value_fun` key.\n\nWhen using named bindings to sort on joined columns it will attempt to get\nthe value of joined column by using the named binding as the name of the\nrelationship on the original Ecto.Schema.\n\n#","ref":"Paginator.html#default_fetch_cursor_value/2"},{"type":"function","title":"Example - Paginator.default_fetch_cursor_value/2","doc":"iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1}, :id)\n 1\n\n iex> Paginator.default_fetch_cursor_value(%Paginator.Customer{id: 1, address: %Paginator.Address{city: \"London\"}}, {:address, :city})\n \"London\"","ref":"Paginator.html#default_fetch_cursor_value/2-example"},{"type":"callback","title":"Paginator.paginate/3","doc":"Fetches all the results matching the query within the cursors.","ref":"Paginator.html#c:paginate/3"},{"type":"callback","title":"Options - Paginator.paginate/3","doc":"* `:after` - Fetch the records after this cursor.\n * `:before` - Fetch the records before this cursor.\n * `:cursor_fields` - The fields with sorting direction used to determine the\n cursor. In most cases, this should be the same fields as the ones used for sorting in the query.\n When you use named bindings in your query they can also be provided.\n * `:fetch_cursor_value_fun` function of arity 2 to lookup cursor values on returned records.\n Defaults to `Paginator.default_fetch_cursor_value/2`\n * `:include_total_count` - Set this to true to return the total number of\n records matching the query. Note that this number will be capped by\n `:total_count_limit`. Defaults to `false`.\n * `:total_count_primary_key_field` - Running count queries on specified column of the table\n * `:limit` - Limits the number of records returned per page. Note that this\n number will be capped by `:maximum_limit`. Defaults to `50`.\n * `:maximum_limit` - Sets a maximum cap for `:limit`. This option can be useful when `:limit`\n is set dynamically (e.g from a URL param set by a user) but you still want to\n enforce a maximum. Defaults to `500`.\n * `:total_count_limit` - Running count queries on tables with a large number\n of records is expensive so it is capped by default. Can be set to `:infinity`\n in order to count all the records. Defaults to `10,000`.","ref":"Paginator.html#c:paginate/3-options"},{"type":"callback","title":"Repo options - Paginator.paginate/3","doc":"This will be passed directly to `Ecto.Repo.all/2`, as such any option supported\nby this function can be used here.","ref":"Paginator.html#c:paginate/3-repo-options"},{"type":"callback","title":"Simple example - Paginator.paginate/3","doc":"query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id], select: p)\n\n Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)","ref":"Paginator.html#c:paginate/3-simple-example"},{"type":"callback","title":"Example with using custom sort directions per field - Paginator.paginate/3","doc":"query = from(p in Post, order_by: [asc: p.inserted_at, desc: p.id], select: p)\n\n Repo.paginate(query, cursor_fields: [inserted_at: :asc, id: :desc], limit: 50)","ref":"Paginator.html#c:paginate/3-example-with-using-custom-sort-directions-per-field"},{"type":"callback","title":"Example with sorting on columns in joined tables - Paginator.paginate/3","doc":"from(\n p in Post,\n as: :posts,\n join: a in assoc(p, :author),\n as: :author,\n preload: [author: a],\n select: p,\n order_by: [\n {:asc, a.name},\n {:asc, p.id}\n ]\n )\n\n Repo.paginate(query, cursor_fields: [{{:author, :name}, :asc}, id: :asc], limit: 50)\n\nWhen sorting on columns in joined tables it is necessary to use named bindings. In\nthis case we name it `author`. In the `cursor_fields` we refer to this named binding\nand its column name.\n\nTo build the cursor Paginator uses the returned Ecto.Schema. When using a joined\ncolumn the returned Ecto.Schema won't have the value of the joined column\nunless we preload it. E.g. in this case the cursor will be build up from\n`post.id` and `post.author.name`. This presupposes that the named of the\nbinding is the same as the name of the relationship on the original struct.\n\nOne level deep joins are supported out of the box but if we join on a second\nlevel, e.g. `post.author.company.name` a custom function can be supplied to\nhandle the cursor value retrieval. This also applies when the named binding\ndoes not map to the name of the relationship.","ref":"Paginator.html#c:paginate/3-example-with-sorting-on-columns-in-joined-tables"},{"type":"callback","title":"Example - Paginator.paginate/3","doc":"from(\n p in Post,\n as: :posts,\n join: a in assoc(p, :author),\n as: :author,\n join: c in assoc(a, :company),\n as: :company,\n preload: [author: a],\n select: p,\n order_by: [\n {:asc, a.name},\n {:asc, p.id}\n ]\n )\n\n Repo.paginate(query,\n cursor_fields: [{{:company, :name}, :asc}, id: :asc],\n fetch_cursor_value_fun: fn\n post, {{:company, name}, _} ->\n post.author.company.name\n\n post, field ->\n Paginator.default_fetch_cursor_value(post, field)\n end,\n limit: 50\n )","ref":"Paginator.html#c:paginate/3-example"},{"type":"function","title":"Paginator.paginated_query/2","doc":"","ref":"Paginator.html#paginated_query/2"},{"type":"module","title":"Paginator.Page","doc":"Defines a page.","ref":"Paginator.Page.html"},{"type":"module","title":"Fields - Paginator.Page","doc":"* `edges` - a list of entries contained in this page.\n* `page_info` - meta-data attached to this page.","ref":"Paginator.Page.html#module-fields"},{"type":"type","title":"Paginator.Page.t/0","doc":"","ref":"Paginator.Page.html#t:t/0"},{"type":"module","title":"Paginator.PageInfo","doc":"Defines page page_info.","ref":"Paginator.PageInfo.html"},{"type":"module","title":"Fields - Paginator.PageInfo","doc":"* `start_cursor` - an opaque cursor representing the first row of the current page, to be used with the `before` query parameter.\n* `end_cursor` - an opaque cursor representing the last row of the current page, to be used with the `after` query parameter.\n* `limit` - the maximum number of edges that can be contained in this page.\n* `page_count` - the number of edges on the current page.\n* `total_count` - the total number of edges matching the query.\n* `total_count_cap_exceeded` - a boolean indicating whether the `:total_count_limit` was exceeded.","ref":"Paginator.PageInfo.html#module-fields"},{"type":"type","title":"Paginator.PageInfo.opaque_cursor/0","doc":"","ref":"Paginator.PageInfo.html#t:opaque_cursor/0"},{"type":"type","title":"Paginator.PageInfo.t/0","doc":"","ref":"Paginator.PageInfo.html#t:t/0"},{"type":"module","title":"Releaser.Git","doc":"","ref":"Releaser.Git.html"},{"type":"function","title":"Releaser.Git.add_commit_and_tag/1","doc":"This module contains some git-specific functionality","ref":"Releaser.Git.html#add_commit_and_tag/1"},{"type":"module","title":"Releaser.Publish","doc":"","ref":"Releaser.Publish.html"},{"type":"function","title":"Releaser.Publish.publish!/0","doc":"","ref":"Releaser.Publish.html#publish!/0"},{"type":"module","title":"Releaser.Tests","doc":"","ref":"Releaser.Tests.html"},{"type":"function","title":"Releaser.Tests.run_tests!/0","doc":"","ref":"Releaser.Tests.html#run_tests!/0"},{"type":"module","title":"Releaser.VersionUtils","doc":"","ref":"Releaser.VersionUtils.html"},{"type":"function","title":"Releaser.VersionUtils.bump_major/1","doc":"Some utilities to get and set version numbers in the `mix.exs` file\nand to programmatically transform version numbers.\nMaybe the `bump_*` functions should be in the standard library?\nThis script doesn't support pre-release versions or versions with build information.","ref":"Releaser.VersionUtils.html#bump_major/1"},{"type":"function","title":"Releaser.VersionUtils.bump_minor/1","doc":"","ref":"Releaser.VersionUtils.html#bump_minor/1"},{"type":"function","title":"Releaser.VersionUtils.bump_patch/1","doc":"","ref":"Releaser.VersionUtils.html#bump_patch/1"},{"type":"function","title":"Releaser.VersionUtils.bump_pre/2","doc":"","ref":"Releaser.VersionUtils.html#bump_pre/2"},{"type":"function","title":"Releaser.VersionUtils.get_version/1","doc":"","ref":"Releaser.VersionUtils.html#get_version/1"},{"type":"function","title":"Releaser.VersionUtils.set_version/2","doc":"","ref":"Releaser.VersionUtils.html#set_version/2"},{"type":"function","title":"Releaser.VersionUtils.update_version/2","doc":"","ref":"Releaser.VersionUtils.html#update_version/2"},{"type":"function","title":"Releaser.VersionUtils.version_to_string/1","doc":"","ref":"Releaser.VersionUtils.html#version_to_string/1"},{"type":"module","title":"UserAuthLiveMount","doc":"","ref":"UserAuthLiveMount.html"},{"type":"function","title":"UserAuthLiveMount.on_mount/4","doc":"","ref":"UserAuthLiveMount.html#on_mount/4"},{"type":"module","title":"Voodoo","doc":"","ref":"Voodoo.html"},{"type":"macro","title":"Voodoo.def_reverse_router/2","doc":"Generates a reverse router function with the given name based upon a\ncompiled(!) phoenix router module.\n\nMust be used outside of the router module, or else the router won't\nbe compiled yet and we won't be able to look up the routes.\n\nGenerated function wraps the existing phoenix helpers.\n\n```\ndefmodule MyAppWeb.Router do\n use MyAppWeb, :router\n # ...\nend\ndefmodule MyAppWeb.Router.Reverse do\n import Voodoo, only: [def_reverse_router: 2]\n def_reverse_router :path, for: MyAppWeb.Router\nend\n```","ref":"Voodoo.html#def_reverse_router/2"},{"type":"function","title":"Voodoo.router/1","doc":"Turns a Conn or Socket into the name of the router that routed it.","ref":"Voodoo.html#router/1"},{"type":"module","title":"Zest","doc":"","ref":"Zest.html"},{"type":"function","title":"Zest.each/2","doc":"Iterates over a collections, calling the provided effectful\nfunction with each item.","ref":"Zest.html#each/2"},{"type":"function","title":"Zest.each/3","doc":"Iterates over two collections, calling the provided effectful\nfunction with each pair of items","ref":"Zest.html#each/3"},{"type":"function","title":"Zest.hijack/2","doc":"You take on the role of the `apply` function in this exciting\nfunction that wraps execution of a function such that your function\nis responsible for calling it.","ref":"Zest.html#hijack/2"},{"type":"function","title":"Zest.in_scope/2","doc":"Add some debug information to the context for the duration of a\nfunction's execution. If a `raise`, `throw` or `exit` occurs, the\ncontext will be pretty printed to the screen to aid with debugging.","ref":"Zest.html#in_scope/2"},{"type":"function","title":"Zest.intercept/2","doc":"Catches errors and exceptions, invoking an interceptor function","ref":"Zest.html#intercept/2"},{"type":"function","title":"Zest.rethrow/3","doc":"An interceptor function which simply rethrows/reraises/re-exits","ref":"Zest.html#rethrow/3"},{"type":"function","title":"Zest.rethrowing/1","doc":"Wraps an interceptor or nullary function into an interceptor\nfunction such that after the execution of the provided function, the\nerror or exception will be rethrown.","ref":"Zest.html#rethrowing/1"},{"type":"macro","title":"Zest.scope/2","doc":"Add some debug information to the context for the duration of a\nblock or expression. If a `raise`, `throw` or `exit` occurs, the\ncontext will be pretty printed to the screen to aid with debugging.\n\nExamples:\n \n ```scope [foo: :bar[, assert(true == false)```\n\n ```scope [foo: :bar] do\n assert true == false\n end\n ```","ref":"Zest.html#scope/2"},{"type":"function","title":"Zest.scoped/2","doc":"Wrap a function such that it is as if its body was wrapped in `scope/2`","ref":"Zest.html#scoped/2"},{"type":"type","title":"Zest.intercept_type/0","doc":"","ref":"Zest.html#t:intercept_type/0"},{"type":"type","title":"Zest.interceptor/0","doc":"","ref":"Zest.html#t:interceptor/0"},{"type":"module","title":"Zest.Faking","doc":"Helpers to make random generator functions more useful in tests","ref":"Zest.Faking.html"},{"type":"function","title":"Zest.Faking.forbid/2","doc":"Partner to `unused`. Adds a list of values to the list of used\nvalues under a key.","ref":"Zest.Faking.html#forbid/2"},{"type":"function","title":"Zest.Faking.sequential/2","doc":"Returns the next unused integer id for `name` starting from `start`.\nPermits jumping by artificially increasing start - if start is\nhigher than the last used id, it will return start and set it as the\nlast used id","ref":"Zest.Faking.html#sequential/2"},{"type":"function","title":"Zest.Faking.such_that/4","doc":"Reruns a faker until a predicate passes.\nDefault limit is 10 tries.","ref":"Zest.Faking.html#such_that/4"},{"type":"function","title":"Zest.Faking.unused/3","doc":"Reruns a faker until an unseen value has been generated.\nDefault limit is 10 tries.\nStores seen things in the process dict (yes, *that* process dict)","ref":"Zest.Faking.html#unused/3"},{"type":"extras","title":"README","doc":"# Bonfire \n\n[Bonfire](https://bonfirenetworks.org/) - tend to your digital life in community\n\nCustomise and host your own online space and control your experience at the most granular level.\n\n#","ref":"readme.html"},{"type":"extras","title":"⚠️ Warning - README","doc":"This project is in the beta stage - you're welcome to try out it out (specifically the social features in the classic flavour), but APIs may still change and no guarantees are given about stability. You can keep track of progress [in our milestones](https://github.com/bonfire-networks/bonfire-app/milestones?direction=asc&sort=due_date&state=open)\n\n#","ref":"readme.html#warning"},{"type":"extras","title":"🔥 Flavours - README","doc":"This repo includes configurations to run two main [flavours of Bonfire](https://bonfirenetworks.org/use-bonfire/) you can choose from:\n* [Classic](https://github.com/bonfire-networks/bonfire-app/tree/main/flavours/classic) for basic social networking (beta)\n* [Community](https://github.com/bonfire-networks/bonfire-app/tree/main/flavours/community) with groups and topics functionality (alpha)\n* [Cooperation](https://github.com/bonfire-networks/bonfire-app/tree/main/flavours/cooperation) with a bunch more extensions and features (pre-alpha)","ref":"readme.html#flavours"},{"type":"extras","title":"📖 Documentation - README","doc":"* [Website](https://bonfirenetworks.org) \n* [Set up an instance](docs/DEPLOY.md) - for testing and evaluation only!\n* [Hacking on Bonfire](docs/HACKING.md) \n* [Code documentation](https://doc.bonfirenetworks.org/api-reference.html#content) \n* [Community chat](https://matrix.to/#/%23bonfire-networks:matrix.org)","ref":"readme.html#documentation"},{"type":"extras","title":"Copyright and License - README","doc":"Copyright (c) 2020-2022 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"readme.html#copyright-and-license"},{"type":"extras","title":"Bonfire Spark","doc":"# Bonfire Spark\n\nAn essential Bonfire extension that sets up the other extensions and starts the app.\n\nNOTE: this extension uses top-level naming for the OTP app (`:bonfire`) and modules (`Bonfire.`).\n\nDocumentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)\nand published on [HexDocs](https://hexdocs.pm). Once published, the docs can\nbe found at .","ref":"extension-bonfire.html"},{"type":"extras","title":"Bonfire.Common","doc":"# Bonfire.Common\n\n`Bonfire.Common` is an extension for [Bonfire](https://bonfire.cafe/) that contains:\n\n- Many common functions in `Bonfire.Common.Utils`\n- Path and URL generators in `Bonfire.Common.URIs`\n- Date and time helpers in `Bonfire.Common.DatesTimes`\n- Etc","ref":"extension-bonfire_common.html"},{"type":"extras","title":"Handy commands - Bonfire.Common","doc":"","ref":"extension-bonfire_common.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Common","doc":"Copyright (c) 2020 Bonfire, VoxPublica, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_common.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Mailer","doc":"# Bonfire.Mailer\n\nAn library for [Bonfire](https://bonfire.cafe/) that contains:\n\n- Sending email (using [Bamboo](https://github.com/thoughtbot/bamboo))\n- Checking hypothetical email or domain validity","ref":"extension-bonfire_mailer.html"},{"type":"extras","title":"Handy commands - Bonfire.Mailer","doc":"","ref":"extension-bonfire_mailer.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Mailer","doc":"Copyright (c) 2020 Bonfire, VoxPublica, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_mailer.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Epics","doc":"# Bonfire.Epics\n\n`Bonfire.Epics` is a way of structuring tasks that is extension and customisability friendly.\n\n - Bonfire.Epics","doc":"0.1.0\"} -->","ref":"extension-bonfire_epics.html#installation"},{"type":"extras","title":"Copyright and License - Bonfire.Epics","doc":"Copyright (c) 2022 Bonfire Contributors\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-bonfire_epics.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Ecto","doc":"# Bonfire.Ecto\n\n`Bonfire.Ecto` contains Ecto transactional support as acts for `Bonfire.Epics`\n\n \n\n - Bonfire.Ecto","doc":"0.1.0\"} -->","ref":"extension-bonfire_ecto.html#installation"},{"type":"extras","title":"Bonfire.Search","doc":"# Bonfire.Search\n\nAn extension for [Bonfire](https://bonfire.cafe/) to handle:\n\n- Search indexing\n- Ultra-fast search\n- LiveView search UI\n\nYou can implement adapters for your prefered search backend. Currently adapters are included for:\n- [Meili Search](https://www.meilisearch.com/)","ref":"extension-bonfire_search.html"},{"type":"extras","title":"Development & Deployment Documentation - Bonfire.Search","doc":"This extension is meant to be used inside of a Bonfire app, so please refer to the main repo at: https://github.com/bonfire-networks/bonfire-app","ref":"extension-bonfire_search.html#development-deployment-documentation"},{"type":"extras","title":"Copyright and License - Bonfire.Search","doc":"Copyright (c) 2020 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_search.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.Assort","doc":"# Bonfire.Data.Assort\n\nVarious assorted database schemas for:\n- Ranked linked items\n- TODO: move schemas from bonfire_classify and bonfire_tag here?","ref":"extension-bonfire_data_assort.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.Assort","doc":"Copyright (c) 2020 Bonfire Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_assort.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Files","doc":"# Bonfire.Files\n\nFile management for bonfire apps. \n\nBonfire Files wraps [waffle][1] a file management library, \nadding support for media type checking using magic bytes inside of files, \nalong with creating a [pointable][2] table for storage of file data.\n\n[1]: https://github.com/elixir-waffle/waffle \n[2]: https://github.com/bonfire-networks/needle","ref":"extension-bonfire_files.html"},{"type":"extras","title":"Configuration - Bonfire.Files","doc":"","ref":"extension-bonfire_files.html#configuration"},{"type":"extras","title":"TODO's - Bonfire.Files","doc":"- Generate docs\n- More tests","ref":"extension-bonfire_files.html#todo-s"},{"type":"extras","title":"Bonfire.Boundaries","doc":"# Bonfire.Boundaries\n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Circles\n- Verbs\n- Accesses\n- ACLs\n- Grants\n- Queries with healthy boundaries","ref":"extension-bonfire_boundaries.html"},{"type":"extras","title":"Handy commands - Bonfire.Boundaries","doc":"","ref":"extension-bonfire_boundaries.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Boundaries","doc":"Copyright (c) 2020 Bonfire Contributors\n\nThis Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_boundaries.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Federate.ActivityPub","doc":"# Bonfire.Federate.ActivityPub\n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Extensible/configurable tools for translating Bonfire data to/from ActivityStreams\n- Bonfire Adapter for the [ActivityPub federation library ](https://github.com/bonfire-networks/activity_pub)","ref":"extension-bonfire_federate_activitypub.html"},{"type":"extras","title":"Testing - Bonfire.Federate.ActivityPub","doc":"There are unit tests both in this repo, and in the activity_pub lib, but they can't cover every possible federation case, so manual testing with e.g. `curl -H \"Accept: application/activity+json\" -v \"http://localhost:4001/pub/actors/my_username\" | jq '.'` and by trying out federation flows between instances of Bonfire and other ActivityPub implementation is a must.","ref":"extension-bonfire_federate_activitypub.html#testing"},{"type":"extras","title":"Handy commands - Bonfire.Federate.ActivityPub","doc":"","ref":"extension-bonfire_federate_activitypub.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Federate.ActivityPub","doc":"Copyright (c) 2020 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_federate_activitypub.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Invite.Links","doc":"# Bonfire.Invite.Links\n\nAn extension for [Bonfire](https://bonfire.cafe/) to generate invite links","ref":"extension-bonfire_invite_links.html"},{"type":"extras","title":"Handy commands - Bonfire.Invite.Links","doc":"","ref":"extension-bonfire_invite_links.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Invite.Links","doc":"Copyright (c) 2020 Bonfire, VoxPublica, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_invite_links.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.AccessControl","doc":"# Bonfire.Data.AccessControl\n\nSee also https://bonfirenetworks.org/docs/boundaries/ for more docs (TODO: merge/deduplicate)\n\nBonfire has a slightly unusual way of dealing with access control.\nIt's not so different from role-based access control (RBAC), but we do\na few things differently and there are quite a lot of pieces to get\nyour head around. We'll start gently.\n\nBonfire has a `Verb` table containing strings like \"comment\" and\n\"delete\" that represent actions a user might wish to perform. They are\na basic part of the bonfire vocabulary within the codebase.\n\nA permission is a decision about whether the action may be performed\nit not. There are 3 decisions we support:\n\n* `true` (permitted)\n* `false` (explicitly not permitted, never permit)\n* `null`/`nil` (not explicitly permitted)\n\nIt may seem odd to have the `null` here. We will come back to this\nafter we've introduced a few more pieces of the puzzle.\n\nA boundary is simply an unordered list or group of permissions. Each\npermission may only occur once. Any permissions that are not specified\nare assumed to be `null`. This loosely corresponds to a `role` in RBAC.\n\nA `Grant` links a `subject` (user or circle) to a boundary. It\ndetermines what permissions are considered for a given subject.\n\nA `Acl` is simply an unordered list or group of `Grant`s. Subjects may\nappear more than once in a list (with different boundaries) and the\npermissions will be merged according to the following truth table:\n\n| input | input | output |\n|-------|-------|--------|\n| false | false | false |\n| false | true | false |\n| false | null | false |\n| true | false | false |\n| true | true | true |\n| true | null | true |\n| null | false | false |\n| null | true | true |\n| null | null | null |\n\nOr in words: take the highest value where `false > true > null`.\n\nAt the end of this combination process, the user is only permitted if\nthe result is true. You can see this as requiring an affirmative\nanswer to permit something, while always allowing you a bigger `no` to\ndeny when things are combined. Null values are additionally not\nrequired to be present in the database, saving us resources. That is\nto say we default to null if there is no relevant record.\n\nFinally, an object is linked to one or more `Acl`s by the `Controlled` multimixin, which pairs an object ID with an ACL ID. Because it is a multimixin, a given object can have multiple ACLs applied. In the case of overlap, permissions are combined in the manner described earlier.","ref":"extension-bonfire_data_access_control.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.AccessControl","doc":"Copyright (c) 2020 James Laver, `bonfire_data_access_control` Contributors\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_access_control.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.ActivityPub","doc":"# Bonfire.Data.ActivityPub\n\n \n\nActor schema.","ref":"extension-bonfire_data_activity_pub.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.ActivityPub","doc":"Copyright (c) 2020 James Laver, bonfire_data_activity_pub Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_activity_pub.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.Identity","doc":"# Bonfire.Data.Identity\n\nSchemas for accounts, users, etc.","ref":"extension-bonfire_data_identity.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.Identity","doc":"Copyright (c) 2020 James Laver, bonfire_data_identity Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_identity.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.Social","doc":"# Bonfire.Data.Social\n\n \n\nSchemas for social activities, posts, feeds, etc","ref":"extension-bonfire_data_social.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.Social","doc":"Copyright (c) 2020 James Laver, bonfire_data_social Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_social.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Me","doc":"# Bonfire.Me\n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Account creation\n- Email verification\n- Authentication\n- User/Profile creation\n- User/Profile switching\n- User Profile\n- Settings","ref":"extension-bonfire_me.html"},{"type":"extras","title":"Handy commands - Bonfire.Me","doc":"","ref":"extension-bonfire_me.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Me","doc":"Copyright (c) 2020 Bonfire, VoxPublica, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_me.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Social","doc":"# Bonfire.Social \n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Feeds / Timelines\n- Activities\n- Threads\n- Boosting\n- Liking\n- Flagging\n- etc","ref":"extension-bonfire_social.html"},{"type":"extras","title":"Handy commands - Bonfire.Social","doc":"","ref":"extension-bonfire_social.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Social","doc":"Copyright (c) 2023 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_social.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Social.Graph","doc":"# Bonfire.Social.Graph \n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Following\n- Follow Requests\n- Social graph analysis","ref":"extension-bonfire_social_graph.html"},{"type":"extras","title":"Handy commands - Bonfire.Social.Graph","doc":"","ref":"extension-bonfire_social_graph.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Social.Graph","doc":"Copyright (c) 2023 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_social_graph.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Posts","doc":"# Bonfire.Posts \n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Creating and reading posts","ref":"extension-bonfire_posts.html"},{"type":"extras","title":"Handy commands - Bonfire.Posts","doc":"","ref":"extension-bonfire_posts.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Posts","doc":"Copyright (c) 2020 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_posts.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Messages","doc":"# Bonfire.Messages \n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- DM\n- Group messaging","ref":"extension-bonfire_messages.html"},{"type":"extras","title":"Handy commands - Bonfire.Messages","doc":"","ref":"extension-bonfire_messages.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Messages","doc":"Copyright (c) 2023 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_messages.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Common","doc":"# Bonfire.UI.Common\n\n`Bonfire.UI.Common` is an extension for [Bonfire](https://bonfire.cafe/) that contains:\n\n- Many common functions for web UIs in Bonfire extensions\n- Common and generic re-usable components\n- Etc","ref":"extension-bonfire_ui_common.html"},{"type":"extras","title":"Handy commands - Bonfire.UI.Common","doc":"","ref":"extension-bonfire_ui_common.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Common","doc":"Copyright (c) 2022 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_common.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Social","doc":"# Bonfire.UI.Social\n![](https://i.imgur.com/XoQvDCW.png)\n\n[Bonfire.UI.Social](http://bonfirenetworks.org/extensions/ui_social.html) is an extension that includes the main User Interfaces (routes, pages and components) required to have a fully working federated social network app.\n\nThis extension is meant to be used by other extensions like [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social), which provides logic for the UI to work with/\n\nYou can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment `Bonfire.UI.Social.Routes` from your top-level Router to use your custom routes and views instead).\n\n\n#","ref":"extension-bonfire_ui_social.html"},{"type":"extras","title":"Stack - Bonfire.UI.Social","doc":"So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:\n\n- [Phoenix](https://www.phoenixframework.org/)\n- [Elixir](https://elixir-lang.org/)\n- [TailwindCSS](https://tailwindcss.com/)\n- [Alpine.js](https://alpinejs.dev/)\n- [LiveView](https://github.com/phoenixframework/phoenix_live_view#readme)\n- [Surface](https://surface-ui.org/)\n\nSurface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.\n\n\n#","ref":"extension-bonfire_ui_social.html#stack"},{"type":"extras","title":"Scaffolding - Bonfire.UI.Social","doc":"The relevant folders are:\n- [Components](https://github.com/bonfire-networks/bonfire_ui_social/tree/main/lib/components): Surface stateless and stateful components.\n- [Views](https://github.com/bonfire-networks/bonfire_ui_social/tree/main/lib/views): The main pages that are rendered when navigating to a specific route\n- [Test](https://github.com/bonfire-networks/bonfire_ui_social/tree/main/test): All the unit tests for the specific module.\n\n#","ref":"extension-bonfire_ui_social.html#scaffolding"},{"type":"extras","title":"Other resources - Bonfire.UI.Social","doc":"- [A blog post that introduces the concept of themeable bonfire apps](https://bonfirenetworks.org/posts/let_thousand_bonfires_bloom/)","ref":"extension-bonfire_ui_social.html#other-resources"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Social","doc":"Copyright (c) 2020 Bonfire, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_social.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Social.Graph","doc":"# Bonfire.UI.Social.Graph\n![](https://i.imgur.com/XoQvDCW.png)\n\n`Bonfire.UI.Social.Graph` is an extension that includes some User Interfaces (routes, pages and components) for following and otherwise managing one's network in Bonfire.\n\nYou can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment `Bonfire.UI.Social.Routes` from your top-level Router to use your custom routes and views instead).\n\n\n#","ref":"extension-bonfire_ui_social_graph.html"},{"type":"extras","title":"Stack - Bonfire.UI.Social.Graph","doc":"So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:\n\n- [Phoenix](https://www.phoenixframework.org/)\n- [Elixir](https://elixir-lang.org/)\n- [TailwindCSS](https://tailwindcss.com/)\n- [Alpine.js](https://alpinejs.dev/)\n- [LiveView](https://github.com/phoenixframework/phoenix_live_view#readme)\n- [Surface](https://surface-ui.org/)\n\nSurface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.\n\n\n#","ref":"extension-bonfire_ui_social_graph.html#stack"},{"type":"extras","title":"Scaffolding - Bonfire.UI.Social.Graph","doc":"The relevant folders are:\n- [Components](https://github.com/bonfire-networks/bonfire_ui_social_graph/tree/main/lib/components): Surface stateless and stateful components.\n- [Views](https://github.com/bonfire-networks/bonfire_ui_social_graph/tree/main/lib/views): The main pages that are rendered when navigating to a specific route\n- [Test](https://github.com/bonfire-networks/bonfire_ui_social_graph/tree/main/test): All the unit tests for the specific module.\n\n#","ref":"extension-bonfire_ui_social_graph.html#scaffolding"},{"type":"extras","title":"Other resources - Bonfire.UI.Social.Graph","doc":"- [A blog post that introduces the concept of themeable bonfire apps](https://bonfirenetworks.org/posts/let_thousand_bonfires_bloom/)","ref":"extension-bonfire_ui_social_graph.html#other-resources"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Social.Graph","doc":"Copyright (c) 2020 Bonfire, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_social_graph.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Posts","doc":"# Bonfire.UI.Posts\n![](https://i.imgur.com/XoQvDCW.png)\n\n`Bonfire.UI.Posts` is an extension that includes some User Interfaces (routes, pages and components) for writing and reading posts in Bonfire.\n\nYou can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment `Bonfire.UI.Posts.Routes` from your top-level Router to use your custom routes and views instead).\n\n\n#","ref":"extension-bonfire_ui_posts.html"},{"type":"extras","title":"Stack - Bonfire.UI.Posts","doc":"So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:\n\n- [Phoenix](https://www.phoenixframework.org/)\n- [Elixir](https://elixir-lang.org/)\n- [TailwindCSS](https://tailwindcss.com/)\n- [Alpine.js](https://alpinejs.dev/)\n- [LiveView](https://github.com/phoenixframework/phoenix_live_view#readme)\n- [Surface](https://surface-ui.org/)\n\nSurface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.\n\n\n#","ref":"extension-bonfire_ui_posts.html#stack"},{"type":"extras","title":"Scaffolding - Bonfire.UI.Posts","doc":"The relevant folders are:\n- [Components](https://github.com/bonfire-networks/bonfire_ui_posts/tree/main/lib/components): Surface stateless and stateful components.\n- [Views](https://github.com/bonfire-networks/bonfire_ui_posts/tree/main/lib/views): The main pages that are rendered when navigating to a specific route\n- [Test](https://github.com/bonfire-networks/bonfire_ui_posts/tree/main/test): All the unit tests for the specific module.\n\n#","ref":"extension-bonfire_ui_posts.html#scaffolding"},{"type":"extras","title":"Other resources - Bonfire.UI.Posts","doc":"- [A blog post that introduces the concept of themeable bonfire apps](https://bonfirenetworks.org/posts/let_thousand_bonfires_bloom/)","ref":"extension-bonfire_ui_posts.html#other-resources"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Posts","doc":"Copyright (c) 2020 Bonfire, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_posts.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Messages","doc":"# Bonfire.UI.Messages\n![](https://i.imgur.com/XoQvDCW.png)\n\n`Bonfire.UI.Messages` is an extension that includes some User Interfaces (routes, pages and components) for messaging in Bonfire.\n\nYou can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment `Bonfire.UI.Messages.Routes` from your top-level Router to use your custom routes and views instead).\n\n\n#","ref":"extension-bonfire_ui_messages.html"},{"type":"extras","title":"Stack - Bonfire.UI.Messages","doc":"So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:\n\n- [Phoenix](https://www.phoenixframework.org/)\n- [Elixir](https://elixir-lang.org/)\n- [TailwindCSS](https://tailwindcss.com/)\n- [Alpine.js](https://alpinejs.dev/)\n- [LiveView](https://github.com/phoenixframework/phoenix_live_view#readme)\n- [Surface](https://surface-ui.org/)\n\nSurface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.\n\n\n#","ref":"extension-bonfire_ui_messages.html#stack"},{"type":"extras","title":"Scaffolding - Bonfire.UI.Messages","doc":"The relevant folders are:\n- [Components](https://github.com/bonfire-networks/bonfire_ui_messages/tree/main/lib/components): Surface stateless and stateful components.\n- [Views](https://github.com/bonfire-networks/bonfire_ui_messages/tree/main/lib/views): The main pages that are rendered when navigating to a specific route\n- [Test](https://github.com/bonfire-networks/bonfire_ui_messages/tree/main/test): All the unit tests for the specific module.\n\n#","ref":"extension-bonfire_ui_messages.html#scaffolding"},{"type":"extras","title":"Other resources - Bonfire.UI.Messages","doc":"- [A blog post that introduces the concept of themeable bonfire apps](https://bonfirenetworks.org/posts/let_thousand_bonfires_bloom/)","ref":"extension-bonfire_ui_messages.html#other-resources"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Messages","doc":"Copyright (c) 2020 Bonfire, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_messages.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Reactions","doc":"# Bonfire.UI.Reactions\n![](https://i.imgur.com/XoQvDCW.png)\n\n`Bonfire.UI.Reactions` is an extension that includes some User Interfaces (routes, pages and components) for liking, boosting, pinning, bookmarking, etc, in Bonfire.\n\nYou can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment `Bonfire.UI.Reactions.Routes` from your top-level Router to use your custom routes and views instead).\n\n\n#","ref":"extension-bonfire_ui_reactions.html"},{"type":"extras","title":"Stack - Bonfire.UI.Reactions","doc":"So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:\n\n- [Phoenix](https://www.phoenixframework.org/)\n- [Elixir](https://elixir-lang.org/)\n- [TailwindCSS](https://tailwindcss.com/)\n- [Alpine.js](https://alpinejs.dev/)\n- [LiveView](https://github.com/phoenixframework/phoenix_live_view#readme)\n- [Surface](https://surface-ui.org/)\n\nSurface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.\n\n\n#","ref":"extension-bonfire_ui_reactions.html#stack"},{"type":"extras","title":"Scaffolding - Bonfire.UI.Reactions","doc":"The relevant folders are:\n- [Components](https://github.com/bonfire-networks/bonfire_ui_reactions/tree/main/lib/components): Surface stateless and stateful components.\n- [Views](https://github.com/bonfire-networks/bonfire_ui_reactions/tree/main/lib/views): The main pages that are rendered when navigating to a specific route\n- [Test](https://github.com/bonfire-networks/bonfire_ui_reactions/tree/main/test): All the unit tests for the specific module.\n\n#","ref":"extension-bonfire_ui_reactions.html#scaffolding"},{"type":"extras","title":"Other resources - Bonfire.UI.Reactions","doc":"- [A blog post that introduces the concept of themeable bonfire apps](https://bonfirenetworks.org/posts/let_thousand_bonfires_bloom/)","ref":"extension-bonfire_ui_reactions.html#other-resources"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Reactions","doc":"Copyright (c) 2020 Bonfire, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_reactions.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Moderation","doc":"# Bonfire.UI.Moderation\n![](https://i.imgur.com/XoQvDCW.png)\n\n`Bonfire.UI.Moderation` is an extension that includes some User Interfaces (routes, pages and components) for flagging content and moderation in Bonfire.\n\nYou can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment `Bonfire.UI.Social.Routes` from your top-level Router to use your custom routes and views instead).\n\n\n#","ref":"extension-bonfire_ui_moderation.html"},{"type":"extras","title":"Stack - Bonfire.UI.Moderation","doc":"So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:\n\n- [Phoenix](https://www.phoenixframework.org/)\n- [Elixir](https://elixir-lang.org/)\n- [TailwindCSS](https://tailwindcss.com/)\n- [Alpine.js](https://alpinejs.dev/)\n- [LiveView](https://github.com/phoenixframework/phoenix_live_view#readme)\n- [Surface](https://surface-ui.org/)\n\nSurface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.\n\n\n#","ref":"extension-bonfire_ui_moderation.html#stack"},{"type":"extras","title":"Scaffolding - Bonfire.UI.Moderation","doc":"The relevant folders are:\n- [Components](https://github.com/bonfire-networks/bonfire_ui_moderation/tree/main/lib/components): Surface stateless and stateful components.\n- [Views](https://github.com/bonfire-networks/bonfire_ui_moderation/tree/main/lib/views): The main pages that are rendered when navigating to a specific route\n- [Test](https://github.com/bonfire-networks/bonfire_ui_moderation/tree/main/test): All the unit tests for the specific module.\n\n#","ref":"extension-bonfire_ui_moderation.html#scaffolding"},{"type":"extras","title":"Other resources - Bonfire.UI.Moderation","doc":"- [A blog post that introduces the concept of themeable bonfire apps](https://bonfirenetworks.org/posts/let_thousand_bonfires_bloom/)","ref":"extension-bonfire_ui_moderation.html#other-resources"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Moderation","doc":"Copyright (c) 2020 Bonfire, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_moderation.html#copyright-and-license"},{"type":"extras","title":"Bonfire.UI.Me","doc":"# Bonfire.UI.Me\n![](https://i.imgur.com/XoQvDCW.png)\n\n[Bonfire.UI.Me](http://bonfirenetworks.org/extensions/ui_social.html) is an extension that includes the main User Interfaces (routes, pages and components) for functionality around accounts, users, profiles, authentication, etc.\n\nThis extension is meant to be used by other extensions like [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me), which provide logic for the UI to work with.\n\nYou can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment `Bonfire.UI.Me.Routes` from your top-level Router to use your custom routes and views instead). \n\n#","ref":"extension-bonfire_ui_me.html"},{"type":"extras","title":"Stack - Bonfire.UI.Me","doc":"So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:\n\n- [Phoenix](https://www.phoenixframework.org/)\n- [Elixir](https://elixir-lang.org/)\n- [TailwindCSS](https://tailwindcss.com/)\n- [Alpine.js](https://alpinejs.dev/)\n- [LiveView](https://github.com/phoenixframework/phoenix_live_view#readme)\n- [Surface](https://surface-ui.org/)\n\nSurface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs. \n\n#","ref":"extension-bonfire_ui_me.html#stack"},{"type":"extras","title":"Scaffolding - Bonfire.UI.Me","doc":"The relevant folders are:\n- [Components](https://github.com/bonfire-networks/bonfire_ui_me/tree/main/lib/components): Surface stateless and stateful components.\n- [Views](https://github.com/bonfire-networks/bonfire_ui_me/tree/main/lib/views): The main pages that are rendered when navigating to a specific route\n- [Test](https://github.com/bonfire-networks/bonfire_ui_me/tree/main/test): All the unit tests for the specific module.\n\n#","ref":"extension-bonfire_ui_me.html#scaffolding"},{"type":"extras","title":"Other resources - Bonfire.UI.Me","doc":"- [A blog post that introduces the concept of themeable bonfire apps](https://bonfirenetworks.org/posts/let_thousand_bonfires_bloom/)","ref":"extension-bonfire_ui_me.html#other-resources"},{"type":"extras","title":"Copyright and License - Bonfire.UI.Me","doc":"Copyright (c) 2022 Bonfire Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_ui_me.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Data.SharedUser","doc":"# Bonfire.Data.SharedUser","ref":"extension-bonfire_data_shared_user.html"},{"type":"extras","title":"Copyright and License - Bonfire.Data.SharedUser","doc":"Copyright (c) 2020 Bonfire Contributors\n \n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.","ref":"extension-bonfire_data_shared_user.html#copyright-and-license"},{"type":"extras","title":"Bonfire.Tag","doc":"# Bonfire.Tag\n\nAn extension for [Bonfire](https://bonfire.cafe/) that handles:\n\n- Tagging posts or other things (i.e. with a Category from Bonfire.Classify or a location from Bonfire.Geolocate)\n- @ mentions (WIP)\n- Hashtags (WIP)","ref":"extension-bonfire_tag.html"},{"type":"extras","title":"Handy commands - Bonfire.Tag","doc":"","ref":"extension-bonfire_tag.html#handy-commands"},{"type":"extras","title":"Copyright and License - Bonfire.Tag","doc":"Copyright (c) 2020 Bonfire, Haha Academy, and CommonsPub Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_tag.html#copyright-and-license"},{"type":"extras","title":"ActivityPub","doc":"# ActivityPub\n\nActivityPub Library for elixir.\n\n**WORK IN PROGRESS, TESTING FEDERATION WITH DIFFERENT IMPLEMENTATIONS IS UNDERWAY**","ref":"extension-activity_pub.html"},{"type":"extras","title":"Installation - ActivityPub","doc":"1. Add this library to your dependencies in `mix.exs`\n\n```\ndefp deps do\n [...]\n {:activity_pub, git: \"https://github.com/bonfire-networks/activity_pub.git\", branch: \"stable\"} # branch can \"stable\", or \"develop\" for the bleeding edge\nend\n```\n\n2. Create an adapter module. To start, one created at\n `lib/my_app/adapter.ex` might look like\n\n```elixir\ndefmodule MyApp.Adapter do\n @moduledoc \"\"\"\n Adapter functions delegated from the `ActivityPub` Library\n \"\"\"\n\n @behaviour ActivityPub.Federator.Adapter\nend\n```\n\nNote that, due to the defined `@behavior`, Elixir will warn you that\nthe required functions\n\n * `base_url/0`\n * `get_actor_by_id/1`\n * `get_actor_by_username/1`\n * `get_follower_local_ids/1`\n * `get_following_local_ids/1`\n * `get_redirect_url/1`\n * `handle_activity/1`\n * `maybe_create_remote_actor/1`\n * `maybe_publish_object/2`\n * `update_local_actor/2`\n * `update_remote_actor/1`\n\nhave not yet been implemented though you will be able to start your\napp. Defining these allows `ActivityPub` to handle ActivityPub HTTP\nand database calls and operations. An example of an implemented\nadaptor can be found\n[here](https://github.com/bonfire-networks/bonfire_federate_activitypub/tree/main/lib/adapter\n\"Link to file hosted on GitHub\").\n\nThen set it in config\n\n```\nconfig :activity_pub, :adapter, MyApp.Adapter\n```\n\n3. Set your application repo in config\n\n```\nconfig :activity_pub, :repo, MyApp.Repo\n```\n\n4. Create a new ecto migration and call `ActivityPub.Migration.up/0` from it\n\n5. Inject AP routes to your router by adding `use ActivityPub.Web.Router` to your app's router module\n\n6. Copy the default AP config to your app's confix.exs\n\n```\nconfig :activity_pub, :mrf_simple,\n media_removal: [],\n media_nsfw: [],\n report_removal: [],\n accept: [],\n avatar_removal: [],\n banner_removal: []\n\nconfig :activity_pub, :instance,\n hostname: \"example.com\",\n federation_publisher_modules: [ActivityPub.Federator.APPublisher],\n federation_reachability_timeout_days: 7,\n federating: true,\n rewrite_policy: []\n\nconfig :activity_pub, :http,\n proxy_url: nil,\n user_agent: \"Your app name\",\n send_user_agent: true,\n adapter: [\n ssl_options: [\n # Workaround for remote server certificate chain issues\n partial_chain: &:hackney_connect.partial_chain/1,\n # We don't support TLS v1.3 yet\n versions: [:tlsv1, :\"tlsv1.1\", :\"tlsv1.2\"]\n ]\n ]\n ```\n\n7. Change the hostname value in the instance config block to your instance's hostname \n\n8. If you don't already have Oban set up, follow the [Oban installation intructions](https://hexdocs.pm/oban/installation.html#content) and add the AP queues:\n\n```\nconfig :my_app, Oban, queues: [federator_incoming: 50, federator_outgoing: 50, remote_fetcher: 20]\n```\n\nNow you should be able to compile and run your app and move over to integration.","ref":"extension-activity_pub.html#installation"},{"type":"extras","title":"Paginator","doc":"# Paginator\n\n[![Build status](https://github.com/duffelhq/paginator/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/duffelhq/paginator/actions?query=branch%3Amain)\n[![Inline docs](http://inch-ci.org/github/duffelhq/paginator.svg)](http://inch-ci.org/github/duffelhq/paginator)\n\n`Paginator` implements [cursor-based pagination](http://use-the-index-luke.com/no-offset) for Elixir [Ecto](https://github.com/elixir-ecto/ecto).\n\n[Documentation](https://hexdocs.pm/paginator)","ref":"extension-paginator.html"},{"type":"extras","title":"Why? - Paginator","doc":"There are several ways to implement pagination in a project and they all have pros and cons depending on your situation.\n\n#","ref":"extension-paginator.html#why"},{"type":"extras","title":"Limit-offset - Paginator","doc":"This is the easiest method to use and implement: you just have to set `LIMIT` and `OFFSET` on your queries and the\ndatabase will return records based on this two parameters. Unfortunately, it has two major drawbacks:\n\n* Inconsistent results: if the dataset changes while you are querying, the results in the page will shift and your user\nmight end seeing records they have already seen and missing new ones.\n\n* Inefficiency: `OFFSET N` instructs the database to skip the first N results of a query. However, the database must still\nfetch these rows from disk and order them before it can returns the ones requested. If the dataset you are querying is\nlarge this will result in significant slowdowns.\n\n#","ref":"extension-paginator.html#limit-offset"},{"type":"extras","title":"Cursor-based (a.k.a keyset pagination) - Paginator","doc":"This method relies on opaque cursor to figure out where to start selecting records. It is more performant than\n`LIMIT-OFFSET` because it can filter records without traversing all of them.\n\nIt's also consistent, any insertions/deletions before the current page will leave results unaffected.\n\nIt has some limitations though: for instance you can't jump directly to a specific page. This may\nnot be an issue for an API or if you use infinite scrolling on your website.\n\n#","ref":"extension-paginator.html#cursor-based-a-k-a-keyset-pagination"},{"type":"extras","title":"Learn more - Paginator","doc":"* http://use-the-index-luke.com/no-offset\n* http://use-the-index-luke.com/sql/partial-results/fetch-next-page\n* https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/\n* https://developer.twitter.com/en/docs/tweets/timelines/guides/working-with-timelines","ref":"extension-paginator.html#learn-more"},{"type":"extras","title":"Getting started - Paginator","doc":"```elixir\ndefmodule MyApp.Repo do\n use Ecto.Repo,\n otp_app: :my_app,\n adapter: Ecto.Adapters.Postgres\n\n use Paginator\nend\n\nquery = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id])\n\npage = MyApp.Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)\n\n# `page.edges` contains all the entries for this page.\n# `page.page_info` contains the meta-data associated with this page (cursors, limit, total count)\n```","ref":"extension-paginator.html#getting-started"},{"type":"extras","title":"Install - Paginator","doc":"Add `paginator` to your list of dependencies in `mix.exs`:\n\n```elixir\ndef deps do\n [{:paginator, \"~> 1.0.4\"}]\nend\n```","ref":"extension-paginator.html#install"},{"type":"extras","title":"Usage - Paginator","doc":"1. Add `Paginator` to your repo.\n\n ```elixir\n defmodule MyApp.Repo do\n use Ecto.Repo,\n otp_app: :my_app,\n adapter: Ecto.Adapters.Postgres\n\n use Paginator\n end\n ```\n\n2. Use the `paginate` function to paginate your queries.\n\n ```elixir\n query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id])\n\n # return the first 50 posts\n %{edges: edges, page_info: page_info} = Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)\n\n # assign the `after` cursor to a variable\n cursor_after = page_info.end_cursor\n\n # return the next 50 posts\n %{edges: edges, page_info: page_info} = Repo.paginate(query, after: cursor_after, cursor_fields: [{:inserted_at, :asc}, {:id, :asc}], limit: 50)\n\n # assign the `before` cursor to a variable\n cursor_before = page_info.start_cursor\n\n # return the previous 50 posts (if no post was created in between it should be the same list as in our first call to `paginate`)\n %{edges: edges, page_info: page_info} = Repo.paginate(query, before: cursor_before, cursor_fields: [:inserted_at, :id], limit: 50)\n\n # return total count\n # NOTE: this will issue a separate `SELECT COUNT(*) FROM table` query to the database.\n %{edges: edges, page_info: page_info} = Repo.paginate(query, include_total_count: true, cursor_fields: [:inserted_at, :id], limit: 50)\n\n IO.puts \"total count: #{page_info.total_count}\"\n ```","ref":"extension-paginator.html#usage"},{"type":"extras","title":"Security Considerations - Paginator","doc":"`Repo.paginate/4` will throw an ArgumentError should it detect an executable term in the cursor parameters passed to it (`before`, `after`).\nThis is done to protect you from potential side-effects of malicious user input, see [paginator_test.exs](https://github.com/duffelhq/paginator/blob/master/test/paginator_test.exs#L820).","ref":"extension-paginator.html#security-considerations"},{"type":"extras","title":"Indexes - Paginator","doc":"If you want to reap all the benefits of this method it is better that you create indexes on the columns you are using as\ncursor fields.\n\n#","ref":"extension-paginator.html#indexes"},{"type":"extras","title":"Example - Paginator","doc":"```elixir\n# If your cursor fields are: [:inserted_at, :id]\n# Add the following in a migration\n\ncreate index(\"posts\", [:inserted_at, :id])\n```","ref":"extension-paginator.html#example"},{"type":"extras","title":"Caveats - Paginator","doc":"* This method requires a deterministic sort order. If the columns you are currently using for sorting don't match that\ndefinition, just add any unique column and extend your index accordingly.\n* You need to add order_by clauses yourself before passing your query to `paginate/2`. In the future we might do that\nfor you automatically based on the fields specified in `:cursor_fields`.\n* There is an outstanding issue where Postgrex fails to properly builds the query if it includes custom PostgreSQL types.\n* This library has only be tested with PostgreSQL.","ref":"extension-paginator.html#caveats"},{"type":"extras","title":"Documentation - Paginator","doc":"Documentation is written into the library, you will find it in the source code, accessible from `iex` and of course, it\nall gets published to [hexdocs](http://hexdocs.pm/paginator).","ref":"extension-paginator.html#documentation"},{"type":"extras","title":"Contributing - Paginator","doc":"#","ref":"extension-paginator.html#contributing"},{"type":"extras","title":"Running tests - Paginator","doc":"Clone the repo and fetch its dependencies:\n\n```\n$ git clone https://github.com/duffelhq/paginator.git\n$ cd paginator\n$ mix deps.get\n$ mix test\n```\n\n#","ref":"extension-paginator.html#running-tests"},{"type":"extras","title":"Building docs - Paginator","doc":"```\n$ mix docs\n```","ref":"extension-paginator.html#building-docs"},{"type":"extras","title":"LICENSE - Paginator","doc":"See [LICENSE](https://github.com/duffelhq/paginator/blob/master/LICENSE.txt)","ref":"extension-paginator.html#license"},{"type":"extras","title":"Voodoo","doc":"# Voodoo\n\n`Voodoo` is a drop-in replacement for [Phoenix path helpers](https://hexdocs.pm/phoenix/routing.html#path-helpers) which is more convenient to use.","ref":"extension-voodoo.html"},{"type":"extras","title":"EctoSparkles","doc":"# EctoSparkles\n\nSome helpers to sparkle on top of [Ecto](https://hexdocs.pm/ecto/Ecto.html) \n\n- [`join_preload`](#join_preload-documentation)\n- [`reusable_join`](#reusablejoin-documentation)\n- `Migrator` to run migrations, rollbacks, etc in a release and `AutoMigrator` to automatically run them at startup.\n- `DataMigration`: a behaviour implemented for data migrations (generally backfills).\n- `Log` to log slow or possible N+1 queries with telemetry (showing stacktraces)\n- `Changesets` with various changeset helpers and validators and `Changesets.Errors` to handle changeset errors\n\nNOTE: you need to put something like `config :ecto_sparkles, :otp_app, :your_otp_app_name` in your app's config.\n\n\n## `join_preload` Documentation\n\nA macro which tells Ecto to perform a join and preload of (up to 5 nested levels of) associations.\n\nBy default, Ecto preloads associations using a separate query for each association, which can degrade performance.\n\nYou could make it run faster by using a combination of join/preload, but that requires a bit of boilerplate (see examples below).\n\n#","ref":"extension-ecto_sparkles.html"},{"type":"extras","title":"Examples using just Ecto - EctoSparkles","doc":"```\n query\n |> join(:left, [o, activity: activity], assoc(:object), as: :object)\n |> preload([l, activity: activity, object: object], activity: {activity, [object: object]})\n```\n\nEcto requires calling `Query.join/4`, `Query.assoc/3` and `Query.preload/2`. Here's another example:\n\n```\n Invoice\n |> join(:left, [i], assoc(i, :customer), as: :customer)\n |> join(:left, [i], assoc(i, :lines), as: :lines)\n |> preload([lines: v, customers: c], lines: v, customer: c)\n |> Repo.all()\n```","ref":"extension-ecto_sparkles.html#examples-using-just-ecto"},{"type":"extras","title":"Example using join_preload - EctoSparkles","doc":"With `join_preload`, you can accomplish this with just one line of code.\n\n```\n query\n |> join_preload([:activity, :object])\n```\n\n```\n Invoice\n |> join_preload(:customer)\n |> join_preload(:lines)\n |> Repo.all()\n```\n\nAs a bonus, `join_preload` automatically makes use of `reusable_join`\nso calling it multiple times for the same association has no ill effects.\n\n\n## `reusable_join` Documentation\n\nA macro is similar to `Ecto.Query.join/{4,5}`, but can be called multiple times \nwith the same alias.\n\nNote that only the first join operation is performed, the subsequent ones that use the same alias\nare just ignored. Also note that because of this behaviour, its mandatory to specify an alias when\nusing this function.\n\nThis is helpful when you need to perform a join while building queries one filter at a time,\nbecause the same filter could be used multiple times or you could have multiple filters that\nrequire the same join, which poses a problem with how the `filter/3` callback work, as you\nneed to return a dynamic with the filtering, which means that the join must have an alias,\nand by default Ecto raises an error when you add multiple joins with the same alias.\n\nTo solve this, it is recommended to use this macro instead of the default `Ecto.Query.join/{4,5}`,\nin which case there will be only one join in the query that can be reused by multiple filters.\n\n#","ref":"extension-ecto_sparkles.html#example-using-join_preload"},{"type":"extras","title":"Creating reusable joins - EctoSparkles","doc":"```elixir\nquery\n|> reusable_join(:left, [t1], t2 in \"other_table\", on: t1.id == t2.id, as: :other_a)\n|> reusable_join(:left, [t1], t2 in \"other_table\", on: t1.id == t2.id, as: :other_b)\n```","ref":"extension-ecto_sparkles.html#creating-reusable-joins"},{"type":"extras","title":"Copyright - EctoSparkles","doc":"- Copyright (c) 2021 Bonfire developers\n- Copyright (c) 2020 Up Learn\n- Copyright (c) 2019 Joshua Nussbaum \n\n- `join_preload` was originally forked from [Ecto.Preloader](https://github.com/joshnuss/ecto_preloader), licensed under WTFPL)\n- `reusable_join` was originally forked from [QueryElf](https://gitlab.com/up-learn-uk/query-elf), licensed under Apache License Version 2.0","ref":"extension-ecto_sparkles.html#copyright"},{"type":"extras","title":"Bonfire.Editor.Milkdown","doc":"# Bonfire.Editor.Milkdown\n\nBonfire composer based on the [Milkdown](https://milkdown.dev/) markdown editor","ref":"extension-bonfire_editor_milkdown.html"},{"type":"extras","title":"ROADMAP - Bonfire.Editor.Milkdown","doc":"- [x] Add emojis using gemoji convention\n- [x] Show emojis suggestions when typing : followed by 2 chars\n- [x] Show mentions suggestions when typing @ followed by 2 chars\n- [x] Show formatting suggestions when typing /\n- [x] Insert emojis from the suggestions list\n- [x] Insert mentions from the suggestions list\n- [ ] Insert formatting from the suggestions list\n- [x] Add placeholder when missing text\n- [ ] Upload images by dragging them in the editor","ref":"extension-bonfire_editor_milkdown.html#roadmap"},{"type":"extras","title":"Copyright and License - Bonfire.Editor.Milkdown","doc":"Copyright (c) 2023 Bonfire, Milkdown, ProseMirror and Remark Contributors\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nAffero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public\nLicense along with this program. If not, see .","ref":"extension-bonfire_editor_milkdown.html#copyright-and-license"},{"type":"extras","title":"Arrows","doc":"# Arrows\n\nA handful of (mostly) arrow macros.","ref":"extension-arrows.html"},{"type":"extras","title":"Installation - Arrows","doc":"The package can be installed by adding `arrows` to your list of dependencies in `mix.exs`: -->\n\n```elixir\ndef deps do\n [\n {:arrows, \"~> 0.1.0\"}\n ]\nend\n```\n\nOr via git:\n```elixir\ndef deps do\n [\n {:arrows, git: \"https://github.com/bonfire-networks/arrows\", branch: \"main\"}\n ]\nend\n```","ref":"extension-arrows.html#installation"},{"type":"extras","title":"Documentation - Arrows","doc":"The Elixir [|> (\"pipe\") operator](https://hexdocs.pm/elixir/Kernel.html#%7C%3E/2) is one of the things that seems to get people excited about elixir. Probably in part because you then don't have to keep coming up with function names. Unfortunately it's kind of limiting. \nThe moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.\n\nNot any more! By simply inserting `...` where you would like the value to be inserted, `Arrows` will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. `Arrows` was inspired by [an existing library](https://hexdocs.pm/magritte/Magritte.html). Here is part of the test suite in lieu of examples:\n\n```elixir\ndefmodule ArrowsTest do\n use ExUnit.Case\n use Arrows\n\n def double(x), do: x * 2\n def double_fst(x, _), do: x * 2\n def double_snd(_, x), do: x * 2\n def add_snd_thd(_, x, y), do: x + y\n\n test \"|>\" do\n assert 4 == (2 |> double)\n assert 4 == (2 |> double())\n assert 4 == (2 |> double(...))\n assert 8 == (2 |> double(double(...)))\n assert 4 == (2 |> double_fst(1))\n assert 4 == (2 |> double_fst(..., 1))\n assert 8 == (2 |> double_fst(double(...), 1))\n assert 4 == (2 |> double_snd(1, ...))\n assert 8 == (2 |> double_snd(1, double(...)))\n assert 3 == (2 |> add_snd_thd(1, ..., 1))\n assert 4 == (2 |> add_snd_thd(1, ..., ...))\n assert 6 == (2 |> add_snd_thd(1, ..., double(...)))\n for x {:ok, ...})\n end\n end\nend\n```\n\nA few little extra features you might notice here:\n* You can move the parameter into a subexpression, as in `2 |> double_fst(double(...), 1)` where\n double will be called before the parameter is passed to `double_fst`.\n* You can use `...` multiple times, substituting it in multiple places.\n* The right hand side need not even be a function call, you can use any expression with `...`.\n\n#","ref":"extension-arrows.html#documentation"},{"type":"extras","title":"Ok-pipe - Arrows","doc":"`Arrows` also provides an `ok-pipe` operator, `~>`, which only pipes into the next function if the result from the last one was considered a success. It's inspired by [OK](https://hexdocs.pm/ok/readme.html), but we have chosen to do things slightly differently so it better fits with our regular pipe.\n\ninput | result |\n:----------------------- | :-------------- |\n`{:ok, x}` | `fun.(x)` |\n`{:error, e}` | `{:error, e}` |\n`nil` | `nil` |\n`x when not is_nil(x)` | `fun.(x)` |\n\nIn the case of a function returning an ok/error tuple being on the left hand side, this is straightforward to determine. In the event of `{:ok, x}`, x will be passed into the right hand side to call. In the event of `{:error, x}`, the result will be `{:error, x}`.\n\nWe also deal with a lot of functions that indicate failure by returning nil. `~>` tries to 'do what I mean' for both of these so you can have one pipe operator to rule them all. If `nil` is a valid result, you must thus be sure to wrap it in an `ok` tuple when it occurs on the left hand side of `~>`.\n\n`|>` and `~>` compose in the way you'd expect; i.e. a `~>` receiving an error tuple or nil will stop executing the rest of the chain of (mixed) pipes.\n\n\nDocumentation can be found at [https://hexdocs.pm/arrows](https://hexdocs.pm/arrows).","ref":"extension-arrows.html#ok-pipe"},{"type":"extras","title":"Needle.ULID","doc":"# Needle.ULID\n\n[![hex.pm](https://img.shields.io/hexpm/v/needle_ulid)](https://hex.pm/packages/needle_ulid)\n[hexdocs](https://hexdocs.pm/needle_ulid)\n\nA ULID datatype and some postgres support for ULID operations (`min`\nand `max` functions and aggregates)\n\nOriginally forked from\n[ecto-ulid](https://github.com/TheRealReal/ecto-ulid) but the internals have been replaced with a dependency on [ex_ulid](https://github.com/omgnetwork/ex_ulid)","ref":"extension-needle_ulid.html"},{"type":"extras","title":"Installation - Needle.ULID","doc":"```elixir\n{:needle_ulid, git: \"https://github.com/bonfire-networks/needle_ulid\", branch: \"main\"}\n```","ref":"extension-needle_ulid.html#installation"},{"type":"extras","title":"Copyright and License - Needle.ULID","doc":"Copyright (c) 2018 The RealReal, Inc.\nCopyright (c) 2020 needle_ulid contributors.\n\nLicensed under the terms of the MIT License.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","ref":"extension-needle_ulid.html#copyright-and-license"},{"type":"extras","title":"Needle","doc":"# Needle\n\n[![hex.pm](https://img.shields.io/hexpm/v/needle)](https://hex.pm/packages/needle)\n[hexdocs](https://hexdocs.pm/needle)\n\nEcto's missing universal foreign key\n\n> One foreign key to rule them all and in the darkness, bind them.\n\n-- Gandalf, paraphrased.\n\nA means of foreign keying many tables in one field. Designed for\nhighly interlinked data in highly dynamic schemata where tracking all\nthe foreign keys is neither desired nor practical.\n\nNote: a universal foreign key is actually a hard problem. Many\napproaches are on offer with a variety of tradeoffs. You should\ncarefully consider a variety of approaches rather than just blindly\nadopting the one that fitted our project's needs the best!","ref":"extension-needle.html"},{"type":"extras","title":"Background - Needle","doc":"A `Table` is a record of a table that may be linked to by a pointer.\nA `Pointer` is a pointer id and a table id.\n\nWith these two ingredients, we can construct a means of pointing to\nany table that has a `Table` entry.\n\n`Pointer` and `Table` IDs are both `Needle.ULID`, a UUID-like type\nthat combines a millisecond-precision timestamp and some randomness to\nreduce the likelihood of a clash. It naturally sorts both in binary\nand text form by time and as far as postgres is concerned, it's a UUID.","ref":"extension-needle.html#background"},{"type":"extras","title":"Installation - Needle","doc":"Aside from the hex dependency, you will also need to write a simple\nmigration to set up the database before you can start writing your\nregular migrations:\n\n```elixir\ndefmodule MyApp.Repo.Migrations.InitPointers do\n @moduledoc false\n use Ecto.Migration\n import Needle.Migration\n\n def up(), do: inits(:up)\n def down(), do: inits(:down)\n\n defp inits(dir) do\n init_pointers_ulid_extra(dir) # this one is optional but recommended\n init_pointers(dir) # this one is not optional\n end\nend\n```","ref":"extension-needle.html#installation"},{"type":"extras","title":"Defining a Pointable Type - Needle","doc":"Pointable tables require a unique sentinel ULID to identify\nthem. These must be 26 characters long and in the alphabet of\n[Crockford's Base32](https://en.wikipedia.org/wiki/Base32#Crockford's_Base32).\nThey should be easy to identify in a printout and might be silly.\n\nThere is a helper function, `synthesise!/1` in `Needle.ULID` to\nassist with this process - give it a 26-character long binary of ascii\nalphanumerics and it will give you the closest ULID that matches back.\n\nLet's look at a simple schema:\n\n```elixir\ndefmodule MyApp.Greeting do\n use Needle.Pointable,\n otp_app: :my_app,\n source: \"myapp_greeting\",\n table_id: \"GREET1NGSFR0MD0CEXAMP1E000\"\n\n pointable_schema do\n field :greeting, :string\n end\nend\n```\n\nTo declare a pointable schema, we start by using `Needle.Pointable`,\nproviding the name of our otp application, the source table's name in\nthe database and our chosen sentinel ULID.\n\nWe then call `pointable_schema` and define any fields we wish to put\ndirectly in the table. For the most part, `pointable_schema` is like\nEcto's `schema` macro, except you do not provide the table name and\nlet it handle the primary key.\n\nIf for some reason you wished to turn autogeneration off, you could\npass `autogenerate: false` to the options provided when using\n`Needle.Pointable`.\n\nNow let's define the migration for our schema:\n\n```elixir\ndefmodule MyApp.Repo.Migrations.Greeting do\n @moduledoc false\n use Ecto.Migration\n import Needle.Migration\n\n def up() do\n create_pointable_table(:greeting, \"GREET1NGSFR0MD0CEXAMP1E000\") do\n add :greeting, :text, null: false\n end\n end\n\n def down() do\n drop_pointable_table(:greeting, \"GREET1NGSFR0MD0CEXAMP1E000\")\n end\nend\n```\n\nAs you can see, it's pretty similar to defining a regular migration,\nexcept you use `create_pointable_table` and\n`drop_pointable_table`. Notice that our sentinel ULID makes an\nappearance again here. It's *very* important that these match what we\ndeclared in the schema.","ref":"extension-needle.html#defining-a-pointable-type"},{"type":"extras","title":"Referencing Needle - Needle","doc":"Ecto does not know anything about our scheme, so unless we\nspecifically want something to reference one of the pointed tables, we\ntypically `belongs_to` with `Needle.Pointer`. The table in which we\ndo this does not itself need to be pointable.\n\n```elixir\ndefmodule MyApp.Foo do\n\n use Ecto.Schema\n alias Needle.Pointer\n\n # regular ecto table, not pointable!\n schema \"hello\" do\n belongs_to :pointer, Pointer # who knows what it points to?\n end\nend\n```\n\nYou may choose to reference a specific schema rather than Pointer if it\nwill only point to a single table. If you do this, you must ensure\nthat the referenced record exists in that table in the normal\nway. There may be some performance benefit, we didn't benchmark it.\n\nThe migration is slightly more complex, we have to decide what type of\na pointer it is. Needle come in three categories:\n\n* A strong pointer is not nullable and is deleted when the object it\n points to is deleted.\n* A weak pointer is nullable and is nilified when the object it points\n to is deleted.\n* An unbreakable pointer will raise when you attempt to delete the\n object it points to.\n\n| Type | Nullable? | On Delete |\n|-------------|-----------|-------------|\n| Strong | No | Cascade |\n| Weak | Yes | Set Null |\n| Unbreakable | No | Raise |\n\nIn this case we will use a strong pointer, because we want it to be\ndeleted if the pointed object is deleted.\n\n```elixir\ndefmodule MyApp.Repo.Migrations.Hello do\n @moduledoc false\n use Ecto.Migration\n import Needle.Migration\n\n def change() do\n create_if_not_exists table(:hello) do\n add :pointer, strong_pointer(), null: false\n add :greeting, :text, null: false\n end\n end\nend\n```\n\nIf you are pointing to a specific table instead of pointer,\n`strong_pointer/1` allows you to pass the name of that module\n(`strong_pointer/0` calls this with `Needle.Pointer`).","ref":"extension-needle.html#referencing-needle"},{"type":"extras","title":"Dereferencing Needle - Needle","doc":"It is common that even though you have a universal foreign key, you\nwill want to issue different queries based upon the type that is being\npointed to. For this reason, it is up to you to decide how to perform\nan onward query.\n\n`Needle.Pointers.schema/1` turns a `Pointer` into an Ecto schema module name\nyou can switch against. `Needle.Pointers.plan` breaks down a list of Needle\ninto a map of ids keyed by schema module. It is handy to define some\nfunctions in your (non-library) application that can load any type of\npointer in given contexts.","ref":"extension-needle.html#dereferencing-needle"},{"type":"extras","title":"Querying Needle - Needle","doc":"Since `Pointer` has a table, you can use its `table_id` field to\nfilter by pointed type. `Needle.Tables.id!/1` (or `ids!/1` for a\nlist) can be used to obtain the IDs for a table or tables.\n\nThen you run into another problem, that even though you know all of\nthe tables you're working with will have a certain field, you need to\nknow which table they are to work with them! The solution to this is\nwhat we are calling 'mixin tables' for convenience.\n\nA mixin table has a `Pointer` primary key along with any other fields\nyou wish to store in this mixin. By moving fields out to mixin tables,\nyou gain knowledge of the table name to which you need to join.\n\nAn example mixin schema:\n\n```elixir\ndefmodule My.Creator do\n use Needle.Mixin,\n otp_app: :my_app,\n source: \"creator\"\n\n mixin_schema do\n belongs_to :creator, My.User\n end\nend\n```\n\nMixin tables are not themselves pointable, so there is no need to\nspecify a table id as when defining a pointable schema.\n\nThe migration for this is slightly more complicated:\n\n```elixir\ndefmodule My.Creator.Migration do\n\n import Ecto.Migration\n import Needle.Migration\n\n defp creator_table(), do: My.Creator.__schema__(:source)\n defp user_table(), do: My.User.__schema__(:source)\n\n def migrate_creator(index_opts \\\\ []),\n do: migrate_creator(index_opts, direction())\n\n defp migrate_creator(index_opts, :up) do\n create_mixin_table(creator_table()) do\n add :creator_id, strong_pointer(user_table()), null: false \n end\n create_if_not_exists(unique_index(creator_table(), [:creator_id], index_opts))\n end\n\n defp migrate_creator(index_opts, :down) do\n drop_if_exists(unique_index(creator_table(), [:creator_id], index_opts))\n drop_mixin_table(creator_table())\n end\nend\n```","ref":"extension-needle.html#querying-needle"},{"type":"extras","title":"Virtual pointables (\"virtuals\") - Needle","doc":"Virtuals are a new addition in needle 0.6.0. They behave like\npointables that you have not added any fields to.\n\nWe noticed it was very common in bonfire to create pointables with no\nextra fields just so we could use the needle system. Virtuals are\nalternative for this case that requires less typing and provides a\nreduced overhead vs pointables.\n\nVirtuals are backed by a writable view onto the `needle` table. This\nmeans that when we can save the cost of maintaining a primary key in\nthat table and the associated disk space.\n\nIn all other respects, they behave like pointables. You can have\nchangesets over them and select and insert as usual.","ref":"extension-needle.html#virtual-pointables-virtuals"},{"type":"extras","title":"Elixir-based logic - Needle","doc":"The practical result of needle is that it pushes a certain amount of\nvalidation and consistency logic back into elixir land. It is\ntherefore your elixir code's responsibility to ensure that data is\ninserted into the appropriate mixin tables when inserting a pointable\nobject and to manage deletions as appropriate.\n\nWhen assembling queries with mixin tables, pay careful attention to\nthe type of join you are performing. An inner join is explicitly\nasking not to be shown objects that do not have a record for that\nmixin. You quite possibly wanted to left join.","ref":"extension-needle.html#elixir-based-logic"},{"type":"extras","title":"Configuration and overrides - Needle","doc":"Every pointable or mixin schema is overrideable with configuration\nduring compilation (this is why using them requires an `:otp_app` to\nbe specified). For example, we could override `Needle.Table` (which\nis a pointable table) thus:\n\n```elixir\nconfig :needle, Needle.Table, source: \"my_pointers_table\"\n```\n\nThe `table_id` is also configurable, but we don't recommend you change it.\n\nIn addition, all pointable and mixin schemas permit extension with\n[Exto](https://github.com/bonfire-networks/exto). See the [Exto\ndocs](https://hexdocs.pm/exto/) for more information about how to\nextend schemas via configuration. You will probably at the very least\nwant to insert some `has_one` for mixins off your pointables.","ref":"extension-needle.html#configuration-and-overrides"},{"type":"extras","title":"Tradeoffs - Needle","doc":"All solutions to the universal primary key problem have tradeofs. Here\nare what we see as the deficiencies in our approach:\n\n1. It forces a ULID on you. This is great for us, but not\n everyone. ULID exposes a timestamp with millisecond precision. If\n the time of creation of a resource is sensitive information for\n your purposes, ULIDs are not going to be suitable for you.\n2. Ecto has no knowledge of the specialty of `Pointer`,\n e.g. `Repo.preload` does not work and you need to specify a join\n condition to join through a pointer. Use our functions or add extra\n associations with exto configuration.\n3. Dereferencing a list of needle requires a select query per table\n type that occurs in the input set.\n4. Reliance on user attention. You have to follow the instructions\n correctly to make the system work at all.\n5. There is likely some performance impact from postgres not\n understanding the relationships between the various tables\n properly. It's hard to gauge and we haven't even tried.\n\nThese are not likely to change. If you're going to pick\nthis library, do so in the full knowledge of the tradeoffs it makes.\n\nAlternatives include (I'm sure you can think of others):\n\n* Storing the table name in a second column alongside every foreign key.\n* A compound datatype of id and table name.\n* Byte/String manipulation tricks.\n* Evil SQL hacks based upon compile time configuration.\n\nWhile we have our gripes with this approach, once you've gotten the\nhang of using it, it works out pretty well for most purposes and it's\none of the simpler options to work with.","ref":"extension-needle.html#tradeoffs"},{"type":"extras","title":"Copyright and License - Needle","doc":"Copyright (c) 2020 needle Contributors\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-needle.html#copyright-and-license"},{"type":"extras","title":"Exto","doc":"# Exto\n\n[![hex.pm](https://img.shields.io/hexpm/v/exto)](https://hex.pm/packages/exto)\n[hexdocs](https://hexdocs.pm/exto)\n\n`Exto` provides configuration-driven Ecto schema extensibility","ref":"extension-exto.html"},{"type":"extras","title":"Usage - Exto","doc":"Example Schema:\n\n```elixir\ndefmodule My.Schema do\n use Ecto.Schema\n import Exto, only: [flex_schema: 1]\n\n schema \"my_table\" do\n field :name, :string # just normal schema things\n flex_schema(:my_app) # boom! give me the stuff\n end\nend\n```\n\nExample configuration\n\n```elixir\nconfig :my_app, My.Schema,\n belongs_to: [\n foo: Foo, # belongs_to :foo, Foo\n bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer\n ],\n field: [\n foo: :string, # field :foo, :string\n bar: {:integer, default: 4}, # field :foo, :integer, default: 4\n ],\n has_one: [\n foo: Foo, # has_one :foo, Foo\n bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id\n ]\n has_many: [\n foo: Foo, # has_many :foo, Foo\n bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id\n ]\n many_to_many: [\n foo: Foo, # many_to_many :foo, Foo\n bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar\n ]\n```\n\n This one won't work very well because we define `foo` and `bar` 5\n times each, but I think you get the point.\n\n Reading of configuration is done during compile time. The relations\n will be baked in during compilation, thus:\n\n * Do not expect this to work in runtime config.\n * You will need to rebuild all dependencies which use this macro\n when you change their configuration.","ref":"extension-exto.html#usage"},{"type":"extras","title":"Copyright and License - Exto","doc":"Copyright (c) 2020 Exto Contributors\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-exto.html#copyright-and-license"},{"type":"extras","title":"Zest","doc":"# Zest\n\nA fresh approach to testing.","ref":"extension-zest.html"},{"type":"extras","title":"Usage - Zest","doc":"Installation:\n\n```elixir\n{:zest, \"~> 0.1.2\"}\n```\n\nExample (taken from our test suite):\n\n```elixir\ndefmodule MyTest do\n use ExUnit.Case\n import Zest\n \n test \"scope fails spectacularly\" do\n scope [this: %{is: :a}, test: :case] do\n scope [error: :this_should_not_show] do\n end\n scope [the: :order, must: :be_correct] do\n scope [to: :pass], assert(true == false)\n end\n end\n end\n\nend\n```\n\nOutput:\n\n```\nZest Context:\n* this: %{is: :a}\n* test: :case\n* the: :order\n* must: :be_correct\n* to: :pass\n\n\n 1) test scope fails spectacularly (ZestTest)\n test/zest_test.exs:7\n Assertion with == failed\n code: assert true == false\n left: true\n right: false\n stacktrace:\n (zest 0.1.0) lib/zest.ex:52: Zest.in_scope/2\n (zest 0.1.0) lib/zest.ex:47: anonymous fn/1 in Zest.in_scope/2\n (zest 0.1.0) lib/zest.ex:113: Zest.intercept/2\n test/zest_test.exs:8: (test)\n```","ref":"extension-zest.html#usage"},{"type":"extras","title":"Contributing - Zest","doc":"Contributions are welcome, even just doc fixes or suggestions.\n\nThis project has adopted a [Code of Conduct](CONDUCT.md) based on the\nContributor Covenant. Please be nice when interacting with the community.","ref":"extension-zest.html#contributing"},{"type":"extras","title":"Copyright and License - Zest","doc":"Copyright (c) 2020 James Laver\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-zest.html#copyright-and-license"},{"type":"extras","title":"Grumble","doc":"# Grumble\n\nA DSL for generating GraphQL queries","ref":"extension-grumble.html"},{"type":"extras","title":"Status: beta - Grumble","doc":"We use this in our tests at work to generate all the queries (because\nwe outgrew string concatenation). I'm not sure I'd want to depend on\nit in production yet because it's hard to feel like it's had a proper\nstress testing.\n\n* Needs (better) tests and documentation.\n* Missing support for some things we don't use.","ref":"extension-grumble.html#status-beta"},{"type":"extras","title":"Usage - Grumble","doc":"Add to your deps:\n\n```elixir\n{:grumble, \"~> 0.1.0\"}\n```\n\nSimple example:\n\n```elixir\nimport Grumble\nalias Grumble.PP\n\nIO.puts(PP.to_string(\n query(\n params: [community_id: type!(:string)],\n fields: [\n field(\n :community,\n args: [community_id: var(:community_id)],\n fields: [:id, :name]\n )\n ]\n )\n))\n```\n\nOutput:\n\n```\nquery($communityId: String!) {\n community(communityId: $communityId) {\n name\n id\n }\n}\n```","ref":"extension-grumble.html#usage"},{"type":"extras","title":"Guide - Grumble","doc":"Most of the useful functions are in the `Grumble` module. From there\nyou can read which arguments are understood by the relevant `new`\nfunction. We apologise for the poor documentation, please feel free to\ncontribute better docs!","ref":"extension-grumble.html#guide"},{"type":"extras","title":"Contributing - Grumble","doc":"Contributions are welcome, even just doc fixes or suggestions.\n\nThis project has adopted a [Code of Conduct](CONDUCT.md) based on the\nContributor Covenant. Please be nice when interacting with the community.","ref":"extension-grumble.html#contributing"},{"type":"extras","title":"Copyright and License - Grumble","doc":"Copyright (c) 2020 Grumble contributors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.","ref":"extension-grumble.html#copyright-and-license"},{"type":"extras","title":"Development guide","doc":"# Development guide\n\n_These instructions are for hacking on Bonfire. If you wish to deploy in production, please refer to our deployment guide instead._\n\nHello, potential contributor! :-)\n\nThis is a work in progress guide to getting up and running as a developer. Please ask questions in the issue tracker if something is not clear and we'll try to improve it.\n\nHappy hacking!","ref":"hacking.html"},{"type":"extras","title":"Status: beta - have fun and provide feedback 🙏 - Development guide","doc":"Bonfire is currently beta software. While it's fun to play with it, we would not recommend running any production instances (meaning not using it for your primary fediverse identity) yet because it's not quite ready for that today.","ref":"hacking.html#status-beta-have-fun-and-provide-feedback"},{"type":"extras","title":"Download - Development guide","doc":"Either way, you need to first clone this repository and change into the directory and then do some configuration:\n\n```sh\n$ git clone https://github.com/bonfire-networks/bonfire-app bonfire\n$ cd bonfire\n```","ref":"hacking.html#download"},{"type":"extras","title":"Configure - Development guide","doc":"#","ref":"hacking.html#configure"},{"type":"extras","title":"Pick a flavour - Development guide","doc":"Bonfire is a flexible platform that powers a variety of social networks. The first thing you have to choose is which app (or \"flavour\") you want to hack on:\n\n- `classic` (\"Bonfire Social\", a basic social network that interoperates with the fediverse)\n- `community` (for groups and communities)\n- `cooperation` (for building cooperative economic networks)\n\nNote that at the current time, the core team are focusing most of their efforts on the classic flavour and this is where we recommend you start.\n\nYou first need to install [just](https://github.com/casey/just#packages) which is a handy tool (a `make` alternative) to run commands defined in `./justfile`.\n\nSo for example if you want to run the `classic` flavour, with a fully-docker-managed setup (see the other options available below), run:\n\n- `export FLAVOUR=classic WITH_DOCKER=total` \n\nYou may also want to put this in the appropriate place in your system so your choice of flavour is remembered for next time (eg. `~/.bashrc` or `~/.zshrc`)\n\n- Make sure docker daemon is running if you chose a docker managed setup.\n\n- Then run `just config` to initialise some config.\n\n#","ref":"hacking.html#pick-a-flavour"},{"type":"extras","title":"Configure - Development guide","doc":"- Then edit the config (especially the secrets) for the current flavour in `./.env`\n\n#","ref":"hacking.html#configure"},{"type":"extras","title":"Option A - the entry way (fully managed via docker-compose, recommended when you're first exploring) - Development guide","doc":"- Dependencies:\n - Recent versions of Docker & [docker-compose](https://docs.docker.com/compose/install/)\n\n- Make sure you've set the environment variable to indicate your choice: `export WITH_DOCKER=total`\n\n- Make sure you've edited your .env file (see above) before getting started and proceed to Hello world!\n\n#","ref":"hacking.html#option-a-the-entry-way-fully-managed-via-docker-compose-recommended-when-you-re-first-exploring"},{"type":"extras","title":"Option B - the easy way (with bare-metal elixir, and docker-managed tooling, database & search index, recommended for active development) - Development guide","doc":"> Note: you can use a tool like [rtx](https://github.com/jdxcode/rtx) or asdf to setup the environment (run `rtx install` in the root directory).\n\n- Dependencies:\n - Recent versions of [Elixir](https://elixir-lang.org/install.html) (1.15+) and OTP/erlang (25+)\n - [yarn](https://yarnpkg.com)\n - Recent versions of Docker & [docker-compose](https://docs.docker.com/compose/install/)\n\n- Make sure you've set the env to indicate your choice: `export WITH_DOCKER=easy`\n\n- Make sure you've edited your .env file (see above) before getting started and proceed to Hello world!\n\n#","ref":"hacking.html#option-b-the-easy-way-with-bare-metal-elixir-and-docker-managed-tooling-database-search-index-recommended-for-active-development"},{"type":"extras","title":"Option C - the partial way (with bare-metal elixir and tooling, and docker-managed database & search index) - Development guide","doc":"> Note: you can use a tool like [rtx](https://github.com/jdxcode/rtx) or asdf to setup the environment (run `rtx install` in the root directory).\n\n- Dependencies:\n - Recent versions of [Elixir](https://elixir-lang.org/install.html) (1.15+) and OTP/erlang (25+)\n - Recent versions of [Rust](https://www.rust-lang.org/tools/install) and Cargo\n - [yarn](https://yarnpkg.com)\n - Recent versions of Docker & [docker-compose](https://docs.docker.com/compose/install/)\n\n- Make sure you've set the environment variable to indicate your choice: `export WITH_DOCKER=partial`\n\n- Make sure you've edited your .env file (see above) before getting started and proceed to Hello world!\n\n#","ref":"hacking.html#option-c-the-partial-way-with-bare-metal-elixir-and-tooling-and-docker-managed-database-search-index"},{"type":"extras","title":"Option D - the bare metal (if you don't use docker) - Development guide","doc":"> Note: you can use a tool like [rtx](https://github.com/jdxcode/rtx) or asdf to setup your the environment (run `rtx install` in the root directory). You will still need to install Postgres and Meili seperately though.\n\n- Dependencies:\n - Recent versions of [Elixir](https://elixir-lang.org/install.html) (1.15+) and OTP/erlang (25+)\n - Recent versions of [Rust](https://www.rust-lang.org/tools/install) and Cargo\n - [yarn](https://yarnpkg.com)\n - Postgres 12+ (or rather [Postgis](https://postgis.net/install/) if using the bonfire_geolocate extension)\n - [Meili Search](https://docs.meilisearch.com/learn/getting_started/installation.html) (optional)\n\n- You will need to set the relevant environment variables in the .env file (see above) to match your local install of Postgres.\n\n- If you want search capabilities, you'll also need to setup a Meili server and set the relevant env variables as well.\n\n- Make sure you've set the environment variable to indicate your choice: `export WITH_DOCKER=no` and proceed to Hello world!\n\n#","ref":"hacking.html#option-d-the-bare-metal-if-you-don-t-use-docker"},{"type":"extras","title":"Option E - the nix one (dev environment with Nix) - Development guide","doc":"Dependencies:\n\n- Run a recent version of Nix or NixOS: https://nixos.org/download.html\n\n- Enable Flakes: https://nixos.wiki/wiki/Flakes#Installing_flakes\n\n- Install [direnv](https://direnv.net/) through nix if you don't have the tool already: `nix profile install nixpkgs#direnv` and add it to your shell: https://direnv.net/docs/hook.html\n\n- Clone the bonfire-app repo if you haven't already and allow direnv to use environment variables:\n ```\n git clone https://github.com/bonfire-networks/bonfire-app\n cd `bonfire-app`\n direnv allow\n ```\n\nThe tool direnv is necessary for the nix setup as the nix shell environment will use variables defined on `.envrc` to set itself up.\n\nNote: when you run `direnv allow` on the bonfire-app directory for the first time, nix will automatically fetch the dependencies for bonfire. The process will take a while as it's downloading everything needed to use the development environment. Afterwards you will be able to use just fine. Proceeding times you enter the directory, the shell with automatically set up for your use without downloading the packages again.\n\nYou will need to update the db directory which is automatically created by nix the first time you initialized the shell with `direnv allow`. You can do so with the following steps:\n- Update `props.nix` to the settings you want.\n- Run `just nix-db-init` to create the database and user for postgres defined on `props.nix`.\n- Modify the `.env` file to comment out all `POSTGRES_*` variables. These are populated automatically by nix. So if the variables are set here, you may get issues with overriding your settings in `props.nix` when using bonfire.\n- You can now proceed to Hello World!\n\nNote: if you ever want to shut off the postgres server in nix, simply run the nix-db targets in just:\n\n```\n# stop postgres server running locally\njust nix-db stop\n# start postgres server running locally\njust nix-db start\n```","ref":"hacking.html#option-e-the-nix-one-dev-environment-with-nix"},{"type":"extras","title":"Hello world! - Development guide","doc":"- From a fresh checkout of this repository, this command will fetch the app's dependencies and setup the database (the same commands apply for all three options above):\n\n```\njust setup-dev\n```\n\n- You should then be able to run the app with:\n\n```\njust dev\n```\n\n- See the `just` commands below for more things you may want to do.","ref":"hacking.html#hello-world"},{"type":"extras","title":"Onboarding - Development guide","doc":"By default, the back-end listens on port 4000 (TCP), so you can access it on http://localhost:4000/\n\nYour first step will be to create an account to log in with. The\neasiest way to do this is with our mix task:\n\n```\n$ just mix bonfire.account.new\nEnter an email address: root@localhost\nEnter a password:\n```\n\nYour password must be at least 10 characters long and the output could be more helpful if you don't do that. This task seems to work most reliably if you open a second terminal window with the devserver running. We're not sure why.\n\nYou should then be able to log in and create a user through the web interface.\n\nIf you would like to become an administrator, there is a mix task for that too:\n\n```shell\njust mix bonfire.user.admin.promote your_username \n```","ref":"hacking.html#onboarding"},{"type":"extras","title":"The Bonfire Environment - Development guide","doc":"We like to think of bonfire as a comfortable way of developing software - there are a lot of\nconveniences built in once you know how they all work. The gotcha is that while you don't know them, it can be a bit overwhelming. Don't worry, we've got your back.\n\n* [Architecture](./ARCHITECTURE.md) - an overview of the stack and code structure.\n- [Bonfire-flavoured Elixir](./BONFIRE-FLAVOURED-ELIXIR.md) - an introduction to the way we write Elixir.\n- [Bonfire's Database: an Introduction](./DATABASE.md) - an overview of how our database is designed.\n- [Boundaries](./BOUNDARIES.md) - an introduction to our access control system.\n\nNote: these are still at the early draft stage, we expect to gradually improve documentation over time.","ref":"hacking.html#the-bonfire-environment"},{"type":"extras","title":"Documentation - Development guide","doc":"The code is somewhat documented inline. You can generate HTML docs (using `Exdoc`) by running `just docs`.","ref":"hacking.html#documentation"},{"type":"extras","title":"Additional information - Development guide","doc":"- messctl is a little utility for programmatically updating the .deps files from which the final elixir dependencies list is compiled by the mess script. The only use of it is in the dep-\\* tasks of the Makefile. It is used by some of the project developers and the build does not rely on it.\n\n- `./extensions/` is used to hack on local copies of Bonfire extensions. You can clone an extension from its git repo and use the local version during development, eg: `just dep-clone-local bonfire_me https://github.com/bonfire-networks/bonfire_me`\n\n- `./forks/` is used to hack on local copies of any other dependencies.\n\n- You can migrate the DB when the app is running (also runs automatically on startup): `Bonfire.Common.Repo.migrate`\n\n- You can generate a dependency graph using `just xref-graph` which will generate a DOT file at `docs/` (if Graphviz is installed it will also generate an SVG visualisation using `dot`).\n\n#","ref":"hacking.html#additional-information"},{"type":"extras","title":"Usage under Windows (WSL, MSYS or CYGWIN) - Development guide","doc":"By default, the `justfile` requires symlinks, which can be enabled with the help of [this link](https://stackoverflow.com/a/59761201).\n\nSee the [pull request adding WSL support](https://github.com/bonfire-networks/bonfire-app/pull/111) for details about usage without symlinks.\n\n## `just` commands\n\nRun `just` followed by any of these commands when appropriate rather than directly using the equivalent commands like `mix`, `docker`, `docker-compose`, etc. For example, `just setup` will get you started, and `just dev` will run the app.\n\nYou can first set an env variable to control which mode these commands will assume you're using. Here are your options:\n\n- `WITH_DOCKER=total` : use docker for everything (default)\n- `WITH_DOCKER=partial` : use docker for services like the DB\n- `WITH_DOCKER=easy` : use docker for services like the DB & compiled utilities like messctl\n- `WITH_DOCKER=no` : please no\n\nRun `just help` to see the list of possible commands and what they do.","ref":"hacking.html#usage-under-windows-wsl-msys-or-cygwin"},{"type":"extras","title":"Troubleshooting - Development guide","doc":"#","ref":"hacking.html#troubleshooting"},{"type":"extras","title":"EACCES Permissions Error - Development guide","doc":"If you get a permissions error when following any of the steps, run the following command and it should be fixed:\n\n```shell\ncd bonfire && sudo chown -R yourusername:yourusername .\n```\n\nNote that the command should be modified so your shell is pointing to wherever you have bonfire installed. If you are already in the bonfire directory then you only need to worry about running the `chown` portion of the command.\n\n#","ref":"hacking.html#eacces-permissions-error"},{"type":"extras","title":"Unable to access Postgres database - Development guide","doc":"If you are getting any `:nxdomain` errors, check if you have any firewalls that may be blocking the port on your system.\n\nFor example, if you are running UFW (a lot of Linux distros do), run the following command to allow access to port 4000:\n\n```shell\nsudo ufw allow 4000\n```\n\n### (Mix) Package fetch failed\n\nExample:\n\n```\n** (Mix) Package fetch failed and no cached copy available (https://repo.hex.pm/tarballs/distillery-2.0.12.tar)\n```\n\nIn this case, distillery (as an example of a dependency) made a new release and retired the old release from hex. The new version (`2.0.14`) is quite close to the version we were depending on (`2.0.12`), so we chose to upgrade:\n\n```shell\nmix deps.update distillery\n```\n\nThis respects the version bounds in `mix.exs` (`~> 2.0`), so increment that if required.\n\n### `(DBConnection.ConnectionError) tcp recv: closed`\n\nExample:\n\n```\n** (DBConnection.ConnectionError) tcp recv: closed (the connection was closed by the pool, possibly due to a timeout or because the pool has been terminated)\n```\n\nIn this case, the seeds were unable to complete because a query took too long to execute on your machine. You can configure the timeout to be larger in the `dev` environment:\n\n1. Open `config/dev.exs` in your editor.\n2. Find the database configuration (search for `Bonfire.Common.Repo`).\n3. Add `timeout: 60_000` to the list of options:\n\n```\nconfig :bonfire, Bonfire.Common.Repo,\n timeout: 60_000,\n [...]\n```","ref":"hacking.html#unable-to-access-postgres-database"},{"type":"extras","title":"Deployment guide","doc":"# Deployment guide\n\n#","ref":"deploy.html"},{"type":"extras","title":"WARNING: beta status - have fun but don't rely on it yet 🙏 - Deployment guide","doc":"Bonfire is currently beta software. While it's fun to play with it, we would not recommend running any production instances yet (meaning not using it for your primary fediverse identity) because it's not quite ready for that today. \n\n_These instructions are for setting up Bonfire in production. If you want to run the backend in development, please refer to our developer guide instead._","ref":"deploy.html#warning-beta-status-have-fun-but-don-t-rely-on-it-yet"},{"type":"extras","title":"Security Warning - Deployment guide","doc":"We recommend only granting an account to people you trust to minimise the attack surface. Accordingly, Bonfire ships with public registration disabled. The admin panel has an `invite` facility. \n\n---","ref":"deploy.html#security-warning"},{"type":"extras","title":"Step - 0 - Decide how you want to deploy and manage the app - Deployment guide","doc":"* Option A - Install using [Co-op Cloud](https://coopcloud.tech) (recommended) which is an alternative to corporate cloud services built by tech co-ops, and provides handy tools for setting up and managing many self-hosted free software tools using ready-to-use \"recipes\". Very useful if you'd like to host Bonfire alongside other open and/or federated projects. In this case, jump straight to step 4.\n* Option B - Install using Docker containers (easy mode)\n * Option B1 - Using pre-built Docker images \n * Option B2 - Building your own Docker image (if you want to make changes to the code)\n* Option C - Manual installation (without Docker)","ref":"deploy.html#step-0-decide-how-you-want-to-deploy-and-manage-the-app"},{"type":"extras","title":"Step 1 - Download and configure the app - Deployment guide","doc":"#","ref":"deploy.html#step-1-download-and-configure-the-app"},{"type":"extras","title":"Option A - Install using Co-op Cloud (recommended) - Deployment guide","doc":"1. Install [Abra](https://docs.coopcloud.tech/abra/) on your machine\n2. [Set up a server with co-op cloud](https://docs.coopcloud.tech/operators/) \n3. Use the [Bonfire recipe](https://recipes.coopcloud.tech/bonfire) and follow the instructions there. \n\n#","ref":"deploy.html#option-a-install-using-co-op-cloud-recommended"},{"type":"extras","title":"Options B and C - Deployment guide","doc":"1. Install dependencies. \nYou may need to install [just](https://github.com/casey/just#packages), and other requirements such as Docker (check the exact list of requirements based on the option you choose in step 2.)\n\n2. Clone this repository and change into the directory:\n\n```sh\ngit clone --depth 1 https://github.com/bonfire-networks/bonfire-app.git bonfire && cd bonfire\n```\n\n3. Specify what flavour you want to run in production:\n\nThe first thing to do is choose what flavour of Bonfire (eg. classic, community, or cooperation) you want to deploy, as each flavour uses different Docker images and set of configs. For example if you want to run the `classic` flavour:\n\n- `export MIX_ENV=prod FLAVOUR=classic` \n\nYou may also want to put this in the appropriate place in your system so your choice of flavour is remembered for next time (eg. `~/.bashrc` or `~/.zshrc`)\n\nIf you're not planning on using Docker, you'll also need:\n\n- `export WITH_DOCKER=no`\n\n## Step 2- Prepare the config\n\n* **Option A**: if deploying with co-op cloud, edit the env file at `~/.abra/servers/your_server/your_app.env` instead.\n\n* **Option B and C**: \n- Run `just config` to initialise some default config and then edit the config in the `./.env` file.\n\n#","ref":"deploy.html#options-b-and-c"},{"type":"extras","title":"Config keys you should pay special attention to: - Deployment guide","doc":"The app needs these environment variables to be configured in order to work.\n\n- `FLAVOUR` should reflect your chosen flavour\n- `HOSTNAME` (your domain name, eg: `bonfire.example.com`)\n- `PUBLIC_PORT` (usually 443)\n- `MAIL_DOMAIN` and `MAIL_KEY` and related keys to configure transactional email, for example set `MAIL_BACKEND=mailgun` and sign up at [Mailgun](https://www.mailgun.com/) and then configure the domain name and key (you may also need to set `MAIL_BASE_URI` if your domain is not setup in EU, as the default `MAIL_BASE_URI` is set as `https://api.eu.mailgun.net/v3`). \n- SMTP is supported as well, through the following env vars \n```\nMAIL_SERVER (smtp domain of the mail server)\nMAIL_DOMAIN (the bit after the @ in your email)\nMAIL_USER\nMAIL_PASSWORD\nMAIL_FROM\nMAIL_PORT (optional)\nMAIL_SSL (optional)\n```\n- `UPLOADS_S3_BUCKET` and the related API key and secret for uploads. WARNING: If you want to store uploads in an object storage rather than directly on your server (which you probably want, to not run out of space), you need to configure that up front, otherwise URLs will break if you change it later. See `config/runtime.exs` for extra variables to set if you're not using the default service and region (which is [Scaleway](https://www.scaleway.com/en/object-storage/) Paris).\n\n#","ref":"deploy.html#config-keys-you-should-pay-special-attention-to"},{"type":"extras","title":"Secret keys for which you should put random secrets. - Deployment guide","doc":"You can run `just secrets` to generate some for you.\n\n- `SECRET_KEY_BASE`\n- `SIGNING_SALT`\n- `ENCRYPTION_SALT`\n- `POSTGRES_PASSWORD`\n- `MEILI_MASTER_KEY` \n\n#","ref":"deploy.html#secret-keys-for-which-you-should-put-random-secrets"},{"type":"extras","title":"Further information on config - Deployment guide","doc":"In the `./config/` (which is a symbolic link to the config of the flavour you choose to run) directory of the codebase, there are following config files:\n\n- `config.exs`: default base configuration, which itself loads many other config files, such as one for each installed Bonfire extension.\n- `prod.exs`: default extra configuration for `MIX_ENV=prod`\n- `runtime.exs`: extra configuration which is loaded at runtime (vs the others which are only loaded once at compile time, i.e. when you build a release)\n- `bonfire_*.exs`: configs specific to different extensions, which are automatically imported by `config.exs`\n\nYou should *not* have to modify the files above. Instead, overload any settings from the above files using env variables or in `./.env`. If any settings in the `.exs` config files are not available in env or in the instance settings UI, please open an issue or PR.","ref":"deploy.html#further-information-on-config"},{"type":"extras","title":"Step 3 - Install - Deployment guide","doc":"#","ref":"deploy.html#step-3-install"},{"type":"extras","title":"Option A - Install using Co-op Cloud (recommended) - Deployment guide","doc":"Follow the instructions in the coop-cloud recipe readme.\n\n#","ref":"deploy.html#option-a-install-using-co-op-cloud-recommended"},{"type":"extras","title":"Option B - Install using Docker containers (easy mode) - Deployment guide","doc":"The easiest way to launch the docker image is using the just commands.\nThe `docker-compose.release.yml` uses `config/prod/.env` to launch a container with the necessary environment variables along with its dependencies, currently that means an extra postgres container, along with a reverse proxy (Caddy server, which you may want to replace with nginx or whatever you prefer).\n\nMake sure you have [Docker](https://www.docker.com/), with the [compose](https://docs.docker.com/compose/install/#install-compose) plugin, and [just](https://github.com/casey/just#packages) installed:\n\n```sh\n$ docker version\nDocker Engine - Community - 23.0.1\n\n$ docker compose version\nDocker Compose version v2.16.0\n\n$ just --version\njust 1.13.0\n...\n```\n\nNow that your tooling is set up, you have the choice of using pre-built images or building your own. For example if your flavour does not have a prebuilt image on Docker Hub, or if you want to customise any of the extensions, you can build one yourself - see option B2 below. \n\n##","ref":"deploy.html#option-b-install-using-docker-containers-easy-mode"},{"type":"extras","title":"Option B1 - Using pre-built Docker images (recommended to start with) - Deployment guide","doc":"- The `image` entry in `docker-compose.release.yml` will by default use the image on Docker Hub which corresponds to your chosen flavour (see step 1 above for choosing your flavour).\n\nYou can see the images available per flavour, version (we currently recommend using the `latest` tag), and architecture at https://hub.docker.com/r/bonfirenetworks/bonfire/tags \n\n- Start the docker containers with docker-compose:\n\n```\njust rel-run\n```\n\nRun this at the prompt: \n\n`bin/bonfire remote` to enter Elixir's iex environment\n`Bonfire.Common.Repo.migrate` to initialise your database\n\nThe backend should now be running at [http://localhost:4000/](http://localhost:4000/).\n\n- If that worked, start the app as a daemon next time:\n\n```\njust rel-run-bg\n```\n\n##","ref":"deploy.html#option-b1-using-pre-built-docker-images-recommended-to-start-with"},{"type":"extras","title":"Docker-related handy commands - Deployment guide","doc":"- `just update` to update to the latest release of Bonfire \n- `just rel-run` Run the app in Docker, in the foreground\n- `just rel-run-bg` Run the app in Docker, and keep running in the background\n- `just rel-stop` Stop the running release\n- `just rel-shell` Runs a simple shell inside of the container, useful to explore the image \n\nOnce in the shell, you can run `bin/bonfire` with the following commands:\nUsage: `bonfire COMMAND [ARGS]`\n\nThe known commands are:\n- `start` Starts the system\n- `start_iex` Starts the system with IEx attached\n- `daemon` Starts the system as a daemon\n- `daemon_iex` Starts the system as a daemon with IEx attached\n- `eval \"EXPR\"` Executes the given expression on a new, non-booted system\n- `rpc \"EXPR\"` Executes the given expression remotely on the running system\n- `remote` Connects to the running system via a IEx remote shell\n- `restart` Restarts the running system via a remote command\n- `stop` Stops the running system via a remote command\n- `pid` Prints the operating system PID of the running system via a remote command\n- `version` Prints the release name and version to be booted\n\nThere are some useful database-related release tasks under `EctoSparkles.Migrator.` that can be run in an `iex` console (which you get to with `just rel.shell` followed by `bin/bonfire remote`, assuming the app is already running):\n\n- `migrate` runs all up migrations\n- `rollback(step)` roll back to step X\n- `rollback_to(version)` roll back to a specific version\n- `rollback_all` rolls back all migrations back to zero (caution: this means losing all data)\n\nYou can also directly call some functions in the code from the command line, for example:\n- to migrate: `docker exec bonfire_web bin/bonfire rpc 'Bonfire.Common.Repo.migrate'`\n- to just yourself an admin: `docker exec bonfire_web bin/bonfire rpc 'Bonfire.Me.Users.make_admin(\"my_username\")'`\n\n##","ref":"deploy.html#docker-related-handy-commands"},{"type":"extras","title":"Option B2 - Building your own Docker image - Deployment guide","doc":"`Dockerfile.release` uses the [multistage build](https://docs.docker.com/develop/develop-images/multistage-build/) feature to just the image as small as possible. It generates the OTP release which is later copied into the final image packaged in an Alpine linux container.\n\nThere is a `justfile` with relevant commands (make sure set the `MIX_ENV=prod` env variable):\n\n- `just rel-build-release` which builds the docker image of the latest release\n- `just rel-build` which builds the docker image, including local changes to any cloned extensions in `./extensions/` \n- `just rel-tag` adds the \"latest\" tag to your last build, so that it will be used when running\n\nOnce you've built and tagged your image, you may need to update the `image` name in `docker-compose.release.release.yml` to match (either your local image name if running on the same machine you used for the build, or a remote image on Docker Hub if you pushed it) and then follow the same steps as for option A1.\n\nFor production, we recommend to set up a CI workflow to automate this, for an example you can look at the one [we currently use](../github/workflows/release.yaml).\n\n---\n\n#","ref":"deploy.html#option-b2-building-your-own-docker-image"},{"type":"extras","title":"Option C - Manual installation (without Docker) - Deployment guide","doc":"##","ref":"deploy.html#option-c-manual-installation-without-docker"},{"type":"extras","title":"Dependencies - Deployment guide","doc":"- Postgres (or Postgis) version 12 or newer\n- [just](https://github.com/casey/just#packages)\n- Elixir version 1.15+ with OTP 25+. If your distribution only has an old version available, check [Elixir's install page](https://elixir-lang.org/install.html) or use a tool like [rtx](https://github.com/jdxcode/rtx) (run `rtx install` in this directory).\n\n##","ref":"deploy.html#dependencies"},{"type":"extras","title":"C-1. Building the release - Deployment guide","doc":"- Make sure you have erlang and elixir installed (check `Dockerfile` for what version we're currently using)\n\n- `export WITH_DOCKER=no` OR add `WITH_DOCKER=no` to the end of `.env` and source it with `source .env`\n\n- Run `just rel-build` to create an elixir release. This will create an executable in your `_build/prod/rel/bonfire` directory. Note that you will need `just` to pass in the `.env` file to the executable, like so: `just cmd _build/prod/rel/bonfire/bin/bonfire `. Alternatively, this file can be sourced by `source .env` instead. We will be using the `bin/bonfire` executable as called from `just` from here on. \n\n##","ref":"deploy.html#c-1-building-the-release"},{"type":"extras","title":"C-2. Running the release - Deployment guide","doc":"- Create a database, and a user, fill out the `.env` with your credentials and secrets\n\n- You will need to use `just` in order to pass the `.env` file to the executable. This can be accomplished by running `just cmd _build/prod/rel/bonfire/bin/bonfire `. Just works from the root directory of the `justfile`, not your current directory.\n\n- If you’re using RDS or some other locked down DB, you may need to run `CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA public;` on your database with elevated privileges.\n\n- You can check if your instance is configured correctly and get to the iex console by running `bin/bonfire start`\n\n- The migrations should automatically run on first boot, but if you run into troubles the migration command is: `Bonfire.Common.Repo.migrate()` in the iex console. \n\n- To run the instance as a daemon, use `bin/bonfire start daemon`.\n\n---\n\n#","ref":"deploy.html#c-2-running-the-release"},{"type":"extras","title":"Option D - with Nix - Deployment guide","doc":"This repo is a Flake and includes a Nix module.\n\nHere are the detailed steps to deploy it:\n\n- run a recent version of Nix or NixOS: https://nixos.wiki\n- enable Flakes: https://nixos.wiki/wiki/Flakes#Installing_flakes\n- add `sandbox = false` in your nix.conf\n- fetch and build the app and dependencies: `nix run github:bonfire-networks/bonfire-app start_iex`\n- add it as an input to your system flake.\n- add an overlay to just the package available\n- add the required configuration in your system\n\nYour `flake.nix` file would look like the following. Remember to replace `myHostName` with your actual hostname or however your deployed system is called.\n\n```nix\n{\n inputs.bonfire.url = \"github:happysalada/bonfire-app/main\";\n outputs = { self, nixpkgs, bonfire }: {\n overlay = final: prev: with final;{\n # a package named bonfire already exists on nixpkgs so we put it under a different name\n elixirBonfire = bonfire.packages.x86_64-linux.default;\n };\n nixosConfigurations.myHostName = nixpkgs.lib.nixosSystem {\n system = \"x86_64-linux\";\n modules = [\n {\n environment.systemPackages = [ agenix.defaultPackage.x86_64-linux ];\n nixpkgs.overlays = [ self.overlay ];\n }\n ./myHostName.nix\n bonfire.nixosModules.bonfire\n ];\n };\n };\n}\n```\n\nThen your `myHostName.nix` would look like the following:\n\n```nix\n{ config, lib, pkgs, ... }:\n\n{\n services.bonfire = {\n # you will additionally need to expose bonfire with a reverse proxy, for example caddy\n port = 4000;\n package = pkgs.elixirBonfire;\n dbName = \"bonfire\";\n # the environment should contain a minimum of\n # SECRET_KEY_BASE\n # SIGNING_SALT\n # ENCRYPTION_SALT\n # RELEASE_COOKIE\n # have a look into nix/module.nix for more details\n # the way to deploy secrets is beyond this readme, but I would recommend agenix\n environmentFile = \"/run/secrets/bonfireEnv\";\n dbSocketDir = \"/var/run/postgresql\";\n };\n\t\n\t# this is specifically for a reverse proxy, which is primarily used for SSL certs\n\tservices.ngnix = {\n\t\tenable = true;\n\t\tforceSSL = true;\n\t\tenableACME = true;\n\t\tvirtualHosts.\"myHostName\".locations.proxyPass = \"http://localhost:4000\";\n\t};\n\t\n\t# You will need to accept ACME's terms and conditions if you haven't elsewhere in your configuration\n\tsecurity.acme.defaults.email = \"you@myHostName.com\";\n\tsecurity.acme.acceptTerms = true;\n\n # this is uniquely for database backup purposes\n # replace myBackupUserName with the user name that will do the backups\n # if you want to do backups differently, feel free to remove this part of the config\n services.postgresql = {\n ensureDatabases = [ \"bonfire\" ];\n ensureUsers = [{\n name = \"myBackupUserName\";\n ensurePermissions = { \"DATABASE bonfire\" = \"ALL PRIVILEGES\"; };\n }];\n };\n}\n```\n\n#","ref":"deploy.html#option-d-with-nix"},{"type":"extras","title":"Option C with nixos - Deployment guide","doc":"this repo is a flake and includes a nixos module.\nHere are the detailed steps to deploy it.\n\n- add it as an input to your system flake.\n- add an overlay to just the package available\n- add the required configuration in your system\n\nYour flake.nix file would look like the following. Remember to replace myHostName with your actual hostname or however your deployed system is called.\n\n```nix\n{\n inputs.bonfire.url = \"github:happysalada/bonfire-app/main\";\n outputs = { self, nixpkgs, bonfire }: {\n overlay = final: prev: with final;{\n # a package named bonfire already exists on nixpkgs so we put it under a different name\n elixirBonfire = bonfire.defaultPackage.x86_64-linux;\n };\n nixosConfigurations.myHostName = nixpkgs.lib.nixosSystem {\n system = \"x86_64-linux\";\n modules = [\n {\n environment.systemPackages = [ agenix.defaultPackage.x86_64-linux ];\n nixpkgs.overlays = [ self.overlay ];\n }\n ./myHostName.nix\n bonfire.nixosModules.bonfire\n ];\n };\n };\n}\n```\n\nthen in myHostName.nix would look like the following\n\nTODO: add the caddy config\n\n```nix\n{ config, lib, pkgs, ... }:\n\n{\n services.bonfire = {\n # you will need to expose bonfire with a reverse proxy, for example caddy\n port = 4000;\n package = pkgs.elixirBonfire;\n dbName = \"bonfire\";\n # the environment should contain a minimum of\n # SECRET_KEY_BASE\n # SIGNING_SALT\n # ENCRYPTION_SALT\n # RELEASE_COOKIE\n # have a look into nix/module.nix for more details\n # the way to deploy secrets is beyond this readme, but I would recommend agenix\n environmentFile = \"/run/secrets/bonfireEnv\";\n dbSocketDir = \"/var/run/postgresql\";\n };\n\n # this is uniquely for database backup purposes\n # replace myBackupUserName with the user name that will do the backups\n # if you want to do backups differently, feel free to remove this part of the config\n services.postgresql = {\n ensureDatabases = [ \"bonfire\" ];\n ensureUsers = [{\n name = \"myBackupUserName\";\n ensurePermissions = { \"DATABASE bonfire\" = \"ALL PRIVILEGES\"; };\n }];\n };\n}\n```","ref":"deploy.html#option-c-with-nixos"},{"type":"extras","title":"Step 4 - Run - Deployment guide","doc":"By default, the backend listens on port 4000 (TCP), so you can access it on http://localhost:4000/ (if you are on the same machine). In case of an error it will restart automatically.\n\nOnce you've signed up, you will automatically be an instance admin if you were the first to register.\n\n> NOTE: If you are running in a restricted environment such as Amazon RDS, you will need to execute some sql against the database before migrations can run: `CREATE EXTENSION IF NOT EXISTS citext;`\n\n\n##","ref":"deploy.html#step-4-run"},{"type":"extras","title":"Step 5 - Adding HTTPS - Deployment guide","doc":"The common and convenient way for adding HTTPS is by using a reverse proxy like Nginx or Caddyserver (the latter of which is bundled as part of the docker compose setup).\n\nCaddyserver and other servers can handle generating and setting up HTTPS certificates automatically, but if you need TLS/SSL certificates for nginx, you can look get some for free with [letsencrypt](https://letsencrypt.org/). The simplest way to obtain and install a certificate is to use [Certbot.](https://certbot.eff.org). Depending on your specific setup, certbot may be able to get a certificate and configure your web server automatically.\n\nIf you've built from source, you should point the nginx root directory to be `_build/prod/rel/bonfire/lib/bonfire-0.1.0-*/priv/static`","ref":"deploy.html#step-5-adding-https"},{"type":"extras","title":"Admin tools - Deployment guide","doc":"- LiveDashboard for viewing real-time metrics and logs at `/admin/system/`\n- Oban logs for viewing queued jobs (e.g. for processing federated activities) `/admin/system/oban_queues`\n- LiveAdmin for browsing data in the database at `/admin/system/data`\n- Orion for dynamic distributed performance profiling at `/admin/system/orion`\n- Web Observer as an alternative way to view metrics at `/admin/system/wobserver`","ref":"deploy.html#admin-tools"},{"type":"extras","title":"Troubleshooting - Deployment guide","doc":"Some common issues that may arise during deployment and our suggestions for resolving them.\n\n##","ref":"deploy.html#troubleshooting"},{"type":"extras","title":"WebSocket connections not establishing behind a reverse proxy - Deployment guide","doc":"If you are running Bonfire behind your own reverse proxy (e.g. nginx), you might experience issues with WebSocket connections not establishing. WebSocket connections require specific configuration to work, in nginx the following configuration is necessary for websockets to work:\n\n```\nlocation /live/websocket {\n proxy_pass http://127.0.0.1:4000;\n \n # these configurations are necessary to proxy WebSocket requests\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection \"upgrade\";\n}\n```","ref":"deploy.html#websocket-connections-not-establishing-behind-a-reverse-proxy"},{"type":"extras","title":"Bonfire Architecture","doc":"# Bonfire Architecture","ref":"architecture.html"},{"type":"extras","title":"Hacking - Bonfire Architecture","doc":"Bonfire is an unusual piece of software, developed in an unusual way. It originally started as a project to create a generic federation library/framework, while building an app for educators to share and collaborate on learning resources with their peers, and has been forked and evolved a lot since then. \n\nHacking on it is actually pretty fun. The codebase has a unique feeling to work with and we've relentlessly refactored to manage the ever-growing complexity that a distributed social networking toolkit implies. That said, it is not easy to understand without context, which is what this document is here to provide.","ref":"architecture.html#hacking"},{"type":"extras","title":"Design Decisions - Bonfire Architecture","doc":"Feature goals:\n\n- Flexibility for developers and users.\n- Extreme configurability and extensibility.\n- Integrated federation with the existing fediverse.\n\nOperational goals:\n\n- Easy to set up and run.\n- Light on resources for small deployments.\n- Scalable for large deployments.","ref":"architecture.html#design-decisions"},{"type":"extras","title":"Stack - Bonfire Architecture","doc":"Our main implementation language is [Elixir](https://www.elixir-lang.org/), which is designed for building reliable systems. We have almost [our own dialect](./BONFIRE-FLAVOURED-ELIXIR.md).\n\nWe use the [Phoenix](https://www.phoenixframework.org/) web framework with [LiveView](https://hexdocs.pm/phoenix_live_view/) and [Surface](https://surface-ui.org/documentation) for UI components and views.\n\nSurface is a different syntax for LiveView that is designed to be more convenient and understandable to frontend developers, with extra compile time checks. Surface views and components are compiled into LiveView code (so once you hit runtime, Surface in effect doesn't exist any more).\n\nSome extensions use the [Absinthe](https://absinthe-graphql.org/) GraphQL library to expose an API.","ref":"architecture.html#stack"},{"type":"extras","title":"The Bonfire Environment - Bonfire Architecture","doc":"We like to think of bonfire as a comfortable way of developing software - there are a lot of conveniences built in once you know how they all work. The gotcha is that while you don't know them, it can be a bit overwhelming. Don't worry, we've got your back.","ref":"architecture.html#the-bonfire-environment"},{"type":"extras","title":"Code Structure - Bonfire Architecture","doc":"The code is broadly composed namespaces such as these, many of which are packaged as \"extensions\" which live in separate git repositories, which are included in the app by way of mix dependencies:\n\n- `Bonfire.*` - Core application logic (very little code).\n- `Bonfire.*.*` - Bonfire extensions (eg `Bonfire.Posts`) containing mostly context modules, APIs, and routes\n- `Bonfire.Data.*` - Extensions containing database schemas and migrations \n- `Bonfire.UI.*` - UI component extensions\n- `Bonfire.*.*.LiveHandler` - Backend logic to handle events in the frontend\n- `Bonfire.Editor.*` (pluggable text editors, eg. CKEditor for WYSIWYG markdown input)\n- `Bonfire.GraphQL.*` - Optional GraphQL API\n- `Bonfire.Federate.*` - Optional Federation hooks\n- `ActivityPub` - ActivityPub S2S models, logic and various helper modules \n- `ActivityPub.Web` - ActivityPub S2S REST endpoints, activity ingestion and push federation facilities \n- `ValueFlows.*` - economic extensions implementing the [ValueFlows vocabulary](https://www.valueflo.ws)\n\n\nContexts are were we put any core logic. A context often is circumscribed to providing logic for a particular object type (e. g. `Bonfire.Posts` implements `Bonfire.Data.Social.Post`). \n\nAll Bonfire objects use an ULID as their primary key. We use the `Needle` library (with extra logic in `Bonfire.Common.Needles`) to reference any object by its primary key without knowing what type it is beforehand. This is very useful as it allows for example following or liking many different types of objects (as opposed to say only a user or a post) and this approach allows us to store the context of the like/follow by only storing its primary key (see `Bonfire.Data.Social.Follow`) for an example.\n\nContext modules usually have `one/2`, `many/2`, and `many_paginated/1` functions for fetching objects, which in turn call a `query/2` function. These take a keyword list as filters (and an optional `opts` argument) allowing objects to be fetched by arbitrary criteria.\n\nExamples:\n\n```\nUsers.one(username: \"bob\") # Fetching by username\nPosts.many_paginated(by: \"01E9TQP93S8XFSV2ZATX1FQ528\") # List a page of posts by its author\nEconomicResources.many(deleted: true) # List any deleted resources\n```\n\nContext modules also have functions for creating, updating and deleting objects, as well as hooks for federating or indexing in the search engine.\n\nHere is an incomplete sample of some of current extensions and modules:\n\n- `Bonfire.Me.Accounts` (for managing and querying local user accounts)\n- `Bonfire.Me.Users` (for managing and querying both local and remote user identities and profiles)\n- `Bonfire.Boundaries` (for managing and querying circles, ACLs, permissions...)\n- `Bonfire.Social.FeedActivities`, `Bonfire.Social.Feeds` and `Bonfire.Social.Activities` (for managing and querying activities and feeds)\n- `Bonfire.Posts` and `Bonfire.Social.PostContents` (for managing and querying posts)\n- `Bonfire.Social.Threads` (for managing and querying threads and comments)\n- `Bonfire.Social.Flags` (for managing and querying flags)\n- `Bonfire.Social.Graph.Follows` (for managing and querying follows)\n- `Bonfire.Classify` (for managing and querying categories, topics, and the like)\n- `Bonfire.Tag` (for managing and querying tags and mentions)\n- `Bonfire.Geolocate` (for managing and querying locations and geographical coordinates)\n- `Bonfire.Quantify` (for managing and querying units and measures)\n\n##","ref":"architecture.html#code-structure"},{"type":"extras","title":"Additional extensions, libraries, and modules - Bonfire Architecture","doc":"- `Bonfire.Common` and `Bonfire.Common.Utils` (stuff that gets used everywhere)\n- `Bonfire.Application` (OTP application)\n- `Bonfire.Me.Characters` (a shared abstraction over users, organisations, categories, and other objects that need to have feeds and behave as an actor in ActivityPub land)\n- `Bonfire.Federate.ActivityPub` and `ActivityPub` (ActivityPub integration)\n- `Bonfire.Search` (local search indexing and search API, powered by Meili)\n- `Bonfire.Mailer`, `Bonfire.Me.Mails`, and `Bamboo` (for rendering and sending emails)\n- `Bonfire.Files`, `Waffle`, `TreeMagic` and `TwinkleStar` (for managing uploaded content)\n- `Bonfire.GraphQL` (GraphQL API abstractions)\n- `Queery` and `Bonfire.Repo.Query` (Helpers for making queries on the database)\n- `Bonfire.Repo` (Ecto repository)\n- `Exto` (to extend DB schemas in config, especially useful for adding associations)\n- `AbsintheClient` (for querying the API from within the server)\n\n\n#","ref":"architecture.html#additional-extensions-libraries-and-modules"},{"type":"extras","title":"General structure - Bonfire Architecture","doc":"- Bonfire app\n - A [flavour](../README.md#flavours) running `Bonfire.Application` as supervisor\n - Configs assembled from extensions at `flavour/$FLAVOUR/config`\n - Phoenix at `Bonfire.Web.Endpoint`\n - Routes assembled from extensions at `Bonfire.Web.Router` \n - GraphQL schema assembled from extensions at `Bonfire.GraphQL.Schema`\n - Database migrations assembled from extensions at `flavour/$FLAVOUR/repo/migrations`\n - Data seeds assembled from extensions at `flavour/$FLAVOUR/repo/seeds`\n - Extensions and libraries as listed in `flavour/$FLAVOUR/config/deps.*`\n - Extensions defining schemas and migrations (usually `Bonfire.Data.*`)\n - Schemas\n - Migrations defined as functions in the schema modules in `lib/`\n - Migration templates calling those functions in `priv/repo/migrations` which are then copied into an app flavour's migrations\n - Extensions implementing features or groups of features (eg. `Bonfire.Me`)\n - Config template which is then copied into an app flavour's config (eg `config/bonfire_me.exs`)\n - Contexts (eg `Bonfire.Me.Users`)\n - Sometimes LiveHandlers for handling frontend events in the backend (eg `Bonfire.Me.Users.LiveHandler`)\n - Routes (eg `Bonfire.UI.Me.Routes`)\n - Controllers and/or Views (eg `Bonfire.UI.Me.CreateUserController` and `Bonfire.UI.Me.CreateUserLive`)\n - API (eg `Bonfire.Me.API.GraphQL`), refer to [GraphQL API documentation](./GRAPHQL.md)\n - Schemas\n - Resolvers\n - Sometimes Plugs (eg `Bonfire.Web.Plugs.UserRequired` and `Bonfire.Web.LivePlugs.UserRequired`)\n - Other extensions or libraries (eg `Needle` or `Bonfire.Common` which are used by most other extensions)","ref":"architecture.html#general-structure"},{"type":"extras","title":"Naming - Bonfire Architecture","doc":"It is said that naming is one of the four hard problems of computer science (along with cache management and off-by-one errors). We don't claim our scheme is the best, but we do strive for consistency.\n\n#","ref":"architecture.html#naming"},{"type":"extras","title":"Naming guidelines - Bonfire Architecture","doc":"- Module names mostly begin with `Bonfire.` unless they belong to a more generic library (eg `Needle` or `ValueFlows`)\n- Everything within an extension begins with the context name and a `.` (eg `Bonfire.Social.Migrations`)\n- Database schemas should be named in the singular (eg `Bonfire.Data.Social.Post`)\n- Context modules are named in plural where possible (eg `Bonfire.Posts`)\n- Other modules within a context begins with the context name and a `.` (eg `Bonfire.Posts.LiveHandler`)\n- Modules use UpperCamelCase while functions use snake_case\n- Acronyms in module names should be all uppercase (eg `Bonfire.Social.APActivities`)","ref":"architecture.html#naming-guidelines"},{"type":"extras","title":"Federation libraries - Bonfire Architecture","doc":"### `ActivityPub`\n\nThis namespace handles the ActivityPub logic and stores AP activities. It is largely adapted Pleroma code with some modifications, for example merging of the activity and object tables and new actor object abstraction.\n\n- `ActivityPub` contains the main API and is documented there. \n- `ActivityPub.Federator.Adapter` defines callback functions for the AP library.\n\nIt also contains some functionality that isn't part of the AP spec but is required for federation:\n- `ActivityPub.Safety.Keys` - Generating and handling RSA keys and signatures \n- `ActivityPub.Federator.WebFinger` - Implementation of the WebFinger protocol\n- `ActivityPub.Federator.HTTP` - Module for making HTTP requests (wrapper around tesla)\n- `ActivityPub.Instances` - Module for storing reachability information about remote instances\n\nAlso refer to [MRF documentation](./MRF.md) to learn how to rewrite or discard messages.\n\n### `ActivityPub.Web`\n\nThis namespace contains the ActivityPub Server-to-Server REST API, the activity ingestion pipeline (`ActivityPub.Federator.Transformer`) and the push federation facilities (`ActivityPub.Federator`, `ActivityPub.Federator.APPublisher` and others). The outgoing federation module is designed in a modular way allowing federating through different protocols in the future. \n\n#","ref":"architecture.html#federation-libraries"},{"type":"extras","title":"ActivityPub integration with Bonfire's application logic - Bonfire Architecture","doc":"The callback functions defined in `ActivityPub.Federator.Adapter` are implemented in `Bonfire.Federate.ActivityPub.Adapter`. \n\nWhen implementing federation for a new object type it needs to be implemented for both directions: \nfor outgoing federation using the hooks in `Bonfire.Federate.ActivityPub.Outgoing` and for incoming federation using the hooks in `Bonfire.Federate.ActivityPub.Incoming`.","ref":"architecture.html#activitypub-integration-with-bonfire-s-application-logic"},{"type":"extras","title":"Bonfire-flavoured Elixir","doc":"# Bonfire-flavoured Elixir\n\nBonfire has a few libraries that are widely used in the codebase and make writing Elixir feel a little bit different. To help you get less confused by this, here's a guide on what we can call \"bonfire-flavoured elixir\"!\n\nPlease note this guide assumes you already know [Elixir](https://elixir-lang.org/getting-started/introduction.html).\n\n## `Arrows`\n\nThe Elixir [|> (\"pipe\") operator](https://hexdocs.pm/elixir/Kernel.html#%7C%3E/2) is one of the things that seems to get people excited about elixir. Probably in part because you then don't have to keep coming up with function names. Unfortunately it's kind of limiting. \nThe moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.\n\nNot any more! By simply inserting `...` where you would like the value to be inserted, `Arrows` will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. `Arrows` was inspired by [an existing library](https://hexdocs.pm/magritte/Magritte.html). Here is part of the test suite in lieu of examples:\n\n```elixir\ndefmodule ArrowsTest do\n use ExUnit.Case\n use Arrows\n\n def double(x), do: x * 2\n def double_fst(x, _), do: x * 2\n def double_snd(_, x), do: x * 2\n def add_snd_thd(_, x, y), do: x + y\n\n test \"|>\" do\n assert 4 == (2 |> double)\n assert 4 == (2 |> double())\n assert 4 == (2 |> double(...))\n assert 8 == (2 |> double(double(...)))\n assert 4 == (2 |> double_fst(1))\n assert 4 == (2 |> double_fst(..., 1))\n assert 8 == (2 |> double_fst(double(...), 1))\n assert 4 == (2 |> double_snd(1, ...))\n assert 8 == (2 |> double_snd(1, double(...)))\n assert 3 == (2 |> add_snd_thd(1, ..., 1))\n assert 4 == (2 |> add_snd_thd(1, ..., ...))\n assert 6 == (2 |> add_snd_thd(1, ..., double(...)))\n for x {:ok, ...})\n end\n end\nend\n```\n\nA few little extra features you might notice here:\n* You can move the parameter into a subexpression, as in `2 |> double_fst(double(...), 1)` where double will be called before the parameter is passed to `double_fst`.\n* You can use `...` multiple times, substituting it in multiple places.\n* The right hand side need not even be a function call, you can use any expression with `...`.\n\n#","ref":"bonfire-flavoured-elixir.html"},{"type":"extras","title":"Ok-pipe - Bonfire-flavoured Elixir","doc":"`Arrows` also provides an `ok-pipe` operator, `~>`, which only pipes into the next function if the result from the last one was considered a success. It's inspired by [OK](https://hexdocs.pm/ok/readme.html), but we have chosen to do things slightly differently so it better fits with our regular pipe.\n\ninput | result |\n:----------------------- | :-------------- |\n`{:ok, x}` | `fun.(x)` |\n`{:error, e}` | `{:error, e}` |\n`nil` | `nil` |\n`x when not is_nil(x)` | `fun.(x)` |\n\nIn the case of a function returning an ok/error tuple being on the left hand side, this is straightforward to determine. In the event of `{:ok, x}`, x will be passed into the right hand side to call. In the event of `{:error, x}`, the result will be `{:error, x}`.\n\nWe also deal with a lot of functions that indicate failure by returning nil. `~>` tries to 'do what I mean' for both of these so you can have one pipe operator to rule them all. If `nil` is a valid result, you must thus be sure to wrap it in an `ok` tuple when it occurs on the left hand side of `~>`.\n\n`|>` and `~>` compose in the way you'd expect; i.e. a `~>` receiving an error tuple or nil will stop executing the rest of the chain of (mixed) pipes.","ref":"bonfire-flavoured-elixir.html#ok-pipe"},{"type":"extras","title":"Untangle - Bonfire-flavoured Elixir","doc":"`Untangle` provides replacements for the macros in Elixir's `Logger` module and the `IO.inspect` function to output code location information. The first argument will be `inspect`ed and the second (where provided) will be used as a label:\n\n```\niex(1)> import Untangle\nUntangle\niex(2)> debug(:no, \"the answer is\") # log at debug\n11:19:09.915 [debug] [iex:2] the answer is: :no\n:no\niex(3)> dump(%{a: :map}, \"it\") # inspect something on stdout\n[iex:3] it: %{a: :map}\n%{a: :map}\n```\n\nWhen used in a code file, the location information becomes slightly more useful, e.g.:\n\n```\n[lib/test_untangle.ex:15@Test.Untangle.example/2] Here's an empty list: []\n```\n\nYou may also notice from the iex output that it returns its first argument. This makes it ideal for\ninserting into a pipeline for debugging purposes:\n\n```elixir\ndo_something()\n|> debug(\"output of do_something/0\")\n```\n\nWhen you are done debugging something, the location of the debug statement is already in the output so you know where to remove it or comment it out! Bliss!\n\nYou will find the codebase uses this a lot, though the debugs are frequently commented out. Just uncomment the ones that would help you with a particular debugging task and you're off.","ref":"bonfire-flavoured-elixir.html#untangle"},{"type":"extras","title":"Error handling - Bonfire-flavoured Elixir","doc":"`Bonfire.Fail` is an `Exception` handler, which you can use to stop the show anywhere in the code, e.g:\n\n`id = ulid(object) || raise(Bonfire.Fail, :not_found)` \n\nYou can use this special exception when you want to redirect the user to the login page rather than just show an error:\n`user = current_user(assigns) || raise(Bonfire.Fail.Auth, :needs_login)` \n\nAdvantages include:\n\n- standardised error messages (defaults are defined at https://github.com/bonfire-networks/bonfire_fail/blob/main/lib/runtime_config.ex#L16) which can be overridden in your app's config using `config :bonfire_fail, :common_errors`\n- friendly error messages are defined in one place, which means no duplicated localisation efforts\n- uses the elixir/OTP pattern of \"let it crash\"\n- returns the correct HTTP code when applicable\n- no need to wrap blocks in if/else or the like \n- for users of the LiveView frontend, this will make the corresponding friendly error message appear in a flash overlay (if using `Bonfire.UI.Common.LiveHandlers` and/or `Bonfire.UI.Common.undead/3`)","ref":"bonfire-flavoured-elixir.html#error-handling"},{"type":"extras","title":"Bonfire's Database - an intro","doc":"# Bonfire's Database - an intro\n\nBonfire uses the excellent PostgreSQL database for most data storage. PostgreSQL allows us to make a wide range of queries and to make them relatively fast while upholding data integrity guarantees.\n\nPostgres is a relational schema-led database - it expects you to pre-define tables and the fields in each table (represented in tabular form, i.e. as a collection of tables with each table consisting of a set of rows and columns). Fields can contain data or a reference to a row in another table. \n\nThis usually means that a field containing a reference has to be pre-defined with a foreign key pointing to a specific field (typically a primary key, like an ID column) *in a specific table*. \n\nA simple example would be a blogging app, which might have a `post` table with `author` field that references the `user` table.\n\nA social network, by contrast, is actually a graph of objects. Objects need to be able to refer to other objects by their ID without knowing their type. \n\nA simple example would be likes, you might have a `likes` table with `liked_post_id` field that references the `post` table. But you don't just have posts that can be liked, but also videos, images, polls, etc, each with their own table, but probably do not want to have to add `liked_video_id`, `liked_image_id`, etc?\n\nWe needed the flexibility to have a foreign key that can reference any referenceable object. We call our system `Needle`.\n\nThis guide is a brief introduction to Needle. It assumes some foundational knowledge:\n\n* Basic understanding of how relational databases like Postgresql work, in particular:\n * Tables being made up of fields.\n * What a primary key is and why it's useful.\n * Foreign keys and relationships between tables (1 to 1, 1 to Many, Many to 1, Many to Many).\n * Views as virtual tables backed by a SQL query.\n\n* Basic understanding of Elixir (enough to follow the examples).\n* Basic working knowledge of the [Ecto](https://hexdocs.pm/ecto/Ecto.html) database library (schema and migration definitions)","ref":"database.html"},{"type":"extras","title":"Identifying objects - the ULID type - Bonfire's Database - an intro","doc":"All referenceable objects in the system have a unique ID (primary key) whose type is the [`ULID`](https://github.com/ulid/spec). It's a lot like a `UUID` in that you can generate unique ones independently of the database. It's also a little different, being made up of two parts:\n\n* The current timestamp, to millisecond precision.\n* Strong random padding for uniqueness.\n\nThis means that it naturally sorts by time to the millisecond (close enough for us), giving us a performance advantage on queries ordered by a separate creation datetime field (by contrast, UUIDv4 is randomly distributed).\n\nIf you've only worked with integer primary keys before, you are probably used to letting the database dispense an ID for you. With `ULID` (or `UUID`), IDs can be known *before* they are stored, greatly easing the process of storing a graph of data and allowing us to do more of the preparation work outside of a transaction for increased performance.\n\nIn PostgreSQL, we actually store `ULID`s as `UUID` columns, thanks to both being the same size (and the lack of a `ULID` column type shipping with postgresql). You mostly will not notice this because it's handled for you, but there are a few places it can come up:\n\n* Ecto debug and error output may show either binary values or UUID-formatted values.\n* Hand-written SQL may need to convert table IDs to the `UUID` format before use.","ref":"database.html#identifying-objects-the-ulid-type"},{"type":"extras","title":"It's just a table - Bonfire's Database - an intro","doc":"The `Needle` system is mostly based around a single table represented by the `Needle.Pointer` schema with the following fields:\n\n* `id` (ULID) - the database-wide unique id for the object, primary key.\n* `table_id` (ULID) - identifies the type of the object, references `Needle.Table`.\n* `deleted_at` (timestamp, default: `null`) - when the object was deleted.\n\nEvery object that is stored in the system will have a record in this table. It may also have records in other tables (handy for storing more than 3 fields about the object!).\n\nDon't worry about `Needle.Table` for now, just know that every object type will have a record there so `Needle.Pointer.table_id` can reference it.","ref":"database.html#it-s-just-a-table"},{"type":"extras","title":"Mixins - storing data about objects - Bonfire's Database - an intro","doc":"Mixins are tables which contain extra information on behalf of objects. Each object can choose to\nrecord or not record information for each mixin. Sample mixins include:\n\n* user profile (containing a name, location and summary)\n* post content (containing the title, summary, and/or html body of a post or message)\n* created (containing the id of the object creator)\n\nIn this way, they are reusable across different object types. One mixin may (or may not) be used by any number of objects. This is mostly driven by the type of the object we are storing, but can also be driven by user input.\n\nMixins are just tables too! The only requirement is they have a `ULID` primary key which references `Needle.Pointer`. The developer of the mixin is free to put whatever other fields they want in the table, so long as they have that primary-key-as-reference (which will be automatically added for you by the `mixin_schema` macro). \n\nHere is a sample mixin definition for a user profile:\n\n```elixir\ndefmodule Bonfire.Data.Social.Profile do\n\n use Needle.Mixin,\n otp_app: :bonfire_data_social,\n source: \"bonfire_data_social_profile\"\n\n mixin_schema do\n field :name, :string\n field :summary, :string\n field :website, :string\n field :location, :string\n end\nend\n```\n\nAside from `use`ing `Needle.Mixin` instead of `Ecto.Schema` and calling `mixin_schema` instead of\n`schema`, pretty similar to a standard Ecto schema, right? \n\nThe arguments to `use Needle.Mixin` are:\n\n* `otp_app`: the OTP app name to use when loading dynamic configuration, e.g. the current extension or app (required)\n* `source`: the underlying table name to use in the database\n\nWe will cover dynamic configuration later. For now, you can use the OTP app that includes the module.","ref":"database.html#mixins-storing-data-about-objects"},{"type":"extras","title":"Multimixins - Bonfire's Database - an intro","doc":"Multimixins are like mixins, except that where an object may have 0 or 1 of a particular mixins, an object may have any number of a particular multimixin.\n\nFor this to work, a multimixin must have a *compound primary key* which must contain an `id` column referencing `Needle.Pointer` and at least one other field which will collectively be unique.\n\nAn example multimixin is used for publishing an item to feeds:\n\n```elixir\ndefmodule Bonfire.Data.Social.FeedPublish do\n\n use Needle.Mixin,\n otp_app: :bonfire_data_social,\n source: \"bonfire_data_social_feed_publish\"\n\n alias Needle.Pointer\n\n mixin_schema do\n belongs_to :feed, Pointer, primary_key: true\n end\nend\n```\n\nNotice that this looks very similar to defining a mixin. Indeed, the only difference is the `primary_key: true` in this line, which adds a second field to the compound primary key.\nThis results in ecto recording a compound primary key of `(id, feed_id)` for the schema (the id is added for you as with regular mixins).","ref":"database.html#multimixins"},{"type":"extras","title":"Declaring Object Types - Bonfire's Database - an intro","doc":"#","ref":"database.html#declaring-object-types"},{"type":"extras","title":"Picking a table id - Bonfire's Database - an intro","doc":"The first step to declaring a type is picking a unique table ID in ULID format. You could just generate one at the terminal, but since these IDs are special, we tend to assign a synthetic ULID that are readable as words so they stand out in debug output.\n\nFor example, the ID for the `Feed` table is: `1TFEEDS0NTHES0V1S0FM0RTA1S`, which can be read as \"It feeds on the souls of mortals\". Feel free to have a little fun coming up with them, it makes debug output a little more cheery! The rules are:\n\n* The alphabet is [Crockford's Base32](https://en.wikipedia.org/wiki/Base32#Crockford's_Base32).\n* They must be 26 characters in length.\n* The first character must be a digit in the range 0-7.\n\nTo help you with this, the `Needle.ULID.synthesise!/1` method takes an alphanumeric binary and tries to return you it transliterated into a valid ULID. Example usage:\n\n```\niex(1)> Needle.ULID.synthesise!(\"itfeedsonthesouls\")\n\n11:20:28.299 [error] Too short, need 9 chars.\n:ok\niex(2)> Needle.ULID.synthesise!(\"itfeedsonthesoulsofmortalsandothers\")\n\n11:20:31.819 [warn] Too long, chopping off last 9 chars\n\"1TFEEDS0NTHES0V1S0FM0RTA1S\"\niex(3)> Needle.ULID.synthesise!(\"itfeedsonthesoulsofmortals\")\n\"1TFEEDS0NTHES0V1S0FM0RTA1S\"\niex(4)> Needle.ULID.synthesise!(\"gtfeedsonthesoulsofmortals\")\n\n11:21:03.268 [warn] First character must be a digit in the range 0-7, replacing with 7\n\"7TFEEDS0NTHES0V1S0FM0RTA1S\"\n```\n\n#","ref":"database.html#picking-a-table-id"},{"type":"extras","title":"Virtuals - Bonfire's Database - an intro","doc":"Virtuals are the simplest and most common type of object. Here's a definition of block:\n\n```elixir\ndefmodule Bonfire.Data.Social.Block do\n\n use Needle.Virtual,\n otp_app: :bonfire_data_social,\n table_id: \"310CK1NGSTVFFAV01DSSEE1NG1\",\n source: \"bonfire_data_social_block\"\n\n alias Bonfire.Data.Edges.Edge\n\n virtual_schema do\n has_one :edge, Edge, foreign_key: :id\n end\nend\n```\n\nIt should look quite similar to a mixin definition, except that we `use` `Needle.Virtual` this time (passing an additional `table_id` argument) and we call the `virtual_schema` macro.\n\nThe primary limitation of a virtual is that you cannot put extra fields into one. This also means that `belongs_to` is not generally permitted because it results in adding a field. `has_one` and `has_many` work just fine as they do not cause the creation of fields in the schema.\n\nThis is not usually a problem, as extra fields can be put into mixins or multimixins as appropriate.\n\nUnder the hood, a virtual has a view (in this example, called `bonfire_data_social_block`). It looks like a table with just an id, but it's populated with all the ids of blocks that are not deleted. When the view is inserted into, a record is created in the `pointers` table for you transparently. When you delete from the view, the corresponding `pointers` entry is marked deleted for you.\n\n#","ref":"database.html#virtuals"},{"type":"extras","title":"Pointables - Bonfire's Database - an intro","doc":"The other, lesser used, type of object is called the Pointable. The major difference is that unlike the simple case of virtuals, pointables are not backed by views, but by tables.\n\nWhen a record is inserted into a pointable table, a copy is made in the `pointers` table for you transparently. When you delete from the table, the the corresponding `pointers` entry is marked deleted for you. In these ways, they behave very much like virtuals. By having a table, however, we are free to add new fields.\n\nPointables pay for this flexibility by being slightly more expensive than virtuals:\n\n* Records must be inserted into/deleted from two tables (the pointable's table and the `pointers` table).\n* The pointable table needs its own primary key index.\n\nHere is a definition of a pointable type (indicating an ActivityPub activity whose type we don't recognise, stored as a JSON blob):\n\n```elixir\ndefmodule Bonfire.Data.Social.APActivity do\n\n use Needle.Pointable,\n otp_app: :bonfire_data_social,\n table_id: \"30NF1REAPACTTAB1ENVMBER0NE\",\n source: \"bonfire_data_social_apactivity\"\n\n pointable_schema do\n field :json, :map\n end\nend\n```\n\nThe choice of using a pointable instead of a virtual combined with one or more mixins is ultimately up to you.","ref":"database.html#pointables"},{"type":"extras","title":"Writing Migrations - Bonfire's Database - an intro","doc":"Migrations are typically included along with the schemas as public APIs you can call within your project's migrations.\n\n#","ref":"database.html#writing-migrations"},{"type":"extras","title":"Virtuals - Bonfire's Database - an intro","doc":"Most virtuals are incredibly simple to migrate for:\n\n```elixir\ndefmodule Bonfire.Data.Social.Post.Migration do\n\n import Needle.Migration\n alias Bonfire.Data.Social.Post\n\n def migrate_post(), do: migrate_virtual(Post)\n\nend\n```\n\nIf you need to do more work, it can be a little trickier. Here's an example for `block`, which also creates a unique index on another table:\n\n```elixir\ndefmodule Bonfire.Data.Social.Block.Migration do\n\n import Ecto.Migration\n import Needle.Migration\n import Bonfire.Data.Edges.Edge.Migration\n alias Bonfire.Data.Social.Block\n\n def migrate_block_view(), do: migrate_virtual(Block)\n\n def migrate_block_unique_index(), do: migrate_type_unique_index(Block)\n\n def migrate_block(dir \\\\ direction())\n\n def migrate_block(:up) do\n migrate_block_view()\n migrate_block_unique_index()\n end\n\n def migrate_block(:down) do\n migrate_block_unique_index()\n migrate_block_view()\n end\n\nend\n```\n\nNotice how we have to write our `up` and `down` versions separately to get the correct ordering of operations. \n\n#","ref":"database.html#virtuals"},{"type":"extras","title":"Pointables - Bonfire's Database - an intro","doc":"As of now, pointables are a little trickier to define flexibly than virtuals because we want to\npreserve the ability for the user to define extra fields in config. There are some questions about \nhow useful this is in practice, so we might go for a simpler option in future.\n\nExample:\n\n```elixir\ndefmodule Bonfire.Data.Social.APActivity.Migration do\n @moduledoc false\n use Ecto.Migration\n import Needle.Migration\n alias Bonfire.Data.Social.APActivity\n\n defp make_apactivity_table(exprs) do\n quote do\n require Needle.Migration\n Needle.Migration.create_pointable_table(Bonfire.Data.Social.APActivity) do\n Ecto.Migration.add :json, :jsonb\n unquote_splicing(exprs)\n end\n end\n end\n\n defmacro create_apactivity_table, do: make_apactivity_table([])\n defmacro create_apactivity_table([do: body]), do: make_apactivity_table(body)\n\n def drop_apactivity_table(), do: drop_pointable_table(APActivity)\n\n defp maa(:up), do: make_apactivity_table([])\n defp maa(:down) do\n quote do: Bonfire.Data.Social.APActivity.Migration.drop_apactivity_table()\n end\n\n defmacro migrate_apactivity() do\n quote do\n if Ecto.Migration.direction() == :up,\n do: unquote(maa(:up)),\n else: unquote(maa(:down))\n end\n end\n\nend\n```\n\n#","ref":"database.html#pointables"},{"type":"extras","title":"Mixins - Bonfire's Database - an intro","doc":"Mixins look much like pointables:\n\n```elixir\ndefmodule Bonfire.Data.Social.Profile.Migration do\n\n import Needle.Migration\n alias Bonfire.Data.Social.Profile\n\n # create_profile_table/{0,1}\n\n defp make_profile_table(exprs) do\n quote do\n require Needle.Migration\n Needle.Migration.create_mixin_table(Bonfire.Data.Social.Profile) do\n Ecto.Migration.add :name, :text\n Ecto.Migration.add :summary, :text\n Ecto.Migration.add :website, :text\n Ecto.Migration.add :location, :text\n Ecto.Migration.add :icon_id, strong_pointer(Bonfire.Files.Media)\n Ecto.Migration.add :image_id, strong_pointer(Bonfire.Files.Media)\n unquote_splicing(exprs)\n end\n end\n end\n\n defmacro create_profile_table(), do: make_profile_table([])\n defmacro create_profile_table([do: {_, _, body}]), do: make_profile_table(body)\n\n # drop_profile_table/0\n\n def drop_profile_table(), do: drop_mixin_table(Profile)\n\n # migrate_profile/{0,1}\n\n defp mp(:up), do: make_profile_table([])\n\n defp mp(:down) do\n quote do\n Bonfire.Data.Social.Profile.Migration.drop_profile_table()\n end\n end\n\n defmacro migrate_profile() do\n quote do\n if Ecto.Migration.direction() == :up,\n do: unquote(mp(:up)),\n else: unquote(mp(:down))\n end\n end\n\nend\n```\n\n#","ref":"database.html#mixins"},{"type":"extras","title":"Multimixins - Bonfire's Database - an intro","doc":"Similar to mixins:\n\n```elixir\ndefmodule Bonfire.Data.Social.FeedPublish.Migration do\n\n import Ecto.Migration\n import Needle.Migration\n alias Bonfire.Data.Social.FeedPublish\n\n @feed_publish_table FeedPublish.__schema__(:source)\n\n # create_feed_publish_table/{0,1}\n\n defp make_feed_publish_table(exprs) do\n quote do\n require Needle.Migration\n Needle.Migration.create_mixin_table(Bonfire.Data.Social.FeedPublish) do\n Ecto.Migration.add :feed_id,\n Needle.Migration.strong_pointer(), primary_key: true\n unquote_splicing(exprs)\n end\n end\n end\n\n defmacro create_feed_publish_table(), do: make_feed_publish_table([])\n defmacro create_feed_publish_table([do: {_, _, body}]), do: make_feed_publish_table(body)\n\n def drop_feed_publish_table(), do: drop_pointable_table(FeedPublish)\n\n def migrate_feed_publish_feed_index(dir \\\\ direction(), opts \\\\ [])\n def migrate_feed_publish_feed_index(:up, opts),\n do: create_if_not_exists(index(@feed_publish_table, [:feed_id], opts))\n def migrate_feed_publish_feed_index(:down, opts),\n do: drop_if_exists(index(@feed_publish_table, [:feed_id], opts))\n\n defp mf(:up) do\n quote do\n Bonfire.Data.Social.FeedPublish.Migration.create_feed_publish_table()\n Bonfire.Data.Social.FeedPublish.Migration.migrate_feed_publish_feed_index()\n end\n end\n\n defp mf(:down) do\n quote do\n Bonfire.Data.Social.FeedPublish.Migration.migrate_feed_publish_feed_index()\n Bonfire.Data.Social.FeedPublish.Migration.drop_feed_publish_table()\n end\n end\n\n defmacro migrate_feed_publish() do\n quote do\n if Ecto.Migration.direction() == :up,\n do: unquote(mf(:up)),\n else: unquote(mf(:down))\n end\n end\n\n defmacro migrate_feed_publish(dir), do: mf(dir)\n\nend\n```","ref":"database.html#multimixins"},{"type":"extras","title":"More examples - Bonfire's Database - an intro","doc":"Take a look at a few of the migrations in our data libraries. Between them, they cover most\nscenarios by now:\n\n* [bonfire_data_social](https://github.com/bonfire-networks/bonfire_data_social/)\n* [bonfire_data_access_control](https://github.com/bonfire-networks/bonfire_data_access_control/)\n* [bonfire_data_identity](https://github.com/bonfire-networks/bonfire_data_identity/)\n* [bonfire_data_edges](https://github.com/bonfire-networks/bonfire_data_edges/) (feat. bonus triggers)\n\nIf you want to know exactly what's happening, you may want to read the code for\n[Needle.Migration](https://github.com/bonfire-networks/needle/blob/main/lib/migration.ex).","ref":"database.html#more-examples"},{"type":"extras","title":"Boundaries & Access Control","doc":"# Boundaries & Access Control\n\nBoundaries is Bonfire's flexible framework for full per-user/per-object/per-action access control. It makes it easy to ensure that users may only see or do what they are supposed to.","ref":"boundaries.html"},{"type":"extras","title":"Users and Circles - Boundaries & Access Control","doc":"Ignoring any future bot support, boundaries ultimately apply to users.\n\nCircles are a way of categorising users. Each user has their own set of circles that they can add to and categorise other users in as they please.\n\nCircles allow a user to categorise work colleagues differently from friends, for example. They can choose to allow different interactions from users in the two circles or limit which content each sees on a per-item basis.","ref":"boundaries.html#users-and-circles"},{"type":"extras","title":"Verbs - Boundaries & Access Control","doc":"Verbs represent actions that the user could perform, such as reading a post or replying to a message.\n\nEach verb has a unique ID, like the table IDs from `Needle`, which must be known to the system through configuration.","ref":"boundaries.html#verbs"},{"type":"extras","title":"Permissions - Boundaries & Access Control","doc":"Permissions can take one of three values:\n\n* `true`\n* `false`\n* `nil` (or `null` to postgresql).\n\n`true` and `false` are easy enough to understand as yes and no, but what is `nil`?\n\n`nil` represents `no answer` - in isolation, it is the same as `false`.\n\nBecause a user could be in more than one circle and each circle may have a different permission, we need a way of combining permissions to produce a final result permission. `nil` is treated differently here:\n\nleft | right | result\n:------ | :------ | :-----\n`nil` | `nil` | `nil`\n`nil` | `true` | `true`\n`nil` | `false` | `false`\n`true` | `nil` | `true`\n`true` | `true` | `true`\n`true` | `false` | `false`\n`false` | `nil` | `false`\n`false` | `true` | `false`\n`false` | `false` | `false`\n\nTo be considered granted, the result of combining the permissions must be `true` (`nil` is as good as `false` again here).\n\n`nil` can thus be seen as a sort of `weak false`, being easily overridden by a true, but also not by itself granting anything.\n\nAt first glance, this may seem a little odd, but it gives us a little additional flexibility which is useful for implementing features such as blocks (where `false` is really useful!). With a little practice, it feels quite natural to use.","ref":"boundaries.html#permissions"},{"type":"extras","title":"ACLs and Grants - Boundaries & Access Control","doc":"An `ACL` is \"just\" a collection of `Grant`s.\n\nGrants combine the ID of the ACL they exist in with a verb id, a user or circle id and a permission, thus providing a decision about whether a particular action is permitted for a particular user (or all users in a particular circle).\n\nConceptually, an ACL contains a grant for every user-or-circle/verb combination, but most of the permissions are `nil`. We do not record grants with `nil` permissions in the database, saving substantially on storage space and compute requirements.","ref":"boundaries.html#acls-and-grants"},{"type":"extras","title":"Controlled - Applying boundaries to an object - Boundaries & Access Control","doc":"An object is linked to one or more `ACL`s by the `Controlled` multimixin, which pairs an object ID with an ACL ID. Because it is a multimixin, a given object can have multiple ACLs applied. In the case of overlap, permissions are combined in the manner described earlier. \n\n\nSee also https://doc.bonfirenetworks.org/extension-bonfire_data_access_control.html for more docs (TODO: merge/deduplicate)","ref":"boundaries.html#controlled-applying-boundaries-to-an-object"},{"type":"extras","title":"GraphQL API","doc":"# GraphQL API","ref":"graphql.html"},{"type":"extras","title":"GraphQL Introduction - GraphQL API","doc":"Go to http://your-app-url/api/ to start playing with the GraphQL API. The GraphiQL UI should autocomplete types, queries and mutations for you, and you can also explore the schema there.\n\nLet's start with a simple GraphQL thoeretical query:\n\n```graphql\nquery {\n greetings(limit: 10) {\n greeting\n to {\n name\n }\n }\n}\n```\n\nLet's break this apart:\n\n- `query {}` is how you retrieve information from GraphQL.\n- `greetings` is a `field` within the query.\n- `greetings` takes a `limit` argument, a positive integer.\n- `greetings` has two fields, `greeting` and `to`.\n- `to` has one `field`, `name`.\n\nThis query is asking for a list of (up to) 10 greetings and the people\nthey are for. Notice that the result of both `greetings` and `to` are\nmap/object structures with their own fields and that if the type has\nmultiple fields, we can select more than one field.\n\nHere is some possible data we could get returned\n\n```elixir\n%{greetings: [\n %{greeting: \"hello\", to: %{ name: \"dear reader\"}}, # english\n %{greeting: \"hallo\", to: %{ name: \"beste lezer\"}}, # dutch\n ]}\n```\n\nWhere is the magic? Typically an object type will reside in its own\ntable in the database, so this query is actually querying two tables\nin one go. In fact, given a supporting schema, you can nest queries\narbitrarily and the backend will figure out how to run them.\n\nThe fact that you can represent arbitrarily complex queries puts quite\na lot of pressure on the backend to make it all efficient. This is\nstill a work in progress at this time.","ref":"graphql.html#graphql-introduction"},{"type":"extras","title":"Absinthe Introduction - GraphQL API","doc":"Every `field` is filled by a resolver. Let's take our existing query\nand define a schema for it in Absinthe's query DSL:\n\n```elixir\ndefmodule MyApp.Schema do\n # the schema macro language\n use Absinthe.Schema.Notation\n # where we will actually resolve the fields\n alias MyApp.Resolver\n\n # Our user object is pretty simple, just a name\n object :user do\n field :name, non_null(:string)\n end\n\n # This one is slightly more complicated, we have that nested `to`\n object :greeting do\n # the easy one\n field :greeting, non_null(:string)\n # the hard one. `edge` is the term for when we cross an object boundary.\n field :to, non_null(:user), do: resolve(&Resolver.to_edge/3)\n end\n\n # something to put our top level queries in, because they're just fields too!\n object :queries do\n field :greetings, non_null(list_of(non_null(:string))) do\n arg :limit, :integer # optional\n resolve &Resolver.greetings/2 # we need to manually process this one\n end\n end\n\nend\n```\n\nThere are a couple of interesting things about this:\n\n- Sprinklings of `not_null` to require that values be present (if you\n don't return them, absinthe will get upset).\n- Only two fields have explicit resolvers. Anything else will default\n to a map key lookup (which is more often than not what you want).\n- `greeting.to_edge` has a `/3` resolver and `queries.greetings` a\n `/2` resolver.\n\nTo understand the last one (and partially the middle one), we must\nunderstand how resolution works and what a parent is. The best way of\ndoing that is probably to look at the resolver code:\n\n```elixir\ndefmodule MyApp.Resolver do\n\n # For purposes of this, we will just fake the data out\n defp greetings_data() do\n [ %{greeting: \"hello\", to: %{ name: \"dear reader\"}}, # english\n %{greeting: \"hallo\", to: %{ name: \"beste lezer\"}}, # dutch\n ]\n end\n\n # the /2 resolver takes only arguments (which in this case is just limit)\n # and an info (which we'll explain later)\n def greetings(%{limit: limit}, _info) when is_integer(limit) and limit > 0 do\n {:ok, Enum.take(greetings_data(), limit)} # absinthe expects an ok/error tuple\n end\n def greetings(_args, _info), do: {:ok, greetings_data()} # no limit\n\n # the /3 resolver takes an additional parent argument in first position.\n # `parent` here will be the `greeting` we are resolving `to` for.\n def to_edge(parent, args, info), do: Map.get(parent, :to)\n\nend\n```\n\nThe keen-eyed amongst you may have noticed I said the default resolver\nis a map lookup and our `to_edge/3` is a map lookup too, so\ntechnically we didn't need to write it. But then you wouldn't have an\nexample of a `/3` resolver! In most of the app, these will be querying\nfrom the database, not looking up in a constant.\n\nSo for every field, a resolver function is run. It defaults to a map\nlookup, but you can override it with `resolve/1`. It may or may not\nhave arguments. And all absinthe resolvers return an ok/error tuple.","ref":"graphql.html#absinthe-introduction"},{"type":"extras","title":"Patterns - GraphQL API","doc":"","ref":"graphql.html#patterns"},{"type":"extras","title":"Message Rewrite Facility","doc":"# Message Rewrite Facility\n\n**WARNING: Due to how this app currently handles its configuration, MRF is only usable if you're building your own docker image.**\n\nThe Message Rewrite Facility (MRF) is a subsystem that is implemented as a series of hooks that allows the administrator to rewrite or discard messages.\n\nPossible uses include:\n\n- marking incoming messages with media from a given account or instance as sensitive\n- rejecting messages from a specific instance\n- rejecting reports (flags) from a specific instance\n- removing/unlisting messages from the public timelines\n- removing media from messages\n- sending only public messages to a specific instance\n\nThe MRF provides user-configurable policies. The default policy is `NoOpPolicy`, which disables the MRF functionality. Bonfire also includes an easy to use policy called `SimplePolicy` which maps messages matching certain pre-defined criterion to actions built into the policy module.\nIt is possible to use multiple, active MRF policies at the same time.","ref":"mrf.html"},{"type":"extras","title":"Using `SimplePolicy` - Message Rewrite Facility","doc":"`SimplePolicy` is capable of handling most common admin tasks.\n\nTo use `SimplePolicy`, you must enable it. Do so by adding the following to your `:instance` config object, so that it looks like this:\n\n```\nconfig :bonfire, :instance,\n [...]\n rewrite_policy: ActivityPub.MRF.SimplePolicy\n```\n\nOnce `SimplePolicy` is enabled, you can configure various groups in the `:mrf_simple` config object. These groups are:\n\n- `media_removal`: Servers in this group will have media stripped from incoming messages.\n- `media_nsfw`: Servers in this group will have the #nsfw tag and sensitive setting injected into incoming messages which contain media.\n- `reject`: Servers in this group will have their messages rejected.\n- `report_removal`: Servers in this group will have their reports (flags) rejected.\n\nServers should be configured as lists.\n\n#","ref":"mrf.html#using-simplepolicy"},{"type":"extras","title":"Example - Message Rewrite Facility","doc":"This example will enable `SimplePolicy`, block media from `illegalporn.biz`, mark media as NSFW from `porn.biz` and `porn.business`, reject messages from `spam.com` and block reports (flags) from `troll.mob`:\n\n```\nconfig :activity_pub, :instance,\n rewrite_policy: [ActivityPub.MRF.SimplePolicy]\n\nconfig :activity_pub, :mrf_simple,\n media_removal: [\"illegalporn.biz\"],\n media_nsfw: [\"porn.biz\", \"porn.business\"],\n reject: [\"spam.com\"],\n report_removal: [\"troll.mob\"]\n\n```\n\n#","ref":"mrf.html#example"},{"type":"extras","title":"Use with Care - Message Rewrite Facility","doc":"The effects of MRF policies can be very drastic. It is important to use this functionality carefully. Always try to talk to an admin before writing an MRF policy concerning their instance.","ref":"mrf.html#use-with-care"},{"type":"extras","title":"Writing your own MRF Policy - Message Rewrite Facility","doc":"As discussed above, the MRF system is a modular system that supports pluggable policies. This means that an admin may write a custom MRF policy in Elixir or any other language that runs on the Erlang VM, by specifying the module name in the `rewrite_policy` config setting.\n\nFor example, here is a sample policy module which rewrites all messages to \"new message content\":\n\n```elixir\n# This is a sample MRF policy which rewrites all Notes to have \"new message\n# content.\"\ndefmodule Site.RewritePolicy do\n @behavior ActivityPub.MRF\n\n # Catch messages which contain Note objects with actual data to filter.\n # Capture the object as `object`, the message content as `content` and the\n # entire activity itself as `activity`.\n @impl true\n def filter(%{\"type\" => \"Create\", \"object\" => %{\"type\" => \"Note\", \"content\" => content} = object} = message)\n when is_binary(content) do\n # Subject / CW is stored as summary instead of `name` like other AS2 objects\n # because of Mastodon doing it that way.\n summary = object[\"summary\"]\n\n # edits go here.\n content = \"new message content\"\n\n # Assemble the mutated object.\n object =\n object\n |> Map.put(\"content\", content)\n |> Map.put(\"summary\", summary)\n\n # Assemble the mutated activity.\n {:ok, Map.put(activity, \"object\", object)}\n end\n\n # Let all other messages through without modifying them.\n @impl true\n def filter(message), do: {:ok, message}\nend\n```\n\nIf you save this file as `lib/site/mrf/rewrite_policy.ex`, it will be included when you next rebuild Bonfire. You can enable it in the configuration like so:\n\n```\nconfig :activity_pub, :instance,\n rewrite_policy: [\n ActivityPub.MRF.SimplePolicy,\n Site.RewritePolicy\n ]\n```","ref":"mrf.html#writing-your-own-mrf-policy"},{"type":"extras","title":"Bonfire Changelog","doc":"# Bonfire Changelog\n\n## [0.3.5-beta (2022-09-23)]\n#","ref":"changelog.html"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Coordination MVP [#445](https://github.com/bonfire-networks/bonfire-app/issues/445) by mayel & ivanminutillo\n- UI to enable/disable extensions in settings [#448](https://github.com/bonfire-networks/bonfire-app/issues/448) \n- Static page generator [#444](https://github.com/bonfire-networks/bonfire-app/issues/444) \n- Publish creation of sub-topic in the topic's feed [#439](https://github.com/bonfire-networks/bonfire-app/issues/439) by mayel\n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- Refactor navs/sidebars to use dynamic navigation & widgets provided by extensions [#447](https://github.com/bonfire-networks/bonfire-app/issues/447) \n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Other - Bonfire Changelog","doc":"- When I reply to a task, the activity in the feed does not show the parent activity [#449](https://github.com/bonfire-networks/bonfire-app/issues/449) \n- Use same composer for create post / topic / create a new list / create task\n\n## [0.3.4-beta.8 (2022-08-26)]\n#","ref":"changelog.html#other"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Remember position in timeline [#392](https://github.com/bonfire-networks/bonfire-app/issues/392) by mayel\n- Should be able to click on a notification to see the related activity [#412](https://github.com/bonfire-networks/bonfire-app/issues/412) by mayel\n- Actions when someone clicks on follow/boost/like/reply buttons on a profile or feed while logged out [#441](https://github.com/bonfire-networks/bonfire-app/issues/441) \n- Combine duplicate posts [#396](https://github.com/bonfire-networks/bonfire-app/issues/396) by mayel\n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- User preferences missing a consistent UX structure [#430](https://github.com/bonfire-networks/bonfire-app/issues/430) \n- Bug: pop-ups from compose box are hidden if close to edge [#394](https://github.com/bonfire-networks/bonfire-app/issues/394) \n- reset the CW field after posting [#378](https://github.com/bonfire-networks/bonfire-app/issues/378) \n- On mobile, there should be an obvious way to reply to a single post when viewing it by itself [#371](https://github.com/bonfire-networks/bonfire-app/issues/371) \n- Alerts and feedback messages need to adopt a solid pattern [#305](https://github.com/bonfire-networks/bonfire-app/issues/305) \n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Fixed - Bonfire Changelog","doc":"- i can't see what i'm typing past a certain amount of text. Like rivht now i dont' see what i'm typing. Might be some typos then^^ [#425](https://github.com/bonfire-networks/bonfire-app/issues/425) \n- Bug: When you switch user it *sometimes* stays on the switch user page [#377](https://github.com/bonfire-networks/bonfire-app/issues/377) by mayel\n\n#","ref":"changelog.html#fixed"},{"type":"extras","title":"Other - Bonfire Changelog","doc":"- Make push notification system more solid [#180](https://github.com/bonfire-networks/bonfire-app/issues/180) \n- Test/fix/improve graceful degradation (usage without JS, or without a LiveView websocket, i.e. when logged out) [#365](https://github.com/bonfire-networks/bonfire-app/issues/365) by mayel\n- use @prop in Surface views/components instead of e(assigns, :prop, default) and declare defaults in props or mount/1 [#414](https://github.com/bonfire-networks/bonfire-app/issues/414) \n\n\n## [0.3.4-beta.6 (2022-08-19)]\n#","ref":"changelog.html#other"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- 3 options for smart input (sidebar, modal, floating) and improve responsive (modal on small screens) [#443](https://github.com/bonfire-networks/bonfire-app/issues/443) \n- Improve feeds async loading [#437](https://github.com/bonfire-networks/bonfire-app/issues/437) by mayel\n- Improve media/link attachments [#440](https://github.com/bonfire-networks/bonfire-app/issues/440) \n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Fixed - Bonfire Changelog","doc":"- Show and count only local users in user directory [#438](https://github.com/bonfire-networks/bonfire-app/issues/438) by mayel\n\n## [0.3.4 (2022-08-09)]\n#","ref":"changelog.html#fixed"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Define & implement granular role & permission system for instance administration and moderation [#406](https://github.com/bonfire-networks/bonfire-app/issues/406) \n\n## [0.3.3 (2022-08-02)]\n#","ref":"changelog.html#added"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Define & implement granular role & permission system for instance administration and moderation [#406](https://github.com/bonfire-networks/bonfire-app/issues/406) \n\n## [0.3.2 (2022-07-30)]\n#","ref":"changelog.html#added"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Pagination topics list & feeds within topics [#431](https://github.com/bonfire-networks/bonfire-app/issues/431) \n- Check boundaries of a topic when tagging and if allowed auto-boost the tagged object in the topic's outbox [#428](https://github.com/bonfire-networks/bonfire-app/issues/428) \n- Show followed topics on a list [#424](https://github.com/bonfire-networks/bonfire-app/issues/424) \n- Topic settings [#423](https://github.com/bonfire-networks/bonfire-app/issues/423) \n- Topic activity preview [#422](https://github.com/bonfire-networks/bonfire-app/issues/422) \n- Browse topics [#421](https://github.com/bonfire-networks/bonfire-app/issues/421) \n- Tag something (eg. post/user) with a topic at any time (depending on boundaries) [#416](https://github.com/bonfire-networks/bonfire-app/issues/416) \n- Tag a post with a topic when writing a new post (or reply) [#415](https://github.com/bonfire-networks/bonfire-app/issues/415) \n- CRUD topics [#410](https://github.com/bonfire-networks/bonfire-app/issues/410) \n- Create a users directory [#159](https://github.com/bonfire-networks/bonfire-app/issues/159) \n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- Optimise LiveView rendering [#426](https://github.com/bonfire-networks/bonfire-app/issues/426) \n- Allow us to scroll from anywhere [#391](https://github.com/bonfire-networks/bonfire-app/issues/391) \n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Other - Bonfire Changelog","doc":"- Add unique key to encircle [#248](https://github.com/bonfire-networks/bonfire-app/issues/248) \n- Database Question [#3](https://github.com/bonfire-networks/activity_pub/issues/3) \n- Being able to change activity type from the composer [#429](https://github.com/bonfire-networks/bonfire-app/issues/429) \n- use created and extra_info mixins on Category [#433](https://github.com/bonfire-networks/bonfire-app/issues/433) \n- check boundaries for edit and archive topic [#434](https://github.com/bonfire-networks/bonfire-app/issues/434)","ref":"changelog.html#other"},{"type":"extras","title":"0.3.1-beta.9 (2022-07-22) - Bonfire Changelog","doc":"#","ref":"changelog.html#0-3-1-beta-9-2022-07-22"},{"type":"extras","title":"Fixed - Bonfire Changelog","doc":"- BUG:Responsive, navigation goes under the mobile bottom tab [#420](https://github.com/bonfire-networks/bonfire-app/issues/420) by ivanminutillo","ref":"changelog.html#fixed"},{"type":"extras","title":"0.3.1-beta (2022-07-19) - Bonfire Changelog","doc":"#","ref":"changelog.html#0-3-1-beta-2022-07-19"},{"type":"extras","title":"Added - Bonfire Changelog","doc":"- Circles & flexible boundaries [#223](https://github.com/bonfire-networks/bonfire-app/issues/223) by mayel & ivanminutillo\n- Compose box at the bottom of the screen as an alternative to the standard microblogging input box [#419](https://github.com/bonfire-networks/bonfire-app/issues/419) \n- \"Compact layout\" in user preferences [#418](https://github.com/bonfire-networks/bonfire-app/issues/418) \n- Fetch metadata of links included in a post and show previews (of images, videos, etc) in feeds [#314](https://github.com/bonfire-networks/bonfire-app/issues/314) \n\n#","ref":"changelog.html#added"},{"type":"extras","title":"Changed - Bonfire Changelog","doc":"- Pasting images into the editor should upload them [#411](https://github.com/bonfire-networks/bonfire-app/issues/411) \n- Bug: When starting from the feed page, clicking back would exit the site [#400](https://github.com/bonfire-networks/bonfire-app/issues/400) \n- /write page was missing the boundary selector [#398](https://github.com/bonfire-networks/bonfire-app/issues/398) \n- Keep me logged in [#395](https://github.com/bonfire-networks/bonfire-app/issues/395) \n- Font size is too small in compose window [#388](https://github.com/bonfire-networks/bonfire-app/issues/388) \n- UI: moved topbar in the header to sidebar [#362](https://github.com/bonfire-networks/bonfire-app/issues/362) \n- Improved responsive UI for use on small screens\n\n#","ref":"changelog.html#changed"},{"type":"extras","title":"Fixed - Bonfire Changelog","doc":"- Bug: some notifications / live feed updates were making all other activities in the feed disappear [#383](https://github.com/bonfire-networks/bonfire-app/issues/383) by mayel\n- Bug: followed/followers pages remained empty despite having followed people [#373](https://github.com/bonfire-networks/bonfire-app/issues/373) by mayel\n- Bug: followed activity missing the person (in main feeds) [#372](https://github.com/bonfire-networks/bonfire-app/issues/372) by mayel\n- Bug: follow notification clears the home feed except for the \"new follow\" post [#366](https://github.com/bonfire-networks/bonfire-app/issues/366) by mayel\n- Bug: images attached to a post should appear in the feed [#364](https://github.com/bonfire-networks/bonfire-app/issues/364)","ref":"changelog.html#fixed"},{"type":"extras","title":"Changelog","doc":"# Changelog\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nThis project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)\n\n## [Unreleased (2022-11-19)]\n#","ref":"changelog-autogenerated.html"},{"type":"extras","title":"Added - Changelog","doc":"- Enable/disable extensions [#448](https://github.com/bonfire-networks/bonfire-app/issues/448) \n- Coordination MVP [#445](https://github.com/bonfire-networks/bonfire-app/issues/445) by mayel & ivanminutillo\n- Static page generator [#444](https://github.com/bonfire-networks/bonfire-app/issues/444) \n- Export my data [#235](https://github.com/bonfire-networks/bonfire-app/issues/235) \n- Customise bonfire without forking [#89](https://github.com/bonfire-networks/bonfire-app/issues/89) \n- Config-driven routing [#88](https://github.com/bonfire-networks/bonfire-app/issues/88) \n\n#","ref":"changelog-autogenerated.html#added"},{"type":"extras","title":"Changed - Changelog","doc":"- Refactor navs/sidebars to use dynamic navigation & widgets provided by extensions [#447](https://github.com/bonfire-networks/bonfire-app/issues/447) \n- LivePush security - efficient version [#234](https://github.com/bonfire-networks/bonfire-app/issues/234) \n- More efficient (batched) insertion of associated data [#233](https://github.com/bonfire-networks/bonfire-app/issues/233) \n- Beta: the great renaming/reorg, a stable API? [#232](https://github.com/bonfire-networks/bonfire-app/issues/232) \n- Improve feeds performance based on benchmark [#226](https://github.com/bonfire-networks/bonfire-app/issues/226) \n\n#","ref":"changelog-autogenerated.html#changed"},{"type":"extras","title":"Other - Changelog","doc":"- UI for federation configuration [#39](https://github.com/bonfire-networks/bonfire-app/issues/39) \n- Publish creation of sub-topic in the topic's feed [#439](https://github.com/bonfire-networks/bonfire-app/issues/439) by mayel\n- When I reply to a task, the activity in the feed does not show the parent activity [#449](https://github.com/bonfire-networks/bonfire-app/issues/449) \n- Feature Proposal: Use prefers-color-scheme [#451](https://github.com/bonfire-networks/bonfire-app/issues/451)","ref":"changelog-autogenerated.html#other"},{"type":"extras","title":"Bonfire Classic","doc":"# Bonfire Classic\n\nThis app is part of the [Bonfire](https://bonfirenetworks.org/) ecosystem and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places","ref":"classic.html"},{"type":"extras","title":"More information - Bonfire Classic","doc":"See the [main docs](../../README.md).","ref":"classic.html#more-information"},{"type":"extras","title":"Bonfire Community","doc":"# Bonfire Community \n\nThis app is a flavour of [Bonfire](https://bonfirenetworks.org/) and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.UI.Groups](https://github.com/bonfire-ecosystem/bonfire_ui_groups) - groups\n- [Bonfire.UI.Topics](https://github.com/bonfire-ecosystem/bonfire_ui_topics) - topics","ref":"community.html"},{"type":"extras","title":"More information - Bonfire Community","doc":"See the [main docs](../../README.md).","ref":"community.html#more-information"},{"type":"extras","title":"Bonfire Cooperation","doc":"# Bonfire Cooperation \n\nThis app is a flavour of [Bonfire](https://bonfirenetworks.org/) and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places\n- [Bonfire.Quantify](https://github.com/bonfire-ecosystem/bonfire_quantify) - units & measures\n- [Bonfire.ValueFlows](https://github.com/bonfire-ecosystem/bonfire_valueflows) - economic activities with ValueFlows\n- [Bonfire.ValueFlows.Observe](https://github.com/bonfire-ecosystem/bonfire_valueflows_observe) - observation of economic resources\n- [Bonfire.API.GraphQL](https://github.com/bonfire-ecosystem/bonfire_api_graphql) - a GraphQL client API\n- [Bonfire.UI.ValueFlows](https://github.com/bonfire-networks/bonfire_ui_valueflows) - reusable frontend components for economic activities \n- [Bonfire.UI.Coordination](https://github.com/bonfire-networks/bonfire_ui_valueflows) - basic coordination UI for projects and communities\n- [Bonfire.Kanban](https://github.com/bonfire-networks/bonfire_breadpub) - coordination tools with drag-and-drop card UI\n- [Bonfire.Breadpub](https://github.com/bonfire-networks/bonfire_breadpub) - needs & offers for mutual aid","ref":"cooperation.html"},{"type":"extras","title":"More information - Bonfire Cooperation","doc":"See the [main docs](../../README.md).","ref":"cooperation.html#more-information"},{"type":"extras","title":"Haha Academy","doc":"# Haha Academy\n\nThis app is part of the [Bonfire](https://bonfirenetworks.org/) ecosystem and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places","ref":"haha.html"},{"type":"extras","title":"More information - Haha Academy","doc":"See the [main docs](../../README.md).","ref":"haha.html#more-information"},{"type":"extras","title":"Reflow","doc":"# Reflow\n\nThis app is part of the [Bonfire](https://bonfirenetworks.org/) and [ValueFlows](http://valueflo.ws/) ecosystems and bundles the following extensions:\n\n- [Bonfire.Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire.Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire.Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire.UI.Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire.Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire.Federate.ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire.Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire.Classify\n- [Bonfire.Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire.Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places\n- [Bonfire.Quantify](https://github.com/bonfire-ecosystem/bonfire_quantify) - units & measures\n- [Bonfire.ValueFlows](https://github.com/bonfire-ecosystem/bonfire_valueflows) - economic activities with ValueFlows\n- [Bonfire.ValueFlows.Observe](https://github.com/bonfire-ecosystem/bonfire_valueflows_observe) - observation of economic resources\n- [Bonfire.API.GraphQL](https://github.com/bonfire-ecosystem/bonfire_api_graphql) - a GraphQL client API\n- [Bonfire.UI.ValueFlows](https://github.com/bonfire-networks/bonfire_ui_valueflows) - reusable frontend components for economic activities \n- [Bonfire.UI.Reflow](https://github.com/bonfire-networks/bonfire_ui_reflow) - frontend for the Reflow project","ref":"reflow.html"},{"type":"extras","title":"More information - Reflow","doc":"See the [main docs](../../README.md).","ref":"reflow.html#more-information"},{"type":"extras","title":"Upcycle","doc":"# Upcycle\n\nThis app is a flavour of [Bonfire](https://bonfirenetworks.org/) and bundles the following extensions:\n\n- [Bonfire:Common](https://github.com/bonfire-networks/bonfire_common) - common utils\n- [Bonfire:Me](https://github.com/bonfire-networks/bonfire_me) - accounts, user profiles...\n- [Bonfire:Social](https://github.com/bonfire-networks/bonfire_social) - feeds, activities, posts, boosting, flagging, etc...\n- [Bonfire:UI:Social](https://github.com/bonfire-ecosystem/bonfire_ui_social) - interface for basic social activities \n- [Bonfire:Boundaries](https://github.com/bonfire-networks/bonfire_boundaries) - define circles and associated privacy or permissions\n- [Bonfire:Federate:ActivityPub](https://github.com/bonfire-networks/bonfire_federate_activitypub) - federates activities with ActivityPub to participate in the fediverse\n- [Bonfire:Tag](https://github.com/bonfire-ecosystem/bonfire_tag) - @ mentions, hashtags, and tagging using topics/categories from Bonfire:Classify\n- [Bonfire:Classify](https://github.com/bonfire-ecosystem/bonfire_classify) - categories & classifications in taxonomies\n- [Bonfire:Geolocate](https://github.com/bonfire-ecosystem/bonfire_geolocate) - places\n- [Bonfire:Quantify](https://github.com/bonfire-ecosystem/bonfire_quantify) - units & measures\n- [Bonfire:ValueFlows](https://github.com/bonfire-ecosystem/bonfire_valueflows) - economic activities with ValueFlows\n- [Bonfire:ValueFlows:Observe](https://github.com/bonfire-ecosystem/bonfire_valueflows_observe) - observation of economic resources\n- [Bonfire:API:GraphQL](https://github.com/bonfire-ecosystem/bonfire_api_graphql) - a GraphQL client API\n- [Bonfire:UI:ValueFlows](https://github.com/bonfire-networks/bonfire_ui_valueflows) - reusable frontend components for economic activities \n- [Bonfire:UI:Coordination](https://github.com/bonfire-networks/bonfire_ui_valueflows) - basic coordination UI for projects and communities\n- [Bonfire:Kanban](https://github.com/bonfire-networks/bonfire_breadpub) - coordination tools with drag-and-drop card UI\n- [Bonfire:Breadpub](https://github.com/bonfire-networks/bonfire_breadpub) - needs & offers for mutual aid\n- [Bonfire:Files](https://github.com/bonfire-networks/bonfire_files) - file management for bonfire apps\n- [Bonfire:Data:SharedUser](https://github.com/bonfire-networks/bonfire_data_shared_user) - database models for shared users in the bonfire ecosystem\n- [Bonfire:Upcycle](https://gitlab.com/msoe.edu-public/sdl/y22sdl/upcycle/bonfire_upcycle/-/tree/master) - Upcycle UI","ref":"upcycle.html"},{"type":"extras","title":"More information - Upcycle","doc":"See the [main docs](../../README.md).","ref":"upcycle.html#more-information"},{"type":"extras","title":"Classic","doc":"| Package | License | Version | Link |\n|------------------------------|------------------------------------|------------|------------------------------------------------------------------|\n| absinthe | MIT | 1.7.0 | https://hex.pm/packages/absinthe |\n| absinthe_error_payload | BSD-3; Unrecognized license | 1.1.4 | https://hex.pm/packages/absinthe_error_payload |\n| absinthe_phoenix | MIT | 2.0.2 | https://hex.pm/packages/absinthe_phoenix |\n| absinthe_plug | MIT | 1.5.8 | https://hex.pm/packages/absinthe_plug |\n| activity_pub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/activity_pub |\n| argon2_elixir | Apache 2.0 | ~> 3.0 | https://hex.pm/packages/argon2_elixir |\n| arrows | Undefined | 0.1.0 | https://github.com/bonfire-networks/arrows |\n| bamboo | MIT | 2.2.0 | https://hex.pm/packages/bamboo |\n| bamboo_smtp | MIT | 4.2.1 | https://hex.pm/packages/bamboo_smtp |\n| benchee | MIT | 1.1.0 | https://hex.pm/packages/benchee |\n| benchee_html | MIT | 1.0.0 | https://hex.pm/packages/benchee_html |\n| benchee_json | MIT | 1.0.0 | https://hex.pm/packages/benchee_json |\n| bonfire_api_graphql | MPL 2.0 | | https://github.com/bonfire-networks/bonfire_api_graphql |\n| bonfire_boundaries | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_boundaries |\n| bonfire_classify | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_classify |\n| bonfire_common | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_common |\n| bonfire_data_access_control | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_access_control |\n| bonfire_data_activity_pub | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_activity_pub |\n| bonfire_data_edges | Undefined | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_edges |\n| bonfire_data_identity | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_identity |\n| bonfire_data_shared_user | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_shared_user |\n| bonfire_data_social | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_social |\n| bonfire_ecto | Undefined | 0.1.0 | https://github.com/bonfire-networks/bonfire_ecto |\n| bonfire_editor_ck | MIT | 0.1.0 | https://github.com/bonfire-networks/bonfire_editor_ck |\n| bonfire_editor_quill | AGPL v3 | 0.0.1 | https://github.com/bonfire-networks/bonfire_editor_quill |\n| bonfire_epics | Apache 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_epics |\n| bonfire_fail | MPL 2.0 | | https://github.com/bonfire-networks/bonfire_fail |\n| bonfire_federate_activitypub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_federate_activitypub |\n| bonfire_files | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_files |\n| bonfire_invite_links | AGPL v3 | 0.0.1 | https://github.com/bonfire-networks/bonfire_invite_links |\n| bonfire_mailer | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_mailer |\n| bonfire_me | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_me |\n| bonfire_search | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_search |\n| bonfire_social | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_social |\n| bonfire_tag | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_tag |\n| bonfire_ui_common | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_common |\n| bonfire_ui_me | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_me |\n| bonfire_ui_social | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_social |\n| cachex | MIT | 3.4.0 | https://hex.pm/packages/cachex |\n| certifi | BSD | 2.9.0 | https://hex.pm/packages/certifi |\n| cldr_utils | Apache 2.0 | 2.17.2 | https://hex.pm/packages/cldr_utils |\n| combine | MIT | 0.10.0 | https://hex.pm/packages/combine |\n| comeonin | BSD-3-Clause; Unrecognized license | 5.3.3 | https://hex.pm/packages/comeonin |\n| connection | Apache 2.0 | 1.1.0 | https://hex.pm/packages/connection |\n| cowboy | ISC | 2.9.0 | https://hex.pm/packages/cowboy |\n| cowboy_telemetry | Apache 2.0 | 0.4.0 | https://hex.pm/packages/cowboy_telemetry |\n| cowlib | ISC | 2.11.0 | https://hex.pm/packages/cowlib |\n| dataloader | MIT | 1.0.10 | https://hex.pm/packages/dataloader |\n| db_connection | Apache 2.0 | 2.4.2 | https://hex.pm/packages/db_connection |\n| decimal | Apache 2.0 | 2.0.0 | https://hex.pm/packages/decimal |\n| deep_merge | MIT | 1.0.0 | https://hex.pm/packages/deep_merge |\n| earmark | Apache 2.0 | 1.4.28 | https://hex.pm/packages/earmark |\n| earmark_parser | Apache 2.0 | 1.4.26 | https://hex.pm/packages/earmark_parser |\n| ecto | Apache 2.0 | 3.8.4 | https://hex.pm/packages/ecto |\n| ecto_erd | Apache 2.0 | 0.4.2 | https://hex.pm/packages/ecto_erd |\n| ecto_materialized_path | Apache 2.0 | 0.3.0 | https://github.com/bonfire-networks/ecto_materialized_path |\n| ecto_psql_extras | MIT | 0.7.4 | https://hex.pm/packages/ecto_psql_extras |\n| ecto_shorts | MIT | 1.1.1 | https://github.com/bonfire-networks/ecto_shorts |\n| ecto_sparkles | Undefined | 0.1.0 | https://github.com/bonfire-networks/ecto_sparkles |\n| ecto_sql | Apache 2.0 | 3.8.3 | https://hex.pm/packages/ecto_sql |\n| elixir_make | Apache 2.0 | ~> 0.6 | https://hex.pm/packages/elixir_make |\n| email_checker | MIT | 0.2.4 | https://hex.pm/packages/email_checker |\n| emote | Undefined | 0.1.0 | https://github.com/bonfire-networks/emote |\n| eqrcode | MIT | 0.1.10 | https://hex.pm/packages/eqrcode |\n| eternal | MIT | 1.2.2 | https://hex.pm/packages/eternal |\n| ex_aws | MIT | 2.3.2 | https://hex.pm/packages/ex_aws |\n| ex_aws_s3 | MIT | 2.3.2 | https://hex.pm/packages/ex_aws_s3 |\n| ex_cldr | Apache 2.0 | 2.30.0 | https://hex.pm/packages/ex_cldr |\n| ex_cldr_languages | Apache 2.0 | 0.3.3 | https://hex.pm/packages/ex_cldr_languages |\n| ex_cldr_plugs | Apache 2.0 | 1.0.0 | https://hex.pm/packages/ex_cldr_plugs |\n| ex_doc | Apache 2.0 | 0.28.4 | https://hex.pm/packages/ex_doc |\n| ex_machina | MIT | ~> 2.4 | https://hex.pm/packages/ex_machina |\n| ex_ulid | Apache 2.0 | 0.1.0 | https://hex.pm/packages/ex_ulid |\n| ex_unit_notifier | MIT | ~> 1.0 | https://hex.pm/packages/ex_unit_notifier |\n| exsync | BSD 3-Clause; Unrecognized license | 0.2.4 | https://hex.pm/packages/exsync |\n| faker | MIT | 0.17.0 | https://hex.pm/packages/faker |\n| fast_ngram | MIT | 1.2.0 | https://hex.pm/packages/fast_ngram |\n| fetch_favicon | MIT | 0.1.3 | https://hex.pm/packages/fetch_favicon |\n| file_info | MIT | 0.0.4 | https://hex.pm/packages/file_info |\n| file_system | WTFPL | 0.2.10 | https://hex.pm/packages/file_system |\n| flame_on | MIT | 0.5.0 | https://hex.pm/packages/flame_on |\n| exto | Apache 2.0 | 0.2.3 | https://github.com/bonfire-networks/exto |\n| floki | MIT | 0.32.1 | https://hex.pm/packages/floki |\n| gen_smtp | BSD-2-Clause; Unrecognized license | 1.2.0 | https://hex.pm/packages/gen_smtp |\n| geo | MIT | 3.4.3 | https://hex.pm/packages/geo |\n| gettext | Apache 2.0 | 0.19.1 | https://hex.pm/packages/gettext |\n| grumble | Apache 2.0 | ~> 0.1.3 | https://hex.pm/packages/grumble |\n| hackney | Apache 2.0 | 1.18.1 | https://hex.pm/packages/hackney |\n| html_entities | MIT | 0.5.2 | https://hex.pm/packages/html_entities |\n| html_sanitize_ex | MIT | 1.4.2 | https://hex.pm/packages/html_sanitize_ex |\n| http_signatures | GPL v3 | 0.1.0 | https://git.pleroma.social/pleroma/http_signatures.git |\n| httpoison | MIT | 1.8.1 | https://hex.pm/packages/httpoison |\n| idna | MIT | 6.1.1 | https://hex.pm/packages/idna |\n| inflex | Apache 2.0 | 2.1.0 | https://hex.pm/packages/inflex |\n| jason | Apache 2.0 | 1.3.0 | https://hex.pm/packages/jason |\n| jumper | MIT | 1.0.1 | https://hex.pm/packages/jumper |\n| libgraph | MIT | 0.13.3 | https://hex.pm/packages/libgraph |\n| licensir | MIT | 0.7.0 | https://github.com/bonfire-networks/licensir |\n| linkify | MIT | 0.2.0 | https://github.com/bonfire-networks/linkify |\n| makeup | BSD; Unrecognized license | 1.1.0 | https://hex.pm/packages/makeup |\n| makeup_diff | MIT | 0.1.0 | https://hex.pm/packages/makeup_diff |\n| makeup_eex | BSD; Unrecognized license | 0.1.1 | https://hex.pm/packages/makeup_eex |\n| makeup_elixir | BSD; Unrecognized license | 0.16.0 | https://hex.pm/packages/makeup_elixir |\n| makeup_erlang | BSD | 0.1.1 | https://hex.pm/packages/makeup_erlang |\n| makeup_graphql | BSD | 0.1.2 | https://hex.pm/packages/makeup_graphql |\n| makeup_html | MIT | 0.1.0 | https://hex.pm/packages/makeup_html |\n| makeup_js | MIT | 0.1.0 | https://hex.pm/packages/makeup_js |\n| makeup_sql | BSD | 0.1.0 | https://hex.pm/packages/makeup_sql |\n| meck | Apache 2.0 | 0.9.2 | https://hex.pm/packages/meck |\n| metrics | BSD | 1.0.1 | https://hex.pm/packages/metrics |\n| mime | Apache 2.0 | 1.6.0 | https://hex.pm/packages/mime |\n| mimerl | MIT | 1.2.0 | https://hex.pm/packages/mimerl |\n| mimetype_parser | MIT | 0.1.3 | https://hex.pm/packages/mimetype_parser |\n| mix_test_interactive | MIT | ~> 1.2 | https://hex.pm/packages/mix_test_interactive |\n| mix_test_watch | MIT | ~> 1.0 | https://hex.pm/packages/mix_test_watch |\n| mix_unused | MIT; Unrecognized license | 0.4.0 | https://hex.pm/packages/mix_unused |\n| mochiweb | MIT | 2.22.0 | https://hex.pm/packages/mochiweb |\n| mock | MIT | ~> 0.3 | https://hex.pm/packages/mock |\n| mogrify | MIT | 0.9.1 | https://hex.pm/packages/mogrify |\n| mox | Apache 2.0 | ~> 1.0 | https://hex.pm/packages/mox |\n| nimble_parsec | Apache 2.0 | 1.2.3 | https://hex.pm/packages/nimble_parsec |\n| nimble_totp | Apache 2.0 | 0.2.0 | https://hex.pm/packages/nimble_totp |\n| nodeinfo | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/nodeinfo |\n| oban | Apache 2.0 | 2.8.0 | https://hex.pm/packages/oban |\n| paginator | MIT | 1.0.4 | https://github.com/bonfire-networks/paginator |\n| pane | MIT | 0.4.1 | https://hex.pm/packages/pane |\n| parse_trans | Apache 2.0 | 3.3.1 | https://hex.pm/packages/parse_trans |\n| pbkdf2_elixir | BSD-3-Clause; Unrecognized license | 2.0.0 | https://hex.pm/packages/pbkdf2_elixir |\n| periscope | Apache 2.0 | 0.4.6 | https://hex.pm/packages/periscope |\n| phoenix | MIT | 1.6.10 | https://hex.pm/packages/phoenix |\n| phoenix_ecto | MIT | 4.4.0 | https://hex.pm/packages/phoenix_ecto |\n| phoenix_gon | MIT | 0.4.1 | https://github.com/bonfire-networks/phoenix_gon |\n| phoenix_html | MIT | 3.2.0 | https://hex.pm/packages/phoenix_html |\n| phoenix_live_dashboard | MIT | 0.6.5 | https://hex.pm/packages/phoenix_live_dashboard |\n| phoenix_live_reload | MIT | 1.3.3 | https://hex.pm/packages/phoenix_live_reload |\n| phoenix_live_view | MIT | 0.17.10 | https://hex.pm/packages/phoenix_live_view |\n| phoenix_pubsub | MIT | 2.1.1 | https://hex.pm/packages/phoenix_pubsub |\n| phoenix_view | MIT | 1.1.2 | https://hex.pm/packages/phoenix_view |\n| plug | Apache 2.0 | 1.13.6 | https://hex.pm/packages/plug |\n| plug_cowboy | Apache 2.0 | 2.5.2 | https://hex.pm/packages/plug_cowboy |\n| plug_crypto | Apache 2.0 | 1.2.2 | https://hex.pm/packages/plug_crypto |\n| pointers | Apache 2.0 | 0.6.0 | https://github.com/bonfire-networks/pointers |\n| needle_ulid | MIT | 0.2.2 | https://github.com/bonfire-networks/needle_ulid |\n| postgrex | Apache 2.0 | 0.16.3 | https://hex.pm/packages/postgrex |\n| pseudo_gettext | Undefined | 0.1.0 | https://github.com/tmbb/pseudo_gettext |\n| ranch | ISC | 1.8.0 | https://hex.pm/packages/ranch |\n| recase | MIT | 0.7.0 | https://hex.pm/packages/recase |\n| redirect | Apache 2.0 | 0.3.0 | https://hex.pm/packages/redirect |\n| scribe | MIT | 0.10.0 | https://hex.pm/packages/scribe |\n| sentry | MIT | 8.0.6 | https://hex.pm/packages/sentry |\n| sleeplocks | MIT | 1.1.1 | https://hex.pm/packages/sleeplocks |\n| sobelow | Apache 2.0 | 0.11.1 | https://hex.pm/packages/sobelow |\n| solid | MIT | 0.12.0 | https://hex.pm/packages/solid |\n| sourceror | Apache 2.0 | 0.11.1 | https://hex.pm/packages/sourceror |\n| ssl_verify_fun | MIT | 1.1.6 | https://hex.pm/packages/ssl_verify_fun |\n| statistex | MIT | 1.0.0 | https://hex.pm/packages/statistex |\n| surface | MIT | 0.7.4 | https://hex.pm/packages/surface |\n| surface_heroicons | Undefined | 0.5.3 | https://github.com/rocketinsights/surface_heroicons |\n| sweet_xml | MIT | 0.7.3 | https://hex.pm/packages/sweet_xml |\n| table_rex | MIT | 3.1.1 | https://hex.pm/packages/table_rex |\n| telemetry | Apache 2.0 | 1.1.0 | https://hex.pm/packages/telemetry |\n| telemetry_metrics | Apache 2.0 | 0.6.1 | https://hex.pm/packages/telemetry_metrics |\n| telemetry_poller | Apache 2.0 | 1.0.0 | https://hex.pm/packages/telemetry_poller |\n| tesla | MIT | 1.4.4 | https://hex.pm/packages/tesla |\n| timex | MIT | 3.7.8 | https://hex.pm/packages/timex |\n| twinkle_star | GPL v3 | 0.1.0 | https://github.com/bonfire-networks/twinkle_star |\n| typed_struct | MIT | ~> 0.3.0 | https://hex.pm/packages/typed_struct |\n| tzdata | MIT | 1.1.1 | https://hex.pm/packages/tzdata |\n| unicode_util_compat | Apache 2.0 | 0.7.0 | https://hex.pm/packages/unicode_util_compat |\n| unsafe | MIT | 1.0.1 | https://hex.pm/packages/unsafe |\n| verbs | MIT | 0.6.1 | https://github.com/shannonwells/verbs_ex |\n| voodoo | Undefined | 0.1.0 | https://github.com/bonfire-networks/voodoo |\n| waffle | Apache 2.0 | 1.1.6 | https://hex.pm/packages/waffle |\n| wallaby | MIT | ~> 0.29.1 | https://hex.pm/packages/wallaby |\n| web_driver_client | MIT | ~> 0.2.0 | https://hex.pm/packages/web_driver_client |\n| where | Apache 2.0 | 0.1.0 | https://github.com/bonfire-networks/untangle |\n| zest | Apache 2.0 | 0.1.2 | https://hex.pm/packages/zest |\n|------------------------------|------------------------------------|------------|------------------------------------------------------------------|","ref":"deps-classic.html"},{"type":"extras","title":"Cooperation","doc":"| Package | License | Version | Link |\n|------------------------------|------------------------------------|----------|------------------------------------------------------------------|\n| absinthe | MIT | 1.7.0 | https://hex.pm/packages/absinthe |\n| absinthe_client | MIT | 2.0.0 | https://github.com/bonfire-networks/absinthe_client.git |\n| absinthe_error_payload | BSD-3; Unrecognized license | 1.1.4 | https://hex.pm/packages/absinthe_error_payload |\n| absinthe_phoenix | MIT | 2.0.2 | https://hex.pm/packages/absinthe_phoenix |\n| absinthe_plug | MIT | 1.5.8 | https://hex.pm/packages/absinthe_plug |\n| activity_pub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/activity_pub |\n| argon2_elixir | Apache 2.0 | ~> 2.4 | https://hex.pm/packages/argon2_elixir |\n| arrows | Undefined | 0.1.0 | https://github.com/bonfire-networks/arrows |\n| bamboo | MIT | 2.2.0 | https://hex.pm/packages/bamboo |\n| bamboo_smtp | MIT | 4.1.0 | https://hex.pm/packages/bamboo_smtp |\n| bonfire_api_graphql | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_api_graphql |\n| bonfire_boundaries | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_boundaries |\n| bonfire_breadpub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_breadpub |\n| bonfire_classify | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_classify |\n| bonfire_common | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_common |\n| bonfire_data_access_control | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_access_control |\n| bonfire_data_activity_pub | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_activity_pub |\n| bonfire_data_assort | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_assort |\n| bonfire_data_edges | Undefined | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_edges |\n| bonfire_data_identity | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_identity |\n| bonfire_data_shared_user | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_shared_user |\n| bonfire_data_social | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_data_social |\n| bonfire_editor_ck | MIT | 0.1.0 | https://github.com/bonfire-networks/bonfire_editor_ck |\n| bonfire_epics | Apache 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_epics |\n| bonfire_fail | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_fail |\n| bonfire_federate_activitypub | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_federate_activitypub |\n| bonfire_files | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_files |\n| bonfire_geolocate | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_geolocate |\n| bonfire_invite_links | AGPL v3 | 0.0.1 | https://github.com/bonfire-networks/bonfire_invite_links |\n| bonfire_mailer | MPL 2.0 | 0.1.0 | https://github.com/bonfire-networks/bonfire_mailer |\n| bonfire_me | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_me |\n| bonfire_quantify | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_quantify |\n| bonfire_search | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_search |\n| bonfire_social | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_social |\n| bonfire_tag | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_tag |\n| bonfire_ui_coordination | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_coordination |\n| bonfire_ui_kanban | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_kanban |\n| bonfire_ui_social | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_social |\n| bonfire_ui_valueflows | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_ui_valueflows |\n| bonfire_valueflows | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_valueflows |\n| bonfire_valueflows_observe | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_valueflows_observe |\n| bonfire_website | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/bonfire_website |\n| cachex | MIT | 3.4.0 | https://hex.pm/packages/cachex |\n| certifi | BSD | 2.9.0 | https://hex.pm/packages/certifi |\n| cldr_utils | Apache 2.0 | 2.17.1 | https://hex.pm/packages/cldr_utils |\n| combine | MIT | 0.10.0 | https://hex.pm/packages/combine |\n| comeonin | BSD-3-Clause; Unrecognized license | 5.3.3 | https://hex.pm/packages/comeonin |\n| connection | Apache 2.0 | 1.1.0 | https://hex.pm/packages/connection |\n| cowboy | ISC | 2.9.0 | https://hex.pm/packages/cowboy |\n| cowboy_telemetry | Apache 2.0 | 0.4.0 | https://hex.pm/packages/cowboy_telemetry |\n| cowlib | ISC | 2.11.0 | https://hex.pm/packages/cowlib |\n| dataloader | MIT | 1.0.10 | https://hex.pm/packages/dataloader |\n| db_connection | Apache 2.0 | 2.4.1 | https://hex.pm/packages/db_connection |\n| decimal | Apache 2.0 | 2.0.0 | https://hex.pm/packages/decimal |\n| earmark | Apache 2.0 | 1.4.20 | https://hex.pm/packages/earmark |\n| earmark_parser | Apache 2.0 | 1.4.18 | https://hex.pm/packages/earmark_parser |\n| ecto | Apache 2.0 | 3.7.1 | https://hex.pm/packages/ecto |\n| ecto_erd | Apache 2.0 | 0.4.1 | https://hex.pm/packages/ecto_erd |\n| ecto_materialized_path | Apache 2.0 | 0.3.0 | https://github.com/bonfire-networks/ecto_materialized_path |\n| ecto_psql_extras | MIT | 0.7.4 | https://hex.pm/packages/ecto_psql_extras |\n| ecto_ranked | MIT | 0.5.0 | https://hex.pm/packages/ecto_ranked |\n| ecto_shorts | MIT | 1.1.1 | https://github.com/bonfire-networks/ecto_shorts |\n| ecto_sparkles | Undefined | 0.1.0 | https://github.com/bonfire-networks/ecto_sparkles |\n| ecto_sql | Apache 2.0 | 3.7.2 | https://hex.pm/packages/ecto_sql |\n| eflambe | Apache 2.0 | 0.2.2 | https://hex.pm/packages/eflambe |\n| elixir_make | Apache 2.0 | ~> 0.6 | https://hex.pm/packages/elixir_make |\n| email_checker | MIT | 0.2.4 | https://hex.pm/packages/email_checker |\n| emote | Undefined | 0.1.0 | https://github.com/bonfire-networks/emote |\n| eternal | MIT | 1.2.2 | https://hex.pm/packages/eternal |\n| ex_cldr | Apache 2.0 | 2.26.1 | https://hex.pm/packages/ex_cldr |\n| ex_doc | Apache 2.0 | 0.28.1 | https://hex.pm/packages/ex_doc |\n| ex_machina | MIT | ~> 2.4 | https://hex.pm/packages/ex_machina |\n| ex_unit_notifier | MIT | ~> 1.0 | https://hex.pm/packages/ex_unit_notifier |\n| exsync | BSD 3-Clause; Unrecognized license | 0.2.4 | https://hex.pm/packages/exsync |\n| faker | MIT | 0.17.0 | https://hex.pm/packages/faker |\n| fast_ngram | MIT | 1.2.0 | https://hex.pm/packages/fast_ngram |\n| file_info | MIT | 0.0.4 | https://hex.pm/packages/file_info |\n| file_system | WTFPL | 0.2.10 | https://hex.pm/packages/file_system |\n| flame_on | MIT | 0.2.1 | https://hex.pm/packages/flame_on |\n| exto | Apache 2.0 | 0.2.3 | https://github.com/bonfire-networks/exto |\n| floki | MIT | 0.32.0 | https://hex.pm/packages/floki |\n| gen_smtp | BSD 2-clause; Unrecognized license | 1.1.1 | https://hex.pm/packages/gen_smtp |\n| geo | MIT | 3.4.3 | https://hex.pm/packages/geo |\n| geo_postgis | MIT | 3.4.1 | https://hex.pm/packages/geo_postgis |\n| geocoder | MIT | 1.1.4 | https://hex.pm/packages/geocoder |\n| geohash | Apache 2.0 | 1.2.2 | https://hex.pm/packages/geohash |\n| gettext | Apache 2.0 | 0.19.1 | https://hex.pm/packages/gettext |\n| git_diff | MIT | 0.6.3 | https://hex.pm/packages/git_diff |\n| grumble | Apache 2.0 | ~> 0.1.3 | https://hex.pm/packages/grumble |\n| hackney | Apache 2.0 | 1.18.1 | https://hex.pm/packages/hackney |\n| html_entities | MIT | 0.5.2 | https://hex.pm/packages/html_entities |\n| html_sanitize_ex | MIT | 1.4.2 | https://hex.pm/packages/html_sanitize_ex |\n| http_signatures | GPL v3 | 0.1.0 | https://git.pleroma.social/pleroma/http_signatures.git |\n| httpoison | MIT | 1.8.0 | https://hex.pm/packages/httpoison |\n| hut | MIT | 1.3.0 | https://hex.pm/packages/hut |\n| idna | MIT | 6.1.1 | https://hex.pm/packages/idna |\n| inflex | Apache 2.0 | 2.1.0 | https://hex.pm/packages/inflex |\n| jason | Apache 2.0 | 1.3.0 | https://hex.pm/packages/jason |\n| jumper | MIT | 1.0.1 | https://hex.pm/packages/jumper |\n| licensir | MIT | 0.7.0 | https://github.com/bonfire-networks/licensir |\n| linkify | MIT | 0.2.0 | https://github.com/bonfire-networks/linkify |\n| makeup | BSD; Unrecognized license | 1.0.5 | https://hex.pm/packages/makeup |\n| makeup_elixir | BSD; Unrecognized license | 0.15.2 | https://hex.pm/packages/makeup_elixir |\n| makeup_erlang | BSD | 0.1.1 | https://hex.pm/packages/makeup_erlang |\n| mappable | New BSD | 0.2.4 | https://hex.pm/packages/mappable |\n| meck | Apache 2.0 | 0.9.2 | https://hex.pm/packages/meck |\n| metrics | BSD | 1.0.1 | https://hex.pm/packages/metrics |\n| mime | Apache 2.0 | 1.6.0 | https://hex.pm/packages/mime |\n| mimerl | MIT | 1.2.0 | https://hex.pm/packages/mimerl |\n| mimetype_parser | MIT | 0.1.3 | https://hex.pm/packages/mimetype_parser |\n| mix_test_interactive | MIT | ~> 1.0 | https://hex.pm/packages/mix_test_interactive |\n| mix_test_watch | MIT | ~> 1.0 | https://hex.pm/packages/mix_test_watch |\n| mix_unused | MIT; Unrecognized license | 0.3.0 | https://hex.pm/packages/mix_unused |\n| mochiweb | MIT | 2.22.0 | https://hex.pm/packages/mochiweb |\n| mock | MIT | ~> 0.3 | https://hex.pm/packages/mock |\n| neuron | ISC | 5.0.0 | https://hex.pm/packages/neuron |\n| nimble_parsec | Apache 2.0 | 1.2.2 | https://hex.pm/packages/nimble_parsec |\n| nodeinfo | AGPL v3 | 0.1.0 | https://github.com/bonfire-networks/nodeinfo |\n| oban | Apache 2.0 | 2.8.0 | https://hex.pm/packages/oban |\n| ok | Apache 2.0 | 2.3.0 | https://hex.pm/packages/ok |\n| paginator | MIT | 1.0.4 | https://github.com/bonfire-networks/paginator |\n| pane | MIT | 0.4.1 | https://hex.pm/packages/pane |\n| parse_trans | Apache 2.0 | 3.3.1 | https://hex.pm/packages/parse_trans |\n| pbkdf2_elixir | BSD-3-Clause; Unrecognized license | 1.4.2 | https://hex.pm/packages/pbkdf2_elixir |\n| phil_columns | MIT | 3.1.0 | https://hex.pm/packages/phil_columns |\n| phoenix | MIT | 1.6.6 | https://hex.pm/packages/phoenix |\n| phoenix_ecto | MIT | 4.4.0 | https://hex.pm/packages/phoenix_ecto |\n| phoenix_gon | MIT | 0.4.1 | https://github.com/bonfire-networks/phoenix_gon |\n| phoenix_html | MIT | 3.2.0 | https://hex.pm/packages/phoenix_html |\n| phoenix_live_dashboard | MIT | 0.6.5 | https://hex.pm/packages/phoenix_live_dashboard |\n| phoenix_live_reload | MIT | 1.3.3 | https://hex.pm/packages/phoenix_live_reload |\n| phoenix_live_view | MIT | 0.17.7 | https://hex.pm/packages/phoenix_live_view |\n| phoenix_pubsub | MIT | 2.0.0 | https://hex.pm/packages/phoenix_pubsub |\n| phoenix_view | MIT | 1.1.2 | https://hex.pm/packages/phoenix_view |\n| plug | Apache 2.0 | 1.13.3 | https://hex.pm/packages/plug |\n| plug_cowboy | Apache 2.0 | 2.5.2 | https://hex.pm/packages/plug_cowboy |\n| plug_crypto | Apache 2.0 | 1.2.2 | https://hex.pm/packages/plug_crypto |\n| pointers | Apache 2.0 | 0.6.0 | https://github.com/bonfire-networks/pointers |\n| needle_ulid | MIT | 0.2.2 | https://github.com/bonfire-networks/needle_ulid |\n| poolboy | Unlicense; Apache 2.0; ISC | 1.5.2 | https://hex.pm/packages/poolboy |\n| postgrex | Apache 2.0 | 0.16.2 | https://hex.pm/packages/postgrex |\n| ranch | ISC | 1.8.0 | https://hex.pm/packages/ranch |\n| recase | MIT | 0.7.0 | https://hex.pm/packages/recase |\n| redirect | Apache 2.0 | 0.3.0 | https://hex.pm/packages/redirect |\n| scribe | MIT | 0.10.0 | https://hex.pm/packages/scribe |\n| sentry | MIT | 8.0.6 | https://hex.pm/packages/sentry |\n| sleeplocks | MIT | 1.1.1 | https://hex.pm/packages/sleeplocks |\n| sobelow | Apache 2.0 | 0.11.1 | https://hex.pm/packages/sobelow |\n| sourceror | Apache 2.0 | 0.10.0 | https://hex.pm/packages/sourceror |\n| ssl_verify_fun | MIT | 1.1.6 | https://hex.pm/packages/ssl_verify_fun |\n| stream_data | Apache 2.0 | 0.5.0 | https://hex.pm/packages/stream_data |\n| surface | MIT | 0.7.1 | https://hex.pm/packages/surface |\n| surface_heroicons | Undefined | 0.5.3 | https://github.com/rocketinsights/surface_heroicons |\n| table_rex | MIT | 3.1.1 | https://hex.pm/packages/table_rex |\n| telemetry | Apache 2.0 | 1.0.0 | https://hex.pm/packages/telemetry |\n| telemetry_metrics | Apache 2.0 | 0.6.1 | https://hex.pm/packages/telemetry_metrics |\n| telemetry_poller | Apache 2.0 | 1.0.0 | https://hex.pm/packages/telemetry_poller |\n| tesla | MIT | 1.4.4 | https://hex.pm/packages/tesla |\n| timex | MIT | 3.7.6 | https://hex.pm/packages/timex |\n| towel | MIT | 0.2.1 | https://hex.pm/packages/towel |\n| twinkle_star | GPL v3 | 0.1.0 | https://github.com/bonfire-networks/twinkle_star |\n| typed_struct | MIT | ~> 0.2.1 | https://hex.pm/packages/typed_struct |\n| tzdata | MIT | 1.1.1 | https://hex.pm/packages/tzdata |\n| unicode_util_compat | Apache 2.0 | 0.7.0 | https://hex.pm/packages/unicode_util_compat |\n| unsafe | MIT | 1.0.1 | https://hex.pm/packages/unsafe |\n| verbs | MIT | 0.6.1 | https://github.com/shannonwells/verbs_ex |\n| voodoo | Undefined | 0.1.0 | https://github.com/bonfire-networks/voodoo |\n| waffle | Apache 2.0 | 1.1.6 | https://hex.pm/packages/waffle |\n| where | Apache 2.0 | 0.1.0 | https://github.com/bonfire-networks/untangle |\n| zest | Apache 2.0 | 0.1.2 | https://hex.pm/packages/zest |\n|------------------------------|------------------------------------|----------|------------------------------------------------------------------|","ref":"deps-cooperation.html"}],"content_type":"text/markdown"} \ No newline at end of file diff --git a/dist/sidebar_items-D2CBD495.js b/dist/sidebar_items-D2CBD495.js deleted file mode 100644 index 1f0ff1d513d..00000000000 --- a/dist/sidebar_items-D2CBD495.js +++ /dev/null @@ -1 +0,0 @@ -sidebarNodes={"modules":[{"id":"Bonfire.Data.AccessControl.Acl","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Acl","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(acl \\\\ %Acl{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Acl","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Circle","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Circle","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(circle \\\\ %Circle{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Circle","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Controlled","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Controlled","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(controlled \\\\ %Controlled{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Controlled","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Encircle","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Encircle","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(encircle \\\\ %Encircle{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Encircle","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Grant","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Grant","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(grant \\\\ %Grant{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Grant","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.InstanceAdmin","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.InstanceAdmin","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(admin \\\\ %InstanceAdmin{}, params, cast \\\\ [:is_instance_admin])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".AccessControl.InstanceAdmin","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Stereotyped","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Stereotyped","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(stereotype \\\\ %Stereotyped{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Stereotyped","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Verb","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Verb","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(verb \\\\ %Verb{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Verb","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.ActivityPub.Actor","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.ActivityPub.Actor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(actor \\\\ %Actor{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".ActivityPub.Actor","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.ActivityPub.Actor.Migration","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.ActivityPub.Actor.Migration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_actor_table/0","deprecated":false,"title":"create_actor_table()","anchor":"create_actor_table/0"},{"id":"create_actor_table/1","deprecated":false,"title":"create_actor_table(list)","anchor":"create_actor_table/1"},{"id":"drop_actor_table/0","deprecated":false,"title":"drop_actor_table()","anchor":"drop_actor_table/0"},{"id":"migrate_actor/0","deprecated":false,"title":"migrate_actor()","anchor":"migrate_actor/0"},{"id":"migrate_actor/1","deprecated":false,"title":"migrate_actor(dir)","anchor":"migrate_actor/1"}],"key":"functions"}],"nested_title":".ActivityPub.Actor.Migration","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.ActivityPub.Peer","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.ActivityPub.Peer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(peer \\\\ %Peer{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".ActivityPub.Peer","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.ActivityPub.Peered","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.ActivityPub.Peered","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(peered \\\\ %Peered{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".ActivityPub.Peered","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Assort.Ranked","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Assort.Ranked","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(model \\\\ %Ranked{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Assort.Ranked","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Assort.Ranked.Migration","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Assort.Ranked.Migration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_ranked_table/0","deprecated":false,"title":"create_ranked_table()","anchor":"create_ranked_table/0"},{"id":"create_ranked_table/1","deprecated":false,"title":"create_ranked_table(list)","anchor":"create_ranked_table/1"},{"id":"create_unique_index/1","deprecated":false,"title":"create_unique_index(opts \\\\ [])","anchor":"create_unique_index/1"},{"id":"drop_ranked_table/0","deprecated":false,"title":"drop_ranked_table()","anchor":"drop_ranked_table/0"},{"id":"drop_unique_index/1","deprecated":false,"title":"drop_unique_index(opts \\\\ [])","anchor":"drop_unique_index/1"},{"id":"migrate_ranked/0","deprecated":false,"title":"migrate_ranked()","anchor":"migrate_ranked/0"},{"id":"migrate_ranked/1","deprecated":false,"title":"migrate_ranked(dir)","anchor":"migrate_ranked/1"}],"key":"functions"}],"nested_title":".Assort.Ranked.Migration","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Edges.Edge","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Edges.Edge","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(edge \\\\ %Edge{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Edges.Edge","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Edges.EdgeTotal","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Edges.EdgeTotal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(me \\\\ %EdgeTotal{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Edges.EdgeTotal","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Account","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Account","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(account \\\\ %Account{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Identity.Account","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Accounted","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Accounted","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(acc \\\\ %Accounted{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Identity.Accounted","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Alias","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Alias","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(alias \\\\ %Alias{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Identity.Alias","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.AuthSecondFactor","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.AuthSecondFactor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(totp, attrs)","anchor":"changeset/2"},{"id":"valid_totp?/2","deprecated":false,"title":"valid_totp?(totp, code)","anchor":"valid_totp?/2"}],"key":"functions"}],"nested_title":".Identity.AuthSecondFactor","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.CareClosure","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.CareClosure","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"by_branch/1","deprecated":false,"title":"by_branch(branch)","anchor":"by_branch/1"}],"key":"functions"}],"nested_title":".Identity.CareClosure","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Caretaker","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Caretaker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(ct \\\\ %Caretaker{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Identity.Caretaker","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Character","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Character","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(char \\\\ %Character{}, params, extra \\\\ nil)","anchor":"changeset/3"},{"id":"changeset_basic/2","deprecated":false,"title":"changeset_basic(char, params)","anchor":"changeset_basic/2"},{"id":"hash/1","deprecated":false,"title":"hash(name)","anchor":"hash/1"},{"id":"uniform/1","deprecated":false,"title":"uniform(name)","anchor":"uniform/1"}],"key":"functions"}],"nested_title":".Identity.Character","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Credential","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Credential","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(cred \\\\ %Credential{}, params)","anchor":"changeset/2"},{"id":"check_password/2","deprecated":false,"title":"check_password(password, hash)","anchor":"check_password/2"},{"id":"confirmation_changeset/2","deprecated":false,"title":"confirmation_changeset(cred \\\\ %Credential{}, params)","anchor":"confirmation_changeset/2"},{"id":"dummy_check/0","deprecated":false,"title":"dummy_check()","anchor":"dummy_check/0"},{"id":"hash_password/1","deprecated":false,"title":"hash_password(password)","anchor":"hash_password/1"}],"key":"functions"}],"nested_title":".Identity.Credential","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Credential.Migration","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Credential.Migration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_credential_table/0","deprecated":false,"title":"create_credential_table()","anchor":"create_credential_table/0"},{"id":"create_credential_table/1","deprecated":false,"title":"create_credential_table(list)","anchor":"create_credential_table/1"},{"id":"drop_credential_table/0","deprecated":false,"title":"drop_credential_table()","anchor":"drop_credential_table/0"},{"id":"migrate_credential/0","deprecated":false,"title":"migrate_credential()","anchor":"migrate_credential/0"},{"id":"migrate_credential/1","deprecated":false,"title":"migrate_credential(dir)","anchor":"migrate_credential/1"}],"key":"functions"}],"nested_title":".Identity.Credential.Migration","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Email","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Email","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(email \\\\ %Email{}, params, opts \\\\ [])","anchor":"changeset/3"},{"id":"confirm/1","deprecated":false,"title":"confirm(email)","anchor":"confirm/1"},{"id":"may_confirm?/2","deprecated":false,"title":"may_confirm?(email, opts \\\\ [])","anchor":"may_confirm?/2"},{"id":"may_request_confirm_email?/2","deprecated":false,"title":"may_request_confirm_email?(email, opts \\\\ [])","anchor":"may_request_confirm_email?/2"},{"id":"put_token/1","deprecated":false,"title":"put_token(email)","anchor":"put_token/1"},{"id":"should_request_or_refresh?/2","deprecated":false,"title":"should_request_or_refresh?(email, opts \\\\ [])","anchor":"should_request_or_refresh?/2"}],"key":"functions"}],"nested_title":".Identity.Email","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.ExtraInfo","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.ExtraInfo","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(extra_info \\\\ %ExtraInfo{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Identity.ExtraInfo","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Named","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Named","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(named \\\\ %Named{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Identity.Named","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Self","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Self","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(self \\\\ %Self{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Identity.Self","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Settings","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Settings","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(settings \\\\ %Settings{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Identity.Settings","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.User","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.User","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(user \\\\ %User{}, params)","anchor":"changeset/2"},{"id":"maybe_redact/1","deprecated":false,"title":"maybe_redact(arg1)","anchor":"maybe_redact/1"}],"key":"functions"}],"nested_title":".Identity.User","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.SharedUser","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.SharedUser","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(user \\\\ %SharedUser{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".SharedUser","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.APActivity","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.APActivity","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(activity \\\\ %APActivity{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.APActivity","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Activity","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Activity","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(activity \\\\ %Activity{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Activity","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Bookmark","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Bookmark","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(bookmark \\\\ %Bookmark{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Bookmark","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Boost","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Boost","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(boost \\\\ %Boost{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Boost","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Created","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Created","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(created \\\\ %Created{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Created","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Feed","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Feed","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(feed \\\\ %Feed{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Feed","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.FeedPublish","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.FeedPublish","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(pub \\\\ %FeedPublish{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.FeedPublish","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Flag","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Flag","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(flag \\\\ %Flag{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Flag","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Follow","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Follow","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(follow \\\\ %Follow{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Follow","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Inbox","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Inbox","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(inbox \\\\ %Inbox{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Inbox","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Like","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Like","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(like \\\\ %Like{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Like","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Message","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Message","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(message \\\\ %Message{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Message","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Pin","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Pin","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(pin \\\\ %Pin{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Pin","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Post","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Post","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(post \\\\ %Post{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Post","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.PostContent","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.PostContent","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(content \\\\ %PostContent{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.PostContent","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Profile","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Profile","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(profile \\\\ %Profile{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Profile","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Replied","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Replied","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ancestor_ids/1","deprecated":false,"title":"ancestor_ids(schema)","anchor":"ancestor_ids/1"},{"id":"ancestors/1","deprecated":false,"title":"ancestors(schema)","anchor":"ancestors/1"},{"id":"arrange/2","deprecated":false,"title":"arrange(structs_list, opts \\\\ [])","anchor":"arrange/2"},{"id":"build_child/1","deprecated":false,"title":"build_child(schema)","anchor":"build_child/1"},{"id":"changeset/2","deprecated":false,"title":"changeset(replied \\\\ %Replied{}, attrs)","anchor":"changeset/2"},{"id":"children/1","deprecated":false,"title":"children(schema)","anchor":"children/1"},{"id":"depth/1","deprecated":false,"title":"depth(schema)","anchor":"depth/1"},{"id":"descendants/1","deprecated":false,"title":"descendants(schema)","anchor":"descendants/1"},{"id":"make_child_of/2","deprecated":false,"title":"make_child_of(changeset, parent)","anchor":"make_child_of/2"},{"id":"parent/1","deprecated":false,"title":"parent(schema)","anchor":"parent/1"},{"id":"parent_id/1","deprecated":false,"title":"parent_id(schema)","anchor":"parent_id/1"},{"id":"path/1","deprecated":false,"title":"path(schema)","anchor":"path/1"},{"id":"path_ids/1","deprecated":false,"title":"path_ids(schema)","anchor":"path_ids/1"},{"id":"root/1","deprecated":false,"title":"root(schema)","anchor":"root/1"},{"id":"root?/1","deprecated":false,"title":"root?(schema)","anchor":"root?/1"},{"id":"root_id/1","deprecated":false,"title":"root_id(schema)","anchor":"root_id/1"},{"id":"siblings/1","deprecated":false,"title":"siblings(schema)","anchor":"siblings/1"},{"id":"subtree/1","deprecated":false,"title":"subtree(schema)","anchor":"subtree/1"},{"id":"where_depth/2","deprecated":false,"title":"where_depth(query \\\\ __MODULE__, depth_params)","anchor":"where_depth/2"}],"key":"functions"}],"nested_title":".Social.Replied","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Request","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Request","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(request \\\\ %Request{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Request","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Seen","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Seen","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(seen \\\\ %Seen{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Seen","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Sensitive","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Sensitive","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(sensitive \\\\ %Sensitive{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Sensitive","nested_context":"Bonfire.Data"},{"id":"Bonfire.UI.Common","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_error/3","deprecated":false,"title":"assign_error(socket, msg, pid \\\\ self())","anchor":"assign_error/3"},{"id":"assign_flash/5","deprecated":false,"title":"assign_flash(socket_or_conn, type, message, assigns \\\\ %{}, pid \\\\ self())","anchor":"assign_flash/5"},{"id":"assign_generic/2","deprecated":false,"title":"assign_generic(socket_or_conn, assigns)","anchor":"assign_generic/2"},{"id":"assign_generic/3","deprecated":false,"title":"assign_generic(socket, key, value)","anchor":"assign_generic/3"},{"id":"assign_generic_global/2","deprecated":false,"title":"assign_generic_global(socket, assigns)","anchor":"assign_generic_global/2"},{"id":"assign_global/2","deprecated":false,"title":"assign_global(socket, assigns)","anchor":"assign_global/2"},{"id":"assign_global/3","deprecated":false,"title":"assign_global(socket, key, value)","anchor":"assign_global/3"},{"id":"assigns_clean/1","deprecated":false,"title":"assigns_clean(tuple)","anchor":"assigns_clean/1"},{"id":"assigns_merge/2","deprecated":false,"title":"assigns_merge(assigns, new)","anchor":"assigns_merge/2"},{"id":"assigns_merge/3","deprecated":false,"title":"assigns_merge(socket, assigns, new)","anchor":"assigns_merge/3"},{"id":"assigns_minimal/1","deprecated":false,"title":"assigns_minimal(assigns)","anchor":"assigns_minimal/1"},{"id":"assigns_subscribe/2","deprecated":false,"title":"assigns_subscribe(socket, assign_names)","anchor":"assigns_subscribe/2"},{"id":"batch_update_many_async/3","deprecated":false,"title":"batch_update_many_async(assigns_sockets, many_opts, opts)","anchor":"batch_update_many_async/3"},{"id":"batch_update_many_async/4","deprecated":false,"title":"batch_update_many_async(current_user, assigns_sockets, many_opts, opts)","anchor":"batch_update_many_async/4"},{"id":"can?/4","deprecated":false,"title":"can?(subject, verbs, object, opts \\\\ [])","anchor":"can?/4"},{"id":"cast_public/2","deprecated":false,"title":"cast_public(socket, assigns_to_broadcast)","anchor":"cast_public/2"},{"id":"cast_self/2","deprecated":false,"title":"cast_self(socket, assigns_to_broadcast)","anchor":"cast_self/2"},{"id":"copy_go/1","deprecated":false,"title":"copy_go(arg1)","anchor":"copy_go/1"},{"id":"current_url/2","deprecated":false,"title":"current_url(socket_or_assigns, default \\\\ nil)","anchor":"current_url/2"},{"id":"current_user_or_remote_interaction/3","deprecated":false,"title":"current_user_or_remote_interaction(socket, verb, object)","anchor":"current_user_or_remote_interaction/3"},{"id":"go_query/1","deprecated":false,"title":"go_query(url)","anchor":"go_query/1"},{"id":"hero_icons_list/0","deprecated":false,"title":"hero_icons_list()","anchor":"hero_icons_list/0"},{"id":"live_aliases/5","deprecated":false,"title":"live_aliases(aliases, path, live_view, action \\\\ nil, opts \\\\ [])","anchor":"live_aliases/5"},{"id":"live_render_component/2","deprecated":false,"title":"live_render_component(conn, load_live_component)","anchor":"live_render_component/2"},{"id":"live_render_with_conn/2","deprecated":false,"title":"live_render_with_conn(conn, live_view)","anchor":"live_render_with_conn/2"},{"id":"live_upload_files/3","deprecated":false,"title":"live_upload_files(current_user, metadata, socket)","anchor":"live_upload_files/3"},{"id":"markdown/1","deprecated":false,"title":"markdown(content)","anchor":"markdown/1"},{"id":"maybe_assign/3","deprecated":false,"title":"maybe_assign(socket, key, value)","anchor":"maybe_assign/3"},{"id":"maybe_component/2","deprecated":false,"title":"maybe_component(module, context \\\\ [])","anchor":"maybe_component/2"},{"id":"maybe_consume_uploaded_entries/3","deprecated":false,"title":"maybe_consume_uploaded_entries(socket, key, fun)","anchor":"maybe_consume_uploaded_entries/3"},{"id":"maybe_consume_uploaded_entry/3","deprecated":false,"title":"maybe_consume_uploaded_entry(socket, key, fun)","anchor":"maybe_consume_uploaded_entry/3"},{"id":"maybe_cute_gif/0","deprecated":false,"title":"maybe_cute_gif()","anchor":"maybe_cute_gif/0"},{"id":"maybe_last_sentry_event_id/0","deprecated":false,"title":"maybe_last_sentry_event_id()","anchor":"maybe_last_sentry_event_id/0"},{"id":"maybe_push_event/3","deprecated":false,"title":"maybe_push_event(socket, name, data)","anchor":"maybe_push_event/3"},{"id":"maybe_send_update/4","deprecated":false,"title":"maybe_send_update(component, id, assigns, opts \\\\ [])","anchor":"maybe_send_update/4"},{"id":"maybe_stream_insert/4","deprecated":false,"title":"maybe_stream_insert(socket, name, items, opts)","anchor":"maybe_stream_insert/4"},{"id":"opts_for_update_many_async/2","deprecated":false,"title":"opts_for_update_many_async(arg, opts)","anchor":"opts_for_update_many_async/2"},{"id":"patch_to/3","deprecated":false,"title":"patch_to(socket_or_conn, to \\\\ nil, opts \\\\ [])","anchor":"patch_to/3"},{"id":"path_fallback/2","deprecated":false,"title":"path_fallback(socket_or_conn, opts)","anchor":"path_fallback/2"},{"id":"redirect_to/3","deprecated":false,"title":"redirect_to(socket_or_conn, to \\\\ nil, opts \\\\ [])","anchor":"redirect_to/3"},{"id":"redirect_to_previous_go/4","deprecated":false,"title":"redirect_to_previous_go(conn, params, default, current_path)","anchor":"redirect_to_previous_go/4"},{"id":"render_sface_or_native/0","deprecated":false,"title":"render_sface_or_native()","anchor":"render_sface_or_native/0"},{"id":"rich/2","deprecated":false,"title":"rich(content, opts \\\\ [])","anchor":"rich/2"},{"id":"self_subscribe/2","deprecated":false,"title":"self_subscribe(socket, assign_names)","anchor":"self_subscribe/2"},{"id":"send_self/2","deprecated":false,"title":"send_self(socket \\\\ nil, assigns)","anchor":"send_self/2"},{"id":"send_self_global/2","deprecated":false,"title":"send_self_global(socket \\\\ nil, assigns)","anchor":"send_self_global/2"},{"id":"set_go_after/2","deprecated":false,"title":"set_go_after(conn, path \\\\ nil)","anchor":"set_go_after/2"},{"id":"templated/2","deprecated":false,"title":"templated(content, data \\\\ %{})","anchor":"templated/2"},{"id":"templated_or_remote_markdown/2","deprecated":false,"title":"templated_or_remote_markdown(content, data \\\\ nil)","anchor":"templated_or_remote_markdown/2"},{"id":"the_object/1","deprecated":false,"title":"the_object(assigns)","anchor":"the_object/1"},{"id":"undead/3","deprecated":false,"title":"undead(socket, fun, return_key \\\\ :noreply)","anchor":"undead/3"},{"id":"undead_mount/2","deprecated":false,"title":"undead_mount(socket, fun)","anchor":"undead_mount/2"},{"id":"undead_on_mount/2","deprecated":false,"title":"undead_on_mount(socket, fun)","anchor":"undead_on_mount/2"},{"id":"undead_params/2","deprecated":false,"title":"undead_params(socket, fun)","anchor":"undead_params/2"},{"id":"update_many_async/2","deprecated":false,"title":"update_many_async(assigns_sockets, opts)","anchor":"update_many_async/2"},{"id":"update_many_async/3","deprecated":false,"title":"update_many_async(current_user, assigns_sockets, opts)","anchor":"update_many_async/3"}],"key":"functions"}],"nested_title":".UI.Common","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.ComponentID","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.ComponentID","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"new/3","deprecated":false,"title":"new(component_module, object_id, parent_id \\\\ nil)","anchor":"new/3"},{"id":"send_assigns/5","deprecated":false,"title":"send_assigns(component_module, id, set, socket, pid \\\\ nil)","anchor":"send_assigns/5"},{"id":"send_updates/4","deprecated":false,"title":"send_updates(component_module, object_id, assigns, pid \\\\ nil)","anchor":"send_updates/4"}],"key":"functions"}],"nested_title":".UI.Common.ComponentID","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.EndpointTemplate","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.EndpointTemplate","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"session_options/0","deprecated":false,"title":"session_options()","anchor":"session_options/0"}],"key":"functions"}],"nested_title":".UI.Common.EndpointTemplate","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.ErrorHelpers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.ErrorHelpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"error_tag/2","deprecated":false,"title":"error_tag(form, field)","anchor":"error_tag/2"},{"id":"translate_error/1","deprecated":false,"title":"translate_error(arg)","anchor":"translate_error/1"}],"key":"functions"}],"nested_title":".UI.Common.ErrorHelpers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.ErrorReportingPlug","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.ErrorReportingPlug","sections":[],"nested_title":".UI.Common.ErrorReportingPlug","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LiveHandlers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LiveHandlers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_attrs/2","deprecated":false,"title":"assign_attrs(socket, attrs)","anchor":"assign_attrs/2"},{"id":"handle_event/5","deprecated":false,"title":"handle_event(action, attrs, socket, source_module \\\\ nil, fun \\\\ nil)","anchor":"handle_event/5"},{"id":"handle_info/3","deprecated":false,"title":"handle_info(blob, socket, source_module \\\\ nil)","anchor":"handle_info/3"},{"id":"handle_params/5","deprecated":false,"title":"handle_params(params, uri, socket, source_module \\\\ nil, fun \\\\ nil)","anchor":"handle_params/5"},{"id":"handle_progress/5","deprecated":false,"title":"handle_progress(type, entry, socket, source_module, target_fn)","anchor":"handle_progress/5"},{"id":"maybe_from_json/1","deprecated":false,"title":"maybe_from_json(json)","anchor":"maybe_from_json/1"},{"id":"mod_delegate/4","deprecated":false,"title":"mod_delegate(mod, fun, args, socket)","anchor":"mod_delegate/4"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".UI.Common.LiveHandlers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_send_persistent_assigns/2","deprecated":false,"title":"maybe_send_persistent_assigns(assigns \\\\ nil, socket)","anchor":"maybe_send_persistent_assigns/2"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(modules, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.AllowTestSandbox","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.Csrf","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.Csrf","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(_, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.Csrf","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.Helpers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_default_params/3","deprecated":false,"title":"assign_default_params(params, uri, socket)","anchor":"assign_default_params/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(modules, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.Locale","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.Locale","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_put_locale/2","deprecated":false,"title":"assign_put_locale(locale, socket)","anchor":"assign_put_locale/2"},{"id":"assign_put_locale/3","deprecated":false,"title":"assign_put_locale(locale, current_user, socket)","anchor":"assign_put_locale/3"},{"id":"default/2","deprecated":false,"title":"default(_, _)","anchor":"default/2"},{"id":"mount/3","deprecated":false,"title":"mount(_, arg2, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.Locale","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.StaticChanged","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.StaticChanged","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(_, _, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.StaticChanged","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.MaybeStaticGeneratorPlug","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"maybe_add_index_html/2","deprecated":false,"title":"maybe_add_index_html(conn, _)","anchor":"maybe_add_index_html/2"}],"key":"functions"}],"nested_title":".UI.Common.MaybeStaticGeneratorPlug","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.MultiTenancyPlug","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.MultiTenancyPlug","sections":[],"nested_title":".UI.Common.MultiTenancyPlug","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.MultiselectLive.LiveHandler","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.MultiselectLive.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".UI.Common.MultiselectLive.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.NavModule","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.NavModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"declared_nav/0","deprecated":false,"title":"declared_nav()","anchor":"c:declared_nav/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"nav/0","deprecated":false,"title":"nav()","anchor":"nav/0"},{"id":"nav/1","deprecated":false,"title":"nav(app)","anchor":"nav/1"},{"id":"nav_function_error/2","deprecated":false,"title":"nav_function_error(error, args)","anchor":"nav_function_error/2"}],"key":"functions"}],"nested_title":".UI.Common.NavModule","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Notifications","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Notifications","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_notification/2","deprecated":false,"title":"assign_notification(attrs, socket)","anchor":"assign_notification/2"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(attrs, socket)","anchor":"handle_info/2"},{"id":"notify_feeds/5","deprecated":false,"title":"notify_feeds(feed_ids, title, message, url \\\\ nil, icon \\\\ nil)","anchor":"notify_feeds/5"},{"id":"notify_me/4","deprecated":false,"title":"notify_me(title, message, icon, socket \\\\ nil)","anchor":"notify_me/4"},{"id":"receive_flash/3","deprecated":false,"title":"receive_flash(attrs, pid \\\\ self(), context \\\\ nil)","anchor":"receive_flash/3"},{"id":"receive_notification/2","deprecated":false,"title":"receive_notification(attrs, socket \\\\ nil)","anchor":"receive_notification/2"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".UI.Common.Notifications","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.PlugProtect","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.PlugProtect","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"allow_action/3","deprecated":false,"title":"allow_action(conn, data, opts)","anchor":"allow_action/3"},{"id":"block_action/3","deprecated":false,"title":"block_action(conn, data, opts)","anchor":"block_action/3"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Common.PlugProtect","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Plugs.ActivityPub","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Plugs.ActivityPub","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"maybe_redirect/1","deprecated":false,"title":"maybe_redirect(conn)","anchor":"maybe_redirect/1"},{"id":"with_headers/3","deprecated":false,"title":"with_headers(conn, arg2, opts)","anchor":"with_headers/3"}],"key":"functions"}],"nested_title":".UI.Common.Plugs.ActivityPub","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Presence","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Presence","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"fetch/2","deprecated":false,"title":"fetch(topic, presences)","anchor":"fetch/2"},{"id":"fetchers_pids/0","deprecated":false,"title":"fetchers_pids()","anchor":"fetchers_pids/0"},{"id":"get_by_key/2","deprecated":false,"title":"get_by_key(topic, key)","anchor":"get_by_key/2"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(broadcast, socket)","anchor":"handle_info/2"},{"id":"list/0","deprecated":false,"title":"list()","anchor":"list/0"},{"id":"list/1","deprecated":false,"title":"list(topic)","anchor":"list/1"},{"id":"list_and_maybe_subscribe_to_presence/1","deprecated":false,"title":"list_and_maybe_subscribe_to_presence(socket)","anchor":"list_and_maybe_subscribe_to_presence/1"},{"id":"present!/2","deprecated":false,"title":"present!(socket, meta \\\\ %{})","anchor":"present!/2"},{"id":"present?/2","deprecated":false,"title":"present?(user_id \\\\ nil, socket)","anchor":"present?/2"},{"id":"present_meta/2","deprecated":false,"title":"present_meta(user \\\\ nil, socket)","anchor":"present_meta/2"},{"id":"track/3","deprecated":false,"title":"track(socket, key, meta)","anchor":"track/3"},{"id":"track/4","deprecated":false,"title":"track(pid, topic, key, meta)","anchor":"track/4"},{"id":"untrack/2","deprecated":false,"title":"untrack(socket, key)","anchor":"untrack/2"},{"id":"untrack/3","deprecated":false,"title":"untrack(pid, topic, key)","anchor":"untrack/3"},{"id":"update/3","deprecated":false,"title":"update(socket, key, meta)","anchor":"update/3"},{"id":"update/4","deprecated":false,"title":"update(pid, topic, key, meta)","anchor":"update/4"}],"key":"functions"}],"nested_title":".UI.Common.Presence","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.PreviewContentLive","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.PreviewContentLive","sections":[{"id":"Properties","anchor":"module-properties"},{"id":"Slots","anchor":"module-slots"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_handle_event/3","deprecated":false,"title":"do_handle_event(binary, _, socket)","anchor":"do_handle_event/3"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(action, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(info, socket)","anchor":"handle_info/2"},{"id":"mount/1","deprecated":false,"title":"mount(socket)","anchor":"mount/1"},{"id":"render/1","deprecated":false,"title":"render(assigns)","anchor":"render/1"},{"id":"render_native/1","deprecated":false,"title":"render_native(assigns)","anchor":"render_native/1"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"sigil_SWIFTUI/2","deprecated":false,"title":"sigil_SWIFTUI(arg, modifiers)","anchor":"sigil_SWIFTUI/2"},{"id":"update/2","deprecated":false,"title":"update(assigns, socket)","anchor":"update/2"}],"key":"functions"}],"nested_title":".UI.Common.PreviewContentLive","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.ReusableModalLive","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.ReusableModalLive","sections":[{"id":"Properties","anchor":"module-properties"},{"id":"Slots","anchor":"module-slots"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"default_assigns/0","deprecated":false,"title":"default_assigns()","anchor":"default_assigns/0"},{"id":"do_handle_event/3","deprecated":false,"title":"do_handle_event(binary, _, socket)","anchor":"do_handle_event/3"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(action, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(info, socket)","anchor":"handle_info/2"},{"id":"mount/1","deprecated":false,"title":"mount(socket)","anchor":"mount/1"},{"id":"render/1","deprecated":false,"title":"render(assigns)","anchor":"render/1"},{"id":"render_native/1","deprecated":false,"title":"render_native(assigns)","anchor":"render_native/1"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"sigil_SWIFTUI/2","deprecated":false,"title":"sigil_SWIFTUI(arg, modifiers)","anchor":"sigil_SWIFTUI/2"},{"id":"update/2","deprecated":false,"title":"update(assigns, socket)","anchor":"update/2"}],"key":"functions"}],"nested_title":".UI.Common.ReusableModalLive","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Routes","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"gon_js_config/0","deprecated":false,"title":"gon_js_config()","anchor":"gon_js_config/0"}],"key":"functions"}],"nested_title":".UI.Common.Routes","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.SEO","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.SEO","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"open_graph_config/1","deprecated":false,"title":"open_graph_config(conn \\\\ nil)","anchor":"open_graph_config/1"},{"id":"site_config/1","deprecated":false,"title":"site_config(conn \\\\ nil)","anchor":"site_config/1"},{"id":"twitter_config/1","deprecated":false,"title":"twitter_config(conn \\\\ nil)","anchor":"twitter_config/1"}],"key":"functions"}],"nested_title":".UI.Common.SEO","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.SettingsModule","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.SettingsModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"declared_component/0","deprecated":false,"title":"declared_component()","anchor":"c:declared_component/0"},{"id":"declared_nav/0","deprecated":false,"title":"declared_nav()","anchor":"c:declared_nav/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"component_function_error/2","deprecated":false,"title":"component_function_error(error, args)","anchor":"component_function_error/2"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"components/0"},{"id":"components/1","deprecated":false,"title":"components(extension)","anchor":"components/1"},{"id":"extension_has_components?/2","deprecated":false,"title":"extension_has_components?(extension, modules \\\\ nil)","anchor":"extension_has_components?/2"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"modules_component/1","deprecated":false,"title":"modules_component(modules)","anchor":"modules_component/1"},{"id":"modules_nav/1","deprecated":false,"title":"modules_nav(modules)","anchor":"modules_nav/1"},{"id":"nav/0","deprecated":false,"title":"nav()","anchor":"nav/0"},{"id":"nav/1","deprecated":false,"title":"nav(app)","anchor":"nav/1"},{"id":"nav_function_error/2","deprecated":false,"title":"nav_function_error(error, args)","anchor":"nav_function_error/2"}],"key":"functions"}],"nested_title":".UI.Common.SettingsModule","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.SmartInput.LiveHandler","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.SmartInput.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"active_smart_input_component/2","deprecated":false,"title":"active_smart_input_component(smart_input_component, create_object_type)","anchor":"active_smart_input_component/2"},{"id":"active_smart_input_components/2","deprecated":false,"title":"active_smart_input_components(smart_input_component, create_object_type)","anchor":"active_smart_input_components/2"},{"id":"activity_type_or_reply/1","deprecated":false,"title":"activity_type_or_reply(assigns)","anchor":"activity_type_or_reply/1"},{"id":"all_smart_input_components/0","deprecated":false,"title":"all_smart_input_components()","anchor":"all_smart_input_components/0"},{"id":"assign_open/2","deprecated":false,"title":"assign_open(context, assigns)","anchor":"assign_open/2"},{"id":"close_smart_input/1","deprecated":false,"title":"close_smart_input(js \\\\ %JS{})","anchor":"close_smart_input/1"},{"id":"confirm_close_smart_input/2","deprecated":false,"title":"confirm_close_smart_input(js \\\\ %JS{}, reusable_modal_id)","anchor":"confirm_close_smart_input/2"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(action, params, socket)","anchor":"handle_event/3"},{"id":"max_length/0","deprecated":false,"title":"max_length()","anchor":"max_length/0"},{"id":"maximize/1","deprecated":false,"title":"maximize(js \\\\ %JS{})","anchor":"maximize/1"},{"id":"maybe_from_json/1","deprecated":false,"title":"maybe_from_json(json)","anchor":"maybe_from_json/1"},{"id":"maybe_from_json_string/1","deprecated":false,"title":"maybe_from_json_string(json)","anchor":"maybe_from_json_string/1"},{"id":"minimize/1","deprecated":false,"title":"minimize(js \\\\ %JS{})","anchor":"minimize/1"},{"id":"open/2","deprecated":false,"title":"open(js \\\\ %JS{}, opts \\\\ nil)","anchor":"open/2"},{"id":"open_type/4","deprecated":false,"title":"open_type(js \\\\ %JS{}, component, create_object_type, opts \\\\ nil)","anchor":"open_type/4"},{"id":"open_with_text_suggestion/3","deprecated":false,"title":"open_with_text_suggestion(text, set_assigns, socket_or_context)","anchor":"open_with_text_suggestion/3"},{"id":"replace_input_next_time/1","deprecated":false,"title":"replace_input_next_time(socket_or_context)","anchor":"replace_input_next_time/1"},{"id":"reply_to_param/1","deprecated":false,"title":"reply_to_param(arg1)","anchor":"reply_to_param/1"},{"id":"reset_input/1","deprecated":false,"title":"reset_input(socket)","anchor":"reset_input/1"},{"id":"set/2","deprecated":false,"title":"set(context, assigns)","anchor":"set/2"},{"id":"set_smart_input_text/2","deprecated":false,"title":"set_smart_input_text(socket_or_context, text \\\\ \"\\n\")","anchor":"set_smart_input_text/2"},{"id":"show_main/2","deprecated":false,"title":"show_main(js \\\\ %JS{}, opts \\\\ nil)","anchor":"show_main/2"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"smart_input_name/1","deprecated":false,"title":"smart_input_name(component)","anchor":"smart_input_name/1"},{"id":"switch_smart_input_type/2","deprecated":false,"title":"switch_smart_input_type(type, js \\\\ %JS{})","anchor":"switch_smart_input_type/2"},{"id":"toggle_expanded/4","deprecated":false,"title":"toggle_expanded(js \\\\ %JS{}, target, btn, class)","anchor":"toggle_expanded/4"}],"key":"functions"}],"nested_title":".UI.Common.SmartInput.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.SmartInputModule","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.SmartInputModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"smart_input_module/0","deprecated":false,"title":"smart_input_module()","anchor":"c:smart_input_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"smart_input_modules_types/0","deprecated":false,"title":"smart_input_modules_types()","anchor":"smart_input_modules_types/0"}],"key":"functions"}],"nested_title":".UI.Common.SmartInputModule","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.StaticGenerator","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.StaticGenerator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_path/0","deprecated":false,"title":"base_path()","anchor":"base_path/0"},{"id":"generate/2","deprecated":false,"title":"generate(urls, opts \\\\ [])","anchor":"generate/2"}],"key":"functions"}],"nested_title":".UI.Common.StaticGenerator","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.StaticGeneratorPlug","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.StaticGeneratorPlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_index_html/2","deprecated":false,"title":"add_index_html(conn, _)","anchor":"add_index_html/2"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Common.StaticGeneratorPlug","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Testing.Helpers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Testing.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assert_field_error/3","deprecated":false,"title":"assert_field_error(doc, name, error)","anchor":"assert_field_error/3"},{"id":"assert_field_good/2","deprecated":false,"title":"assert_field_good(doc, name)","anchor":"assert_field_good/2"},{"id":"assert_flash/3","deprecated":false,"title":"assert_flash(view, kind, message)","anchor":"assert_flash/3"},{"id":"assert_flash_kind/2","deprecated":false,"title":"assert_flash_kind(flash, atom)","anchor":"assert_flash_kind/2"},{"id":"assert_flash_message/2","deprecated":false,"title":"assert_flash_message(flash, r)","anchor":"assert_flash_message/2"},{"id":"conn/0","deprecated":false,"title":"conn()","anchor":"conn/0"},{"id":"conn/1","deprecated":false,"title":"conn(conn)","anchor":"conn/1"},{"id":"conn/2","deprecated":false,"title":"conn(conn, filters)","anchor":"conn/2"},{"id":"fake_account!/2","deprecated":false,"title":"fake_account!(attrs \\\\ %{}, opts \\\\ [])","anchor":"fake_account!/2"},{"id":"fake_admin!/3","deprecated":false,"title":"fake_admin!(account \\\\ %{}, attrs \\\\ %{}, opts \\\\ [])","anchor":"fake_admin!/3"},{"id":"fake_user!/3","deprecated":false,"title":"fake_user!(account \\\\ %{}, attrs \\\\ %{}, opts \\\\ [])","anchor":"fake_user!/3"},{"id":"fake_user_and_conn!/1","deprecated":false,"title":"fake_user_and_conn!(account \\\\ fake_account!())","anchor":"fake_user_and_conn!/1"},{"id":"fancy_fake_user!/2","deprecated":false,"title":"fancy_fake_user!(name, opts \\\\ [])","anchor":"fancy_fake_user!/2"},{"id":"fancy_fake_user_on_test_instance/1","deprecated":false,"title":"fancy_fake_user_on_test_instance(opts \\\\ [])","anchor":"fancy_fake_user_on_test_instance/1"},{"id":"find_flash/1","deprecated":false,"title":"find_flash(view_or_doc)","anchor":"find_flash/1"},{"id":"find_form_error/2","deprecated":false,"title":"find_form_error(doc, name)","anchor":"find_form_error/2"},{"id":"floki_attr/2","deprecated":false,"title":"floki_attr(elem, attr)","anchor":"floki_attr/2"},{"id":"floki_click/3","deprecated":false,"title":"floki_click(conn_or_view \\\\ conn(), path_or_value \\\\ %{}, value \\\\ %{})","anchor":"floki_click/3"},{"id":"floki_live/2","deprecated":false,"title":"floki_live(conn \\\\ conn(), path \\\\ nil)","anchor":"floki_live/2"},{"id":"floki_redirect/2","deprecated":false,"title":"floki_redirect(conn \\\\ conn(), path \\\\ nil)","anchor":"floki_redirect/2"},{"id":"floki_response/2","deprecated":false,"title":"floki_response(conn, code \\\\ 200)","anchor":"floki_response/2"},{"id":"floki_submit/4","deprecated":false,"title":"floki_submit(conn_or_view \\\\ conn(), path_or_event, event_or_value \\\\ %{}, value \\\\ %{})","anchor":"floki_submit/4"},{"id":"live_pubsub_wait/1","deprecated":false,"title":"live_pubsub_wait(live_view)","anchor":"live_pubsub_wait/1"},{"id":"live_sockets_disconnect/1","deprecated":false,"title":"live_sockets_disconnect(context)","anchor":"live_sockets_disconnect/1"},{"id":"live_view_stop/1","deprecated":false,"title":"live_view_stop(view)","anchor":"live_view_stop/1"},{"id":"render_stateful/3","deprecated":false,"title":"render_stateful(component, assigns \\\\ %{}, context \\\\ [])","anchor":"render_stateful/3"},{"id":"render_stateless/3","deprecated":false,"title":"render_stateless(component, assigns \\\\ [], context \\\\ [])","anchor":"render_stateless/3"},{"id":"session_conn/1","deprecated":false,"title":"session_conn(conn \\\\ build_conn())","anchor":"session_conn/1"}],"key":"functions"}],"nested_title":".UI.Common.Testing.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.WidgetModule","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.WidgetModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"declared_widget/0","deprecated":false,"title":"declared_widget()","anchor":"c:declared_widget/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"widget/1","deprecated":false,"title":"widget(module)","anchor":"widget/1"},{"id":"widget_function_error/2","deprecated":false,"title":"widget_function_error(error, args)","anchor":"widget_function_error/2"},{"id":"widgets/0","deprecated":false,"title":"widgets()","anchor":"widgets/0"},{"id":"widgets/1","deprecated":false,"title":"widgets(extension)","anchor":"widgets/1"}],"key":"functions"}],"nested_title":".UI.Common.WidgetModule","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Integration","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".UI.Me.Integration","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.AccountRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.AccountRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params \\\\ nil, session \\\\ nil, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.AccountRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.AdminRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.AdminRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.AdminRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params \\\\ nil, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.LoadCurrentAccount","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(_, _, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.LoadCurrentAccountUsers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params \\\\ nil, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.LoadCurrentUser","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(_, _, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.LoadCurrentUserCircles","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.UserRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.UserRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params \\\\ nil, session \\\\ nil, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.UserRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.AccountRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.AccountRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.AccountRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.AdminRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.AdminRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.AdminRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.GuestOnly","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.GuestOnly","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.GuestOnly","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.LoadCurrentAccount","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccount","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.LoadCurrentAccount","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.LoadCurrentAccountUsers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.LoadCurrentUser","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.LoadCurrentUser","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.LoadCurrentUser","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.UserRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.UserRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.UserRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Routes","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Routes","sections":[],"nested_title":".UI.Me.Routes","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.RuntimeConfig","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".UI.Me.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.UI.Social.Benchmark","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Social.Benchmark","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"feed/0","deprecated":false,"title":"feed()","anchor":"feed/0"},{"id":"feed_page/0","deprecated":false,"title":"feed_page()","anchor":"feed_page/0"},{"id":"feed_queries_without_benchee/0","deprecated":false,"title":"feed_queries_without_benchee()","anchor":"feed_queries_without_benchee/0"},{"id":"feed_query_methods/0","deprecated":false,"title":"feed_query_methods()","anchor":"feed_query_methods/0"},{"id":"feed_render_page/0","deprecated":false,"title":"feed_render_page()","anchor":"feed_render_page/0"},{"id":"live_feed/1","deprecated":false,"title":"live_feed(opts \\\\ [])","anchor":"live_feed/1"},{"id":"render_feed/2","deprecated":false,"title":"render_feed(feed, opts \\\\ [])","anchor":"render_feed/2"}],"key":"functions"}],"nested_title":".UI.Social.Benchmark","nested_context":"Bonfire"},{"id":"Bonfire.UI.Social.Integration","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Social.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".UI.Social.Integration","nested_context":"Bonfire"},{"id":"Bonfire.UI.Social.Routes","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Social.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".UI.Social.Routes","nested_context":"Bonfire"},{"id":"Bonfire.UI.Social.RuntimeConfig","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Social.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".UI.Social.RuntimeConfig","nested_context":"Bonfire"},{"id":"Needle.Changesets","deprecated":false,"group":"Bonfire utilities","title":"Needle.Changesets","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"build_assoc/3","deprecated":false,"title":"build_assoc(changeset, assoc_key, rel)","anchor":"build_assoc/3"},{"id":"built?/1","deprecated":false,"title":"built?(arg1)","anchor":"built?/1"},{"id":"cast/3","deprecated":false,"title":"cast(changeset, params, cols)","anchor":"cast/3"},{"id":"cast_assoc/3","deprecated":false,"title":"cast_assoc(changeset, assoc_key, opts \\\\ [])","anchor":"cast_assoc/3"},{"id":"cast_belongs_to/4","deprecated":false,"title":"cast_belongs_to(changeset, assoc_key, assoc, opts)","anchor":"cast_belongs_to/4"},{"id":"cast_has_many/4","deprecated":false,"title":"cast_has_many(changeset, assoc_key, assoc, opts)","anchor":"cast_has_many/4"},{"id":"cast_has_one/4","deprecated":false,"title":"cast_has_one(changeset, assoc_key, assoc, opts)","anchor":"cast_has_one/4"},{"id":"config_for/3","deprecated":false,"title":"config_for(module, key, default \\\\ [])","anchor":"config_for/3"},{"id":"deleted?/1","deprecated":false,"title":"deleted?(arg1)","anchor":"deleted?/1"},{"id":"get_field/2","deprecated":false,"title":"get_field(cs, key)","anchor":"get_field/2"},{"id":"insert_verb/1","deprecated":false,"title":"insert_verb(thing)","anchor":"insert_verb/1"},{"id":"loaded?/1","deprecated":false,"title":"loaded?(arg1)","anchor":"loaded?/1"},{"id":"merge_child_errors/1","deprecated":false,"title":"merge_child_errors(cs)","anchor":"merge_child_errors/1"},{"id":"put_assoc/3","deprecated":false,"title":"put_assoc(changeset, assoc_key, rels)","anchor":"put_assoc/3"},{"id":"put_assoc!/3","deprecated":false,"title":"put_assoc!(changeset, assoc_key, rels)","anchor":"put_assoc!/3"},{"id":"put_id_on_mixins/3","deprecated":false,"title":"put_id_on_mixins(attrs, mixin_names, pointable)","anchor":"put_id_on_mixins/3"},{"id":"put_new_id/1","deprecated":false,"title":"put_new_id(changeset)","anchor":"put_new_id/1"},{"id":"state/1","deprecated":false,"title":"state(thing)","anchor":"state/1"},{"id":"update_data/2","deprecated":false,"title":"update_data(changeset, fun)","anchor":"update_data/2"},{"id":"valid?/1","deprecated":false,"title":"valid?(cs)","anchor":"valid?/1"}],"key":"functions"}]},{"id":"Needle.Form","deprecated":false,"group":"Bonfire utilities","title":"Needle.Form","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"form_schema/1","deprecated":false,"title":"form_schema(list)","anchor":"form_schema/1"},{"id":"using/2","deprecated":false,"title":"using(module, options)","anchor":"using/2"}],"key":"functions"}]},{"id":"Needle.Migration","deprecated":false,"group":"Bonfire utilities","title":"Needle.Migration","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"pointer_type/0","deprecated":false,"title":"pointer_type()","anchor":"t:pointer_type/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"add_is_not_deleted/1","deprecated":false,"title":"add_is_not_deleted(table)","anchor":"add_is_not_deleted/1"},{"id":"create_mixin_table/3","deprecated":false,"title":"create_mixin_table(name, opts \\\\ [], body)","anchor":"create_mixin_table/3"},{"id":"create_pointable_table/2","deprecated":false,"title":"create_pointable_table(a, b)","anchor":"create_pointable_table/2"},{"id":"create_pointable_table/3","deprecated":false,"title":"create_pointable_table(a, b, c)","anchor":"create_pointable_table/3"},{"id":"create_pointable_table/4","deprecated":false,"title":"create_pointable_table(a, b, c, d)","anchor":"create_pointable_table/4"},{"id":"create_random_table/3","deprecated":false,"title":"create_random_table(name, opts \\\\ [], body)","anchor":"create_random_table/3"},{"id":"create_virtual/1","deprecated":false,"title":"create_virtual(schema)","anchor":"create_virtual/1"},{"id":"create_virtual/2","deprecated":false,"title":"create_virtual(source, id)","anchor":"create_virtual/2"},{"id":"create_virtual_trigger_function/0","deprecated":false,"title":"create_virtual_trigger_function()","anchor":"create_virtual_trigger_function/0"},{"id":"drop_mixin_table/1","deprecated":false,"title":"drop_mixin_table(name)","anchor":"drop_mixin_table/1"},{"id":"drop_pointable_table/1","deprecated":false,"title":"drop_pointable_table(schema)","anchor":"drop_pointable_table/1"},{"id":"drop_pointable_table/2","deprecated":false,"title":"drop_pointable_table(name, id)","anchor":"drop_pointable_table/2"},{"id":"drop_random_table/1","deprecated":false,"title":"drop_random_table(name)","anchor":"drop_random_table/1"},{"id":"drop_table/1","deprecated":false,"title":"drop_table(name)","anchor":"drop_table/1"},{"id":"drop_virtual/1","deprecated":false,"title":"drop_virtual(schema)","anchor":"drop_virtual/1"},{"id":"drop_virtual/2","deprecated":false,"title":"drop_virtual(name, id)","anchor":"drop_virtual/2"},{"id":"init_pointers/0","deprecated":false,"title":"init_pointers()","anchor":"init_pointers/0"},{"id":"init_pointers/1","deprecated":false,"title":"init_pointers(atom)","anchor":"init_pointers/1"},{"id":"init_pointers_ulid_extra/0","deprecated":false,"title":"init_pointers_ulid_extra()","anchor":"init_pointers_ulid_extra/0"},{"id":"migrate_virtual/1","deprecated":false,"title":"migrate_virtual(schema)","anchor":"migrate_virtual/1"},{"id":"migrate_virtual/2","deprecated":false,"title":"migrate_virtual(name, schema)","anchor":"migrate_virtual/2"},{"id":"migrate_virtual/3","deprecated":false,"title":"migrate_virtual(atom, name, id)","anchor":"migrate_virtual/3"},{"id":"pointer/2","deprecated":false,"title":"pointer(table \\\\ Pointer, type)","anchor":"pointer/2"},{"id":"strong_pointer/1","deprecated":false,"title":"strong_pointer(table \\\\ Pointer)","anchor":"strong_pointer/1"},{"id":"unbreakable_pointer/1","deprecated":false,"title":"unbreakable_pointer(table \\\\ Pointer)","anchor":"unbreakable_pointer/1"},{"id":"weak_pointer/1","deprecated":false,"title":"weak_pointer(table \\\\ Pointer)","anchor":"weak_pointer/1"}],"key":"functions"}]},{"id":"Needle.Mixin","deprecated":false,"group":"Bonfire utilities","title":"Needle.Mixin","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mixin_schema/1","deprecated":false,"title":"mixin_schema(list)","anchor":"mixin_schema/1"},{"id":"using/2","deprecated":false,"title":"using(module, options)","anchor":"using/2"}],"key":"functions"}]},{"id":"Needle.NotFound","deprecated":false,"group":"Bonfire utilities","title":"Needle.NotFound","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"new/1","deprecated":false,"title":"new(name \\\\ \"Pointer\")","anchor":"new/1"}],"key":"functions"}]},{"id":"Needle.Pointable","deprecated":false,"group":"Bonfire utilities","title":"Needle.Pointable","sections":[{"id":"Sample Usage","anchor":"module-sample-usage"},{"id":"Overriding with configuration","anchor":"module-overriding-with-configuration"},{"id":"Introspection","anchor":"module-introspection"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"pointable_schema/1","deprecated":false,"title":"pointable_schema(body)","anchor":"pointable_schema/1"}],"key":"functions"}]},{"id":"Needle.Pointer","deprecated":false,"group":"Bonfire utilities","title":"Needle.Pointer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(id \\\\ Needle.ULID.generate(), table)","anchor":"create/2"}],"key":"functions"}]},{"id":"Needle.Pointers","deprecated":false,"group":"Bonfire utilities","title":"Needle.Pointers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assert_points_to!/2","deprecated":false,"title":"assert_points_to!(pointer, term)","anchor":"assert_points_to!/2"},{"id":"cast!/1","deprecated":false,"title":"cast!(p)","anchor":"cast!/1"},{"id":"get_table_id!/1","deprecated":false,"title":"get_table_id!(schema)","anchor":"get_table_id!/1"},{"id":"plan/1","deprecated":false,"title":"plan(pointers)","anchor":"plan/1"},{"id":"query_base/1","deprecated":false,"title":"query_base(type \\\\ nil)","anchor":"query_base/1"},{"id":"schema/1","deprecated":false,"title":"schema(pointer)","anchor":"schema/1"},{"id":"table/1","deprecated":false,"title":"table(pointer)","anchor":"table/1"}],"key":"functions"}]},{"id":"Needle.Random","deprecated":false,"group":"Bonfire utilities","title":"Needle.Random","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"random_schema/1","deprecated":false,"title":"random_schema(list)","anchor":"random_schema/1"},{"id":"using/2","deprecated":false,"title":"using(module, options)","anchor":"using/2"}],"key":"functions"}]},{"id":"Needle.Table","deprecated":false,"group":"Bonfire utilities","title":"Needle.Table","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}]},{"id":"Needle.Tables","deprecated":false,"group":"Bonfire utilities","title":"Needle.Tables","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"query/0","deprecated":false,"title":"query()","anchor":"t:query/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"data/0","deprecated":false,"title":"data()","anchor":"data/0"},{"id":"id/1","deprecated":false,"title":"id(query)","anchor":"id/1"},{"id":"id!/1","deprecated":false,"title":"id!(query)","anchor":"id!/1"},{"id":"ids!/1","deprecated":false,"title":"ids!(ids)","anchor":"ids!/1"},{"id":"mixin_modules/0","deprecated":false,"title":"mixin_modules()","anchor":"mixin_modules/0"},{"id":"schema/1","deprecated":false,"title":"schema(query)","anchor":"schema/1"},{"id":"schema!/1","deprecated":false,"title":"schema!(query)","anchor":"schema!/1"},{"id":"schema?/1","deprecated":false,"title":"schema?(module)","anchor":"schema?/1"},{"id":"schema_modules/0","deprecated":false,"title":"schema_modules()","anchor":"schema_modules/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"},{"id":"table/1","deprecated":false,"title":"table(query)","anchor":"table/1"},{"id":"table!/1","deprecated":false,"title":"table!(query)","anchor":"table!/1"}],"key":"functions"}]},{"id":"Needle.ULID","deprecated":false,"group":"Bonfire utilities","title":"Needle.ULID","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bingenerate/1","deprecated":false,"title":"bingenerate(timestamp \\\\ System.system_time(:millisecond))","anchor":"bingenerate/1"},{"id":"bintimestamp/1","deprecated":false,"title":"bintimestamp(arg)","anchor":"bintimestamp/1"},{"id":"cast/1","deprecated":false,"title":"cast(value)","anchor":"cast/1"},{"id":"cast!/1","deprecated":false,"title":"cast!(value)","anchor":"cast!/1"},{"id":"dump/1","deprecated":false,"title":"dump(encoded)","anchor":"dump/1"},{"id":"dump!/1","deprecated":false,"title":"dump!(encoded)","anchor":"dump!/1"},{"id":"embed_as/1","deprecated":false,"title":"embed_as(_)","anchor":"embed_as/1"},{"id":"encoded_randomness/1","deprecated":false,"title":"encoded_randomness(arg)","anchor":"encoded_randomness/1"},{"id":"encoded_timestamp/1","deprecated":false,"title":"encoded_timestamp(arg)","anchor":"encoded_timestamp/1"},{"id":"equal?/2","deprecated":false,"title":"equal?(term1, term2)","anchor":"equal?/2"},{"id":"generate/1","deprecated":false,"title":"generate(timestamp \\\\ System.system_time(:millisecond))","anchor":"generate/1"},{"id":"load/1","deprecated":false,"title":"load(bytes)","anchor":"load/1"},{"id":"synthesise!/1","deprecated":false,"title":"synthesise!(x)","anchor":"synthesise!/1"},{"id":"timestamp/1","deprecated":false,"title":"timestamp(encoded)","anchor":"timestamp/1"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"type/0"}],"key":"functions"}]},{"id":"Needle.ULID.Migration","deprecated":false,"group":"Bonfire utilities","title":"Needle.ULID.Migration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"init_pointers_ulid_extra/0","deprecated":false,"title":"init_pointers_ulid_extra()","anchor":"init_pointers_ulid_extra/0"},{"id":"init_pointers_ulid_extra/1","deprecated":false,"title":"init_pointers_ulid_extra(atom)","anchor":"init_pointers_ulid_extra/1"}],"key":"functions"}]},{"id":"Needle.Unpointable","deprecated":false,"group":"Bonfire utilities","title":"Needle.Unpointable","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"unpointable_schema/1","deprecated":false,"title":"unpointable_schema(list)","anchor":"unpointable_schema/1"},{"id":"using/2","deprecated":false,"title":"using(module, options)","anchor":"using/2"}],"key":"functions"}]},{"id":"Needle.Virtual","deprecated":false,"group":"Bonfire utilities","title":"Needle.Virtual","sections":[{"id":"Sample Usage","anchor":"module-sample-usage"},{"id":"Overriding with configuration","anchor":"module-overriding-with-configuration"},{"id":"Introspection","anchor":"module-introspection"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"virtual_schema/1","deprecated":false,"title":"virtual_schema(body)","anchor":"virtual_schema/1"}],"key":"functions"}]},{"id":"Bonfire.Boundaries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acls_from_preset_boundary_names/1","deprecated":false,"title":"acls_from_preset_boundary_names(presets)","anchor":"acls_from_preset_boundary_names/1"},{"id":"boundaries_normalise/1","deprecated":false,"title":"boundaries_normalise(text)","anchor":"boundaries_normalise/1"},{"id":"boundaries_or_default/2","deprecated":false,"title":"boundaries_or_default(to_boundaries, context \\\\ [])","anchor":"boundaries_or_default/2"},{"id":"can?/4","deprecated":false,"title":"can?(circle_name, verbs, object, opts \\\\ [])","anchor":"can?/4"},{"id":"default_boundaries/1","deprecated":false,"title":"default_boundaries(context \\\\ [])","anchor":"default_boundaries/1"},{"id":"find_caretaker_stereotype/3","deprecated":false,"title":"find_caretaker_stereotype(caretaker, stereotype, from)","anchor":"find_caretaker_stereotype/3"},{"id":"find_caretaker_stereotypes/3","deprecated":false,"title":"find_caretaker_stereotypes(caretaker, stereotypes, from \\\\ Pointer)","anchor":"find_caretaker_stereotypes/3"},{"id":"find_caretaker_stereotypes_q/3","deprecated":false,"title":"find_caretaker_stereotypes_q(caretaker, stereotypes, from)","anchor":"find_caretaker_stereotypes_q/3"},{"id":"list_grants_on/1","deprecated":false,"title":"list_grants_on(things)","anchor":"list_grants_on/1"},{"id":"list_grants_on/2","deprecated":false,"title":"list_grants_on(things, verbs)","anchor":"list_grants_on/2"},{"id":"list_object_acls/2","deprecated":false,"title":"list_object_acls(object, opts \\\\ [])","anchor":"list_object_acls/2"},{"id":"list_object_boundaries/2","deprecated":false,"title":"list_object_boundaries(object, opts \\\\ [])","anchor":"list_object_boundaries/2"},{"id":"load_pointer/2","deprecated":false,"title":"load_pointer(item, opts)","anchor":"load_pointer/2"},{"id":"load_pointers/2","deprecated":false,"title":"load_pointers(items, opts)","anchor":"load_pointers/2"},{"id":"pointer_permitted?/2","deprecated":false,"title":"pointer_permitted?(item, opts)","anchor":"pointer_permitted?/2"},{"id":"preset_boundary_from_acl/2","deprecated":false,"title":"preset_boundary_from_acl(acl, object_type \\\\ nil)","anchor":"preset_boundary_from_acl/2"},{"id":"preset_boundary_tuple_from_acl/2","deprecated":false,"title":"preset_boundary_tuple_from_acl(acl, object_type \\\\ nil)","anchor":"preset_boundary_tuple_from_acl/2"},{"id":"preset_name/2","deprecated":false,"title":"preset_name(boundaries, include_remote? \\\\ false)","anchor":"preset_name/2"},{"id":"replace_boundaries/4","deprecated":false,"title":"replace_boundaries(creator, object, previous_preset, opts)","anchor":"replace_boundaries/4"},{"id":"set_boundaries/3","deprecated":false,"title":"set_boundaries(creator, object, opts)","anchor":"set_boundaries/3"},{"id":"take_care_of!/2","deprecated":false,"title":"take_care_of!(things, user)","anchor":"take_care_of!/2"},{"id":"user_default_boundaries/0","deprecated":false,"title":"user_default_boundaries()","anchor":"user_default_boundaries/0"},{"id":"users_grants_on/2","deprecated":false,"title":"users_grants_on(users, things)","anchor":"users_grants_on/2"},{"id":"users_grants_on/3","deprecated":false,"title":"users_grants_on(users, things, verbs)","anchor":"users_grants_on/3"}],"key":"functions"}],"nested_title":".Boundaries","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Acls","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Acls","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl_grants_to_tuples/2","deprecated":false,"title":"acl_grants_to_tuples(creator, acls)","anchor":"acl_grants_to_tuples/2"},{"id":"acl_id/1","deprecated":false,"title":"acl_id(obj)","anchor":"acl_id/1"},{"id":"acls/0","deprecated":false,"title":"acls()","anchor":"acls/0"},{"id":"acls_from_preset/3","deprecated":false,"title":"acls_from_preset(creator, to_boundaries, opts \\\\ [])","anchor":"acls_from_preset/3"},{"id":"base_acls_from_preset/3","deprecated":false,"title":"base_acls_from_preset(creator, preset, opts \\\\ [])","anchor":"base_acls_from_preset/3"},{"id":"built_in_ids/0","deprecated":false,"title":"built_in_ids()","anchor":"built_in_ids/0"},{"id":"cast/3","deprecated":false,"title":"cast(changeset, creator, opts)","anchor":"cast/3"},{"id":"changeset/3","deprecated":false,"title":"changeset(atom, attrs, opts)","anchor":"changeset/3"},{"id":"create/2","deprecated":false,"title":"create(attrs \\\\ %{}, opts)","anchor":"create/2"},{"id":"default_exclude_ids/1","deprecated":false,"title":"default_exclude_ids(including_custom? \\\\ true)","anchor":"default_exclude_ids/1"},{"id":"delete/2","deprecated":false,"title":"delete(acl, opts)","anchor":"delete/2"},{"id":"edit/3","deprecated":false,"title":"edit(acl, user, params)","anchor":"edit/3"},{"id":"exclude_stereotypes/1","deprecated":false,"title":"exclude_stereotypes(including_custom? \\\\ true)","anchor":"exclude_stereotypes/1"},{"id":"get/1","deprecated":false,"title":"get(slug)","anchor":"get/1"},{"id":"get!/1","deprecated":false,"title":"get!(slug)","anchor":"get!/1"},{"id":"get_for_caretaker/3","deprecated":false,"title":"get_for_caretaker(id, caretaker, opts \\\\ [])","anchor":"get_for_caretaker/3"},{"id":"get_for_caretaker_q/3","deprecated":false,"title":"get_for_caretaker_q(id, caretaker, opts \\\\ [])","anchor":"get_for_caretaker_q/3"},{"id":"get_id/1","deprecated":false,"title":"get_id(slug)","anchor":"get_id/1"},{"id":"get_id!/1","deprecated":false,"title":"get_id!(slug)","anchor":"get_id!/1"},{"id":"get_object_custom_acl/1","deprecated":false,"title":"get_object_custom_acl(object)","anchor":"get_object_custom_acl/1"},{"id":"get_or_create_object_custom_acl/2","deprecated":false,"title":"get_or_create_object_custom_acl(object, caretaker \\\\ nil)","anchor":"get_or_create_object_custom_acl/2"},{"id":"grant_tuples_from_preset/3","deprecated":false,"title":"grant_tuples_from_preset(creator, to_boundaries, opts \\\\ [])","anchor":"grant_tuples_from_preset/3"},{"id":"is_built_in?/1","deprecated":false,"title":"is_built_in?(acl)","anchor":"is_built_in?/1"},{"id":"is_object_custom?/1","deprecated":false,"title":"is_object_custom?(acl)","anchor":"is_object_custom?/1"},{"id":"is_stereotype?/1","deprecated":false,"title":"is_stereotype?(acl)","anchor":"is_stereotype?/1"},{"id":"is_stereotyped?/1","deprecated":false,"title":"is_stereotyped?(acl)","anchor":"is_stereotyped?/1"},{"id":"list/1","deprecated":false,"title":"list(opts \\\\ [])","anchor":"list/1"},{"id":"list_built_ins/1","deprecated":false,"title":"list_built_ins(opts \\\\ [])","anchor":"list_built_ins/1"},{"id":"list_my/2","deprecated":false,"title":"list_my(user, opts \\\\ [])","anchor":"list_my/2"},{"id":"list_my_q/2","deprecated":false,"title":"list_my_q(user, opts \\\\ [])","anchor":"list_my_q/2"},{"id":"list_my_with_counts/2","deprecated":false,"title":"list_my_with_counts(user, opts \\\\ [])","anchor":"list_my_with_counts/2"},{"id":"list_q/1","deprecated":false,"title":"list_q(opts \\\\ [])","anchor":"list_q/1"},{"id":"local_acl_ids/1","deprecated":false,"title":"local_acl_ids(preset_acls \\\\ Config.get!(:preset_acls_match))","anchor":"local_acl_ids/1"},{"id":"maybe_by_ids/2","deprecated":false,"title":"maybe_by_ids(query, ids)","anchor":"maybe_by_ids/2"},{"id":"maybe_search/2","deprecated":false,"title":"maybe_search(query, text)","anchor":"maybe_search/2"},{"id":"opts_for_dropdown/0","deprecated":false,"title":"opts_for_dropdown()","anchor":"opts_for_dropdown/0"},{"id":"opts_for_list/0","deprecated":false,"title":"opts_for_list()","anchor":"opts_for_list/0"},{"id":"prepare_cast/3","deprecated":false,"title":"prepare_cast(changeset_or_obj, creator, opts)","anchor":"prepare_cast/3"},{"id":"preset_acl_ids/0","deprecated":false,"title":"preset_acl_ids()","anchor":"preset_acl_ids/0"},{"id":"preview/2","deprecated":false,"title":"preview(creator, opts)","anchor":"preview/2"},{"id":"public_acl_ids/1","deprecated":false,"title":"public_acl_ids(preset_acls \\\\ Config.get!(:preset_acls_match))","anchor":"public_acl_ids/1"},{"id":"remote_public_acl_ids/0","deprecated":false,"title":"remote_public_acl_ids()","anchor":"remote_public_acl_ids/0"},{"id":"set/3","deprecated":false,"title":"set(object, creator, opts)","anchor":"set/3"},{"id":"simple_create/2","deprecated":false,"title":"simple_create(caretaker, name)","anchor":"simple_create/2"},{"id":"soft_delete/2","deprecated":false,"title":"soft_delete(acl, opts)","anchor":"soft_delete/2"},{"id":"stereotype_ids/0","deprecated":false,"title":"stereotype_ids()","anchor":"stereotype_ids/0"},{"id":"user_default_acl/1","deprecated":false,"title":"user_default_acl(name)","anchor":"user_default_acl/1"},{"id":"user_default_acls/0","deprecated":false,"title":"user_default_acls()","anchor":"user_default_acls/0"}],"key":"functions"}],"nested_title":".Boundaries.Acls","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Acts.SetBoundaries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Acts.SetBoundaries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Boundaries.Acts.SetBoundaries","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Blocks","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Blocks","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(blocker, activity, blocked)","anchor":"ap_receive_activity/3"},{"id":"block/3","deprecated":false,"title":"block(user_or_instance_to_block, block_type \\\\ nil, scope)","anchor":"block/3"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"instance_wide_block/2","deprecated":false,"title":"instance_wide_block(user_or_instance_to_block, block_type \\\\ nil)","anchor":"instance_wide_block/2"},{"id":"instance_wide_circles/1","deprecated":false,"title":"instance_wide_circles(block_types)","anchor":"instance_wide_circles/1"},{"id":"is_blocked?/3","deprecated":false,"title":"is_blocked?(user_or_instance, block_type \\\\ :any, opts \\\\ [])","anchor":"is_blocked?/3"},{"id":"list/2","deprecated":false,"title":"list(block_type, opts)","anchor":"list/2"},{"id":"remote_instance_block/3","deprecated":false,"title":"remote_instance_block(display_hostname, block_type, scope)","anchor":"remote_instance_block/3"},{"id":"types_blocked/1","deprecated":false,"title":"types_blocked(types)","anchor":"types_blocked/1"},{"id":"unblock/3","deprecated":false,"title":"unblock(user_or_instance_to_block, block_type \\\\ nil, scope)","anchor":"unblock/3"},{"id":"unblock_all/2","deprecated":false,"title":"unblock_all(block_type \\\\ nil, scope)","anchor":"unblock_all/2"},{"id":"user_block_circles/2","deprecated":false,"title":"user_block_circles(current_user, block_type)","anchor":"user_block_circles/2"}],"key":"functions"}],"nested_title":".Boundaries.Blocks","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Blocks.LiveHandler","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Blocks.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"update_many/2","deprecated":false,"title":"update_many(assigns_sockets, opts \\\\ [])","anchor":"update_many/2"},{"id":"update_many_opts/1","deprecated":false,"title":"update_many_opts(opts \\\\ [])","anchor":"update_many_opts/1"}],"key":"functions"}],"nested_title":".Boundaries.Blocks.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Circles","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Circles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_to_circles/2","deprecated":false,"title":"add_to_circles(subject, circles)","anchor":"add_to_circles/2"},{"id":"built_in_ids/0","deprecated":false,"title":"built_in_ids()","anchor":"built_in_ids/0"},{"id":"changeset/2","deprecated":false,"title":"changeset(circle \\\\ %Circle{}, attrs)","anchor":"changeset/2"},{"id":"changeset/3","deprecated":false,"title":"changeset(atom, circle, params)","anchor":"changeset/3"},{"id":"circle_ids/1","deprecated":false,"title":"circle_ids(subjects)","anchor":"circle_ids/1"},{"id":"circles/0","deprecated":false,"title":"circles()","anchor":"circles/0"},{"id":"create/2","deprecated":false,"title":"create(user, attrs)","anchor":"create/2"},{"id":"delete/2","deprecated":false,"title":"delete(circle, opts)","anchor":"delete/2"},{"id":"edit/3","deprecated":false,"title":"edit(circle, user, params)","anchor":"edit/3"},{"id":"empty_circles/1","deprecated":false,"title":"empty_circles(circles)","anchor":"empty_circles/1"},{"id":"get/1","deprecated":false,"title":"get(slug)","anchor":"get/1"},{"id":"get!/1","deprecated":false,"title":"get!(slug)","anchor":"get!/1"},{"id":"get_by_name/2","deprecated":false,"title":"get_by_name(name, caretaker)","anchor":"get_by_name/2"},{"id":"get_for_caretaker/3","deprecated":false,"title":"get_for_caretaker(id, caretaker, opts \\\\ [])","anchor":"get_for_caretaker/3"},{"id":"get_id/1","deprecated":false,"title":"get_id(slug)","anchor":"get_id/1"},{"id":"get_id!/1","deprecated":false,"title":"get_id!(slug)","anchor":"get_id!/1"},{"id":"get_or_create/2","deprecated":false,"title":"get_or_create(name, caretaker \\\\ nil)","anchor":"get_or_create/2"},{"id":"get_stereotype_circles/2","deprecated":false,"title":"get_stereotype_circles(subject, stereotypes)","anchor":"get_stereotype_circles/2"},{"id":"get_tuple/1","deprecated":false,"title":"get_tuple(slug)","anchor":"get_tuple/1"},{"id":"is_built_in?/1","deprecated":false,"title":"is_built_in?(circle)","anchor":"is_built_in?/1"},{"id":"is_encircled_by?/2","deprecated":false,"title":"is_encircled_by?(subject, circle)","anchor":"is_encircled_by?/2"},{"id":"is_encircled_by_q/2","deprecated":false,"title":"is_encircled_by_q(subject, circles)","anchor":"is_encircled_by_q/2"},{"id":"is_stereotype?/1","deprecated":false,"title":"is_stereotype?(acl)","anchor":"is_stereotype?/1"},{"id":"list_built_ins/0","deprecated":false,"title":"list_built_ins()","anchor":"list_built_ins/0"},{"id":"list_by_ids/1","deprecated":false,"title":"list_by_ids(ids)","anchor":"list_by_ids/1"},{"id":"list_my/2","deprecated":false,"title":"list_my(user, opts \\\\ [])","anchor":"list_my/2"},{"id":"list_my_defaults/1","deprecated":false,"title":"list_my_defaults(user \\\\ nil)","anchor":"list_my_defaults/1"},{"id":"list_my_with_counts/2","deprecated":false,"title":"list_my_with_counts(user, opts \\\\ [])","anchor":"list_my_with_counts/2"},{"id":"list_my_with_global/2","deprecated":false,"title":"list_my_with_global(user, opts \\\\ [])","anchor":"list_my_with_global/2"},{"id":"list_visible/2","deprecated":false,"title":"list_visible(user, opts \\\\ [])","anchor":"list_visible/2"},{"id":"preload_encircled_by/3","deprecated":false,"title":"preload_encircled_by(subject, circles, opts \\\\ [])","anchor":"preload_encircled_by/3"},{"id":"query/1","deprecated":false,"title":"query(opts \\\\ [])","anchor":"query/1"},{"id":"query_my/2","deprecated":false,"title":"query_my(caretaker, opts \\\\ [])","anchor":"query_my/2"},{"id":"query_my_by_id/3","deprecated":false,"title":"query_my_by_id(id, caretaker, opts \\\\ [])","anchor":"query_my_by_id/3"},{"id":"query_visible/2","deprecated":false,"title":"query_visible(user, opts \\\\ [])","anchor":"query_visible/2"},{"id":"remove_from_circles/2","deprecated":false,"title":"remove_from_circles(subject, circles)","anchor":"remove_from_circles/2"},{"id":"stereotype_ids/0","deprecated":false,"title":"stereotype_ids()","anchor":"stereotype_ids/0"},{"id":"stereotypes/1","deprecated":false,"title":"stereotypes(atom)","anchor":"stereotypes/1"},{"id":"to_circle_ids/1","deprecated":false,"title":"to_circle_ids(subjects)","anchor":"to_circle_ids/1"}],"key":"functions"}],"nested_title":".Boundaries.Circles","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Controlleds","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Controlleds","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_acls/2","deprecated":false,"title":"add_acls(object, acl)","anchor":"add_acls/2"},{"id":"changeset/2","deprecated":false,"title":"changeset(c \\\\ %Controlled{}, attrs)","anchor":"changeset/2"},{"id":"create/1","deprecated":false,"title":"create(attrs)","anchor":"create/1"},{"id":"get_preset_on_object/1","deprecated":false,"title":"get_preset_on_object(object)","anchor":"get_preset_on_object/1"},{"id":"grant_role/4","deprecated":false,"title":"grant_role(subject_id, object, role, opts \\\\ [])","anchor":"grant_role/4"},{"id":"list_acls_on_object/2","deprecated":false,"title":"list_acls_on_object(object, opts \\\\ [])","anchor":"list_acls_on_object/2"},{"id":"list_grants_by_verbs/3","deprecated":false,"title":"list_grants_by_verbs(objects, verbs, value \\\\ true)","anchor":"list_grants_by_verbs/3"},{"id":"list_on_object/2","deprecated":false,"title":"list_on_object(object, opts \\\\ [])","anchor":"list_on_object/2"},{"id":"list_on_objects_by_subject/2","deprecated":false,"title":"list_on_objects_by_subject(objects, current_user)","anchor":"list_on_objects_by_subject/2"},{"id":"list_presets_on_objects/1","deprecated":false,"title":"list_presets_on_objects(objects)","anchor":"list_presets_on_objects/1"},{"id":"list_q/1","deprecated":false,"title":"list_q(opts \\\\ [])","anchor":"list_q/1"},{"id":"list_subjects_by_verb/3","deprecated":false,"title":"list_subjects_by_verb(objects, verb, value \\\\ true)","anchor":"list_subjects_by_verb/3"},{"id":"remove_acls/2","deprecated":false,"title":"remove_acls(object, acls)","anchor":"remove_acls/2"}],"key":"functions"}],"nested_title":".Boundaries.Controlleds","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Debug","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Debug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"debug_grants_on/1","deprecated":false,"title":"debug_grants_on(things)","anchor":"debug_grants_on/1"},{"id":"debug_grants_on/2","deprecated":false,"title":"debug_grants_on(things, verbs)","anchor":"debug_grants_on/2"},{"id":"debug_my_grants_on/2","deprecated":false,"title":"debug_my_grants_on(users, things)","anchor":"debug_my_grants_on/2"},{"id":"debug_object_acls/1","deprecated":false,"title":"debug_object_acls(thing)","anchor":"debug_object_acls/1"},{"id":"debug_user_acls/2","deprecated":false,"title":"debug_user_acls(user, label \\\\ \"\")","anchor":"debug_user_acls/2"},{"id":"debug_user_circles/1","deprecated":false,"title":"debug_user_circles(user)","anchor":"debug_user_circles/1"}],"key":"functions"}],"nested_title":".Boundaries.Debug","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Fixtures","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Fixtures","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"activity_pub_circle/0","deprecated":false,"title":"activity_pub_circle()","anchor":"activity_pub_circle/0"},{"id":"admin_circle/0","deprecated":false,"title":"admin_circle()","anchor":"admin_circle/0"},{"id":"custom_acl/0","deprecated":false,"title":"custom_acl()","anchor":"custom_acl/0"},{"id":"fixtures/0","deprecated":false,"title":"fixtures()","anchor":"fixtures/0"},{"id":"global_circles/0","deprecated":false,"title":"global_circles()","anchor":"global_circles/0"},{"id":"insert/0","deprecated":false,"title":"insert()","anchor":"insert/0"},{"id":"instance_acl/0","deprecated":false,"title":"instance_acl()","anchor":"instance_acl/0"},{"id":"mod_circle/0","deprecated":false,"title":"mod_circle()","anchor":"mod_circle/0"}],"key":"functions"}],"nested_title":".Boundaries.Fixtures","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.FixturesUsersMigrations","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.FixturesUsersMigrations","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"down/0","deprecated":false,"title":"down()","anchor":"down/0"},{"id":"up/0","deprecated":false,"title":"up()","anchor":"up/0"}],"key":"functions"}],"nested_title":".Boundaries.FixturesUsersMigrations","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Grants","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Grants","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(grant \\\\ %Grant{}, attrs)","anchor":"changeset/2"},{"id":"changeset/3","deprecated":false,"title":"changeset(atom, attrs, opts)","anchor":"changeset/3"},{"id":"create/1","deprecated":false,"title":"create(attrs)","anchor":"create/1"},{"id":"create/2","deprecated":false,"title":"create(attrs, opts)","anchor":"create/2"},{"id":"get/1","deprecated":false,"title":"get(slug)","anchor":"get/1"},{"id":"grant/5","deprecated":false,"title":"grant(subject_id, acl_id, verb, value, opts \\\\ [])","anchor":"grant/5"},{"id":"grant_role/4","deprecated":false,"title":"grant_role(subject_id, acl_id, role, opts \\\\ [])","anchor":"grant_role/4"},{"id":"grants/0","deprecated":false,"title":"grants()","anchor":"grants/0"},{"id":"grants_to_tuples/2","deprecated":false,"title":"grants_to_tuples(creator, grants)","anchor":"grants_to_tuples/2"},{"id":"list/1","deprecated":false,"title":"list(opts)","anchor":"list/1"},{"id":"list_for_acl/2","deprecated":false,"title":"list_for_acl(acl, opts)","anchor":"list_for_acl/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(user)","anchor":"list_my/1"},{"id":"list_q/1","deprecated":false,"title":"list_q(opts)","anchor":"list_q/1"},{"id":"remove_subject_from_acl/2","deprecated":false,"title":"remove_subject_from_acl(subject, acls)","anchor":"remove_subject_from_acl/2"},{"id":"subject_grants/1","deprecated":false,"title":"subject_grants(grants)","anchor":"subject_grants/1"},{"id":"subject_verb_grants/1","deprecated":false,"title":"subject_verb_grants(grants)","anchor":"subject_verb_grants/1"},{"id":"subjects/1","deprecated":false,"title":"subjects(grants)","anchor":"subjects/1"},{"id":"upsert_or_delete/2","deprecated":false,"title":"upsert_or_delete(attrs, opts)","anchor":"upsert_or_delete/2"},{"id":"verb_subject_grant/1","deprecated":false,"title":"verb_subject_grant(grants)","anchor":"verb_subject_grant/1"}],"key":"functions"}],"nested_title":".Boundaries.Grants","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Integration","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"is_local?/1","deprecated":false,"title":"is_local?(thing)","anchor":"is_local?/1"},{"id":"many/3","deprecated":false,"title":"many(query, paginate?, opts \\\\ [])","anchor":"many/3"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Boundaries.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.LiveHandler","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl_create/2","deprecated":false,"title":"acl_create(attrs, socket)","anchor":"acl_create/2"},{"id":"boundaries_on_objects/2","deprecated":false,"title":"boundaries_on_objects(list_of_ids, current_user)","anchor":"boundaries_on_objects/2"},{"id":"circle_create/2","deprecated":false,"title":"circle_create(attrs, socket)","anchor":"circle_create/2"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(action, attrs, socket)","anchor":"handle_event/3"},{"id":"maybe_check_boundaries/2","deprecated":false,"title":"maybe_check_boundaries(assigns_sockets, opts \\\\ [])","anchor":"maybe_check_boundaries/2"},{"id":"maybe_redirect_to/3","deprecated":false,"title":"maybe_redirect_to(socket, path, arg3)","anchor":"maybe_redirect_to/3"},{"id":"my_acls/2","deprecated":false,"title":"my_acls(current_user_id, opts \\\\ nil)","anchor":"my_acls/2"},{"id":"my_circles_paginated/2","deprecated":false,"title":"my_circles_paginated(scope, attrs \\\\ nil)","anchor":"my_circles_paginated/2"},{"id":"prepare_assigns/1","deprecated":false,"title":"prepare_assigns(socket)","anchor":"prepare_assigns/1"},{"id":"remove_from_circle_tuples/2","deprecated":false,"title":"remove_from_circle_tuples(ids, previous_circles)","anchor":"remove_from_circle_tuples/2"},{"id":"scope_origin/2","deprecated":false,"title":"scope_origin(assigns \\\\ nil, socket)","anchor":"scope_origin/2"},{"id":"set_circles_tuples/3","deprecated":false,"title":"set_circles_tuples(field, circles, socket)","anchor":"set_circles_tuples/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"subject_name/1","deprecated":false,"title":"subject_name(subject)","anchor":"subject_name/1"},{"id":"unblock/4","deprecated":false,"title":"unblock(id, block_type, scope, socket)","anchor":"unblock/4"},{"id":"update_many/2","deprecated":false,"title":"update_many(assigns_sockets, opts \\\\ [])","anchor":"update_many/2"},{"id":"update_many_opts/1","deprecated":false,"title":"update_many_opts(opts \\\\ [])","anchor":"update_many_opts/1"}],"key":"functions"}],"nested_title":".Boundaries.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Queries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_perms/2","deprecated":false,"title":"add_perms(l, r)","anchor":"add_perms/2"},{"id":"agg_perms/1","deprecated":false,"title":"agg_perms(p)","anchor":"agg_perms/1"},{"id":"boundarise/3","deprecated":false,"title":"boundarise(query, field_ref, opts)","anchor":"boundarise/3"},{"id":"object_boundarised/2","deprecated":false,"title":"object_boundarised(q, opts \\\\ nil)","anchor":"object_boundarised/2"},{"id":"permitted/1","deprecated":false,"title":"permitted(user)","anchor":"permitted/1"},{"id":"permitted/2","deprecated":false,"title":"permitted(user, verbs)","anchor":"permitted/2"},{"id":"query_with_summary/3","deprecated":false,"title":"query_with_summary(user, verbs \\\\ [:see, :read], query \\\\ Summary)","anchor":"query_with_summary/3"},{"id":"skip_boundary_check?/2","deprecated":false,"title":"skip_boundary_check?(opts, object \\\\ nil)","anchor":"skip_boundary_check?/2"}],"key":"functions"}],"nested_title":".Boundaries.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Roles","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Roles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cannot_role_from_verb/5","deprecated":false,"title":"cannot_role_from_verb(verbs, verb_field \\\\ :verb, all_role_verbs \\\\ role_verbs(:all), role_for_all \\\\ :read, verbs_field \\\\ :cannot_verbs)","anchor":"cannot_role_from_verb/5"},{"id":"create/2","deprecated":false,"title":"create(attrs, opts)","anchor":"create/2"},{"id":"create/3","deprecated":false,"title":"create(name, usage, opts)","anchor":"create/3"},{"id":"edit_verb_permission/4","deprecated":false,"title":"edit_verb_permission(role_name, verb, value, opts)","anchor":"edit_verb_permission/4"},{"id":"get/2","deprecated":false,"title":"get(role_name, opts \\\\ [])","anchor":"get/2"},{"id":"preset_boundary_role_from_acl/1","deprecated":false,"title":"preset_boundary_role_from_acl(summary)","anchor":"preset_boundary_role_from_acl/1"},{"id":"reset_instance_roles/0","deprecated":false,"title":"reset_instance_roles()","anchor":"reset_instance_roles/0"},{"id":"role_from_grants/2","deprecated":false,"title":"role_from_grants(grants, opts)","anchor":"role_from_grants/2"},{"id":"role_from_verb/5","deprecated":false,"title":"role_from_verb(verbs, verb_field \\\\ :verb, all_role_verbs \\\\ role_verbs(:all), role_for_all \\\\ :administer, verbs_field \\\\ :can_verbs)","anchor":"role_from_verb/5"},{"id":"role_verbs/2","deprecated":false,"title":"role_verbs(usage \\\\ :all, opts \\\\ [])","anchor":"role_verbs/2"},{"id":"roles_for_dropdown/2","deprecated":false,"title":"roles_for_dropdown(usage \\\\ nil, opts)","anchor":"roles_for_dropdown/2"},{"id":"split_tuples_can_cannot/1","deprecated":false,"title":"split_tuples_can_cannot(tuples)","anchor":"split_tuples_can_cannot/1"},{"id":"verbs_for_role/2","deprecated":false,"title":"verbs_for_role(role, opts \\\\ [])","anchor":"verbs_for_role/2"}],"key":"functions"}],"nested_title":".Boundaries.Roles","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.RuntimeConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Boundaries.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Summary","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Summary","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"migrate_views/0","deprecated":false,"title":"migrate_views()","anchor":"migrate_views/0"}],"key":"functions"}],"nested_title":".Boundaries.Summary","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Users","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Users","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_default_boundaries/2","deprecated":false,"title":"create_default_boundaries(user, opts \\\\ [])","anchor":"create_default_boundaries/2"},{"id":"create_missing_boundaries/2","deprecated":false,"title":"create_missing_boundaries(user, opts \\\\ [])","anchor":"create_missing_boundaries/2"},{"id":"do_insert_main/2","deprecated":false,"title":"do_insert_main(user, map)","anchor":"do_insert_main/2"},{"id":"prepare_default_boundaries/3","deprecated":false,"title":"prepare_default_boundaries(user, acls_extra, opts)","anchor":"prepare_default_boundaries/3"}],"key":"functions"}],"nested_title":".Boundaries.Users","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Verbs","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Verbs","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(verb \\\\ %Verb{}, attrs)","anchor":"changeset/2"},{"id":"create/1","deprecated":false,"title":"create(attrs)","anchor":"create/1"},{"id":"get/2","deprecated":false,"title":"get(slug, all_verbs \\\\ verbs())","anchor":"get/2"},{"id":"get!/2","deprecated":false,"title":"get!(id_or_name, all_verbs \\\\ verbs())","anchor":"get!/2"},{"id":"get_id/2","deprecated":false,"title":"get_id(slug, all_verbs \\\\ verbs())","anchor":"get_id/2"},{"id":"get_id!/2","deprecated":false,"title":"get_id!(slug, all_verbs \\\\ verbs())","anchor":"get_id!/2"},{"id":"get_slug/2","deprecated":false,"title":"get_slug(id_or_name, all_verbs \\\\ verbs())","anchor":"get_slug/2"},{"id":"get_tuple/2","deprecated":false,"title":"get_tuple(id_or_name, all_verbs \\\\ verbs())","anchor":"get_tuple/2"},{"id":"ids/2","deprecated":false,"title":"ids(verbs, all_verbs \\\\ verbs())","anchor":"ids/2"},{"id":"list/2","deprecated":false,"title":"list(from \\\\ :db, key \\\\ :verb)","anchor":"list/2"},{"id":"list_verbs_debug/0","deprecated":false,"title":"list_verbs_debug()","anchor":"list_verbs_debug/0"},{"id":"slugs/0","deprecated":false,"title":"slugs()","anchor":"slugs/0"},{"id":"verbs/0","deprecated":false,"title":"verbs()","anchor":"verbs/0"},{"id":"verbs_count/0","deprecated":false,"title":"verbs_count()","anchor":"verbs_count/0"}],"key":"functions"}],"nested_title":".Boundaries.Verbs","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Web.ExcludeBoundaries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Web.ExcludeBoundaries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_handle_event/3","deprecated":false,"title":"do_handle_event(event, params, socket)","anchor":"do_handle_event/3"}],"key":"functions"}],"nested_title":".Boundaries.Web.ExcludeBoundaries","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Web.Routes","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Web.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".Boundaries.Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Common","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common","sections":[],"nested_title":".Common","nested_context":"Bonfire"},{"id":"Bonfire.Common.Benchmark","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Benchmark","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"apply_timed/1","deprecated":false,"title":"apply_timed(function)","anchor":"apply_timed/1"},{"id":"apply_timed/2","deprecated":false,"title":"apply_timed(function, args)","anchor":"apply_timed/2"},{"id":"apply_timed/3","deprecated":false,"title":"apply_timed(module, function, args)","anchor":"apply_timed/3"}],"key":"functions"}],"nested_title":".Common.Benchmark","nested_context":"Bonfire"},{"id":"Bonfire.Common.Cache","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Cache","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cache/0","deprecated":false,"title":"cache()","anchor":"cache/0"},{"id":"cache_store/1","deprecated":false,"title":"cache_store(opts \\\\ [])","anchor":"cache_store/1"},{"id":"cached_preloads_for_objects/3","deprecated":false,"title":"cached_preloads_for_objects(name, objects, fun)","anchor":"cached_preloads_for_objects/3"},{"id":"get/2","deprecated":false,"title":"get(key, opts \\\\ [])","anchor":"get/2"},{"id":"get!/2","deprecated":false,"title":"get!(key, opts \\\\ [])","anchor":"get!/2"},{"id":"maybe_apply_cached/3","deprecated":false,"title":"maybe_apply_cached(fun, args \\\\ [], opts \\\\ [])","anchor":"maybe_apply_cached/3"},{"id":"put/3","deprecated":false,"title":"put(key, value, opts \\\\ [])","anchor":"put/3"},{"id":"remove/2","deprecated":false,"title":"remove(key, opts \\\\ [])","anchor":"remove/2"},{"id":"remove_all/1","deprecated":false,"title":"remove_all(opts \\\\ [])","anchor":"remove_all/1"},{"id":"reset/3","deprecated":false,"title":"reset(fun, args, opts \\\\ [])","anchor":"reset/3"}],"key":"functions"}],"nested_title":".Common.Cache","nested_context":"Bonfire"},{"id":"Bonfire.Common.Changelog.Github.DataGrabber","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Changelog.Github.DataGrabber","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fetch_issues/1","deprecated":false,"title":"fetch_issues(opts \\\\ [])","anchor":"fetch_issues/1"},{"id":"format_issue/1","deprecated":false,"title":"format_issue(issue)","anchor":"format_issue/1"},{"id":"prepare_data/2","deprecated":false,"title":"prepare_data(issues, new_version)","anchor":"prepare_data/2"}],"key":"functions"}],"nested_title":".Common.Changelog.Github.DataGrabber","nested_context":"Bonfire"},{"id":"Bonfire.Common.Config","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Config","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"compilation_error/1","deprecated":false,"title":"compilation_error(error)","anchor":"compilation_error/1"},{"id":"delete/2","deprecated":false,"title":"delete(key, otp_app \\\\ top_level_otp_app())","anchor":"delete/2"},{"id":"endpoint_module/0","deprecated":false,"title":"endpoint_module()","anchor":"endpoint_module/0"},{"id":"env/0","deprecated":false,"title":"env()","anchor":"env/0"},{"id":"get/3","deprecated":false,"title":"get(key_or_keys, default \\\\ nil, otp_app \\\\ nil)","anchor":"get/3"},{"id":"get!/2","deprecated":false,"title":"get!(key, otp_app \\\\ top_level_otp_app())","anchor":"get!/2"},{"id":"get_ext/1","deprecated":false,"title":"get_ext(module_or_otp_app)","anchor":"get_ext/1"},{"id":"get_ext/3","deprecated":false,"title":"get_ext(module_or_otp_app, key, default \\\\ nil)","anchor":"get_ext/3"},{"id":"get_ext!/1","deprecated":false,"title":"get_ext!(module_or_otp_app)","anchor":"get_ext!/1"},{"id":"get_ext!/2","deprecated":false,"title":"get_ext!(module_or_otp_app, key)","anchor":"get_ext!/2"},{"id":"keys_tree/1","deprecated":false,"title":"keys_tree(keys)","anchor":"keys_tree/1"},{"id":"module_enabled?/1","deprecated":false,"title":"module_enabled?(module)","anchor":"module_enabled?/1"},{"id":"put/1","deprecated":false,"title":"put(tree)","anchor":"put/1"},{"id":"put/3","deprecated":false,"title":"put(key, value, otp_app \\\\ nil)","anchor":"put/3"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"},{"id":"require_extension_config!/1","deprecated":false,"title":"require_extension_config!(extension)","anchor":"require_extension_config!/1"},{"id":"top_level_otp_app/0","deprecated":false,"title":"top_level_otp_app()","anchor":"top_level_otp_app/0"}],"key":"functions"}],"nested_title":".Common.Config","nested_context":"Bonfire"},{"id":"Bonfire.Common.Config.Error","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Config.Error","sections":[],"nested_title":".Common.Config.Error","nested_context":"Bonfire"},{"id":"Bonfire.Common.Config.LoadExtensionsConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Config.LoadExtensionsConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"load_configs/1","deprecated":false,"title":"load_configs(extras \\\\ [])","anchor":"load_configs/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Common.Config.LoadExtensionsConfig","nested_context":"Bonfire"},{"id":"Bonfire.Common.ConfigModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.ConfigModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"c:config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"c:config_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Common.ConfigModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.ContextModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.ContextModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"context_module/0","deprecated":false,"title":"context_module()","anchor":"c:context_module/0"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"c:query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"c:schema_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"apply_error/2","deprecated":false,"title":"apply_error(error, args)","anchor":"apply_error/2"},{"id":"context_function_error/2","deprecated":false,"title":"context_function_error(error, args)","anchor":"context_function_error/2"},{"id":"context_module/1","deprecated":false,"title":"context_module(query)","anchor":"context_module/1"},{"id":"context_module!/1","deprecated":false,"title":"context_module!(query)","anchor":"context_module!/1"},{"id":"context_modules/1","deprecated":false,"title":"context_modules(modules)","anchor":"context_modules/1"},{"id":"linked_query_modules/0","deprecated":false,"title":"linked_query_modules()","anchor":"linked_query_modules/0"},{"id":"linked_schema_modules/0","deprecated":false,"title":"linked_schema_modules()","anchor":"linked_schema_modules/0"},{"id":"maybe_apply/4","deprecated":false,"title":"maybe_apply(object_schema_or_context, fun, args \\\\ [], fallback_fun \\\\ &apply_error/2)","anchor":"maybe_apply/4"},{"id":"maybe_context_module/1","deprecated":false,"title":"maybe_context_module(query)","anchor":"maybe_context_module/1"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Common.ContextModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.DatesTimes","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.DatesTimes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"date_from_now/2","deprecated":false,"title":"date_from_now(date, opts \\\\ [])","anchor":"date_from_now/2"},{"id":"date_from_pointer/1","deprecated":false,"title":"date_from_pointer(object)","anchor":"date_from_pointer/1"},{"id":"format/2","deprecated":false,"title":"format(date, opts \\\\ [])","anchor":"format/2"},{"id":"future?/1","deprecated":false,"title":"future?(dt)","anchor":"future?/1"},{"id":"now/0","deprecated":false,"title":"now()","anchor":"now/0"},{"id":"past/2","deprecated":false,"title":"past(amount_to_remove, unit \\\\ :second)","anchor":"past/2"},{"id":"past?/1","deprecated":false,"title":"past?(dt)","anchor":"past?/1"},{"id":"remove/3","deprecated":false,"title":"remove(dt, amount_to_remove, unit \\\\ :second)","anchor":"remove/3"},{"id":"to_date/1","deprecated":false,"title":"to_date(date)","anchor":"to_date/1"}],"key":"functions"}],"nested_title":".Common.DatesTimes","nested_context":"Bonfire"},{"id":"Bonfire.Common.Enums","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Enums","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"attr_get_id/2","deprecated":false,"title":"attr_get_id(attrs, field_name)","anchor":"attr_get_id/2"},{"id":"count_where/2","deprecated":false,"title":"count_where(collection, function \\\\ &is_nil/1)","anchor":"count_where/2"},{"id":"deep_merge/3","deprecated":false,"title":"deep_merge(left, right, opts \\\\ [])","anchor":"deep_merge/3"},{"id":"deep_merge_reduce/2","deprecated":false,"title":"deep_merge_reduce(list_or_map, opts \\\\ [])","anchor":"deep_merge_reduce/2"},{"id":"enum_get/3","deprecated":false,"title":"enum_get(map, key, fallback \\\\ nil)","anchor":"enum_get/3"},{"id":"filter_empty/2","deprecated":false,"title":"filter_empty(val, fallback)","anchor":"filter_empty/2"},{"id":"filter_empty/3","deprecated":false,"title":"filter_empty(enum, fallback, key)","anchor":"filter_empty/3"},{"id":"flatter/1","deprecated":false,"title":"flatter(list)","anchor":"flatter/1"},{"id":"fun/3","deprecated":false,"title":"fun(map, fun, args \\\\ [])","anchor":"fun/3"},{"id":"group/2","deprecated":false,"title":"group(list, fun)","anchor":"group/2"},{"id":"group_map/2","deprecated":false,"title":"group_map(list, fun)","anchor":"group_map/2"},{"id":"has_duplicates?/2","deprecated":false,"title":"has_duplicates?(list, fun \\\\ nil)","anchor":"has_duplicates?/2"},{"id":"id/1","deprecated":false,"title":"id(id)","anchor":"id/1"},{"id":"ids/1","deprecated":false,"title":"ids(objects)","anchor":"ids/1"},{"id":"input_to_atoms/2","deprecated":false,"title":"input_to_atoms(data, opts \\\\ [])","anchor":"input_to_atoms/2"},{"id":"input_to_value/7","deprecated":false,"title":"input_to_value(v, _, including_values, _, force, arg6, values_to_integers)","anchor":"input_to_value/7"},{"id":"map_filter_empty/1","deprecated":false,"title":"map_filter_empty(data)","anchor":"map_filter_empty/1"},{"id":"map_key_replace/4","deprecated":false,"title":"map_key_replace(map, key, new_key, new_value \\\\ nil)","anchor":"map_key_replace/4"},{"id":"map_key_replace_existing/4","deprecated":false,"title":"map_key_replace_existing(map, key, new_key, new_value \\\\ nil)","anchor":"map_key_replace_existing/4"},{"id":"map_new/2","deprecated":false,"title":"map_new(data, fallback_key \\\\ :data)","anchor":"map_new/2"},{"id":"maybe_append/2","deprecated":false,"title":"maybe_append(list, value)","anchor":"maybe_append/2"},{"id":"maybe_elem/3","deprecated":false,"title":"maybe_elem(tuple, index, fallback \\\\ nil)","anchor":"maybe_elem/3"},{"id":"maybe_flatten/1","deprecated":false,"title":"maybe_flatten(list)","anchor":"maybe_flatten/1"},{"id":"maybe_from_struct/1","deprecated":false,"title":"maybe_from_struct(obj)","anchor":"maybe_from_struct/1"},{"id":"maybe_get/3","deprecated":false,"title":"maybe_get(map, key, fallback \\\\ nil)","anchor":"maybe_get/3"},{"id":"maybe_list/2","deprecated":false,"title":"maybe_list(val, change_fn)","anchor":"maybe_list/2"},{"id":"maybe_merge_to_struct/2","deprecated":false,"title":"maybe_merge_to_struct(first, precedence)","anchor":"maybe_merge_to_struct/2"},{"id":"maybe_put/3","deprecated":false,"title":"maybe_put(map, key, value)","anchor":"maybe_put/3"},{"id":"maybe_to_keyword_list/2","deprecated":false,"title":"maybe_to_keyword_list(obj, recursive \\\\ false)","anchor":"maybe_to_keyword_list/2"},{"id":"maybe_to_map/2","deprecated":false,"title":"maybe_to_map(obj, recursive \\\\ false)","anchor":"maybe_to_map/2"},{"id":"maybe_to_struct/2","deprecated":false,"title":"maybe_to_struct(obj, type \\\\ nil)","anchor":"maybe_to_struct/2"},{"id":"maybe_to_structs/2","deprecated":false,"title":"maybe_to_structs(v, opts \\\\ [])","anchor":"maybe_to_structs/2"},{"id":"merge_as_map/3","deprecated":false,"title":"merge_as_map(left, right, opts \\\\ [])","anchor":"merge_as_map/3"},{"id":"merge_changesets/2","deprecated":false,"title":"merge_changesets(cs1, cs2)","anchor":"merge_changesets/2"},{"id":"merge_keeping_only_first_keys/2","deprecated":false,"title":"merge_keeping_only_first_keys(map_1, map_2)","anchor":"merge_keeping_only_first_keys/2"},{"id":"merge_structs_as_map/2","deprecated":false,"title":"merge_structs_as_map(target, merge)","anchor":"merge_structs_as_map/2"},{"id":"merge_uniq/2","deprecated":false,"title":"merge_uniq(left, right)","anchor":"merge_uniq/2"},{"id":"naughty_to_atoms!/2","deprecated":false,"title":"naughty_to_atoms!(data, opts \\\\ [])","anchor":"naughty_to_atoms!/2"},{"id":"nested_structs_to_maps/1","deprecated":false,"title":"nested_structs_to_maps(struct)","anchor":"nested_structs_to_maps/1"},{"id":"put_new_in/3","deprecated":false,"title":"put_new_in(map, list, val)","anchor":"put_new_in/3"},{"id":"stringify_keys/2","deprecated":false,"title":"stringify_keys(map, recursive \\\\ false)","anchor":"stringify_keys/2"},{"id":"struct_from_map/2","deprecated":false,"title":"struct_from_map(a_map, list)","anchor":"struct_from_map/2"},{"id":"struct_to_map/1","deprecated":false,"title":"struct_to_map(struct)","anchor":"struct_to_map/1"},{"id":"uniq_by_id/1","deprecated":false,"title":"uniq_by_id(list)","anchor":"uniq_by_id/1"}],"key":"functions"}],"nested_title":".Common.Enums","nested_context":"Bonfire"},{"id":"Bonfire.Common.Errors","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Errors","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"debug_banner_with_trace/4","deprecated":false,"title":"debug_banner_with_trace(kind, exception, stacktrace, opts \\\\ [])","anchor":"debug_banner_with_trace/4"},{"id":"debug_exception/5","deprecated":false,"title":"debug_exception(msg, exception \\\\ nil, stacktrace \\\\ nil, kind \\\\ :error, opts \\\\ [])","anchor":"debug_exception/5"},{"id":"debug_log/4","deprecated":false,"title":"debug_log(msg, exception \\\\ nil, stacktrace \\\\ nil, kind \\\\ :error)","anchor":"debug_log/4"},{"id":"error_msg/1","deprecated":false,"title":"error_msg(errors)","anchor":"error_msg/1"},{"id":"format_banner/4","deprecated":false,"title":"format_banner(kind, exception, stacktrace \\\\ [], opts \\\\ [])","anchor":"format_banner/4"},{"id":"format_location/1","deprecated":false,"title":"format_location(opts)","anchor":"format_location/1"},{"id":"format_mfa/3","deprecated":false,"title":"format_mfa(module, fun, arity)","anchor":"format_mfa/3"},{"id":"format_stacktrace/2","deprecated":false,"title":"format_stacktrace(trace \\\\ nil, opts)","anchor":"format_stacktrace/2"},{"id":"format_stacktrace_entry/2","deprecated":false,"title":"format_stacktrace_entry(entry, opts \\\\ [])","anchor":"format_stacktrace_entry/2"},{"id":"format_stacktrace_entry_sliced/2","deprecated":false,"title":"format_stacktrace_entry_sliced(entry, opts)","anchor":"format_stacktrace_entry_sliced/2"},{"id":"last_stacktrace/0","deprecated":false,"title":"last_stacktrace()","anchor":"last_stacktrace/0"},{"id":"map_error/2","deprecated":false,"title":"map_error(other, fun)","anchor":"map_error/2"},{"id":"maybe_ok_error/2","deprecated":false,"title":"maybe_ok_error(other, change_fn)","anchor":"maybe_ok_error/2"},{"id":"mf_maybe_link_to_code/4","deprecated":false,"title":"mf_maybe_link_to_code(text \\\\ nil, mod, fun, opts)","anchor":"mf_maybe_link_to_code/4"},{"id":"module_maybe_link_to_code/3","deprecated":false,"title":"module_maybe_link_to_code(text \\\\ nil, mod, opts)","anchor":"module_maybe_link_to_code/3"},{"id":"replace_error/2","deprecated":false,"title":"replace_error(other, value)","anchor":"replace_error/2"}],"key":"functions"}],"nested_title":".Common.Errors","nested_context":"Bonfire"},{"id":"Bonfire.Common.Extend","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Extend","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"application_loaded?/1","deprecated":false,"title":"application_loaded?(extension)","anchor":"application_loaded?/1"},{"id":"disabled_value?/1","deprecated":false,"title":"disabled_value?(value)","anchor":"disabled_value?/1"},{"id":"extend_module/1","deprecated":false,"title":"extend_module(module)","anchor":"extend_module/1"},{"id":"extension_enabled?/2","deprecated":false,"title":"extension_enabled?(module_or_otp_app, opts \\\\ [])","anchor":"extension_enabled?/2"},{"id":"extension_loaded?/1","deprecated":false,"title":"extension_loaded?(module_or_otp_app)","anchor":"extension_loaded?/1"},{"id":"function_ast/2","deprecated":false,"title":"function_ast(module, fun)","anchor":"function_ast/2"},{"id":"function_code/2","deprecated":false,"title":"function_code(module, fun)","anchor":"function_code/2"},{"id":"function_line_number/2","deprecated":false,"title":"function_line_number(module, fun)","anchor":"function_line_number/2"},{"id":"function_line_numbers/2","deprecated":false,"title":"function_line_numbers(module, fun)","anchor":"function_line_numbers/2"},{"id":"generate_reverse_router!/0","deprecated":false,"title":"generate_reverse_router!()","anchor":"generate_reverse_router!/0"},{"id":"has_extension_config?/1","deprecated":false,"title":"has_extension_config?(module_or_otp_app)","anchor":"has_extension_config?/1"},{"id":"import_if_enabled/2","deprecated":false,"title":"import_if_enabled(module, fallback_module \\\\ nil)","anchor":"import_if_enabled/2"},{"id":"inject_function/3","deprecated":false,"title":"inject_function(module, fun, target_module \\\\ nil)","anchor":"inject_function/3"},{"id":"macro_inspect/1","deprecated":false,"title":"macro_inspect(fun)","anchor":"macro_inspect/1"},{"id":"maybe_extension_loaded/1","deprecated":false,"title":"maybe_extension_loaded(module_or_otp_app)","anchor":"maybe_extension_loaded/1"},{"id":"maybe_extension_loaded!/1","deprecated":false,"title":"maybe_extension_loaded!(module_or_otp_app)","anchor":"maybe_extension_loaded!/1"},{"id":"maybe_module/2","deprecated":false,"title":"maybe_module(module, opts \\\\ [])","anchor":"maybe_module/2"},{"id":"maybe_module!/2","deprecated":false,"title":"maybe_module!(module, opts \\\\ [])","anchor":"maybe_module!/2"},{"id":"maybe_module_loaded/1","deprecated":false,"title":"maybe_module_loaded(module)","anchor":"maybe_module_loaded/1"},{"id":"maybe_schema_or_pointer/1","deprecated":false,"title":"maybe_schema_or_pointer(schema_module)","anchor":"maybe_schema_or_pointer/1"},{"id":"module_code/1","deprecated":false,"title":"module_code(module)","anchor":"module_code/1"},{"id":"module_enabled?/2","deprecated":false,"title":"module_enabled?(module, opts \\\\ [])","anchor":"module_enabled?/2"},{"id":"module_exists?/1","deprecated":false,"title":"module_exists?(module)","anchor":"module_exists?/1"},{"id":"module_exists_or/2","deprecated":false,"title":"module_exists_or(module, fallback)","anchor":"module_exists_or/2"},{"id":"module_file/1","deprecated":false,"title":"module_file(module)","anchor":"module_file/1"},{"id":"module_file_code/1","deprecated":false,"title":"module_file_code(module)","anchor":"module_file_code/1"},{"id":"quoted_import_if_enabled/3","deprecated":false,"title":"quoted_import_if_enabled(module, fallback_module \\\\ nil, caller \\\\ nil)","anchor":"quoted_import_if_enabled/3"},{"id":"quoted_require_if_enabled/3","deprecated":false,"title":"quoted_require_if_enabled(module, fallback_module \\\\ nil, caller \\\\ nil)","anchor":"quoted_require_if_enabled/3"},{"id":"quoted_use_if_enabled/3","deprecated":false,"title":"quoted_use_if_enabled(module, fallback_module \\\\ nil, caller \\\\ nil)","anchor":"quoted_use_if_enabled/3"},{"id":"require_if_enabled/2","deprecated":false,"title":"require_if_enabled(module, fallback_module \\\\ nil)","anchor":"require_if_enabled/2"},{"id":"split_lines/1","deprecated":false,"title":"split_lines(string)","anchor":"split_lines/1"},{"id":"use_if_enabled/2","deprecated":false,"title":"use_if_enabled(module, fallback_module \\\\ nil)","anchor":"use_if_enabled/2"}],"key":"functions"}],"nested_title":".Common.Extend","nested_context":"Bonfire"},{"id":"Bonfire.Common.ExtensionBehaviour","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.ExtensionBehaviour","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"c:modules/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"adopters_of_behaviour/1","deprecated":false,"title":"adopters_of_behaviour(behaviour \\\\ __MODULE__)","anchor":"adopters_of_behaviour/1"},{"id":"apply_modules/2","deprecated":false,"title":"apply_modules(modules, fun)","anchor":"apply_modules/2"},{"id":"apply_modules_cached/2","deprecated":false,"title":"apply_modules_cached(modules, fun)","anchor":"apply_modules_cached/2"},{"id":"apps_to_scan/0","deprecated":false,"title":"apps_to_scan()","anchor":"apps_to_scan/0"},{"id":"behaviour_app_modules/2","deprecated":false,"title":"behaviour_app_modules(behaviour, behaviours \\\\ nil)","anchor":"behaviour_app_modules/2"},{"id":"behaviour_modules/2","deprecated":false,"title":"behaviour_modules(behaviour, behaviours \\\\ nil)","anchor":"behaviour_modules/2"},{"id":"behaviours/0","deprecated":false,"title":"behaviours()","anchor":"behaviours/0"},{"id":"cached_behaviours/0","deprecated":false,"title":"cached_behaviours()","anchor":"cached_behaviours/0"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"find_adopters_of_behaviours/1","deprecated":false,"title":"find_adopters_of_behaviours(behaviours \\\\ find_extension_behaviours())","anchor":"find_adopters_of_behaviours/1"},{"id":"find_extension_behaviours/0","deprecated":false,"title":"find_extension_behaviours()","anchor":"find_extension_behaviours/0"},{"id":"module_behaviours/1","deprecated":false,"title":"module_behaviours(module \\\\ __MODULE__)","anchor":"module_behaviours/1"},{"id":"populate/0","deprecated":false,"title":"populate()","anchor":"populate/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Common.ExtensionBehaviour","nested_context":"Bonfire"},{"id":"Bonfire.Common.ExtensionModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.ExtensionModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"declared_extension/0","deprecated":false,"title":"declared_extension()","anchor":"c:declared_extension/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"declared_extension/1","deprecated":false,"title":"declared_extension(module)","anchor":"declared_extension/1"},{"id":"declared_extensions/1","deprecated":false,"title":"declared_extensions(modules \\\\ app_modules())","anchor":"declared_extensions/1"},{"id":"default_nav/0","deprecated":false,"title":"default_nav()","anchor":"default_nav/0"},{"id":"default_nav/1","deprecated":false,"title":"default_nav(app)","anchor":"default_nav/1"},{"id":"extension/1","deprecated":false,"title":"extension(app)","anchor":"extension/1"},{"id":"extension_function_error/2","deprecated":false,"title":"extension_function_error(error, args)","anchor":"extension_function_error/2"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Common.ExtensionModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.Extensions","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Extensions","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"data/0","deprecated":false,"title":"data()","anchor":"data/0"},{"id":"get_branch/1","deprecated":false,"title":"get_branch(arg1)","anchor":"get_branch/1"},{"id":"get_code_link/1","deprecated":false,"title":"get_code_link(dep)","anchor":"get_code_link/1"},{"id":"get_link/1","deprecated":false,"title":"get_link(dep)","anchor":"get_link/1"},{"id":"get_version/1","deprecated":false,"title":"get_version(dep)","anchor":"get_version/1"},{"id":"get_version_link/1","deprecated":false,"title":"get_version_link(dep)","anchor":"get_version_link/1"},{"id":"global_disable/1","deprecated":false,"title":"global_disable(extension)","anchor":"global_disable/1"},{"id":"global_enable/1","deprecated":false,"title":"global_enable(extension)","anchor":"global_enable/1"},{"id":"loaded_deps/1","deprecated":false,"title":"loaded_deps(opts \\\\ [])","anchor":"loaded_deps/1"}],"key":"functions"}],"nested_title":".Common.Extensions","nested_context":"Bonfire"},{"id":"Bonfire.Common.Extensions.Diff","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Extensions.Diff","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"analyse_repo_latest_diff_stream/1","deprecated":false,"title":"analyse_repo_latest_diff_stream(path_diff)","anchor":"analyse_repo_latest_diff_stream/1"},{"id":"generate_diff/2","deprecated":false,"title":"generate_diff(ref_or_branch, repo_path)","anchor":"generate_diff/2"},{"id":"git!/4","deprecated":false,"title":"git!(args, repo_path \\\\ \".\", into \\\\ default_into(), original_cwd \\\\ root())","anchor":"git!/4"},{"id":"git_add_all/1","deprecated":false,"title":"git_add_all(repo_path)","anchor":"git_add_all/1"},{"id":"git_fetch/1","deprecated":false,"title":"git_fetch(repo_path)","anchor":"git_fetch/1"},{"id":"git_generate_diff/4","deprecated":false,"title":"git_generate_diff(ref_or_branch, repo_path, path_output, extra_opt \\\\ \"--cached\")","anchor":"git_generate_diff/4"},{"id":"git_pre_configure/1","deprecated":false,"title":"git_pre_configure(repo_path)","anchor":"git_pre_configure/1"},{"id":"parse_repo_latest_diff/1","deprecated":false,"title":"parse_repo_latest_diff(path_diff)","anchor":"parse_repo_latest_diff/1"},{"id":"repo_latest_diff/3","deprecated":false,"title":"repo_latest_diff(ref_or_branch, repo_path, msg \\\\ nil)","anchor":"repo_latest_diff/3"},{"id":"root/0","deprecated":false,"title":"root()","anchor":"root/0"},{"id":"tmp_path/1","deprecated":false,"title":"tmp_path(prefix)","anchor":"tmp_path/1"}],"key":"functions"}],"nested_title":".Common.Extensions.Diff","nested_context":"Bonfire"},{"id":"Bonfire.Common.HTTP","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.HTTP","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"delete/4","deprecated":false,"title":"delete(url, body \\\\ \"\", headers \\\\ [], options \\\\ [])","anchor":"delete/4"},{"id":"get/3","deprecated":false,"title":"get(url, headers \\\\ [], options \\\\ [])","anchor":"get/3"},{"id":"get_cached/1","deprecated":false,"title":"get_cached(url)","anchor":"get_cached/1"},{"id":"patch/4","deprecated":false,"title":"patch(url, body, headers \\\\ [], options \\\\ [])","anchor":"patch/4"},{"id":"post/4","deprecated":false,"title":"post(url, body, headers \\\\ [], options \\\\ [])","anchor":"post/4"},{"id":"put/4","deprecated":false,"title":"put(url, body, headers \\\\ [], options \\\\ [])","anchor":"put/4"},{"id":"request/5","deprecated":false,"title":"request(method, url, body \\\\ \"\", headers \\\\ [], options \\\\ [])","anchor":"request/5"}],"key":"functions"}],"nested_title":".Common.HTTP","nested_context":"Bonfire"},{"id":"Bonfire.Common.HTTP.Connection","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.HTTP.Connection","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"adapter_options/2","deprecated":false,"title":"adapter_options(adapter \\\\ Tesla.Adapter.Hackney, opts)","anchor":"adapter_options/2"},{"id":"new/1","deprecated":false,"title":"new(opts \\\\ [])","anchor":"new/1"}],"key":"functions"}],"nested_title":".Common.HTTP.Connection","nested_context":"Bonfire"},{"id":"Bonfire.Common.HTTP.RequestBuilder","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.HTTP.RequestBuilder","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_param/4","deprecated":false,"title":"add_param(request, atom1, atom2, values)","anchor":"add_param/4"},{"id":"headers/2","deprecated":false,"title":"headers(request, header_list)","anchor":"headers/2"},{"id":"method/2","deprecated":false,"title":"method(request, m)","anchor":"method/2"},{"id":"opts/2","deprecated":false,"title":"opts(request, options)","anchor":"opts/2"},{"id":"url/2","deprecated":false,"title":"url(request, u)","anchor":"url/2"}],"key":"functions"}],"nested_title":".Common.HTTP.RequestBuilder","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"default_locale/0","deprecated":false,"title":"default_locale()","anchor":"default_locale/0"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"get_locale/0"},{"id":"get_locale_id/0","deprecated":false,"title":"get_locale_id()","anchor":"get_locale_id/0"},{"id":"known_locales/0","deprecated":false,"title":"known_locales()","anchor":"known_locales/0"},{"id":"locale_name/1","deprecated":false,"title":"locale_name(locale)","anchor":"locale_name/1"},{"id":"put_locale/1","deprecated":false,"title":"put_locale(locale)","anchor":"put_locale/1"},{"id":"set_locale_config/0","deprecated":false,"title":"set_locale_config()","anchor":"set_locale_config/0"}],"key":"functions"}],"nested_title":".Common.Localise","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"available_locale_name?/1","deprecated":false,"title":"available_locale_name?(locale_name)","anchor":"available_locale_name?/1"},{"id":"default_locale/0","deprecated":false,"title":"default_locale()","anchor":"default_locale/0"},{"id":"default_territory/0","deprecated":false,"title":"default_territory()","anchor":"default_territory/0"},{"id":"ellipsis/2","deprecated":false,"title":"ellipsis(string, options \\\\ [])","anchor":"ellipsis/2"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"get_locale/0"},{"id":"known_calendars/0","deprecated":false,"title":"known_calendars()","anchor":"known_calendars/0"},{"id":"known_currencies/0","deprecated":false,"title":"known_currencies()","anchor":"known_currencies/0"},{"id":"known_gettext_locale_name/1","deprecated":false,"title":"known_gettext_locale_name(locale_name)","anchor":"known_gettext_locale_name/1"},{"id":"known_gettext_locale_name?/1","deprecated":false,"title":"known_gettext_locale_name?(locale_name)","anchor":"known_gettext_locale_name?/1"},{"id":"known_gettext_locale_names/0","deprecated":false,"title":"known_gettext_locale_names()","anchor":"known_gettext_locale_names/0"},{"id":"known_locale_name/1","deprecated":false,"title":"known_locale_name(locale_name)","anchor":"known_locale_name/1"},{"id":"known_locale_name?/1","deprecated":false,"title":"known_locale_name?(locale_name)","anchor":"known_locale_name?/1"},{"id":"known_locale_names/0","deprecated":false,"title":"known_locale_names()","anchor":"known_locale_names/0"},{"id":"known_number_system_types/0","deprecated":false,"title":"known_number_system_types()","anchor":"known_number_system_types/0"},{"id":"known_number_systems/0","deprecated":false,"title":"known_number_systems()","anchor":"known_number_systems/0"},{"id":"known_rbnf_locale_name/1","deprecated":false,"title":"known_rbnf_locale_name(locale_name)","anchor":"known_rbnf_locale_name/1"},{"id":"known_rbnf_locale_name?/1","deprecated":false,"title":"known_rbnf_locale_name?(locale_name)","anchor":"known_rbnf_locale_name?/1"},{"id":"known_rbnf_locale_names/0","deprecated":false,"title":"known_rbnf_locale_names()","anchor":"known_rbnf_locale_names/0"},{"id":"known_territories/0","deprecated":false,"title":"known_territories()","anchor":"known_territories/0"},{"id":"normalize_lenient_parse/3","deprecated":false,"title":"normalize_lenient_parse(string, scope, locale \\\\ get_locale())","anchor":"normalize_lenient_parse/3"},{"id":"put_gettext_locale/1","deprecated":false,"title":"put_gettext_locale(locale)","anchor":"put_gettext_locale/1"},{"id":"put_locale/1","deprecated":false,"title":"put_locale(locale_name)","anchor":"put_locale/1"},{"id":"quote/2","deprecated":false,"title":"quote(string, options \\\\ [])","anchor":"quote/2"},{"id":"unknown_locale_names/0","deprecated":false,"title":"unknown_locale_names()","anchor":"unknown_locale_names/0"},{"id":"validate_calendar/1","deprecated":false,"title":"validate_calendar(calendar)","anchor":"validate_calendar/1"},{"id":"validate_currency/1","deprecated":false,"title":"validate_currency(currency)","anchor":"validate_currency/1"},{"id":"validate_locale/1","deprecated":false,"title":"validate_locale(locale)","anchor":"validate_locale/1"},{"id":"validate_number_system/1","deprecated":false,"title":"validate_number_system(number_system)","anchor":"validate_number_system/1"},{"id":"validate_number_system_type/1","deprecated":false,"title":"validate_number_system_type(number_system_type)","anchor":"validate_number_system_type/1"},{"id":"validate_territory/1","deprecated":false,"title":"validate_territory(territory)","anchor":"validate_territory/1"},{"id":"with_locale/2","deprecated":false,"title":"with_locale(locale, fun)","anchor":"with_locale/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.AcceptLanguage","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"best_match/1","deprecated":false,"title":"best_match(accept_language)","anchor":"best_match/1"},{"id":"parse/1","deprecated":false,"title":"parse(tokens_or_string)","anchor":"parse/1"},{"id":"parse!/1","deprecated":false,"title":"parse!(accept_language)","anchor":"parse!/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.AcceptLanguage","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Calendar","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Calendar","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"calendar_from_locale/1","deprecated":false,"title":"calendar_from_locale(locale)","anchor":"calendar_from_locale/1"},{"id":"calendar_from_territory/1","deprecated":false,"title":"calendar_from_territory(territory)","anchor":"calendar_from_territory/1"},{"id":"cyclic_years/2","deprecated":false,"title":"cyclic_years(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"cyclic_years/2"},{"id":"day_periods/2","deprecated":false,"title":"day_periods(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"day_periods/2"},{"id":"days/2","deprecated":false,"title":"days(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"days/2"},{"id":"eras/2","deprecated":false,"title":"eras(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"eras/2"},{"id":"month_patterns/2","deprecated":false,"title":"month_patterns(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"month_patterns/2"},{"id":"months/2","deprecated":false,"title":"months(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"months/2"},{"id":"quarters/2","deprecated":false,"title":"quarters(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"quarters/2"},{"id":"strftime_options!/2","deprecated":false,"title":"strftime_options!(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), options \\\\ [])","anchor":"strftime_options!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Calendar","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Currency","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Currency","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"currencies_for_locale/3","deprecated":false,"title":"currencies_for_locale(locale, only \\\\ :all, except \\\\ nil)","anchor":"currencies_for_locale/3"},{"id":"currencies_for_locale!/3","deprecated":false,"title":"currencies_for_locale!(locale, only \\\\ :all, except \\\\ nil)","anchor":"currencies_for_locale!/3"},{"id":"currency_for_code/2","deprecated":false,"title":"currency_for_code(currency_or_currency_code, options \\\\ [locale: Bonfire.Common.Localise.Cldr.default_locale()])","anchor":"currency_for_code/2"},{"id":"currency_for_code!/2","deprecated":false,"title":"currency_for_code!(currency_or_currency_code, options \\\\ [locale: Bonfire.Common.Localise.Cldr.default_locale()])","anchor":"currency_for_code!/2"},{"id":"currency_from_locale/1","deprecated":false,"title":"currency_from_locale(locale)","anchor":"currency_from_locale/1"},{"id":"currency_history_for_locale/1","deprecated":false,"title":"currency_history_for_locale(language_tag)","anchor":"currency_history_for_locale/1"},{"id":"currency_strings/3","deprecated":false,"title":"currency_strings(locale, only \\\\ :all, except \\\\ nil)","anchor":"currency_strings/3"},{"id":"currency_strings!/3","deprecated":false,"title":"currency_strings!(locale_name, only \\\\ :all, except \\\\ nil)","anchor":"currency_strings!/3"},{"id":"current_currency_from_locale/1","deprecated":false,"title":"current_currency_from_locale(locale)","anchor":"current_currency_from_locale/1"},{"id":"current_territory_currencies/0","deprecated":false,"title":"current_territory_currencies()","anchor":"current_territory_currencies/0"},{"id":"known_currencies/0","deprecated":false,"title":"known_currencies()","anchor":"known_currencies/0"},{"id":"known_currency?/1","deprecated":false,"title":"known_currency?(code)","anchor":"known_currency?/1"},{"id":"known_currency_code/1","deprecated":false,"title":"known_currency_code(currency_code)","anchor":"known_currency_code/1"},{"id":"known_currency_code?/1","deprecated":false,"title":"known_currency_code?(currency_code)","anchor":"known_currency_code?/1"},{"id":"known_currency_codes/0","deprecated":false,"title":"known_currency_codes()","anchor":"known_currency_codes/0"},{"id":"new/2","deprecated":false,"title":"new(currency, options \\\\ [])","anchor":"new/2"},{"id":"pluralize/3","deprecated":false,"title":"pluralize(number, currency, options \\\\ [])","anchor":"pluralize/3"},{"id":"strings_for_currency/2","deprecated":false,"title":"strings_for_currency(currency, locale)","anchor":"strings_for_currency/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Currency","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Date","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Date","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(date, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(date, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Date","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Date.Interval","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Date.Interval","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_to_string!/3","deprecated":false,"title":"do_to_string!(from, to, options)","anchor":"do_to_string!/3"},{"id":"to_string/3","deprecated":false,"title":"to_string(from, to, options)","anchor":"to_string/3"},{"id":"to_string!/3","deprecated":false,"title":"to_string!(from, to, options)","anchor":"to_string!/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Date.Interval","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(date_time, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(date_time, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime.Format","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime.Format","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"calendar/0","deprecated":false,"title":"calendar()","anchor":"t:calendar/0"},{"id":"formats/0","deprecated":false,"title":"formats()","anchor":"t:formats/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"calendars_for/1","deprecated":false,"title":"calendars_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"calendars_for/1"},{"id":"date_formats/2","deprecated":false,"title":"date_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_formats/2"},{"id":"date_time_at_formats/2","deprecated":false,"title":"date_time_at_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_at_formats/2"},{"id":"date_time_available_formats/2","deprecated":false,"title":"date_time_available_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_available_formats/2"},{"id":"date_time_formats/2","deprecated":false,"title":"date_time_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_formats/2"},{"id":"date_time_interval_fallback/2","deprecated":false,"title":"date_time_interval_fallback(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_interval_fallback/2"},{"id":"date_time_interval_formats/2","deprecated":false,"title":"date_time_interval_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_interval_formats/2"},{"id":"day_period_for/2","deprecated":false,"title":"day_period_for(time, language)","anchor":"day_period_for/2"},{"id":"gmt_format/1","deprecated":false,"title":"gmt_format(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"gmt_format/1"},{"id":"gmt_zero_format/1","deprecated":false,"title":"gmt_zero_format(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"gmt_zero_format/1"},{"id":"hour_format/1","deprecated":false,"title":"hour_format(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"hour_format/1"},{"id":"language_has_noon_and_midnight?/1","deprecated":false,"title":"language_has_noon_and_midnight?(locale)","anchor":"language_has_noon_and_midnight?/1"},{"id":"time_formats/2","deprecated":false,"title":"time_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"time_formats/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime.Format","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime.Formatter","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime.Formatter","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"format/4","deprecated":false,"title":"format(date, format, locale \\\\ Cldr.get_locale(), options \\\\ [])","anchor":"format/4"},{"id":"gmt_tz_format/3","deprecated":false,"title":"gmt_tz_format(locale, offset, options \\\\ [])","anchor":"gmt_tz_format/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime.Formatter","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime.Interval","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_to_string/3","deprecated":false,"title":"do_to_string(from, to, options)","anchor":"do_to_string/3"},{"id":"do_to_string!/3","deprecated":false,"title":"do_to_string!(from, to, options)","anchor":"do_to_string!/3"},{"id":"to_string/3","deprecated":false,"title":"to_string(from, to, options \\\\ [])","anchor":"to_string/3"},{"id":"to_string!/3","deprecated":false,"title":"to_string!(from, to, options \\\\ [])","anchor":"to_string!/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime.Interval","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime.Relative","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime.Relative","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(time, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(time, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime.Relative","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Interval","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Interval","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(interval, options)","anchor":"to_string/2"},{"id":"to_string/3","deprecated":false,"title":"to_string(from, to, options \\\\ [])","anchor":"to_string/3"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(interval, options)","anchor":"to_string!/2"},{"id":"to_string!/3","deprecated":false,"title":"to_string!(from, to, options \\\\ [])","anchor":"to_string!/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Interval","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Language","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Language","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"styles/0","deprecated":false,"title":"styles()","anchor":"t:styles/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"available_languages/1","deprecated":false,"title":"available_languages(locale \\\\ get_locale())","anchor":"available_languages/1"},{"id":"known_languages/1","deprecated":false,"title":"known_languages(locale \\\\ get_locale())","anchor":"known_languages/1"},{"id":"to_string/2","deprecated":false,"title":"to_string(key, options \\\\ [])","anchor":"to_string/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Language","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.List","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.List","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"intersperse/2","deprecated":false,"title":"intersperse(list, options \\\\ [])","anchor":"intersperse/2"},{"id":"intersperse/3","deprecated":false,"title":"intersperse(list, locale, pattern_type)","anchor":"intersperse/3"},{"id":"intersperse!/2","deprecated":false,"title":"intersperse!(list, options \\\\ [])","anchor":"intersperse!/2"},{"id":"list_formats_for/1","deprecated":false,"title":"list_formats_for(locale_name)","anchor":"list_formats_for/1"},{"id":"list_patterns_for/1","deprecated":false,"title":"list_patterns_for(locale_name)","anchor":"list_patterns_for/1"},{"id":"to_string/2","deprecated":false,"title":"to_string(list, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(list, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.List","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Locale","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Locale","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fallback_locale_names/1","deprecated":false,"title":"fallback_locale_names(locale)","anchor":"fallback_locale_names/1"},{"id":"fallback_locales/1","deprecated":false,"title":"fallback_locales(locale)","anchor":"fallback_locales/1"},{"id":"locale_for_territory/1","deprecated":false,"title":"locale_for_territory(territory)","anchor":"locale_for_territory/1"},{"id":"locale_from_host/2","deprecated":false,"title":"locale_from_host(host, options \\\\ [])","anchor":"locale_from_host/2"},{"id":"new/1","deprecated":false,"title":"new(locale_name)","anchor":"new/1"},{"id":"new!/1","deprecated":false,"title":"new!(locale_name)","anchor":"new!/1"},{"id":"script_direction_from_locale/1","deprecated":false,"title":"script_direction_from_locale(locale)","anchor":"script_direction_from_locale/1"},{"id":"territory_from_host/1","deprecated":false,"title":"territory_from_host(host)","anchor":"territory_from_host/1"},{"id":"territory_from_locale/1","deprecated":false,"title":"territory_from_locale(locale)","anchor":"territory_from_locale/1"},{"id":"timezone_from_locale/1","deprecated":false,"title":"timezone_from_locale(locale)","anchor":"timezone_from_locale/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Locale","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"parse/2","deprecated":false,"title":"parse(string, options \\\\ [])","anchor":"parse/2"},{"id":"resolve_currencies/2","deprecated":false,"title":"resolve_currencies(list, options \\\\ [])","anchor":"resolve_currencies/2"},{"id":"resolve_currency/2","deprecated":false,"title":"resolve_currency(string, options \\\\ [])","anchor":"resolve_currency/2"},{"id":"resolve_per/2","deprecated":false,"title":"resolve_per(string, options \\\\ [])","anchor":"resolve_per/2"},{"id":"resolve_pers/2","deprecated":false,"title":"resolve_pers(list, options \\\\ [])","anchor":"resolve_pers/2"},{"id":"scan/2","deprecated":false,"title":"scan(string, options \\\\ [])","anchor":"scan/2"},{"id":"to_approx_string/2","deprecated":false,"title":"to_approx_string(number, options \\\\ [])","anchor":"to_approx_string/2"},{"id":"to_at_least_string/2","deprecated":false,"title":"to_at_least_string(number, options \\\\ [])","anchor":"to_at_least_string/2"},{"id":"to_at_most_string/2","deprecated":false,"title":"to_at_most_string(number, options \\\\ [])","anchor":"to_at_most_string/2"},{"id":"to_range_string/2","deprecated":false,"title":"to_range_string(range, options \\\\ [])","anchor":"to_range_string/2"},{"id":"to_string/2","deprecated":false,"title":"to_string(number, options \\\\ default_options())","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(number, options \\\\ default_options())","anchor":"to_string!/2"},{"id":"validate_number_system/2","deprecated":false,"title":"validate_number_system(locale, number_system)","anchor":"validate_number_system/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Cardinal","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"available_locale_names/0","deprecated":false,"title":"available_locale_names()","anchor":"available_locale_names/0"},{"id":"known_locale_names/0","deprecated":false,"title":"known_locale_names()","anchor":"known_locale_names/0"},{"id":"plural_rule/3","deprecated":false,"title":"plural_rule(number, locale, rounding \\\\ Math.default_rounding())","anchor":"plural_rule/3"},{"id":"plural_rules/0","deprecated":false,"title":"plural_rules()","anchor":"plural_rules/0"},{"id":"plural_rules_for/1","deprecated":false,"title":"plural_rules_for(locale_name)","anchor":"plural_rules_for/1"},{"id":"pluralize/3","deprecated":false,"title":"pluralize(number, locale_name, substitutions)","anchor":"pluralize/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Cardinal","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Format","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Format","sections":[{"id":"Number Pattern Examples","anchor":"module-number-pattern-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_formats_for/1","deprecated":false,"title":"all_formats_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"all_formats_for/1"},{"id":"all_formats_for!/1","deprecated":false,"title":"all_formats_for!(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"all_formats_for!/1"},{"id":"currency_spacing/2","deprecated":false,"title":"currency_spacing(locale, number_system)","anchor":"currency_spacing/2"},{"id":"decimal_format_list/0","deprecated":false,"title":"decimal_format_list()","anchor":"decimal_format_list/0"},{"id":"decimal_format_list_for/1","deprecated":false,"title":"decimal_format_list_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"decimal_format_list_for/1"},{"id":"default_grouping_for/1","deprecated":false,"title":"default_grouping_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"default_grouping_for/1"},{"id":"default_grouping_for!/1","deprecated":false,"title":"default_grouping_for!(locale)","anchor":"default_grouping_for!/1"},{"id":"formats_for/2","deprecated":false,"title":"formats_for(locale \\\\ Bonfire.Common.Localise.Cldr.default_locale(), number_system \\\\ Cldr.Number.System.default_number_system_type())","anchor":"formats_for/2"},{"id":"formats_for!/2","deprecated":false,"title":"formats_for!(locale \\\\ Bonfire.Common.Localise.Cldr.default_locale(), number_system \\\\ Cldr.Number.System.default_number_system_type())","anchor":"formats_for!/2"},{"id":"minimum_grouping_digits_for/1","deprecated":false,"title":"minimum_grouping_digits_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"minimum_grouping_digits_for/1"},{"id":"minimum_grouping_digits_for!/1","deprecated":false,"title":"minimum_grouping_digits_for!(locale)","anchor":"minimum_grouping_digits_for!/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Format","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"metadata!/1","deprecated":false,"title":"metadata!(format)","anchor":"metadata!/1"},{"id":"to_string/3","deprecated":false,"title":"to_string(number, format, options \\\\ [])","anchor":"to_string/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Formatter.Decimal","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Ordinal","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"available_locale_names/0","deprecated":false,"title":"available_locale_names()","anchor":"available_locale_names/0"},{"id":"known_locale_names/0","deprecated":false,"title":"known_locale_names()","anchor":"known_locale_names/0"},{"id":"plural_rule/3","deprecated":false,"title":"plural_rule(number, locale, rounding \\\\ Math.default_rounding())","anchor":"plural_rule/3"},{"id":"plural_rules/0","deprecated":false,"title":"plural_rules()","anchor":"plural_rules/0"},{"id":"plural_rules_for/1","deprecated":false,"title":"plural_rules_for(locale_name)","anchor":"plural_rules_for/1"},{"id":"pluralize/3","deprecated":false,"title":"pluralize(number, locale_name, substitutions)","anchor":"pluralize/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Ordinal","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"plural_rule/3","deprecated":false,"title":"plural_rule(first, last, locale)","anchor":"plural_rule/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.PluralRule.Range","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Symbol","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Symbol","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_decimal_symbols/0","deprecated":false,"title":"all_decimal_symbols()","anchor":"all_decimal_symbols/0"},{"id":"all_decimal_symbols_class/0","deprecated":false,"title":"all_decimal_symbols_class()","anchor":"all_decimal_symbols_class/0"},{"id":"all_grouping_symbols/0","deprecated":false,"title":"all_grouping_symbols()","anchor":"all_grouping_symbols/0"},{"id":"all_grouping_symbols_class/0","deprecated":false,"title":"all_grouping_symbols_class()","anchor":"all_grouping_symbols_class/0"},{"id":"number_symbols_for/1","deprecated":false,"title":"number_symbols_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"number_symbols_for/1"},{"id":"number_symbols_for/2","deprecated":false,"title":"number_symbols_for(locale, number_system)","anchor":"number_symbols_for/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Symbol","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.System","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.System","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"number_system_for/2","deprecated":false,"title":"number_system_for(locale, system_name)","anchor":"number_system_for/2"},{"id":"number_system_from_locale/1","deprecated":false,"title":"number_system_from_locale(locale)","anchor":"number_system_from_locale/1"},{"id":"number_system_names_for/1","deprecated":false,"title":"number_system_names_for(locale)","anchor":"number_system_names_for/1"},{"id":"number_system_names_for!/1","deprecated":false,"title":"number_system_names_for!(locale)","anchor":"number_system_names_for!/1"},{"id":"number_system_types_for/1","deprecated":false,"title":"number_system_types_for(locale)","anchor":"number_system_types_for/1"},{"id":"number_systems_for/1","deprecated":false,"title":"number_systems_for(locale)","anchor":"number_systems_for/1"},{"id":"number_systems_for!/1","deprecated":false,"title":"number_systems_for!(locale)","anchor":"number_systems_for!/1"},{"id":"number_systems_like/2","deprecated":false,"title":"number_systems_like(locale, number_system)","anchor":"number_systems_like/2"},{"id":"system_name_from/2","deprecated":false,"title":"system_name_from(system_name, locale)","anchor":"system_name_from/2"},{"id":"to_system/2","deprecated":false,"title":"to_system(number, system)","anchor":"to_system/2"},{"id":"to_system!/2","deprecated":false,"title":"to_system!(number, system_name)","anchor":"to_system!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.System","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Transliterate","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"transliterate/3","deprecated":false,"title":"transliterate(sequence, locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), number_system \\\\ System.default_number_system_type())","anchor":"transliterate/3"},{"id":"transliterate!/3","deprecated":false,"title":"transliterate!(sequence, locale, number_system)","anchor":"transliterate!/3"},{"id":"transliterate_digits/3","deprecated":false,"title":"transliterate_digits(digits, from_system, to_system)","anchor":"transliterate_digits/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Transliterate","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_rule_sets/0","deprecated":false,"title":"all_rule_sets()","anchor":"all_rule_sets/0"},{"id":"armenian_lower/1","deprecated":false,"title":"armenian_lower(number)","anchor":"armenian_lower/1"},{"id":"armenian_lower/2","deprecated":false,"title":"armenian_lower(number, locale)","anchor":"armenian_lower/2"},{"id":"armenian_upper/1","deprecated":false,"title":"armenian_upper(number)","anchor":"armenian_upper/1"},{"id":"armenian_upper/2","deprecated":false,"title":"armenian_upper(number, locale)","anchor":"armenian_upper/2"},{"id":"cyrillic_lower/1","deprecated":false,"title":"cyrillic_lower(number)","anchor":"cyrillic_lower/1"},{"id":"cyrillic_lower/2","deprecated":false,"title":"cyrillic_lower(number, locale)","anchor":"cyrillic_lower/2"},{"id":"cyrillic_lower_1_10/2","deprecated":false,"title":"cyrillic_lower_1_10(number, language_tag)","anchor":"cyrillic_lower_1_10/2"},{"id":"cyrillic_lower_final/2","deprecated":false,"title":"cyrillic_lower_final(number, language_tag)","anchor":"cyrillic_lower_final/2"},{"id":"cyrillic_lower_post/2","deprecated":false,"title":"cyrillic_lower_post(number, language_tag)","anchor":"cyrillic_lower_post/2"},{"id":"cyrillic_lower_thousands/2","deprecated":false,"title":"cyrillic_lower_thousands(number, language_tag)","anchor":"cyrillic_lower_thousands/2"},{"id":"ethiopic/1","deprecated":false,"title":"ethiopic(number)","anchor":"ethiopic/1"},{"id":"ethiopic/2","deprecated":false,"title":"ethiopic(number, locale)","anchor":"ethiopic/2"},{"id":"ethiopic_p1/2","deprecated":false,"title":"ethiopic_p1(number, language_tag)","anchor":"ethiopic_p1/2"},{"id":"ethiopic_p2/2","deprecated":false,"title":"ethiopic_p2(number, language_tag)","anchor":"ethiopic_p2/2"},{"id":"ethiopic_p3/2","deprecated":false,"title":"ethiopic_p3(number, language_tag)","anchor":"ethiopic_p3/2"},{"id":"ethiopic_p/2","deprecated":false,"title":"ethiopic_p(number, language_tag)","anchor":"ethiopic_p/2"},{"id":"georgian/1","deprecated":false,"title":"georgian(number)","anchor":"georgian/1"},{"id":"georgian/2","deprecated":false,"title":"georgian(number, locale)","anchor":"georgian/2"},{"id":"greek_lower/1","deprecated":false,"title":"greek_lower(number)","anchor":"greek_lower/1"},{"id":"greek_lower/2","deprecated":false,"title":"greek_lower(number, locale)","anchor":"greek_lower/2"},{"id":"greek_numeral_majuscules/2","deprecated":false,"title":"greek_numeral_majuscules(number, language_tag)","anchor":"greek_numeral_majuscules/2"},{"id":"greek_numeral_minuscules/2","deprecated":false,"title":"greek_numeral_minuscules(number, language_tag)","anchor":"greek_numeral_minuscules/2"},{"id":"greek_upper/1","deprecated":false,"title":"greek_upper(number)","anchor":"greek_upper/1"},{"id":"greek_upper/2","deprecated":false,"title":"greek_upper(number, locale)","anchor":"greek_upper/2"},{"id":"hebrew/1","deprecated":false,"title":"hebrew(number)","anchor":"hebrew/1"},{"id":"hebrew/2","deprecated":false,"title":"hebrew(number, locale)","anchor":"hebrew/2"},{"id":"hebrew_0_99/2","deprecated":false,"title":"hebrew_0_99(number, language_tag)","anchor":"hebrew_0_99/2"},{"id":"hebrew_item/1","deprecated":false,"title":"hebrew_item(number)","anchor":"hebrew_item/1"},{"id":"hebrew_item/2","deprecated":false,"title":"hebrew_item(number, locale)","anchor":"hebrew_item/2"},{"id":"hebrew_item_hundreds/2","deprecated":false,"title":"hebrew_item_hundreds(number, language_tag)","anchor":"hebrew_item_hundreds/2"},{"id":"hebrew_thousands/2","deprecated":false,"title":"hebrew_thousands(number, language_tag)","anchor":"hebrew_thousands/2"},{"id":"roman_lower/1","deprecated":false,"title":"roman_lower(number)","anchor":"roman_lower/1"},{"id":"roman_lower/2","deprecated":false,"title":"roman_lower(number, locale)","anchor":"roman_lower/2"},{"id":"roman_upper/1","deprecated":false,"title":"roman_upper(number)","anchor":"roman_upper/1"},{"id":"roman_upper/2","deprecated":false,"title":"roman_upper(number, locale)","anchor":"roman_upper/2"},{"id":"rule_sets/0","deprecated":false,"title":"rule_sets()","anchor":"rule_sets/0"},{"id":"rule_sets/1","deprecated":false,"title":"rule_sets(rbnf_locale_name)","anchor":"rule_sets/1"},{"id":"tamil/1","deprecated":false,"title":"tamil(number)","anchor":"tamil/1"},{"id":"tamil/2","deprecated":false,"title":"tamil(number, locale)","anchor":"tamil/2"},{"id":"tamil_thousands/2","deprecated":false,"title":"tamil_thousands(number, language_tag)","anchor":"tamil_thousands/2"},{"id":"zz_default/1","deprecated":false,"title":"zz_default(number)","anchor":"zz_default/1"},{"id":"zz_default/2","deprecated":false,"title":"zz_default(number, locale)","anchor":"zz_default/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Rbnf.NumberSystem","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_rule_sets/0","deprecated":false,"title":"all_rule_sets()","anchor":"all_rule_sets/0"},{"id":"digits_ordinal/2","deprecated":false,"title":"digits_ordinal(number, locale)","anchor":"digits_ordinal/2"},{"id":"digits_ordinal_feminine/2","deprecated":false,"title":"digits_ordinal_feminine(number, locale)","anchor":"digits_ordinal_feminine/2"},{"id":"digits_ordinal_feminine_plural/2","deprecated":false,"title":"digits_ordinal_feminine_plural(number, locale)","anchor":"digits_ordinal_feminine_plural/2"},{"id":"digits_ordinal_indicator_m/2","deprecated":false,"title":"digits_ordinal_indicator_m(number, language_tag)","anchor":"digits_ordinal_indicator_m/2"},{"id":"digits_ordinal_masculine/2","deprecated":false,"title":"digits_ordinal_masculine(number, locale)","anchor":"digits_ordinal_masculine/2"},{"id":"digits_ordinal_masculine_adjective/2","deprecated":false,"title":"digits_ordinal_masculine_adjective(number, locale)","anchor":"digits_ordinal_masculine_adjective/2"},{"id":"digits_ordinal_masculine_plural/2","deprecated":false,"title":"digits_ordinal_masculine_plural(number, locale)","anchor":"digits_ordinal_masculine_plural/2"},{"id":"dord_femabbrev/2","deprecated":false,"title":"dord_femabbrev(number, language_tag)","anchor":"dord_femabbrev/2"},{"id":"dord_mascabbrev/2","deprecated":false,"title":"dord_mascabbrev(number, language_tag)","anchor":"dord_mascabbrev/2"},{"id":"rule_sets/0","deprecated":false,"title":"rule_sets()","anchor":"rule_sets/0"},{"id":"rule_sets/1","deprecated":false,"title":"rule_sets(rbnf_locale_name)","anchor":"rule_sets/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Rbnf.Ordinal","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"after_hundred/2","deprecated":false,"title":"after_hundred(number, language_tag)","anchor":"after_hundred/2"},{"id":"after_thousand_or_more/2","deprecated":false,"title":"after_thousand_or_more(number, language_tag)","anchor":"after_thousand_or_more/2"},{"id":"all_rule_sets/0","deprecated":false,"title":"all_rule_sets()","anchor":"all_rule_sets/0"},{"id":"and/2","deprecated":false,"title":"number and language_tag","anchor":"and/2"},{"id":"and_o/2","deprecated":false,"title":"and_o(number, language_tag)","anchor":"and_o/2"},{"id":"cents_f/2","deprecated":false,"title":"cents_f(number, language_tag)","anchor":"cents_f/2"},{"id":"cents_m/2","deprecated":false,"title":"cents_m(number, language_tag)","anchor":"cents_m/2"},{"id":"cents_o/2","deprecated":false,"title":"cents_o(number, language_tag)","anchor":"cents_o/2"},{"id":"commas/2","deprecated":false,"title":"commas(number, language_tag)","anchor":"commas/2"},{"id":"commas_o/2","deprecated":false,"title":"commas_o(number, language_tag)","anchor":"commas_o/2"},{"id":"et_un/2","deprecated":false,"title":"et_un(number, language_tag)","anchor":"et_un/2"},{"id":"et_une/2","deprecated":false,"title":"et_une(number, language_tag)","anchor":"et_une/2"},{"id":"et_unieme/2","deprecated":false,"title":"et_unieme(number, language_tag)","anchor":"et_unieme/2"},{"id":"fem_with_a/2","deprecated":false,"title":"fem_with_a(number, language_tag)","anchor":"fem_with_a/2"},{"id":"fem_with_i/2","deprecated":false,"title":"fem_with_i(number, language_tag)","anchor":"fem_with_i/2"},{"id":"fem_with_o/2","deprecated":false,"title":"fem_with_o(number, language_tag)","anchor":"fem_with_o/2"},{"id":"lenient_parse/2","deprecated":false,"title":"lenient_parse(number, language_tag)","anchor":"lenient_parse/2"},{"id":"mille_o/2","deprecated":false,"title":"mille_o(number, language_tag)","anchor":"mille_o/2"},{"id":"msc_no_final/2","deprecated":false,"title":"msc_no_final(number, language_tag)","anchor":"msc_no_final/2"},{"id":"msc_with_a/2","deprecated":false,"title":"msc_with_a(number, language_tag)","anchor":"msc_with_a/2"},{"id":"msc_with_a_nofinal/2","deprecated":false,"title":"msc_with_a_nofinal(number, language_tag)","anchor":"msc_with_a_nofinal/2"},{"id":"msc_with_i/2","deprecated":false,"title":"msc_with_i(number, language_tag)","anchor":"msc_with_i/2"},{"id":"msc_with_i_nofinal/2","deprecated":false,"title":"msc_with_i_nofinal(number, language_tag)","anchor":"msc_with_i_nofinal/2"},{"id":"msc_with_o/2","deprecated":false,"title":"msc_with_o(number, language_tag)","anchor":"msc_with_o/2"},{"id":"msc_with_o_nofinal/2","deprecated":false,"title":"msc_with_o_nofinal(number, language_tag)","anchor":"msc_with_o_nofinal/2"},{"id":"msco_with_a/2","deprecated":false,"title":"msco_with_a(number, language_tag)","anchor":"msco_with_a/2"},{"id":"msco_with_i/2","deprecated":false,"title":"msco_with_i(number, language_tag)","anchor":"msco_with_i/2"},{"id":"msco_with_o/2","deprecated":false,"title":"msco_with_o(number, language_tag)","anchor":"msco_with_o/2"},{"id":"ordinal_esima/2","deprecated":false,"title":"ordinal_esima(number, language_tag)","anchor":"ordinal_esima/2"},{"id":"ordinal_esima_with_a/2","deprecated":false,"title":"ordinal_esima_with_a(number, language_tag)","anchor":"ordinal_esima_with_a/2"},{"id":"ordinal_esima_with_i/2","deprecated":false,"title":"ordinal_esima_with_i(number, language_tag)","anchor":"ordinal_esima_with_i/2"},{"id":"ordinal_esima_with_o/2","deprecated":false,"title":"ordinal_esima_with_o(number, language_tag)","anchor":"ordinal_esima_with_o/2"},{"id":"ordinal_esime/2","deprecated":false,"title":"ordinal_esime(number, language_tag)","anchor":"ordinal_esime/2"},{"id":"ordinal_esime_with_a/2","deprecated":false,"title":"ordinal_esime_with_a(number, language_tag)","anchor":"ordinal_esime_with_a/2"},{"id":"ordinal_esime_with_i/2","deprecated":false,"title":"ordinal_esime_with_i(number, language_tag)","anchor":"ordinal_esime_with_i/2"},{"id":"ordinal_esime_with_o/2","deprecated":false,"title":"ordinal_esime_with_o(number, language_tag)","anchor":"ordinal_esime_with_o/2"},{"id":"ordinal_esimi/2","deprecated":false,"title":"ordinal_esimi(number, language_tag)","anchor":"ordinal_esimi/2"},{"id":"ordinal_esimi_with_a/2","deprecated":false,"title":"ordinal_esimi_with_a(number, language_tag)","anchor":"ordinal_esimi_with_a/2"},{"id":"ordinal_esimi_with_i/2","deprecated":false,"title":"ordinal_esimi_with_i(number, language_tag)","anchor":"ordinal_esimi_with_i/2"},{"id":"ordinal_esimi_with_o/2","deprecated":false,"title":"ordinal_esimi_with_o(number, language_tag)","anchor":"ordinal_esimi_with_o/2"},{"id":"ordinal_esimo/2","deprecated":false,"title":"ordinal_esimo(number, language_tag)","anchor":"ordinal_esimo/2"},{"id":"ordinal_esimo_with_a/2","deprecated":false,"title":"ordinal_esimo_with_a(number, language_tag)","anchor":"ordinal_esimo_with_a/2"},{"id":"ordinal_esimo_with_i/2","deprecated":false,"title":"ordinal_esimo_with_i(number, language_tag)","anchor":"ordinal_esimo_with_i/2"},{"id":"ordinal_esimo_with_o/2","deprecated":false,"title":"ordinal_esimo_with_o(number, language_tag)","anchor":"ordinal_esimo_with_o/2"},{"id":"r2d_year/2","deprecated":false,"title":"r2d_year(number, language_tag)","anchor":"r2d_year/2"},{"id":"rule_sets/0","deprecated":false,"title":"rule_sets()","anchor":"rule_sets/0"},{"id":"rule_sets/1","deprecated":false,"title":"rule_sets(rbnf_locale_name)","anchor":"rule_sets/1"},{"id":"spellout_cardinal/2","deprecated":false,"title":"spellout_cardinal(number, locale)","anchor":"spellout_cardinal/2"},{"id":"spellout_cardinal_feminine/2","deprecated":false,"title":"spellout_cardinal_feminine(number, locale)","anchor":"spellout_cardinal_feminine/2"},{"id":"spellout_cardinal_feminine_cents/2","deprecated":false,"title":"spellout_cardinal_feminine_cents(number, language_tag)","anchor":"spellout_cardinal_feminine_cents/2"},{"id":"spellout_cardinal_masculine/2","deprecated":false,"title":"spellout_cardinal_masculine(number, locale)","anchor":"spellout_cardinal_masculine/2"},{"id":"spellout_cardinal_masculine_cents/2","deprecated":false,"title":"spellout_cardinal_masculine_cents(number, language_tag)","anchor":"spellout_cardinal_masculine_cents/2"},{"id":"spellout_cardinal_verbose/2","deprecated":false,"title":"spellout_cardinal_verbose(number, locale)","anchor":"spellout_cardinal_verbose/2"},{"id":"spellout_leading/2","deprecated":false,"title":"spellout_leading(number, language_tag)","anchor":"spellout_leading/2"},{"id":"spellout_numbering/2","deprecated":false,"title":"spellout_numbering(number, locale)","anchor":"spellout_numbering/2"},{"id":"spellout_numbering_cents/2","deprecated":false,"title":"spellout_numbering_cents(number, language_tag)","anchor":"spellout_numbering_cents/2"},{"id":"spellout_numbering_verbose/2","deprecated":false,"title":"spellout_numbering_verbose(number, locale)","anchor":"spellout_numbering_verbose/2"},{"id":"spellout_numbering_year/2","deprecated":false,"title":"spellout_numbering_year(number, locale)","anchor":"spellout_numbering_year/2"},{"id":"spellout_ordinal/2","deprecated":false,"title":"spellout_ordinal(number, locale)","anchor":"spellout_ordinal/2"},{"id":"spellout_ordinal_feminine/2","deprecated":false,"title":"spellout_ordinal_feminine(number, locale)","anchor":"spellout_ordinal_feminine/2"},{"id":"spellout_ordinal_feminine_cont/2","deprecated":false,"title":"spellout_ordinal_feminine_cont(number, language_tag)","anchor":"spellout_ordinal_feminine_cont/2"},{"id":"spellout_ordinal_feminine_conts/2","deprecated":false,"title":"spellout_ordinal_feminine_conts(number, language_tag)","anchor":"spellout_ordinal_feminine_conts/2"},{"id":"spellout_ordinal_feminine_plural/2","deprecated":false,"title":"spellout_ordinal_feminine_plural(number, locale)","anchor":"spellout_ordinal_feminine_plural/2"},{"id":"spellout_ordinal_masculine/2","deprecated":false,"title":"spellout_ordinal_masculine(number, locale)","anchor":"spellout_ordinal_masculine/2"},{"id":"spellout_ordinal_masculine_adjective/2","deprecated":false,"title":"spellout_ordinal_masculine_adjective(number, locale)","anchor":"spellout_ordinal_masculine_adjective/2"},{"id":"spellout_ordinal_masculine_cont/2","deprecated":false,"title":"spellout_ordinal_masculine_cont(number, language_tag)","anchor":"spellout_ordinal_masculine_cont/2"},{"id":"spellout_ordinal_masculine_conts/2","deprecated":false,"title":"spellout_ordinal_masculine_conts(number, language_tag)","anchor":"spellout_ordinal_masculine_conts/2"},{"id":"spellout_ordinal_masculine_plural/2","deprecated":false,"title":"spellout_ordinal_masculine_plural(number, locale)","anchor":"spellout_ordinal_masculine_plural/2"},{"id":"spellout_ordinal_verbose/2","deprecated":false,"title":"spellout_ordinal_verbose(number, locale)","anchor":"spellout_ordinal_verbose/2"},{"id":"subcents_f/2","deprecated":false,"title":"subcents_f(number, language_tag)","anchor":"subcents_f/2"},{"id":"subcents_m/2","deprecated":false,"title":"subcents_m(number, language_tag)","anchor":"subcents_m/2"},{"id":"subcents_o/2","deprecated":false,"title":"subcents_o(number, language_tag)","anchor":"subcents_o/2"},{"id":"teen/2","deprecated":false,"title":"teen(number, language_tag)","anchor":"teen/2"},{"id":"th/2","deprecated":false,"title":"th(number, language_tag)","anchor":"th/2"},{"id":"tieth/2","deprecated":false,"title":"tieth(number, language_tag)","anchor":"tieth/2"},{"id":"x_ty/2","deprecated":false,"title":"x_ty(number, language_tag)","anchor":"x_ty/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Rbnf.Spellout","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Time","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Time","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(time, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(time, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Time","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Time.Interval","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Time.Interval","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_to_string/3","deprecated":false,"title":"do_to_string(from, to, options)","anchor":"do_to_string/3"},{"id":"do_to_string!/3","deprecated":false,"title":"do_to_string!(from, to, options)","anchor":"do_to_string!/3"},{"id":"to_string/3","deprecated":false,"title":"to_string(from, to, options \\\\ [])","anchor":"to_string/3"},{"id":"to_string!/3","deprecated":false,"title":"to_string!(from, to, options \\\\ [])","anchor":"to_string!/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Time.Interval","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Unit","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Unit","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add/2","deprecated":false,"title":"add(unit_1, unit_2)","anchor":"add/2"},{"id":"add!/2","deprecated":false,"title":"add!(unit_1, unit_2)","anchor":"add!/2"},{"id":"compatible?/2","deprecated":false,"title":"compatible?(unit_1, unit_2)","anchor":"compatible?/2"},{"id":"convert/2","deprecated":false,"title":"convert(unit_1, to_unit)","anchor":"convert/2"},{"id":"convert!/2","deprecated":false,"title":"convert!(unit_1, to_unit)","anchor":"convert!/2"},{"id":"decompose/2","deprecated":false,"title":"decompose(unit, list)","anchor":"decompose/2"},{"id":"default_gender/1","deprecated":false,"title":"default_gender(locale_name)","anchor":"default_gender/1"},{"id":"default_style/0","deprecated":false,"title":"default_style()","anchor":"default_style/0"},{"id":"display_name/2","deprecated":false,"title":"display_name(unit, options \\\\ [])","anchor":"display_name/2"},{"id":"div/2","deprecated":false,"title":"div(unit_1, unit_2)","anchor":"div/2"},{"id":"div!/2","deprecated":false,"title":"div!(unit_1, unit_2)","anchor":"div!/2"},{"id":"grammatical_features/1","deprecated":false,"title":"grammatical_features(locale_name)","anchor":"grammatical_features/1"},{"id":"grammatical_gender/1","deprecated":false,"title":"grammatical_gender(locale_name)","anchor":"grammatical_gender/1"},{"id":"known_styles/0","deprecated":false,"title":"known_styles()","anchor":"known_styles/0"},{"id":"known_unit_categories/0","deprecated":false,"title":"known_unit_categories()","anchor":"known_unit_categories/0"},{"id":"known_units/0","deprecated":false,"title":"known_units()","anchor":"known_units/0"},{"id":"localize/1","deprecated":false,"title":"localize(unit)","anchor":"localize/1"},{"id":"localize/2","deprecated":false,"title":"localize(unit, options \\\\ [])","anchor":"localize/2"},{"id":"measurement_system?/2","deprecated":false,"title":"measurement_system?(unit, systems)","anchor":"measurement_system?/2"},{"id":"measurement_system_for/1","deprecated":true,"title":"measurement_system_for(territory)","anchor":"measurement_system_for/1"},{"id":"measurement_system_for/2","deprecated":true,"title":"measurement_system_for(territory, key)","anchor":"measurement_system_for/2"},{"id":"measurement_system_for_territory/1","deprecated":false,"title":"measurement_system_for_territory(territory)","anchor":"measurement_system_for_territory/1"},{"id":"measurement_system_for_territory/2","deprecated":false,"title":"measurement_system_for_territory(territory, key)","anchor":"measurement_system_for_territory/2"},{"id":"measurement_system_from_locale/1","deprecated":false,"title":"measurement_system_from_locale(locale)","anchor":"measurement_system_from_locale/1"},{"id":"measurement_system_from_locale/2","deprecated":false,"title":"measurement_system_from_locale(locale, category)","anchor":"measurement_system_from_locale/2"},{"id":"measurement_system_from_locale/3","deprecated":false,"title":"measurement_system_from_locale(locale, backend, category)","anchor":"measurement_system_from_locale/3"},{"id":"measurement_systems_for_unit/1","deprecated":false,"title":"measurement_systems_for_unit(unit)","anchor":"measurement_systems_for_unit/1"},{"id":"mult/2","deprecated":false,"title":"mult(unit_1, unit_2)","anchor":"mult/2"},{"id":"mult!/2","deprecated":false,"title":"mult!(unit_1, unit_2)","anchor":"mult!/2"},{"id":"new/2","deprecated":false,"title":"new(unit, value)","anchor":"new/2"},{"id":"new!/2","deprecated":false,"title":"new!(unit, value)","anchor":"new!/2"},{"id":"parse/2","deprecated":false,"title":"parse(unit_string, options \\\\ [])","anchor":"parse/2"},{"id":"parse!/2","deprecated":false,"title":"parse!(unit_string, options \\\\ [])","anchor":"parse!/2"},{"id":"parse_unit_name/2","deprecated":false,"title":"parse_unit_name(unit_name_string, options \\\\ [])","anchor":"parse_unit_name/2"},{"id":"parse_unit_name!/2","deprecated":false,"title":"parse_unit_name!(unit_name_string, options \\\\ [])","anchor":"parse_unit_name!/2"},{"id":"preferred_units/2","deprecated":false,"title":"preferred_units(unit, options \\\\ [])","anchor":"preferred_units/2"},{"id":"preferred_units!/2","deprecated":false,"title":"preferred_units!(unit, options \\\\ [])","anchor":"preferred_units!/2"},{"id":"round/1","deprecated":false,"title":"round(unit)","anchor":"round/1"},{"id":"round/2","deprecated":false,"title":"round(unit, places)","anchor":"round/2"},{"id":"round/3","deprecated":false,"title":"round(unit, places, mode)","anchor":"round/3"},{"id":"styles/0","deprecated":false,"title":"styles()","anchor":"styles/0"},{"id":"sub/2","deprecated":false,"title":"sub(unit_1, unit_2)","anchor":"sub/2"},{"id":"sub!/2","deprecated":false,"title":"sub!(unit_1, unit_2)","anchor":"sub!/2"},{"id":"to_iolist/2","deprecated":false,"title":"to_iolist(number, options \\\\ [])","anchor":"to_iolist/2"},{"id":"to_iolist!/2","deprecated":false,"title":"to_iolist!(number, options \\\\ [])","anchor":"to_iolist!/2"},{"id":"to_string/2","deprecated":false,"title":"to_string(number, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(number, options \\\\ [])","anchor":"to_string!/2"},{"id":"unit_category/1","deprecated":false,"title":"unit_category(unit)","anchor":"unit_category/1"},{"id":"unit_strings_for/1","deprecated":false,"title":"unit_strings_for(locale)","anchor":"unit_strings_for/1"},{"id":"validate_style/1","deprecated":false,"title":"validate_style(unit)","anchor":"validate_style/1"},{"id":"validate_unit/1","deprecated":false,"title":"validate_unit(unit)","anchor":"validate_unit/1"},{"id":"value/1","deprecated":false,"title":"value(unit)","anchor":"value/1"},{"id":"zero/1","deprecated":false,"title":"zero(unit)","anchor":"zero/1"},{"id":"zero?/1","deprecated":false,"title":"zero?(unit)","anchor":"zero?/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Unit","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Gettext","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Gettext","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"dgettext/3","deprecated":false,"title":"dgettext(domain, msgid, bindings \\\\ Macro.escape(%{}))","anchor":"dgettext/3"},{"id":"dgettext_noop/2","deprecated":false,"title":"dgettext_noop(domain, msgid)","anchor":"dgettext_noop/2"},{"id":"dngettext/5","deprecated":false,"title":"dngettext(domain, msgid, msgid_plural, n, bindings \\\\ Macro.escape(%{}))","anchor":"dngettext/5"},{"id":"dngettext_noop/3","deprecated":false,"title":"dngettext_noop(domain, msgid, msgid_plural)","anchor":"dngettext_noop/3"},{"id":"dpgettext/4","deprecated":false,"title":"dpgettext(domain, msgctxt, msgid, bindings \\\\ Macro.escape(%{}))","anchor":"dpgettext/4"},{"id":"dpgettext_noop/3","deprecated":false,"title":"dpgettext_noop(domain, msgctxt, msgid)","anchor":"dpgettext_noop/3"},{"id":"dpngettext/6","deprecated":false,"title":"dpngettext(domain, msgctxt, msgid, msgid_plural, n, bindings \\\\ Macro.escape(%{}))","anchor":"dpngettext/6"},{"id":"dpngettext_noop/4","deprecated":false,"title":"dpngettext_noop(domain, msgctxt, msgid, msgid_plural)","anchor":"dpngettext_noop/4"},{"id":"gettext/2","deprecated":false,"title":"gettext(msgid, bindings \\\\ Macro.escape(%{}))","anchor":"gettext/2"},{"id":"gettext_comment/1","deprecated":false,"title":"gettext_comment(comment)","anchor":"gettext_comment/1"},{"id":"gettext_noop/1","deprecated":false,"title":"gettext_noop(msgid)","anchor":"gettext_noop/1"},{"id":"handle_missing_bindings/2","deprecated":false,"title":"handle_missing_bindings(exception, incomplete)","anchor":"handle_missing_bindings/2"},{"id":"handle_missing_plural_translation/7","deprecated":false,"title":"handle_missing_plural_translation(locale, domain, msgctxt, msgid, msgid_plural, n, bindings)","anchor":"handle_missing_plural_translation/7"},{"id":"handle_missing_translation/5","deprecated":false,"title":"handle_missing_translation(locale, domain, msgctxt, msgid, bindings)","anchor":"handle_missing_translation/5"},{"id":"lgettext/5","deprecated":false,"title":"lgettext(locale, domain, msgctxt \\\\ nil, msgid, bindings)","anchor":"lgettext/5"},{"id":"lngettext/7","deprecated":false,"title":"lngettext(locale, domain, msgctxt \\\\ nil, msgid, msgid_plural, n, bindings)","anchor":"lngettext/7"},{"id":"ngettext/4","deprecated":false,"title":"ngettext(msgid, msgid_plural, n, bindings \\\\ Macro.escape(%{}))","anchor":"ngettext/4"},{"id":"ngettext_noop/2","deprecated":false,"title":"ngettext_noop(msgid, msgid_plural)","anchor":"ngettext_noop/2"},{"id":"pgettext/3","deprecated":false,"title":"pgettext(msgctxt, msgid, bindings \\\\ Macro.escape(%{}))","anchor":"pgettext/3"},{"id":"pgettext_noop/2","deprecated":false,"title":"pgettext_noop(msgid, context)","anchor":"pgettext_noop/2"},{"id":"pngettext/5","deprecated":false,"title":"pngettext(msgctxt, msgid, msgid_plural, n, bindings \\\\ Macro.escape(%{}))","anchor":"pngettext/5"},{"id":"pngettext_noop/3","deprecated":false,"title":"pngettext_noop(msgctxt, msgid, msgid_plural)","anchor":"pngettext_noop/3"}],"key":"functions"}],"nested_title":".Common.Localise.Gettext","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Gettext.Helpers","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Gettext.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"l/4","deprecated":false,"title":"l(original_text_or_id, bindings \\\\ [], context \\\\ nil, domain \\\\ nil)","anchor":"l/4"},{"id":"localise_dynamic/2","deprecated":false,"title":"localise_dynamic(msgid, caller_module \\\\ nil)","anchor":"localise_dynamic/2"},{"id":"localise_strings/2","deprecated":false,"title":"localise_strings(strings, caller_module \\\\ nil)","anchor":"localise_strings/2"},{"id":"lp/6","deprecated":false,"title":"lp(original_text_or_id, msgid_plural, n, bindings \\\\ [], context \\\\ nil, domain \\\\ nil)","anchor":"lp/6"}],"key":"functions"}],"nested_title":".Common.Localise.Gettext.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Gettext.Plural","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Gettext.Plural","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"nplurals/1","deprecated":false,"title":"nplurals(locale_name)","anchor":"nplurals/1"},{"id":"plural/2","deprecated":false,"title":"plural(locale, n)","anchor":"plural/2"}],"key":"functions"}],"nested_title":".Common.Localise.Gettext.Plural","nested_context":"Bonfire"},{"id":"Bonfire.Common.Media","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Media","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"avatar_fallback/1","deprecated":false,"title":"avatar_fallback(_ \\\\ nil)","anchor":"avatar_fallback/1"},{"id":"avatar_media/1","deprecated":false,"title":"avatar_media(maybe_media)","anchor":"avatar_media/1"},{"id":"avatar_url/1","deprecated":false,"title":"avatar_url(media)","anchor":"avatar_url/1"},{"id":"banner_fallback/0","deprecated":false,"title":"banner_fallback()","anchor":"banner_fallback/0"},{"id":"banner_url/1","deprecated":false,"title":"banner_url(media)","anchor":"banner_url/1"},{"id":"extract_tar/2","deprecated":false,"title":"extract_tar(archive, opts \\\\ [:compressed, :memory])","anchor":"extract_tar/2"},{"id":"image_url/1","deprecated":false,"title":"image_url(url)","anchor":"image_url/1"},{"id":"maybe_dominant_color/4","deprecated":false,"title":"maybe_dominant_color(user, avatar_url \\\\ nil, banner_url \\\\ nil, banner_fallback \\\\ nil)","anchor":"maybe_dominant_color/4"},{"id":"media_url/1","deprecated":false,"title":"media_url(media)","anchor":"media_url/1"},{"id":"read_tar_files/3","deprecated":false,"title":"read_tar_files(archive, file_or_files, opts \\\\ [:compressed, :verbose])","anchor":"read_tar_files/3"},{"id":"thumbnail_url/1","deprecated":false,"title":"thumbnail_url(media)","anchor":"thumbnail_url/1"}],"key":"functions"}],"nested_title":".Common.Media","nested_context":"Bonfire"},{"id":"Bonfire.Common.Modularity.DeclareHelpers","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Modularity.DeclareHelpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"app/1","deprecated":false,"title":"app(module)","anchor":"app/1"},{"id":"component_props/1","deprecated":false,"title":"component_props(module)","anchor":"component_props/1"},{"id":"component_type/1","deprecated":false,"title":"component_type(module)","anchor":"component_type/1"},{"id":"declare_extension/2","deprecated":false,"title":"declare_extension(name, opts \\\\ [])","anchor":"declare_extension/2"},{"id":"declare_nav_component/2","deprecated":false,"title":"declare_nav_component(name, opts \\\\ [])","anchor":"declare_nav_component/2"},{"id":"declare_nav_link/2","deprecated":false,"title":"declare_nav_link(name, opts \\\\ [])","anchor":"declare_nav_link/2"},{"id":"declare_settings_component/2","deprecated":false,"title":"declare_settings_component(name, opts \\\\ [])","anchor":"declare_settings_component/2"},{"id":"declare_settings_nav_component/2","deprecated":false,"title":"declare_settings_nav_component(name, opts \\\\ [])","anchor":"declare_settings_nav_component/2"},{"id":"declare_settings_nav_link/2","deprecated":false,"title":"declare_settings_nav_link(name, opts \\\\ [])","anchor":"declare_settings_nav_link/2"},{"id":"declare_widget/2","deprecated":false,"title":"declare_widget(name, opts \\\\ [])","anchor":"declare_widget/2"},{"id":"generate_link/3","deprecated":false,"title":"generate_link(name, module, opts)","anchor":"generate_link/3"}],"key":"functions"}],"nested_title":".Common.Modularity.DeclareHelpers","nested_context":"Bonfire"},{"id":"Bonfire.Common.Module.Override","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Module.Override","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"clone/2","deprecated":false,"title":"clone(old_module, new_module)","anchor":"clone/2"},{"id":"clone_original/2","deprecated":false,"title":"clone_original(old_module, prefix \\\\ nil)","anchor":"clone_original/2"},{"id":"module_name_atom/1","deprecated":false,"title":"module_name_atom(module)","anchor":"module_name_atom/1"},{"id":"module_name_string/1","deprecated":false,"title":"module_name_string(module)","anchor":"module_name_string/1"},{"id":"module_original_name_atom/2","deprecated":false,"title":"module_original_name_atom(module, prefix \\\\ nil)","anchor":"module_original_name_atom/2"},{"id":"module_original_name_str/2","deprecated":false,"title":"module_original_name_str(module, prefix \\\\ nil)","anchor":"module_original_name_str/2"}],"key":"functions"}],"nested_title":".Common.Module.Override","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"dataloader/1","deprecated":false,"title":"dataloader(context)","anchor":"dataloader/1"},{"id":"exists?/2","deprecated":false,"title":"exists?(filters, opts \\\\ [])","anchor":"exists?/2"},{"id":"filter_one/1","deprecated":false,"title":"filter_one(filters)","anchor":"filter_one/1"},{"id":"filters/3","deprecated":false,"title":"filters(schema, id_filters, opts \\\\ [])","anchor":"filters/3"},{"id":"follow!/2","deprecated":false,"title":"follow!(pointer_or_pointers, opts \\\\ [])","anchor":"follow!/2"},{"id":"follow_function_error/2","deprecated":false,"title":"follow_function_error(error, args)","anchor":"follow_function_error/2"},{"id":"forge!/1","deprecated":false,"title":"forge!(pointed)","anchor":"forge!/1"},{"id":"forge!/2","deprecated":false,"title":"forge!(table_id, id)","anchor":"forge!/2"},{"id":"get/2","deprecated":false,"title":"get(id, opts \\\\ [])","anchor":"get/2"},{"id":"get!/2","deprecated":false,"title":"get!(id, opts \\\\ [])","anchor":"get!/2"},{"id":"id_binary/1","deprecated":false,"title":"id_binary(id)","anchor":"id_binary/1"},{"id":"id_filter/2","deprecated":false,"title":"id_filter(query, id)","anchor":"id_filter/2"},{"id":"list!/2","deprecated":false,"title":"list!(pointers, opts \\\\ [])","anchor":"list!/2"},{"id":"list_by_type!/3","deprecated":false,"title":"list_by_type!(table_id_or_schema, filters \\\\ [], opts \\\\ [])","anchor":"list_by_type!/3"},{"id":"list_ids/0","deprecated":false,"title":"list_ids()","anchor":"list_ids/0"},{"id":"many/2","deprecated":false,"title":"many(filters \\\\ [], opts \\\\ [])","anchor":"many/2"},{"id":"many!/2","deprecated":false,"title":"many!(filters \\\\ [], opts \\\\ [])","anchor":"many!/2"},{"id":"maybe_forge/1","deprecated":false,"title":"maybe_forge(thing)","anchor":"maybe_forge/1"},{"id":"maybe_forge!/1","deprecated":false,"title":"maybe_forge!(thing)","anchor":"maybe_forge!/1"},{"id":"maybe_resolve/4","deprecated":false,"title":"maybe_resolve(parent, field, args, context)","anchor":"maybe_resolve/4"},{"id":"one/2","deprecated":false,"title":"one(id, opts \\\\ [])","anchor":"one/2"},{"id":"one!/2","deprecated":false,"title":"one!(filters, opts \\\\ [])","anchor":"one!/2"},{"id":"pointer_preloads/2","deprecated":false,"title":"pointer_preloads(query, preloads)","anchor":"pointer_preloads/2"},{"id":"pointer_query/2","deprecated":false,"title":"pointer_query(filters, opts)","anchor":"pointer_query/2"},{"id":"preload!/2","deprecated":false,"title":"preload!(pointer_or_pointers, opts \\\\ [])","anchor":"preload!/2"},{"id":"query/3","deprecated":false,"title":"query(schema, filters, opts \\\\ [])","anchor":"query/3"}],"key":"functions"}],"nested_title":".Common.Needles","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles.Pointers.Queries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles.Pointers.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(q, filter_or_filters)","anchor":"filter/2"},{"id":"query/1","deprecated":false,"title":"query(filters)","anchor":"query/1"},{"id":"query/2","deprecated":false,"title":"query(q, filters)","anchor":"query/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"}],"key":"functions"}],"nested_title":".Common.Needles.Pointers.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles.Preload","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles.Preload","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_preload_nested_pointers/3","deprecated":false,"title":"maybe_preload_nested_pointers(object, keys, opts \\\\ [])","anchor":"maybe_preload_nested_pointers/3"},{"id":"maybe_preload_pointer/2","deprecated":false,"title":"maybe_preload_pointer(pointer, opts \\\\ [])","anchor":"maybe_preload_pointer/2"},{"id":"maybe_preload_pointers/3","deprecated":false,"title":"maybe_preload_pointers(object, keys, opts \\\\ [])","anchor":"maybe_preload_pointers/3"}],"key":"functions"}],"nested_title":".Common.Needles.Preload","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles.Tables","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles.Tables","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"list_ids/0","deprecated":false,"title":"list_ids()","anchor":"list_ids/0"},{"id":"list_schemas/0","deprecated":false,"title":"list_schemas()","anchor":"list_schemas/0"},{"id":"list_tables/1","deprecated":false,"title":"list_tables(source \\\\ :code)","anchor":"list_tables/1"},{"id":"list_tables_debug/0","deprecated":false,"title":"list_tables_debug()","anchor":"list_tables_debug/0"},{"id":"many/1","deprecated":false,"title":"many(filters \\\\ [])","anchor":"many/1"},{"id":"one/1","deprecated":false,"title":"one(id)","anchor":"one/1"},{"id":"one!/1","deprecated":false,"title":"one!(filters)","anchor":"one!/1"},{"id":"schema_or_table!/1","deprecated":false,"title":"schema_or_table!(schema_or_tablename_or_id)","anchor":"schema_or_table!/1"},{"id":"table!/1","deprecated":false,"title":"table!(schema_or_tablename_or_id)","anchor":"table!/1"},{"id":"table_fields/1","deprecated":false,"title":"table_fields(schema)","anchor":"table_fields/1"},{"id":"table_fields_meta/1","deprecated":false,"title":"table_fields_meta(schema)","anchor":"table_fields_meta/1"}],"key":"functions"}],"nested_title":".Common.Needles.Tables","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles.Tables.Queries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles.Tables.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(q, filter_or_filters)","anchor":"filter/2"},{"id":"query/1","deprecated":false,"title":"query(filters)","anchor":"query/1"},{"id":"query/2","deprecated":false,"title":"query(q, filters)","anchor":"query/2"}],"key":"functions"}],"nested_title":".Common.Needles.Tables.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Common.PubSub","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.PubSub","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"broadcast/2","deprecated":false,"title":"broadcast(topics, payload)","anchor":"broadcast/2"},{"id":"broadcast_with_telemetry/2","deprecated":false,"title":"broadcast_with_telemetry(topic, message)","anchor":"broadcast_with_telemetry/2"},{"id":"broadcast_with_telemetry/3","deprecated":false,"title":"broadcast_with_telemetry(topic, message, source)","anchor":"broadcast_with_telemetry/3"},{"id":"current_function/1","deprecated":false,"title":"current_function(env)","anchor":"current_function/1"},{"id":"subscribe/2","deprecated":false,"title":"subscribe(topics, socket)","anchor":"subscribe/2"}],"key":"functions"}],"nested_title":".Common.PubSub","nested_context":"Bonfire"},{"id":"Bonfire.Common.PubSub.Event","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.PubSub.Event","sections":[],"nested_title":".Common.PubSub.Event","nested_context":"Bonfire"},{"id":"Bonfire.Common.QueryModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.QueryModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"context_module/0","deprecated":false,"title":"context_module()","anchor":"c:context_module/0"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"c:query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"c:schema_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"apply_error/2","deprecated":false,"title":"apply_error(error, args)","anchor":"apply_error/2"},{"id":"linked_context_modules/0","deprecated":false,"title":"linked_context_modules()","anchor":"linked_context_modules/0"},{"id":"linked_schema_modules/0","deprecated":false,"title":"linked_schema_modules()","anchor":"linked_schema_modules/0"},{"id":"maybe_query/3","deprecated":false,"title":"maybe_query(schema, filters \\\\ [], fallback_fun \\\\ &apply_error/2)","anchor":"maybe_query/3"},{"id":"maybe_query_module/1","deprecated":false,"title":"maybe_query_module(query)","anchor":"maybe_query_module/1"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"query_function_error/3","deprecated":false,"title":"query_function_error(error, args, level \\\\ :info)","anchor":"query_function_error/3"},{"id":"query_module/1","deprecated":false,"title":"query_module(query)","anchor":"query_module/1"},{"id":"query_module!/1","deprecated":false,"title":"query_module!(query)","anchor":"query_module!/1"},{"id":"query_modules/1","deprecated":false,"title":"query_modules(modules)","anchor":"query_modules/1"}],"key":"functions"}],"nested_title":".Common.QueryModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.Repo","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Repo","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"aggregate/3","deprecated":false,"title":"aggregate(queryable, aggregate, opts \\\\ [])","anchor":"aggregate/3"},{"id":"aggregate/4","deprecated":false,"title":"aggregate(queryable, aggregate, field, opts)","anchor":"aggregate/4"},{"id":"all/2","deprecated":false,"title":"all(queryable, opts \\\\ [])","anchor":"all/2"},{"id":"checked_out?/0","deprecated":false,"title":"checked_out?()","anchor":"checked_out?/0"},{"id":"checkout/2","deprecated":false,"title":"checkout(fun, opts \\\\ [])","anchor":"checkout/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"default_options/1","deprecated":false,"title":"default_options(operation)","anchor":"default_options/1"},{"id":"default_repo_opts/0","deprecated":false,"title":"default_repo_opts()","anchor":"default_repo_opts/0"},{"id":"delete/2","deprecated":false,"title":"delete(struct, opts \\\\ [])","anchor":"delete/2"},{"id":"delete!/2","deprecated":false,"title":"delete!(struct, opts \\\\ [])","anchor":"delete!/2"},{"id":"delete_all/2","deprecated":false,"title":"delete_all(queryable, opts \\\\ [])","anchor":"delete_all/2"},{"id":"delete_many/1","deprecated":false,"title":"delete_many(query)","anchor":"delete_many/1"},{"id":"disconnect_all/2","deprecated":false,"title":"disconnect_all(interval, opts \\\\ [])","anchor":"disconnect_all/2"},{"id":"exists?/2","deprecated":false,"title":"exists?(queryable, opts \\\\ [])","anchor":"exists?/2"},{"id":"explain/3","deprecated":false,"title":"explain(operation, queryable, opts \\\\ [])","anchor":"explain/3"},{"id":"fetch/2","deprecated":false,"title":"fetch(queryable, id)","anchor":"fetch/2"},{"id":"fetch_all/2","deprecated":false,"title":"fetch_all(queryable, id_or_ids)","anchor":"fetch_all/2"},{"id":"fetch_by/2","deprecated":false,"title":"fetch_by(queryable, term)","anchor":"fetch_by/2"},{"id":"find/3","deprecated":false,"title":"find(q, changeset, field \\\\ :form)","anchor":"find/3"},{"id":"get/3","deprecated":false,"title":"get(queryable, id, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(queryable, id, opts \\\\ [])","anchor":"get!/3"},{"id":"get_by/3","deprecated":false,"title":"get_by(queryable, clauses, opts \\\\ [])","anchor":"get_by/3"},{"id":"get_by!/3","deprecated":false,"title":"get_by!(queryable, clauses, opts \\\\ [])","anchor":"get_by!/3"},{"id":"get_dynamic_repo/0","deprecated":false,"title":"get_dynamic_repo()","anchor":"get_dynamic_repo/0"},{"id":"in_transaction?/0","deprecated":false,"title":"in_transaction?()","anchor":"in_transaction?/0"},{"id":"insert/2","deprecated":false,"title":"insert(struct, opts \\\\ [])","anchor":"insert/2"},{"id":"insert!/2","deprecated":false,"title":"insert!(struct, opts \\\\ [])","anchor":"insert!/2"},{"id":"insert_all/3","deprecated":false,"title":"insert_all(schema_or_source, entries, opts \\\\ [])","anchor":"insert_all/3"},{"id":"insert_all_or_ignore/2","deprecated":false,"title":"insert_all_or_ignore(schema, data)","anchor":"insert_all_or_ignore/2"},{"id":"insert_or_ignore/1","deprecated":false,"title":"insert_or_ignore(cs_or_struct)","anchor":"insert_or_ignore/1"},{"id":"insert_or_ignore/2","deprecated":false,"title":"insert_or_ignore(schema, object)","anchor":"insert_or_ignore/2"},{"id":"insert_or_update/2","deprecated":false,"title":"insert_or_update(changeset, opts \\\\ [])","anchor":"insert_or_update/2"},{"id":"insert_or_update!/2","deprecated":false,"title":"insert_or_update!(changeset, opts \\\\ [])","anchor":"insert_or_update!/2"},{"id":"load/2","deprecated":false,"title":"load(schema_or_types, data)","anchor":"load/2"},{"id":"make_subquery/1","deprecated":false,"title":"make_subquery(query)","anchor":"make_subquery/1"},{"id":"many/2","deprecated":false,"title":"many(query, opts \\\\ [])","anchor":"many/2"},{"id":"many_paginated/3","deprecated":false,"title":"many_paginated(queryable, opts \\\\ [], repo_opts \\\\ default_repo_opts())","anchor":"many_paginated/3"},{"id":"maybe_one/2","deprecated":false,"title":"maybe_one(q, fallback \\\\ nil)","anchor":"maybe_one/2"},{"id":"maybe_preload/3","deprecated":false,"title":"maybe_preload(obj, preloads, opts \\\\ [])","anchor":"maybe_preload/3"},{"id":"migrate/0","deprecated":false,"title":"migrate()","anchor":"migrate/0"},{"id":"one/2","deprecated":false,"title":"one(queryable, opts \\\\ [])","anchor":"one/2"},{"id":"one!/2","deprecated":false,"title":"one!(queryable, opts \\\\ [])","anchor":"one!/2"},{"id":"paginate/2","deprecated":false,"title":"paginate(pageable, options \\\\ [])","anchor":"paginate/2"},{"id":"preload/3","deprecated":false,"title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])","anchor":"preload/3"},{"id":"preload_all/2","deprecated":false,"title":"preload_all(obj, opts \\\\ [])","anchor":"preload_all/2"},{"id":"preload_mixins/2","deprecated":false,"title":"preload_mixins(obj, opts \\\\ [])","anchor":"preload_mixins/2"},{"id":"prepare_query/3","deprecated":false,"title":"prepare_query(operation, query, opts)","anchor":"prepare_query/3"},{"id":"put/1","deprecated":false,"title":"put(changeset)","anchor":"put/1"},{"id":"put_dynamic_repo/1","deprecated":false,"title":"put_dynamic_repo(dynamic)","anchor":"put_dynamic_repo/1"},{"id":"put_many/1","deprecated":false,"title":"put_many(things)","anchor":"put_many/1"},{"id":"query/3","deprecated":false,"title":"query(sql, params \\\\ [], opts \\\\ [])","anchor":"query/3"},{"id":"query!/3","deprecated":false,"title":"query!(sql, params \\\\ [], opts \\\\ [])","anchor":"query!/3"},{"id":"query_many/3","deprecated":false,"title":"query_many(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many/3"},{"id":"query_many!/3","deprecated":false,"title":"query_many!(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many!/3"},{"id":"reload/2","deprecated":false,"title":"reload(queryable, opts \\\\ [])","anchor":"reload/2"},{"id":"reload!/2","deprecated":false,"title":"reload!(queryable, opts \\\\ [])","anchor":"reload!/2"},{"id":"rollback/1","deprecated":false,"title":"rollback(value)","anchor":"rollback/1"},{"id":"single/1","deprecated":false,"title":"single(q)","anchor":"single/1"},{"id":"sql/3","deprecated":false,"title":"sql(raw_sql, data \\\\ [], opts \\\\ [])","anchor":"sql/3"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"stop/1","deprecated":false,"title":"stop(timeout \\\\ 5000)","anchor":"stop/1"},{"id":"stream/2","deprecated":false,"title":"stream(queryable, opts \\\\ [])","anchor":"stream/2"},{"id":"to_sql/2","deprecated":false,"title":"to_sql(operation, queryable)","anchor":"to_sql/2"},{"id":"trace/1","deprecated":false,"title":"trace(fun)","anchor":"trace/1"},{"id":"transact_many/1","deprecated":false,"title":"transact_many(queries)","anchor":"transact_many/1"},{"id":"transact_with/1","deprecated":false,"title":"transact_with(fun)","anchor":"transact_with/1"},{"id":"transaction/2","deprecated":false,"title":"transaction(fun_or_multi, opts \\\\ [])","anchor":"transaction/2"},{"id":"update/2","deprecated":false,"title":"update(struct, opts \\\\ [])","anchor":"update/2"},{"id":"update!/2","deprecated":false,"title":"update!(struct, opts \\\\ [])","anchor":"update!/2"},{"id":"update_all/3","deprecated":false,"title":"update_all(queryable, updates, opts \\\\ [])","anchor":"update_all/3"},{"id":"upsert/3","deprecated":false,"title":"upsert(cs, keys_or_attrs_to_update \\\\ nil, conflict_target \\\\ [:id])","anchor":"upsert/3"},{"id":"upsert_all/3","deprecated":false,"title":"upsert_all(schema, data, conflict_target \\\\ [:id])","anchor":"upsert_all/3"}],"key":"functions"}],"nested_title":".Common.Repo","nested_context":"Bonfire"},{"id":"Bonfire.Common.Repo.Delete","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Repo.Delete","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"deletion_result/1","deprecated":false,"title":"deletion_result(other)","anchor":"deletion_result/1"},{"id":"deletion_result!/1","deprecated":false,"title":"deletion_result!(arg)","anchor":"deletion_result!/1"},{"id":"hard_delete/1","deprecated":false,"title":"hard_delete(it)","anchor":"hard_delete/1"},{"id":"hard_delete!/1","deprecated":false,"title":"hard_delete!(it)","anchor":"hard_delete!/1"},{"id":"maybe_allow_delete?/2","deprecated":false,"title":"maybe_allow_delete?(user, context)","anchor":"maybe_allow_delete?/2"},{"id":"schema/1","deprecated":false,"title":"schema(it)","anchor":"schema/1"},{"id":"soft_delete/1","deprecated":false,"title":"soft_delete(it)","anchor":"soft_delete/1"},{"id":"soft_delete!/1","deprecated":false,"title":"soft_delete!(it)","anchor":"soft_delete!/1"},{"id":"soft_delete_changeset/4","deprecated":false,"title":"soft_delete_changeset(it, column \\\\ :deleted_at, value \\\\ DateTime.utc_now(), error \\\\ \"was already deleted\")","anchor":"soft_delete_changeset/4"},{"id":"undelete/1","deprecated":false,"title":"undelete(it)","anchor":"undelete/1"}],"key":"functions"}],"nested_title":".Common.Repo.Delete","nested_context":"Bonfire"},{"id":"Bonfire.Common.Repo.Preload","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Repo.Preload","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"aggregate/3","deprecated":false,"title":"aggregate(queryable, aggregate, opts \\\\ [])","anchor":"aggregate/3"},{"id":"aggregate/4","deprecated":false,"title":"aggregate(queryable, aggregate, field, opts)","anchor":"aggregate/4"},{"id":"all/2","deprecated":false,"title":"all(queryable, opts \\\\ [])","anchor":"all/2"},{"id":"checked_out?/0","deprecated":false,"title":"checked_out?()","anchor":"checked_out?/0"},{"id":"checkout/2","deprecated":false,"title":"checkout(fun, opts \\\\ [])","anchor":"checkout/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"default_options/1","deprecated":false,"title":"default_options(operation)","anchor":"default_options/1"},{"id":"delete/2","deprecated":false,"title":"delete(struct, opts \\\\ [])","anchor":"delete/2"},{"id":"delete!/2","deprecated":false,"title":"delete!(struct, opts \\\\ [])","anchor":"delete!/2"},{"id":"delete_all/2","deprecated":false,"title":"delete_all(queryable, opts \\\\ [])","anchor":"delete_all/2"},{"id":"disconnect_all/2","deprecated":false,"title":"disconnect_all(interval, opts \\\\ [])","anchor":"disconnect_all/2"},{"id":"exists?/2","deprecated":false,"title":"exists?(queryable, opts \\\\ [])","anchor":"exists?/2"},{"id":"explain/3","deprecated":false,"title":"explain(operation, queryable, opts \\\\ [])","anchor":"explain/3"},{"id":"get/3","deprecated":false,"title":"get(queryable, id, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(queryable, id, opts \\\\ [])","anchor":"get!/3"},{"id":"get_by/3","deprecated":false,"title":"get_by(queryable, clauses, opts \\\\ [])","anchor":"get_by/3"},{"id":"get_by!/3","deprecated":false,"title":"get_by!(queryable, clauses, opts \\\\ [])","anchor":"get_by!/3"},{"id":"get_dynamic_repo/0","deprecated":false,"title":"get_dynamic_repo()","anchor":"get_dynamic_repo/0"},{"id":"in_transaction?/0","deprecated":false,"title":"in_transaction?()","anchor":"in_transaction?/0"},{"id":"insert/2","deprecated":false,"title":"insert(struct, opts \\\\ [])","anchor":"insert/2"},{"id":"insert!/2","deprecated":false,"title":"insert!(struct, opts \\\\ [])","anchor":"insert!/2"},{"id":"insert_all/3","deprecated":false,"title":"insert_all(schema_or_source, entries, opts \\\\ [])","anchor":"insert_all/3"},{"id":"insert_or_update/2","deprecated":false,"title":"insert_or_update(changeset, opts \\\\ [])","anchor":"insert_or_update/2"},{"id":"insert_or_update!/2","deprecated":false,"title":"insert_or_update!(changeset, opts \\\\ [])","anchor":"insert_or_update!/2"},{"id":"load/2","deprecated":false,"title":"load(schema_or_types, data)","anchor":"load/2"},{"id":"maybe_preload/3","deprecated":false,"title":"maybe_preload(obj, preloads, opts \\\\ [])","anchor":"maybe_preload/3"},{"id":"maybe_preloads_per_nested_schema/4","deprecated":false,"title":"maybe_preloads_per_nested_schema(objects, path, preloads, opts \\\\ [])","anchor":"maybe_preloads_per_nested_schema/4"},{"id":"maybe_preloads_per_schema/3","deprecated":false,"title":"maybe_preloads_per_schema(object, schema_preloads, opts \\\\ [])","anchor":"maybe_preloads_per_schema/3"},{"id":"one/2","deprecated":false,"title":"one(queryable, opts \\\\ [])","anchor":"one/2"},{"id":"one!/2","deprecated":false,"title":"one!(queryable, opts \\\\ [])","anchor":"one!/2"},{"id":"preload/3","deprecated":false,"title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])","anchor":"preload/3"},{"id":"preload_all/2","deprecated":false,"title":"preload_all(structure, opts \\\\ [])","anchor":"preload_all/2"},{"id":"preload_mixins/2","deprecated":false,"title":"preload_mixins(structure, opts \\\\ [])","anchor":"preload_mixins/2"},{"id":"prepare_query/3","deprecated":false,"title":"prepare_query(operation, query, opts)","anchor":"prepare_query/3"},{"id":"put_dynamic_repo/1","deprecated":false,"title":"put_dynamic_repo(dynamic)","anchor":"put_dynamic_repo/1"},{"id":"query/3","deprecated":false,"title":"query(sql, params \\\\ [], opts \\\\ [])","anchor":"query/3"},{"id":"query!/3","deprecated":false,"title":"query!(sql, params \\\\ [], opts \\\\ [])","anchor":"query!/3"},{"id":"query_many/3","deprecated":false,"title":"query_many(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many/3"},{"id":"query_many!/3","deprecated":false,"title":"query_many!(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many!/3"},{"id":"reload/2","deprecated":false,"title":"reload(queryable, opts \\\\ [])","anchor":"reload/2"},{"id":"reload!/2","deprecated":false,"title":"reload!(queryable, opts \\\\ [])","anchor":"reload!/2"},{"id":"rollback/1","deprecated":false,"title":"rollback(value)","anchor":"rollback/1"},{"id":"schema_mixins/1","deprecated":false,"title":"schema_mixins(structure)","anchor":"schema_mixins/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"stop/1","deprecated":false,"title":"stop(timeout \\\\ 5000)","anchor":"stop/1"},{"id":"stream/2","deprecated":false,"title":"stream(queryable, opts \\\\ [])","anchor":"stream/2"},{"id":"to_sql/2","deprecated":false,"title":"to_sql(operation, queryable)","anchor":"to_sql/2"},{"id":"transaction/2","deprecated":false,"title":"transaction(fun_or_multi, opts \\\\ [])","anchor":"transaction/2"},{"id":"update/2","deprecated":false,"title":"update(struct, opts \\\\ [])","anchor":"update/2"},{"id":"update!/2","deprecated":false,"title":"update!(struct, opts \\\\ [])","anchor":"update!/2"},{"id":"update_all/3","deprecated":false,"title":"update_all(queryable, updates, opts \\\\ [])","anchor":"update_all/3"}],"key":"functions"}],"nested_title":".Common.Repo.Preload","nested_context":"Bonfire"},{"id":"Bonfire.Common.Repo.Utils","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Repo.Utils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"change_disabled/1","deprecated":false,"title":"change_disabled(changeset)","anchor":"change_disabled/1"},{"id":"change_muted/1","deprecated":false,"title":"change_muted(changeset)","anchor":"change_muted/1"},{"id":"change_public/1","deprecated":false,"title":"change_public(changeset)","anchor":"change_public/1"},{"id":"match_admin/0","deprecated":false,"title":"match_admin()","anchor":"match_admin/0"},{"id":"validate_email/2","deprecated":false,"title":"validate_email(changeset, field)","anchor":"validate_email/2"},{"id":"validate_email_domain/2","deprecated":false,"title":"validate_email_domain(changeset, field)","anchor":"validate_email_domain/2"}],"key":"functions"}],"nested_title":".Common.Repo.Utils","nested_context":"Bonfire"},{"id":"Bonfire.Common.RepoTemplate","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.RepoTemplate","sections":[],"nested_title":".Common.RepoTemplate","nested_context":"Bonfire"},{"id":"Bonfire.Common.RuntimeConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"},{"id":"skip_test_tags/1","deprecated":false,"title":"skip_test_tags(extras \\\\ [])","anchor":"skip_test_tags/1"}],"key":"functions"}],"nested_title":".Common.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Common.SchemaModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.SchemaModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"context_module/0","deprecated":false,"title":"context_module()","anchor":"c:context_module/0"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"c:query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"c:schema_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"linked_context_modules/0","deprecated":false,"title":"linked_context_modules()","anchor":"linked_context_modules/0"},{"id":"linked_query_modules/0","deprecated":false,"title":"linked_query_modules()","anchor":"linked_query_modules/0"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Common.SchemaModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.Settings","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Settings","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"get/3","deprecated":false,"title":"get(key, default \\\\ nil, opts \\\\ [])","anchor":"get/3"},{"id":"get!/2","deprecated":false,"title":"get!(key, opts)","anchor":"get!/2"},{"id":"load_instance_settings/0","deprecated":false,"title":"load_instance_settings()","anchor":"load_instance_settings/0"},{"id":"map_put_in/3","deprecated":false,"title":"map_put_in(root \\\\ %{}, keys, value)","anchor":"map_put_in/3"},{"id":"put/3","deprecated":false,"title":"put(keys, value, opts)","anchor":"put/3"},{"id":"reset_all/0","deprecated":false,"title":"reset_all()","anchor":"reset_all/0"},{"id":"reset_instance/0","deprecated":false,"title":"reset_instance()","anchor":"reset_instance/0"},{"id":"set/2","deprecated":false,"title":"set(attrs, opts)","anchor":"set/2"}],"key":"functions"}],"nested_title":".Common.Settings","nested_context":"Bonfire"},{"id":"Bonfire.Common.Settings.LiveHandler","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Settings.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"input_name/1","deprecated":false,"title":"input_name(keys)","anchor":"input_name/1"},{"id":"maybe_assign_input_value_from_keys/1","deprecated":false,"title":"maybe_assign_input_value_from_keys(assigns)","anchor":"maybe_assign_input_value_from_keys/1"},{"id":"scoped/2","deprecated":false,"title":"scoped(scope, context)","anchor":"scoped/2"},{"id":"set_image_setting/5","deprecated":false,"title":"set_image_setting(atom, scope, uploaded_media, settings_key, socket)","anchor":"set_image_setting/5"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Common.Settings.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Common.Settings.LoadInstanceConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Settings.LoadInstanceConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"load_config/0","deprecated":false,"title":"load_config()","anchor":"load_config/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Common.Settings.LoadInstanceConfig","nested_context":"Bonfire"},{"id":"Bonfire.Common.Simulation","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Simulation","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_url_base/0","deprecated":false,"title":"ap_url_base()","anchor":"ap_url_base/0"},{"id":"base64/0","deprecated":false,"title":"base64()","anchor":"base64/0"},{"id":"bool/0","deprecated":false,"title":"bool()","anchor":"bool/0"},{"id":"canonical_url/0","deprecated":false,"title":"canonical_url()","anchor":"canonical_url/0"},{"id":"content_type/0","deprecated":false,"title":"content_type()","anchor":"content_type/0"},{"id":"content_url/0","deprecated":false,"title":"content_url()","anchor":"content_url/0"},{"id":"date_of_birth/0","deprecated":false,"title":"date_of_birth()","anchor":"date_of_birth/0"},{"id":"domain/0","deprecated":false,"title":"domain()","anchor":"domain/0"},{"id":"email/0","deprecated":false,"title":"email()","anchor":"email/0"},{"id":"email_user/0","deprecated":false,"title":"email_user()","anchor":"email_user/0"},{"id":"falsehood/0","deprecated":false,"title":"falsehood()","anchor":"falsehood/0"},{"id":"float/0","deprecated":false,"title":"float()","anchor":"float/0"},{"id":"future_date/0","deprecated":false,"title":"future_date()","anchor":"future_date/0"},{"id":"future_datetime/0","deprecated":false,"title":"future_datetime()","anchor":"future_datetime/0"},{"id":"future_datetime_iso/0","deprecated":false,"title":"future_datetime_iso()","anchor":"future_datetime_iso/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"icon/0"},{"id":"image/0","deprecated":false,"title":"image()","anchor":"image/0"},{"id":"integer/0","deprecated":false,"title":"integer()","anchor":"integer/0"},{"id":"license/0","deprecated":false,"title":"license()","anchor":"license/0"},{"id":"location/0","deprecated":false,"title":"location()","anchor":"location/0"},{"id":"long_count/0","deprecated":false,"title":"long_count()","anchor":"long_count/0"},{"id":"long_list/1","deprecated":false,"title":"long_list(gen)","anchor":"long_list/1"},{"id":"markdown/0","deprecated":false,"title":"markdown()","anchor":"markdown/0"},{"id":"maybe_bool/0","deprecated":false,"title":"maybe_bool()","anchor":"maybe_bool/0"},{"id":"maybe_one_of/1","deprecated":false,"title":"maybe_one_of(list)","anchor":"maybe_one_of/1"},{"id":"med_count/0","deprecated":false,"title":"med_count()","anchor":"med_count/0"},{"id":"med_list/1","deprecated":false,"title":"med_list(gen)","anchor":"med_list/1"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"name/0"},{"id":"neg_integer/0","deprecated":false,"title":"neg_integer()","anchor":"neg_integer/0"},{"id":"one_of/1","deprecated":false,"title":"one_of(gens)","anchor":"one_of/1"},{"id":"paragraph/0","deprecated":false,"title":"paragraph()","anchor":"paragraph/0"},{"id":"password/0","deprecated":false,"title":"password()","anchor":"password/0"},{"id":"past_date/0","deprecated":false,"title":"past_date()","anchor":"past_date/0"},{"id":"past_datetime/0","deprecated":false,"title":"past_datetime()","anchor":"past_datetime/0"},{"id":"past_datetime_iso/0","deprecated":false,"title":"past_datetime_iso()","anchor":"past_datetime_iso/0"},{"id":"path/0","deprecated":false,"title":"path()","anchor":"path/0"},{"id":"pos_integer/0","deprecated":false,"title":"pos_integer()","anchor":"pos_integer/0"},{"id":"preferred_username/0","deprecated":false,"title":"preferred_username()","anchor":"preferred_username/0"},{"id":"short_count/0","deprecated":false,"title":"short_count()","anchor":"short_count/0"},{"id":"short_list/1","deprecated":false,"title":"short_list(gen)","anchor":"short_list/1"},{"id":"signing_key/0","deprecated":false,"title":"signing_key()","anchor":"signing_key/0"},{"id":"some/2","deprecated":false,"title":"some(count_or_range \\\\ 1, fun)","anchor":"some/2"},{"id":"summary/0","deprecated":false,"title":"summary()","anchor":"summary/0"},{"id":"title/0","deprecated":false,"title":"title()","anchor":"title/0"},{"id":"truth/0","deprecated":false,"title":"truth()","anchor":"truth/0"},{"id":"ulid/0","deprecated":false,"title":"ulid()","anchor":"ulid/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"url/0"},{"id":"username/0","deprecated":false,"title":"username()","anchor":"username/0"},{"id":"uuid/0","deprecated":false,"title":"uuid()","anchor":"uuid/0"},{"id":"verb/0","deprecated":false,"title":"verb()","anchor":"verb/0"},{"id":"website/0","deprecated":false,"title":"website()","anchor":"website/0"}],"key":"functions"}],"nested_title":".Common.Simulation","nested_context":"Bonfire"},{"id":"Bonfire.Common.StartupTimer","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.StartupTimer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(application \\\\ :bonfire)","anchor":"run/1"}],"key":"functions"}],"nested_title":".Common.StartupTimer","nested_context":"Bonfire"},{"id":"Bonfire.Common.Test.Interactive","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Test.Interactive","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"run_all_tests/1","deprecated":false,"title":"run_all_tests(args)","anchor":"run_all_tests/1"},{"id":"run_failed_tests/1","deprecated":false,"title":"run_failed_tests(args)","anchor":"run_failed_tests/1"},{"id":"run_stale_tests/1","deprecated":false,"title":"run_stale_tests(args)","anchor":"run_stale_tests/1"},{"id":"setup_test_repo/1","deprecated":false,"title":"setup_test_repo(tags)","anchor":"setup_test_repo/1"},{"id":"start_link/0","deprecated":false,"title":"start_link()","anchor":"start_link/0"},{"id":"unlock/0","deprecated":false,"title":"unlock()","anchor":"unlock/0"},{"id":"unwatch_tests/0","deprecated":false,"title":"unwatch_tests()","anchor":"unwatch_tests/0"},{"id":"watch_tests/1","deprecated":false,"title":"watch_tests(args)","anchor":"watch_tests/1"}],"key":"functions"}],"nested_title":".Common.Test.Interactive","nested_context":"Bonfire"},{"id":"Bonfire.Common.Test.Interactive.Helpers","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Test.Interactive.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"f/1","deprecated":false,"title":"f(args \\\\ nil)","anchor":"f/1"},{"id":"ready/0","deprecated":false,"title":"ready()","anchor":"ready/0"},{"id":"s/1","deprecated":false,"title":"s(args \\\\ nil)","anchor":"s/1"},{"id":"ta/1","deprecated":false,"title":"ta(args \\\\ nil)","anchor":"ta/1"},{"id":"uw/0","deprecated":false,"title":"uw()","anchor":"uw/0"},{"id":"w/1","deprecated":false,"title":"w(args \\\\ nil)","anchor":"w/1"}],"key":"functions"}],"nested_title":".Common.Test.Interactive.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.Common.Test.Interactive.Observer","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Test.Interactive.Observer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"}],"key":"functions"}],"nested_title":".Common.Test.Interactive.Observer","nested_context":"Bonfire"},{"id":"Bonfire.Common.TestInstanceRepo","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.TestInstanceRepo","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"aggregate/3","deprecated":false,"title":"aggregate(queryable, aggregate, opts \\\\ [])","anchor":"aggregate/3"},{"id":"aggregate/4","deprecated":false,"title":"aggregate(queryable, aggregate, field, opts)","anchor":"aggregate/4"},{"id":"all/2","deprecated":false,"title":"all(queryable, opts \\\\ [])","anchor":"all/2"},{"id":"apply/1","deprecated":false,"title":"apply(fun)","anchor":"apply/1"},{"id":"checked_out?/0","deprecated":false,"title":"checked_out?()","anchor":"checked_out?/0"},{"id":"checkout/2","deprecated":false,"title":"checkout(fun, opts \\\\ [])","anchor":"checkout/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"default_endpoint/0","deprecated":false,"title":"default_endpoint()","anchor":"default_endpoint/0"},{"id":"default_options/1","deprecated":false,"title":"default_options(operation)","anchor":"default_options/1"},{"id":"default_repo/0","deprecated":false,"title":"default_repo()","anchor":"default_repo/0"},{"id":"default_repo_opts/0","deprecated":false,"title":"default_repo_opts()","anchor":"default_repo_opts/0"},{"id":"delete/2","deprecated":false,"title":"delete(struct, opts \\\\ [])","anchor":"delete/2"},{"id":"delete!/2","deprecated":false,"title":"delete!(struct, opts \\\\ [])","anchor":"delete!/2"},{"id":"delete_all/2","deprecated":false,"title":"delete_all(queryable, opts \\\\ [])","anchor":"delete_all/2"},{"id":"delete_many/1","deprecated":false,"title":"delete_many(query)","anchor":"delete_many/1"},{"id":"disconnect_all/2","deprecated":false,"title":"disconnect_all(interval, opts \\\\ [])","anchor":"disconnect_all/2"},{"id":"exists?/2","deprecated":false,"title":"exists?(queryable, opts \\\\ [])","anchor":"exists?/2"},{"id":"explain/3","deprecated":false,"title":"explain(operation, queryable, opts \\\\ [])","anchor":"explain/3"},{"id":"fetch/2","deprecated":false,"title":"fetch(queryable, id)","anchor":"fetch/2"},{"id":"fetch_all/2","deprecated":false,"title":"fetch_all(queryable, id_or_ids)","anchor":"fetch_all/2"},{"id":"fetch_by/2","deprecated":false,"title":"fetch_by(queryable, term)","anchor":"fetch_by/2"},{"id":"find/3","deprecated":false,"title":"find(q, changeset, field \\\\ :form)","anchor":"find/3"},{"id":"get/3","deprecated":false,"title":"get(queryable, id, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(queryable, id, opts \\\\ [])","anchor":"get!/3"},{"id":"get_by/3","deprecated":false,"title":"get_by(queryable, clauses, opts \\\\ [])","anchor":"get_by/3"},{"id":"get_by!/3","deprecated":false,"title":"get_by!(queryable, clauses, opts \\\\ [])","anchor":"get_by!/3"},{"id":"get_dynamic_repo/0","deprecated":false,"title":"get_dynamic_repo()","anchor":"get_dynamic_repo/0"},{"id":"in_transaction?/0","deprecated":false,"title":"in_transaction?()","anchor":"in_transaction?/0"},{"id":"insert/2","deprecated":false,"title":"insert(struct, opts \\\\ [])","anchor":"insert/2"},{"id":"insert!/2","deprecated":false,"title":"insert!(struct, opts \\\\ [])","anchor":"insert!/2"},{"id":"insert_all/3","deprecated":false,"title":"insert_all(schema_or_source, entries, opts \\\\ [])","anchor":"insert_all/3"},{"id":"insert_all_or_ignore/2","deprecated":false,"title":"insert_all_or_ignore(schema, data)","anchor":"insert_all_or_ignore/2"},{"id":"insert_or_ignore/1","deprecated":false,"title":"insert_or_ignore(cs_or_struct)","anchor":"insert_or_ignore/1"},{"id":"insert_or_ignore/2","deprecated":false,"title":"insert_or_ignore(schema, object)","anchor":"insert_or_ignore/2"},{"id":"insert_or_update/2","deprecated":false,"title":"insert_or_update(changeset, opts \\\\ [])","anchor":"insert_or_update/2"},{"id":"insert_or_update!/2","deprecated":false,"title":"insert_or_update!(changeset, opts \\\\ [])","anchor":"insert_or_update!/2"},{"id":"load/2","deprecated":false,"title":"load(schema_or_types, data)","anchor":"load/2"},{"id":"make_subquery/1","deprecated":false,"title":"make_subquery(query)","anchor":"make_subquery/1"},{"id":"many/2","deprecated":false,"title":"many(query, opts \\\\ [])","anchor":"many/2"},{"id":"many_paginated/3","deprecated":false,"title":"many_paginated(queryable, opts \\\\ [], repo_opts \\\\ default_repo_opts())","anchor":"many_paginated/3"},{"id":"maybe_declare_test_instance/1","deprecated":false,"title":"maybe_declare_test_instance(v)","anchor":"maybe_declare_test_instance/1"},{"id":"maybe_one/2","deprecated":false,"title":"maybe_one(q, fallback \\\\ nil)","anchor":"maybe_one/2"},{"id":"maybe_preload/3","deprecated":false,"title":"maybe_preload(obj, preloads, opts \\\\ [])","anchor":"maybe_preload/3"},{"id":"one/2","deprecated":false,"title":"one(queryable, opts \\\\ [])","anchor":"one/2"},{"id":"one!/2","deprecated":false,"title":"one!(queryable, opts \\\\ [])","anchor":"one!/2"},{"id":"paginate/2","deprecated":false,"title":"paginate(pageable, options \\\\ [])","anchor":"paginate/2"},{"id":"preload/3","deprecated":false,"title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])","anchor":"preload/3"},{"id":"preload_all/2","deprecated":false,"title":"preload_all(obj, opts \\\\ [])","anchor":"preload_all/2"},{"id":"preload_mixins/2","deprecated":false,"title":"preload_mixins(obj, opts \\\\ [])","anchor":"preload_mixins/2"},{"id":"prepare_query/3","deprecated":false,"title":"prepare_query(operation, query, opts)","anchor":"prepare_query/3"},{"id":"process_put/1","deprecated":false,"title":"process_put(enum)","anchor":"process_put/1"},{"id":"put/1","deprecated":false,"title":"put(changeset)","anchor":"put/1"},{"id":"put_dynamic_repo/1","deprecated":false,"title":"put_dynamic_repo(dynamic)","anchor":"put_dynamic_repo/1"},{"id":"put_many/1","deprecated":false,"title":"put_many(things)","anchor":"put_many/1"},{"id":"query/3","deprecated":false,"title":"query(sql, params \\\\ [], opts \\\\ [])","anchor":"query/3"},{"id":"query!/3","deprecated":false,"title":"query!(sql, params \\\\ [], opts \\\\ [])","anchor":"query!/3"},{"id":"query_many/3","deprecated":false,"title":"query_many(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many/3"},{"id":"query_many!/3","deprecated":false,"title":"query_many!(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many!/3"},{"id":"reload/2","deprecated":false,"title":"reload(queryable, opts \\\\ [])","anchor":"reload/2"},{"id":"reload!/2","deprecated":false,"title":"reload!(queryable, opts \\\\ [])","anchor":"reload!/2"},{"id":"rollback/1","deprecated":false,"title":"rollback(value)","anchor":"rollback/1"},{"id":"single/1","deprecated":false,"title":"single(q)","anchor":"single/1"},{"id":"sql/3","deprecated":false,"title":"sql(raw_sql, data \\\\ [], opts \\\\ [])","anchor":"sql/3"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"stop/1","deprecated":false,"title":"stop(timeout \\\\ 5000)","anchor":"stop/1"},{"id":"stream/2","deprecated":false,"title":"stream(queryable, opts \\\\ [])","anchor":"stream/2"},{"id":"to_sql/2","deprecated":false,"title":"to_sql(operation, queryable)","anchor":"to_sql/2"},{"id":"trace/1","deprecated":false,"title":"trace(fun)","anchor":"trace/1"},{"id":"transact_many/1","deprecated":false,"title":"transact_many(queries)","anchor":"transact_many/1"},{"id":"transact_with/1","deprecated":false,"title":"transact_with(fun)","anchor":"transact_with/1"},{"id":"transaction/2","deprecated":false,"title":"transaction(fun_or_multi, opts \\\\ [])","anchor":"transaction/2"},{"id":"update/2","deprecated":false,"title":"update(struct, opts \\\\ [])","anchor":"update/2"},{"id":"update!/2","deprecated":false,"title":"update!(struct, opts \\\\ [])","anchor":"update!/2"},{"id":"update_all/3","deprecated":false,"title":"update_all(queryable, updates, opts \\\\ [])","anchor":"update_all/3"},{"id":"upsert/3","deprecated":false,"title":"upsert(cs, keys_or_attrs_to_update \\\\ nil, conflict_target \\\\ [:id])","anchor":"upsert/3"},{"id":"upsert_all/3","deprecated":false,"title":"upsert_all(schema, data, conflict_target \\\\ [:id])","anchor":"upsert_all/3"}],"key":"functions"}],"nested_title":".Common.TestInstanceRepo","nested_context":"Bonfire"},{"id":"Bonfire.Common.Text","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Text","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"blank?/1","deprecated":false,"title":"blank?(str_or_nil)","anchor":"blank?/1"},{"id":"camelise/1","deprecated":false,"title":"camelise(str)","anchor":"camelise/1"},{"id":"code_syntax/2","deprecated":false,"title":"code_syntax(text, filename)","anchor":"code_syntax/2"},{"id":"contains?/2","deprecated":false,"title":"contains?(string, substring)","anchor":"contains?/2"},{"id":"contains_html?/1","deprecated":false,"title":"contains_html?(string)","anchor":"contains_html?/1"},{"id":"hash/2","deprecated":false,"title":"hash(seed, opts \\\\ [])","anchor":"hash/2"},{"id":"list_checkboxes/1","deprecated":false,"title":"list_checkboxes(text)","anchor":"list_checkboxes/1"},{"id":"list_checked_boxes/1","deprecated":false,"title":"list_checked_boxes(text)","anchor":"list_checked_boxes/1"},{"id":"list_unchecked_boxes/1","deprecated":false,"title":"list_unchecked_boxes(text)","anchor":"list_unchecked_boxes/1"},{"id":"make_local_links_live/1","deprecated":false,"title":"make_local_links_live(content)","anchor":"make_local_links_live/1"},{"id":"markdown_as_html_earmark/2","deprecated":false,"title":"markdown_as_html_earmark(content, opts)","anchor":"markdown_as_html_earmark/2"},{"id":"markdown_as_html_mdex/2","deprecated":false,"title":"markdown_as_html_mdex(content, opts)","anchor":"markdown_as_html_mdex/2"},{"id":"markdown_checkboxes/1","deprecated":false,"title":"markdown_checkboxes(text)","anchor":"markdown_checkboxes/1"},{"id":"maybe_emote/2","deprecated":false,"title":"maybe_emote(content, custom_emoji \\\\ [])","anchor":"maybe_emote/2"},{"id":"maybe_markdown_to_html/2","deprecated":false,"title":"maybe_markdown_to_html(nothing, opts \\\\ [])","anchor":"maybe_markdown_to_html/2"},{"id":"maybe_normalize_html/1","deprecated":false,"title":"maybe_normalize_html(html_string)","anchor":"maybe_normalize_html/1"},{"id":"maybe_render_templated/2","deprecated":false,"title":"maybe_render_templated(templated_content, data)","anchor":"maybe_render_templated/2"},{"id":"maybe_sane_html/1","deprecated":false,"title":"maybe_sane_html(content)","anchor":"maybe_sane_html/1"},{"id":"maybe_to_snake/1","deprecated":false,"title":"maybe_to_snake(string)","anchor":"maybe_to_snake/1"},{"id":"normalise_links/2","deprecated":false,"title":"normalise_links(content, format \\\\ :markdown)","anchor":"normalise_links/2"},{"id":"random_string/1","deprecated":false,"title":"random_string(length \\\\ 10)","anchor":"random_string/1"},{"id":"regex_list/2","deprecated":false,"title":"regex_list(regex, text)","anchor":"regex_list/2"},{"id":"sentence_truncate/3","deprecated":false,"title":"sentence_truncate(input, length \\\\ 250, add_to_end \\\\ \"\")","anchor":"sentence_truncate/3"},{"id":"slug/1","deprecated":false,"title":"slug(text)","anchor":"slug/1"},{"id":"strlen/1","deprecated":false,"title":"strlen(x)","anchor":"strlen/1"},{"id":"text_only/1","deprecated":false,"title":"text_only(content)","anchor":"text_only/1"},{"id":"truncate/3","deprecated":false,"title":"truncate(text, max_length \\\\ 250, add_to_end \\\\ nil)","anchor":"truncate/3"},{"id":"underscore_truncate/2","deprecated":false,"title":"underscore_truncate(input, length \\\\ 250)","anchor":"underscore_truncate/2"},{"id":"upcase_first/1","deprecated":false,"title":"upcase_first(arg)","anchor":"upcase_first/1"},{"id":"verb_infinitive/1","deprecated":false,"title":"verb_infinitive(verb_conjugated)","anchor":"verb_infinitive/1"}],"key":"functions"}],"nested_title":".Common.Text","nested_context":"Bonfire"},{"id":"Bonfire.Common.TextExtended","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.TextExtended","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"blank?/1","deprecated":false,"title":"blank?(xA)","anchor":"blank?/1"},{"id":"camelise/1","deprecated":false,"title":"camelise(xA)","anchor":"camelise/1"},{"id":"code_syntax/2","deprecated":false,"title":"code_syntax(xA, xB)","anchor":"code_syntax/2"},{"id":"contains?/2","deprecated":false,"title":"contains?(xA, xB)","anchor":"contains?/2"},{"id":"contains_html?/1","deprecated":false,"title":"contains_html?(xA)","anchor":"contains_html?/1"},{"id":"hash/1","deprecated":false,"title":"hash(xA)","anchor":"hash/1"},{"id":"hash/2","deprecated":false,"title":"hash(xA, xB)","anchor":"hash/2"},{"id":"list_checkboxes/1","deprecated":false,"title":"list_checkboxes(xA)","anchor":"list_checkboxes/1"},{"id":"list_checked_boxes/1","deprecated":false,"title":"list_checked_boxes(xA)","anchor":"list_checked_boxes/1"},{"id":"list_unchecked_boxes/1","deprecated":false,"title":"list_unchecked_boxes(xA)","anchor":"list_unchecked_boxes/1"},{"id":"make_local_links_live/1","deprecated":false,"title":"make_local_links_live(xA)","anchor":"make_local_links_live/1"},{"id":"markdown_as_html_earmark/2","deprecated":false,"title":"markdown_as_html_earmark(xA, xB)","anchor":"markdown_as_html_earmark/2"},{"id":"markdown_as_html_mdex/2","deprecated":false,"title":"markdown_as_html_mdex(xA, xB)","anchor":"markdown_as_html_mdex/2"},{"id":"markdown_checkboxes/1","deprecated":false,"title":"markdown_checkboxes(xA)","anchor":"markdown_checkboxes/1"},{"id":"maybe_emote/1","deprecated":false,"title":"maybe_emote(xA)","anchor":"maybe_emote/1"},{"id":"maybe_emote/2","deprecated":false,"title":"maybe_emote(xA, xB)","anchor":"maybe_emote/2"},{"id":"maybe_markdown_to_html/1","deprecated":false,"title":"maybe_markdown_to_html(xA)","anchor":"maybe_markdown_to_html/1"},{"id":"maybe_markdown_to_html/2","deprecated":false,"title":"maybe_markdown_to_html(xA, xB)","anchor":"maybe_markdown_to_html/2"},{"id":"maybe_normalize_html/1","deprecated":false,"title":"maybe_normalize_html(xA)","anchor":"maybe_normalize_html/1"},{"id":"maybe_render_templated/2","deprecated":false,"title":"maybe_render_templated(xA, xB)","anchor":"maybe_render_templated/2"},{"id":"maybe_sane_html/1","deprecated":false,"title":"maybe_sane_html(xA)","anchor":"maybe_sane_html/1"},{"id":"maybe_to_snake/1","deprecated":false,"title":"maybe_to_snake(xA)","anchor":"maybe_to_snake/1"},{"id":"normalise_links/1","deprecated":false,"title":"normalise_links(xA)","anchor":"normalise_links/1"},{"id":"normalise_links/2","deprecated":false,"title":"normalise_links(xA, xB)","anchor":"normalise_links/2"},{"id":"random_string/0","deprecated":false,"title":"random_string()","anchor":"random_string/0"},{"id":"random_string/1","deprecated":false,"title":"random_string(xA)","anchor":"random_string/1"},{"id":"regex_list/2","deprecated":false,"title":"regex_list(xA, xB)","anchor":"regex_list/2"},{"id":"sentence_truncate/1","deprecated":false,"title":"sentence_truncate(xA)","anchor":"sentence_truncate/1"},{"id":"sentence_truncate/2","deprecated":false,"title":"sentence_truncate(xA, xB)","anchor":"sentence_truncate/2"},{"id":"sentence_truncate/3","deprecated":false,"title":"sentence_truncate(xA, xB, xC)","anchor":"sentence_truncate/3"},{"id":"slug/1","deprecated":false,"title":"slug(xA)","anchor":"slug/1"},{"id":"strlen/1","deprecated":false,"title":"strlen(xA)","anchor":"strlen/1"},{"id":"text_only/1","deprecated":false,"title":"text_only(xA)","anchor":"text_only/1"},{"id":"truncate/1","deprecated":false,"title":"truncate(xA)","anchor":"truncate/1"},{"id":"truncate/2","deprecated":false,"title":"truncate(xA, xB)","anchor":"truncate/2"},{"id":"truncate/3","deprecated":false,"title":"truncate(xA, xB, xC)","anchor":"truncate/3"},{"id":"underscore_truncate/1","deprecated":false,"title":"underscore_truncate(xA)","anchor":"underscore_truncate/1"},{"id":"underscore_truncate/2","deprecated":false,"title":"underscore_truncate(xA, xB)","anchor":"underscore_truncate/2"},{"id":"upcase_first/1","deprecated":false,"title":"upcase_first(xA)","anchor":"upcase_first/1"},{"id":"verb_infinitive/1","deprecated":false,"title":"verb_infinitive(xA)","anchor":"verb_infinitive/1"}],"key":"functions"}],"nested_title":".Common.TextExtended","nested_context":"Bonfire"},{"id":"Bonfire.Common.Types","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Types","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_object_type_names/0","deprecated":false,"title":"all_object_type_names()","anchor":"all_object_type_names/0"},{"id":"defines_struct?/1","deprecated":false,"title":"defines_struct?(module)","anchor":"defines_struct?/1"},{"id":"is_numeric/1","deprecated":false,"title":"is_numeric(num)","anchor":"is_numeric/1"},{"id":"is_ulid?/1","deprecated":false,"title":"is_ulid?(str)","anchor":"is_ulid?/1"},{"id":"is_uuid?/1","deprecated":false,"title":"is_uuid?(str)","anchor":"is_uuid?/1"},{"id":"maybe_convert_ulids/1","deprecated":false,"title":"maybe_convert_ulids(list)","anchor":"maybe_convert_ulids/1"},{"id":"maybe_to_atom/1","deprecated":false,"title":"maybe_to_atom(str)","anchor":"maybe_to_atom/1"},{"id":"maybe_to_atom!/1","deprecated":false,"title":"maybe_to_atom!(str)","anchor":"maybe_to_atom!/1"},{"id":"maybe_to_atom_or_module/3","deprecated":false,"title":"maybe_to_atom_or_module(k, force, to_snake)","anchor":"maybe_to_atom_or_module/3"},{"id":"maybe_to_float/2","deprecated":false,"title":"maybe_to_float(val, fallback \\\\ 0)","anchor":"maybe_to_float/2"},{"id":"maybe_to_integer/2","deprecated":false,"title":"maybe_to_integer(val, fallback \\\\ 0)","anchor":"maybe_to_integer/2"},{"id":"maybe_to_module/2","deprecated":false,"title":"maybe_to_module(str, force \\\\ true)","anchor":"maybe_to_module/2"},{"id":"maybe_to_snake_atom/1","deprecated":false,"title":"maybe_to_snake_atom(string)","anchor":"maybe_to_snake_atom/1"},{"id":"maybe_to_string/1","deprecated":false,"title":"maybe_to_string(atom)","anchor":"maybe_to_string/1"},{"id":"module_to_human_readable/1","deprecated":false,"title":"module_to_human_readable(module)","anchor":"module_to_human_readable/1"},{"id":"module_to_str/1","deprecated":false,"title":"module_to_str(str)","anchor":"module_to_str/1"},{"id":"object_type/1","deprecated":false,"title":"object_type(object)","anchor":"object_type/1"},{"id":"object_type_display/1","deprecated":false,"title":"object_type_display(object_type)","anchor":"object_type_display/1"},{"id":"sanitise_name/1","deprecated":false,"title":"sanitise_name(type)","anchor":"sanitise_name/1"},{"id":"table_id/1","deprecated":false,"title":"table_id(schema)","anchor":"table_id/1"},{"id":"table_type/1","deprecated":false,"title":"table_type(type)","anchor":"table_type/1"},{"id":"table_types/1","deprecated":false,"title":"table_types(types)","anchor":"table_types/1"},{"id":"typeof/1","deprecated":false,"title":"typeof(exception)","anchor":"typeof/1"},{"id":"ulid/1","deprecated":false,"title":"ulid(input)","anchor":"ulid/1"},{"id":"ulid!/1","deprecated":false,"title":"ulid!(object)","anchor":"ulid!/1"},{"id":"ulids/1","deprecated":false,"title":"ulids(objects)","anchor":"ulids/1"},{"id":"ulids_or/2","deprecated":false,"title":"ulids_or(objects, fallback_or_fun)","anchor":"ulids_or/2"}],"key":"functions"}],"nested_title":".Common.Types","nested_context":"Bonfire"},{"id":"Bonfire.Common.URIs","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.URIs","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_domain/1","deprecated":false,"title":"base_domain(uri_or_endpoint_or_conn \\\\ nil)","anchor":"base_domain/1"},{"id":"base_uri/1","deprecated":false,"title":"base_uri(conn_or_socket \\\\ nil)","anchor":"base_uri/1"},{"id":"base_url/1","deprecated":false,"title":"base_url(conn_or_socket_or_uri \\\\ nil)","anchor":"base_url/1"},{"id":"canonical_url/1","deprecated":false,"title":"canonical_url(object)","anchor":"canonical_url/1"},{"id":"fallback/1","deprecated":false,"title":"fallback(args)","anchor":"fallback/1"},{"id":"fallback/2","deprecated":false,"title":"fallback(id, args)","anchor":"fallback/2"},{"id":"fallback/3","deprecated":false,"title":"fallback(id, type, args)","anchor":"fallback/3"},{"id":"is_uri?/1","deprecated":false,"title":"is_uri?(str)","anchor":"is_uri?/1"},{"id":"maybe_generate_canonical_url/1","deprecated":false,"title":"maybe_generate_canonical_url(thing)","anchor":"maybe_generate_canonical_url/1"},{"id":"path/3","deprecated":false,"title":"path(view_module_or_path_name_or_object, args \\\\ [], opts \\\\ [])","anchor":"path/3"},{"id":"path_by_id/4","deprecated":false,"title":"path_by_id(id, args, object, opts)","anchor":"path_by_id/4"},{"id":"remote_canonical_url/1","deprecated":false,"title":"remote_canonical_url(object)","anchor":"remote_canonical_url/1"},{"id":"url_path/2","deprecated":false,"title":"url_path(view_module_or_path_name_or_object, args \\\\ [])","anchor":"url_path/2"},{"id":"validate_uri/1","deprecated":false,"title":"validate_uri(str)","anchor":"validate_uri/1"}],"key":"functions"}],"nested_title":".Common.URIs","nested_context":"Bonfire"},{"id":"Bonfire.Common.Utils","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Utils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"apply_error/3","deprecated":false,"title":"apply_error(error, args, opts)","anchor":"apply_error/3"},{"id":"apply_task/3","deprecated":false,"title":"apply_task(function \\\\ :async, fun, opts \\\\ [])","anchor":"apply_task/3"},{"id":"apply_task_supervised/3","deprecated":false,"title":"apply_task_supervised(function \\\\ :async, fun, opts \\\\ [])","anchor":"apply_task_supervised/3"},{"id":"current_account/2","deprecated":false,"title":"current_account(current_account_or_socket_or_opts, recursing \\\\ false)","anchor":"current_account/2"},{"id":"current_account_and_or_user_ids/1","deprecated":false,"title":"current_account_and_or_user_ids(assigns)","anchor":"current_account_and_or_user_ids/1"},{"id":"current_account_auth!/2","deprecated":false,"title":"current_account_auth!(context, password)","anchor":"current_account_auth!/2"},{"id":"current_account_id/2","deprecated":false,"title":"current_account_id(current_account_or_socket_or_opts, recursing \\\\ false)","anchor":"current_account_id/2"},{"id":"current_user/2","deprecated":false,"title":"current_user(current_user_or_socket_or_opts, recursing \\\\ false)","anchor":"current_user/2"},{"id":"current_user_auth!/2","deprecated":false,"title":"current_user_auth!(context, password)","anchor":"current_user_auth!/2"},{"id":"current_user_id/2","deprecated":false,"title":"current_user_id(current_user_or_socket_or_opts, recursing \\\\ false)","anchor":"current_user_id/2"},{"id":"current_user_required!/1","deprecated":false,"title":"current_user_required!(context)","anchor":"current_user_required!/1"},{"id":"e/2","deprecated":false,"title":"e(val, fallback)","anchor":"e/2"},{"id":"e/3","deprecated":false,"title":"e(object, key, fallback)","anchor":"e/3"},{"id":"e/4","deprecated":false,"title":"e(object, key1, key2, fallback)","anchor":"e/4"},{"id":"e/5","deprecated":false,"title":"e(object, key1, key2, key3, fallback)","anchor":"e/5"},{"id":"e/6","deprecated":false,"title":"e(object, key1, key2, key3, key4, fallback)","anchor":"e/6"},{"id":"e/7","deprecated":false,"title":"e(object, key1, key2, key3, key4, key5, fallback)","anchor":"e/7"},{"id":"e/8","deprecated":false,"title":"e(object, key1, key2, key3, key4, key5, key6, fallback)","anchor":"e/8"},{"id":"empty?/1","deprecated":false,"title":"empty?(v)","anchor":"empty?/1"},{"id":"maybe/2","deprecated":false,"title":"maybe(val, change_fn)","anchor":"maybe/2"},{"id":"maybe_apply/4","deprecated":false,"title":"maybe_apply(module, fun, args \\\\ [], opts \\\\ [])","anchor":"maybe_apply/4"},{"id":"maybe_from_opts/3","deprecated":false,"title":"maybe_from_opts(opts, key, fallback \\\\ nil)","anchor":"maybe_from_opts/3"},{"id":"ok_unwrap/2","deprecated":false,"title":"ok_unwrap(val, fallback \\\\ nil)","anchor":"ok_unwrap/2"},{"id":"round_nearest/1","deprecated":false,"title":"round_nearest(num)","anchor":"round_nearest/1"},{"id":"round_nearest/2","deprecated":false,"title":"round_nearest(num, target)","anchor":"round_nearest/2"},{"id":"socket_connected?/1","deprecated":false,"title":"socket_connected?(socket)","anchor":"socket_connected?/1"},{"id":"to_options/1","deprecated":false,"title":"to_options(user_or_socket_or_opts)","anchor":"to_options/1"}],"key":"functions"}],"nested_title":".Common.Utils","nested_context":"Bonfire"},{"id":"Bonfire.Ecto","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto","sections":[],"nested_title":".Ecto","nested_context":"Bonfire"},{"id":"Bonfire.Ecto.Acts.Begin","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto.Acts.Begin","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Ecto.Acts.Begin","nested_context":"Bonfire"},{"id":"Bonfire.Ecto.Acts.Commit","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto.Acts.Commit","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Ecto.Acts.Commit","nested_context":"Bonfire"},{"id":"Bonfire.Ecto.Acts.Delete","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto.Acts.Delete","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_delete/2","deprecated":false,"title":"maybe_delete(objects, repo)","anchor":"maybe_delete/2"},{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Ecto.Acts.Delete","nested_context":"Bonfire"},{"id":"Bonfire.Ecto.Acts.Work","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto.Acts.Work","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add/2","deprecated":false,"title":"add(epic, key)","anchor":"add/2"}],"key":"functions"}],"nested_title":".Ecto.Acts.Work","nested_context":"Bonfire"},{"id":"Bonfire.Epics","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_debug/3","deprecated":false,"title":"maybe_debug(act_or_epic, thing, label \\\\ nil)","anchor":"maybe_debug/3"},{"id":"maybe_debug/4","deprecated":false,"title":"maybe_debug(epic, act, thing, label)","anchor":"maybe_debug/4"},{"id":"smart/4","deprecated":false,"title":"smart(epic, act, thing, label \\\\ \"\")","anchor":"smart/4"}],"key":"functions"}],"nested_title":".Epics","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Act","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Act","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"ret/0","deprecated":false,"title":"ret()","anchor":"t:ret/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"run/2","deprecated":false,"title":"run(t, t)","anchor":"c:run/2"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"debug/3","deprecated":false,"title":"debug(act, thing, label \\\\ \"\")","anchor":"debug/3"},{"id":"new/1","deprecated":false,"title":"new(module)","anchor":"new/1"},{"id":"new/2","deprecated":false,"title":"new(module, options)","anchor":"new/2"},{"id":"new/3","deprecated":false,"title":"new(module, options, meta)","anchor":"new/3"}],"key":"functions"}],"nested_title":".Epics.Act","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Debug","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Debug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_maybe_debug/4","deprecated":false,"title":"do_maybe_debug(epic, act, thing, label)","anchor":"do_maybe_debug/4"},{"id":"opts/2","deprecated":false,"title":"opts(epic, act)","anchor":"opts/2"}],"key":"functions"}],"nested_title":".Epics.Debug","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Epic","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Epic","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"add_error/2","deprecated":false,"title":"add_error(epic, error)","anchor":"add_error/2"},{"id":"add_error/5","deprecated":false,"title":"add_error(epic, act, error, source \\\\ nil, stacktrace \\\\ nil)","anchor":"add_error/5"},{"id":"append/2","deprecated":false,"title":"append(self, acts)","anchor":"append/2"},{"id":"assign/2","deprecated":false,"title":"assign(self, name)","anchor":"assign/2"},{"id":"assign/3","deprecated":false,"title":"assign(self, name, value)","anchor":"assign/3"},{"id":"debug/3","deprecated":false,"title":"debug(epic, thing, label \\\\ \"\")","anchor":"debug/3"},{"id":"from_config!/2","deprecated":false,"title":"from_config!(module, name)","anchor":"from_config!/2"},{"id":"from_spec!/1","deprecated":false,"title":"from_spec!(acts)","anchor":"from_spec!/1"},{"id":"maybe_debug/3","deprecated":false,"title":"maybe_debug(epic, thing, label \\\\ \"\")","anchor":"maybe_debug/3"},{"id":"new/1","deprecated":false,"title":"new(next \\\\ [])","anchor":"new/1"},{"id":"prepend/2","deprecated":false,"title":"prepend(self, acts)","anchor":"prepend/2"},{"id":"render_errors/1","deprecated":false,"title":"render_errors(epic)","anchor":"render_errors/1"},{"id":"run/1","deprecated":false,"title":"run(epic)","anchor":"run/1"},{"id":"update/4","deprecated":false,"title":"update(self, name, default, fun)","anchor":"update/4"}],"key":"functions"}],"nested_title":".Epics.Epic","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Error","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Error","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"message/1","deprecated":false,"title":"message(self)","anchor":"message/1"}],"key":"functions"}],"nested_title":".Epics.Error","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Test","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Test","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assert_epic_ok/1","deprecated":false,"title":"assert_epic_ok(expr)","anchor":"assert_epic_ok/1"},{"id":"debug_error/1","deprecated":false,"title":"debug_error(epic)","anchor":"debug_error/1"}],"key":"functions"}],"nested_title":".Epics.Test","nested_context":"Bonfire"},{"id":"Bonfire.Files","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/1","deprecated":false,"title":"ap_publish_activity(medias)","anchor":"ap_publish_activity/1"},{"id":"ap_receive_attachments/2","deprecated":false,"title":"ap_receive_attachments(creator, attachments)","anchor":"ap_receive_attachments/2"},{"id":"data_url/2","deprecated":false,"title":"data_url(content, mime_type)","anchor":"data_url/2"},{"id":"extract_metadata/1","deprecated":false,"title":"extract_metadata(path)","anchor":"extract_metadata/1"},{"id":"file_extension/1","deprecated":false,"title":"file_extension(path)","anchor":"file_extension/1"},{"id":"file_extension_only/1","deprecated":false,"title":"file_extension_only(path)","anchor":"file_extension_only/1"},{"id":"full_url/2","deprecated":false,"title":"full_url(module, media)","anchor":"full_url/2"},{"id":"normalise_size/2","deprecated":false,"title":"normalise_size(size, default \\\\ 8)","anchor":"normalise_size/2"},{"id":"remote_url/3","deprecated":false,"title":"remote_url(module \\\\ nil, media, version \\\\ :default)","anchor":"remote_url/3"},{"id":"upload/5","deprecated":false,"title":"upload(module, context, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/5"},{"id":"validate/3","deprecated":false,"title":"validate(other, allowed_media_types, max_file_size)","anchor":"validate/3"}],"key":"functions"}],"nested_title":".Files","nested_context":"Bonfire"},{"id":"Bonfire.Files.Acts.AttachMedia","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Acts.AttachMedia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cast/2","deprecated":false,"title":"cast(changeset, uploaded_media)","anchor":"cast/2"},{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Files.Acts.AttachMedia","nested_context":"Bonfire"},{"id":"Bonfire.Files.Acts.URLPreviews","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Acts.URLPreviews","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_fetch_and_save/2","deprecated":false,"title":"maybe_fetch_and_save(current_user, url)","anchor":"maybe_fetch_and_save/2"},{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Files.Acts.URLPreviews","nested_context":"Bonfire"},{"id":"Bonfire.Files.BannerUploader","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.BannerUploader","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(arg1, arg2)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.BannerUploader","nested_context":"Bonfire"},{"id":"Bonfire.Files.Blurred","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Blurred","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"blurhash/2","deprecated":false,"title":"blurhash(media, opts \\\\ [])","anchor":"blurhash/2"},{"id":"blurred/2","deprecated":false,"title":"blurred(media_or_path, opts \\\\ [])","anchor":"blurred/2"}],"key":"functions"}],"nested_title":".Files.Blurred","nested_context":"Bonfire"},{"id":"Bonfire.Files.CapsuleIntegration.Attacher","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.CapsuleIntegration.Attacher","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"attach/3","deprecated":false,"title":"attach(upload, changeset, module \\\\ nil)","anchor":"attach/3"},{"id":"storages/2","deprecated":false,"title":"storages(upload, module)","anchor":"storages/2"},{"id":"store/3","deprecated":false,"title":"store(module, upload, changeset)","anchor":"store/3"},{"id":"upload/3","deprecated":false,"title":"upload(changeset, field, attrs)","anchor":"upload/3"}],"key":"functions"}],"nested_title":".Files.CapsuleIntegration.Attacher","nested_context":"Bonfire"},{"id":"Bonfire.Files.Definition","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Definition","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"c:allowed_media_types/0"}],"key":"callbacks"}],"nested_title":".Files.Definition","nested_context":"Bonfire"},{"id":"Bonfire.Files.DocumentUploader","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.DocumentUploader","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(arg1, arg2)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.DocumentUploader","nested_context":"Bonfire"},{"id":"Bonfire.Files.FaviconStore","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.FaviconStore","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"cached_or_async_fetch_url/2","deprecated":false,"title":"cached_or_async_fetch_url(url, opts \\\\ [])","anchor":"cached_or_async_fetch_url/2"},{"id":"cached_or_fetch/2","deprecated":false,"title":"cached_or_fetch(url, opts \\\\ [])","anchor":"cached_or_fetch/2"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"favicon_url/2","deprecated":false,"title":"favicon_url(url, opts \\\\ [])","anchor":"favicon_url/2"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(_, _)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.FaviconStore","nested_context":"Bonfire"},{"id":"Bonfire.Files.FileDenied","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.FileDenied","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"new/1","deprecated":false,"title":"new(size)","anchor":"new/1"}],"key":"functions"}],"nested_title":".Files.FileDenied","nested_context":"Bonfire"},{"id":"Bonfire.Files.IconUploader","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.IconUploader","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(arg1, arg2)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.IconUploader","nested_context":"Bonfire"},{"id":"Bonfire.Files.Image.Edit","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Image.Edit","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"banner/3","deprecated":false,"title":"banner(filename, max_width, max_height)","anchor":"banner/3"},{"id":"blur/2","deprecated":false,"title":"blur(path, final_path)","anchor":"blur/2"},{"id":"dominant_color/3","deprecated":false,"title":"dominant_color(file_path_or_binary_or_stream, bins \\\\ 15, fallback \\\\ \"#FFF8E7\")","anchor":"dominant_color/3"},{"id":"image/3","deprecated":false,"title":"image(filename, max_width, max_height)","anchor":"image/3"},{"id":"thumbnail/1","deprecated":false,"title":"thumbnail(filename)","anchor":"thumbnail/1"},{"id":"thumbnail_image/2","deprecated":false,"title":"thumbnail_image(version, original_file)","anchor":"thumbnail_image/2"},{"id":"thumbnail_pdf/1","deprecated":false,"title":"thumbnail_pdf(filename)","anchor":"thumbnail_pdf/1"}],"key":"functions"}],"nested_title":".Files.Image.Edit","nested_context":"Bonfire"},{"id":"Bonfire.Files.ImageUploader","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.ImageUploader","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(arg1, arg2)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.ImageUploader","nested_context":"Bonfire"},{"id":"Bonfire.Files.LiveHandler","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"handle_progress/3","deprecated":false,"title":"handle_progress(type, entry, socket)","anchor":"handle_progress/3"},{"id":"set_fallback/5","deprecated":false,"title":"set_fallback(_, _, _, _, socket)","anchor":"set_fallback/5"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Files.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Files.Media","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Media","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"hard_delete/2","deprecated":false,"title":"hard_delete(module, media)","anchor":"hard_delete/2"},{"id":"insert/4","deprecated":false,"title":"insert(user, file, file_info, attrs)","anchor":"insert/4"},{"id":"many/1","deprecated":false,"title":"many(filters \\\\ [])","anchor":"many/1"},{"id":"one/1","deprecated":false,"title":"one(filters)","anchor":"one/1"},{"id":"soft_delete/1","deprecated":false,"title":"soft_delete(media)","anchor":"soft_delete/1"},{"id":"update_by/2","deprecated":false,"title":"update_by(filters, updates)","anchor":"update_by/2"}],"key":"functions"}],"nested_title":".Files.Media","nested_context":"Bonfire"},{"id":"Bonfire.Files.Media.Queries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Media.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(query, filter_or_filters)","anchor":"filter/2"},{"id":"query/1","deprecated":false,"title":"query(filters)","anchor":"query/1"},{"id":"query/2","deprecated":false,"title":"query(q, filters)","anchor":"query/2"}],"key":"functions"}],"nested_title":".Files.Media.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Files.Prepare","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Prepare","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"prepare/2","deprecated":false,"title":"prepare(definition, filepath)","anchor":"prepare/2"}],"key":"functions"}],"nested_title":".Files.Prepare","nested_context":"Bonfire"},{"id":"Bonfire.Files.ResponsiveImage","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.ResponsiveImage","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"compile_src/2","deprecated":false,"title":"compile_src(path, width)","anchor":"compile_src/2"},{"id":"compile_srcset/2","deprecated":false,"title":"compile_srcset(path, widths)","anchor":"compile_srcset/2"},{"id":"resize/1","deprecated":false,"title":"resize(attr)","anchor":"resize/1"},{"id":"resize/2","deprecated":false,"title":"resize(path, width)","anchor":"resize/2"},{"id":"resize_timed/1","deprecated":false,"title":"resize_timed(images)","anchor":"resize_timed/1"},{"id":"src/2","deprecated":false,"title":"src(path, width)","anchor":"src/2"},{"id":"srcset/2","deprecated":false,"title":"srcset(path, widths)","anchor":"srcset/2"}],"key":"functions"}],"nested_title":".Files.ResponsiveImage","nested_context":"Bonfire"},{"id":"Bonfire.Files.Routes","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Routes","sections":[],"nested_title":".Files.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Files.RuntimeConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Files.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Files.Simulation","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Simulation","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cleanup/1","deprecated":false,"title":"cleanup(path)","anchor":"cleanup/1"},{"id":"fake_upload/2","deprecated":false,"title":"fake_upload(file, upload_def \\\\ nil)","anchor":"fake_upload/2"},{"id":"geometry/1","deprecated":false,"title":"geometry(path)","anchor":"geometry/1"},{"id":"icon_file/0","deprecated":false,"title":"icon_file()","anchor":"icon_file/0"},{"id":"image_file/0","deprecated":false,"title":"image_file()","anchor":"image_file/0"},{"id":"pdf_file/0","deprecated":false,"title":"pdf_file()","anchor":"pdf_file/0"},{"id":"text_file/0","deprecated":false,"title":"text_file()","anchor":"text_file/0"}],"key":"functions"}],"nested_title":".Files.Simulation","nested_context":"Bonfire"},{"id":"Bonfire.Files.Versions","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Versions","sections":[],"nested_title":".Files.Versions","nested_context":"Bonfire"},{"id":"Bonfire.Mailer","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Mailer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"deliver/1","deprecated":false,"title":"deliver(email)","anchor":"deliver/1"},{"id":"deliver_later/2","deprecated":false,"title":"deliver_later(email, opts \\\\ [])","anchor":"deliver_later/2"},{"id":"deliver_later!/2","deprecated":false,"title":"deliver_later!(email, opts \\\\ [])","anchor":"deliver_later!/2"},{"id":"deliver_now/2","deprecated":false,"title":"deliver_now(email, opts \\\\ [])","anchor":"deliver_now/2"},{"id":"deliver_now!/2","deprecated":false,"title":"deliver_now!(email, opts \\\\ [])","anchor":"deliver_now!/2"},{"id":"do_send/2","deprecated":false,"title":"do_send(arg1, mail)","anchor":"do_send/2"},{"id":"handle_error/2","deprecated":false,"title":"handle_error(error, stacktrace \\\\ nil)","anchor":"handle_error/2"},{"id":"send/4","deprecated":false,"title":"send(email, to, mode, opts \\\\ [])","anchor":"send/4"},{"id":"send_app_feedback/3","deprecated":false,"title":"send_app_feedback(type \\\\ \"feedback\", subject, body)","anchor":"send_app_feedback/3"},{"id":"send_async/3","deprecated":false,"title":"send_async(email, to, opts \\\\ [])","anchor":"send_async/3"},{"id":"send_now/3","deprecated":false,"title":"send_now(email, to, opts \\\\ [])","anchor":"send_now/3"}],"key":"functions"}],"nested_title":".Mailer","nested_context":"Bonfire"},{"id":"Bonfire.Mailer.Checker","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Mailer.Checker","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"error_reason/0","deprecated":false,"title":"error_reason()","anchor":"t:error_reason/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"validate_domain/1","deprecated":false,"title":"validate_domain(domain)","anchor":"validate_domain/1"},{"id":"validate_email/1","deprecated":false,"title":"validate_email(email)","anchor":"validate_email/1"}],"key":"functions"}],"nested_title":".Mailer.Checker","nested_context":"Bonfire"},{"id":"Bonfire.Mailer.RuntimeConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Mailer.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"},{"id":"mail_blackhole/1","deprecated":false,"title":"mail_blackhole(var)","anchor":"mail_blackhole/1"},{"id":"mail_service/2","deprecated":false,"title":"mail_service(adapter, extra \\\\ [])","anchor":"mail_service/2"}],"key":"functions"}],"nested_title":".Mailer.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Web.Endpoint","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Endpoint","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"broadcast/3","deprecated":false,"title":"broadcast(topic, event, msg)","anchor":"broadcast/3"},{"id":"broadcast!/3","deprecated":false,"title":"broadcast!(topic, event, msg)","anchor":"broadcast!/3"},{"id":"broadcast_from/4","deprecated":false,"title":"broadcast_from(from, topic, event, msg)","anchor":"broadcast_from/4"},{"id":"broadcast_from!/4","deprecated":false,"title":"broadcast_from!(from, topic, event, msg)","anchor":"broadcast_from!/4"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/2","deprecated":false,"title":"config(key, default \\\\ nil)","anchor":"config/2"},{"id":"config_change/2","deprecated":false,"title":"config_change(changed, removed)","anchor":"config_change/2"},{"id":"generate_reverse_router!/1","deprecated":false,"title":"generate_reverse_router!(app \\\\ :bonfire)","anchor":"generate_reverse_router!/1"},{"id":"host/0","deprecated":false,"title":"host()","anchor":"host/0"},{"id":"include_assets/1","deprecated":false,"title":"include_assets(conn)","anchor":"include_assets/1"},{"id":"include_assets/2","deprecated":false,"title":"include_assets(conn, atom)","anchor":"include_assets/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"local_broadcast/3","deprecated":false,"title":"local_broadcast(topic, event, msg)","anchor":"local_broadcast/3"},{"id":"local_broadcast_from/4","deprecated":false,"title":"local_broadcast_from(from, topic, event, msg)","anchor":"local_broadcast_from/4"},{"id":"path/1","deprecated":false,"title":"path(path)","anchor":"path/1"},{"id":"reload!/1","deprecated":false,"title":"reload!(opts \\\\ [\"--no-all-warnings\"])","anchor":"reload!/1"},{"id":"script_name/0","deprecated":false,"title":"script_name()","anchor":"script_name/0"},{"id":"server_info/1","deprecated":false,"title":"server_info(scheme)","anchor":"server_info/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"static_integrity/1","deprecated":false,"title":"static_integrity(path)","anchor":"static_integrity/1"},{"id":"static_lookup/1","deprecated":false,"title":"static_lookup(path)","anchor":"static_lookup/1"},{"id":"static_path/1","deprecated":false,"title":"static_path(path)","anchor":"static_path/1"},{"id":"static_url/0","deprecated":false,"title":"static_url()","anchor":"static_url/0"},{"id":"struct_url/0","deprecated":false,"title":"struct_url()","anchor":"struct_url/0"},{"id":"subscribe/2","deprecated":false,"title":"subscribe(topic, opts \\\\ [])","anchor":"subscribe/2"},{"id":"unsubscribe/1","deprecated":false,"title":"unsubscribe(topic)","anchor":"unsubscribe/1"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"url/0"}],"key":"functions"}],"nested_title":".Web.Endpoint","nested_context":"Bonfire"},{"id":"Bonfire.Web.FakeRemoteEndpoint","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.FakeRemoteEndpoint","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"broadcast/3","deprecated":false,"title":"broadcast(topic, event, msg)","anchor":"broadcast/3"},{"id":"broadcast!/3","deprecated":false,"title":"broadcast!(topic, event, msg)","anchor":"broadcast!/3"},{"id":"broadcast_from/4","deprecated":false,"title":"broadcast_from(from, topic, event, msg)","anchor":"broadcast_from/4"},{"id":"broadcast_from!/4","deprecated":false,"title":"broadcast_from!(from, topic, event, msg)","anchor":"broadcast_from!/4"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/2","deprecated":false,"title":"config(key, default \\\\ nil)","anchor":"config/2"},{"id":"config_change/2","deprecated":false,"title":"config_change(changed, removed)","anchor":"config_change/2"},{"id":"host/0","deprecated":false,"title":"host()","anchor":"host/0"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"local_broadcast/3","deprecated":false,"title":"local_broadcast(topic, event, msg)","anchor":"local_broadcast/3"},{"id":"local_broadcast_from/4","deprecated":false,"title":"local_broadcast_from(from, topic, event, msg)","anchor":"local_broadcast_from/4"},{"id":"path/1","deprecated":false,"title":"path(path)","anchor":"path/1"},{"id":"script_name/0","deprecated":false,"title":"script_name()","anchor":"script_name/0"},{"id":"server_info/1","deprecated":false,"title":"server_info(scheme)","anchor":"server_info/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"static_integrity/1","deprecated":false,"title":"static_integrity(path)","anchor":"static_integrity/1"},{"id":"static_lookup/1","deprecated":false,"title":"static_lookup(path)","anchor":"static_lookup/1"},{"id":"static_path/1","deprecated":false,"title":"static_path(path)","anchor":"static_path/1"},{"id":"static_url/0","deprecated":false,"title":"static_url()","anchor":"static_url/0"},{"id":"struct_url/0","deprecated":false,"title":"struct_url()","anchor":"struct_url/0"},{"id":"subscribe/2","deprecated":false,"title":"subscribe(topic, opts \\\\ [])","anchor":"subscribe/2"},{"id":"unsubscribe/1","deprecated":false,"title":"unsubscribe(topic)","anchor":"unsubscribe/1"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"url/0"}],"key":"functions"}],"nested_title":".Web.FakeRemoteEndpoint","nested_context":"Bonfire"},{"id":"Bonfire.Web.Router","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Router","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"account_required/2","deprecated":false,"title":"account_required(conn, _)","anchor":"account_required/2"},{"id":"activity_json/2","deprecated":false,"title":"activity_json(conn, _)","anchor":"activity_json/2"},{"id":"activity_json_or_html/2","deprecated":false,"title":"activity_json_or_html(conn, _)","anchor":"activity_json_or_html/2"},{"id":"admin_required/2","deprecated":false,"title":"admin_required(conn, _)","anchor":"admin_required/2"},{"id":"basic/2","deprecated":false,"title":"basic(conn, _)","anchor":"basic/2"},{"id":"basic_html/2","deprecated":false,"title":"basic_html(conn, _)","anchor":"basic_html/2"},{"id":"browser/2","deprecated":false,"title":"browser(conn, _)","anchor":"browser/2"},{"id":"browser_unsafe/2","deprecated":false,"title":"browser_unsafe(conn, _)","anchor":"browser_unsafe/2"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"guest_only/2","deprecated":false,"title":"guest_only(conn, _)","anchor":"guest_only/2"},{"id":"html_only/2","deprecated":false,"title":"html_only(conn, _)","anchor":"html_only/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"load_current_auth/2","deprecated":false,"title":"load_current_auth(conn, _)","anchor":"load_current_auth/2"},{"id":"require_authenticated_user/2","deprecated":false,"title":"require_authenticated_user(conn, _)","anchor":"require_authenticated_user/2"},{"id":"signed_activity_pub/2","deprecated":false,"title":"signed_activity_pub(conn, _)","anchor":"signed_activity_pub/2"},{"id":"static/2","deprecated":false,"title":"static(conn, _)","anchor":"static/2"},{"id":"throttle_plug_attacks/2","deprecated":false,"title":"throttle_plug_attacks(conn, _)","anchor":"throttle_plug_attacks/2"},{"id":"user_required/2","deprecated":false,"title":"user_required(conn, _)","anchor":"user_required/2"},{"id":"webfinger/2","deprecated":false,"title":"webfinger(conn, _)","anchor":"webfinger/2"},{"id":"well_known_nodeinfo/2","deprecated":false,"title":"well_known_nodeinfo(conn, _)","anchor":"well_known_nodeinfo/2"}],"key":"functions"}],"nested_title":".Web.Router","nested_context":"Bonfire"},{"id":"Bonfire.Web.Router.Reverse","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Router.Reverse","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"path/2","deprecated":false,"title":"path(conn_or_socket_or_endpoint, atom)","anchor":"path/2"},{"id":"path/3","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, qs)","anchor":"path/3"},{"id":"path/4","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, arg1, arg1)","anchor":"path/4"},{"id":"path/5","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, arg1, arg1, qs)","anchor":"path/5"},{"id":"path/6","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, arg1, arg1, arg2, qs)","anchor":"path/6"},{"id":"path/7","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, arg1, arg1, arg2, arg3, qs)","anchor":"path/7"}],"key":"functions"}],"nested_title":".Web.Router.Reverse","nested_context":"Bonfire"},{"id":"Bonfire.Web.Routes","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Routes","sections":[],"nested_title":".Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Web.Telemetry","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Telemetry","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"metrics/0","deprecated":false,"title":"metrics()","anchor":"metrics/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Web.Telemetry","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"disable/1","deprecated":false,"title":"disable(scope \\\\ :instance)","anchor":"disable/1"},{"id":"federating?/1","deprecated":false,"title":"federating?(subject \\\\ nil)","anchor":"federating?/1"},{"id":"federating_default?/0","deprecated":false,"title":"federating_default?()","anchor":"federating_default?/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"},{"id":"set_federating/2","deprecated":false,"title":"set_federating(subject, set)","anchor":"set_federating/2"}],"key":"functions"}],"nested_title":".Federate.ActivityPub","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Adapter","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Adapter","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"base_url/0"},{"id":"external_followers_for_activity/2","deprecated":false,"title":"external_followers_for_activity(actor, activity_data)","anchor":"external_followers_for_activity/2"},{"id":"federate_actor?/3","deprecated":false,"title":"federate_actor?(actor, direction \\\\ nil, by_actor \\\\ nil)","anchor":"federate_actor?/3"},{"id":"get_actor_by_ap_id/1","deprecated":false,"title":"get_actor_by_ap_id(ap_id)","anchor":"get_actor_by_ap_id/1"},{"id":"get_actor_by_id/1","deprecated":false,"title":"get_actor_by_id(id)","anchor":"get_actor_by_id/1"},{"id":"get_actor_by_username/1","deprecated":false,"title":"get_actor_by_username(username)","anchor":"get_actor_by_username/1"},{"id":"get_follower_local_ids/1","deprecated":false,"title":"get_follower_local_ids(actor)","anchor":"get_follower_local_ids/1"},{"id":"get_following_local_ids/1","deprecated":false,"title":"get_following_local_ids(actor)","anchor":"get_following_local_ids/1"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"get_locale/0"},{"id":"get_or_create_service_actor/0","deprecated":false,"title":"get_or_create_service_actor()","anchor":"get_or_create_service_actor/0"},{"id":"get_redirect_url/1","deprecated":false,"title":"get_redirect_url(id_or_username_or_object)","anchor":"get_redirect_url/1"},{"id":"handle_activity/1","deprecated":false,"title":"handle_activity(activity)","anchor":"handle_activity/1"},{"id":"maybe_create_remote_actor/1","deprecated":false,"title":"maybe_create_remote_actor(actor)","anchor":"maybe_create_remote_actor/1"},{"id":"maybe_publish_object/2","deprecated":false,"title":"maybe_publish_object(pointer_id, manually_fetching?)","anchor":"maybe_publish_object/2"},{"id":"redirect_to_actor/1","deprecated":false,"title":"redirect_to_actor(username)","anchor":"redirect_to_actor/1"},{"id":"update_local_actor/2","deprecated":false,"title":"update_local_actor(actor, params)","anchor":"update_local_actor/2"},{"id":"update_local_actor_cache/1","deprecated":false,"title":"update_local_actor_cache(character)","anchor":"update_local_actor_cache/1"},{"id":"update_remote_actor/1","deprecated":false,"title":"update_remote_actor(actor)","anchor":"update_remote_actor/1"},{"id":"update_remote_actor/2","deprecated":false,"title":"update_remote_actor(character, data)","anchor":"update_remote_actor/2"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Adapter","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.AdapterUtils","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.AdapterUtils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_actors/1","deprecated":false,"title":"all_actors(activity)","anchor":"all_actors/1"},{"id":"all_recipients/2","deprecated":false,"title":"all_recipients(activity, fields \\\\ [:to, :bto, :cc, :bcc, :audience])","anchor":"all_recipients/2"},{"id":"ap_base_url/0","deprecated":false,"title":"ap_base_url()","anchor":"ap_base_url/0"},{"id":"character_module/1","deprecated":false,"title":"character_module(struct)","anchor":"character_module/1"},{"id":"character_to_actor/1","deprecated":false,"title":"character_to_actor(character)","anchor":"character_to_actor/1"},{"id":"create_author_object/1","deprecated":false,"title":"create_author_object(map)","anchor":"create_author_object/1"},{"id":"create_remote_actor/1","deprecated":false,"title":"create_remote_actor(actor)","anchor":"create_remote_actor/1"},{"id":"create_service_character/0","deprecated":false,"title":"create_service_character()","anchor":"create_service_character/0"},{"id":"determine_recipients/2","deprecated":false,"title":"determine_recipients(actor, comment)","anchor":"determine_recipients/2"},{"id":"determine_recipients/3","deprecated":false,"title":"determine_recipients(actor, comment, parent)","anchor":"determine_recipients/3"},{"id":"determine_recipients/4","deprecated":false,"title":"determine_recipients(actor, comment, to, cc)","anchor":"determine_recipients/4"},{"id":"format_actor/2","deprecated":false,"title":"format_actor(user_etc, type \\\\ \"Person\")","anchor":"format_actor/2"},{"id":"get_actor_by_ap_id/2","deprecated":false,"title":"get_actor_by_ap_id(ap_id, local_instance \\\\ nil)","anchor":"get_actor_by_ap_id/2"},{"id":"get_actor_username/1","deprecated":false,"title":"get_actor_username(obj)","anchor":"get_actor_username/1"},{"id":"get_author/1","deprecated":false,"title":"get_author(author)","anchor":"get_author/1"},{"id":"get_by_url_ap_id_or_username/2","deprecated":false,"title":"get_by_url_ap_id_or_username(q, opts \\\\ [])","anchor":"get_by_url_ap_id_or_username/2"},{"id":"get_character/1","deprecated":false,"title":"get_character(q)","anchor":"get_character/1"},{"id":"get_character_by_ap_id/1","deprecated":false,"title":"get_character_by_ap_id(ap_id)","anchor":"get_character_by_ap_id/1"},{"id":"get_character_by_ap_id!/1","deprecated":false,"title":"get_character_by_ap_id!(ap_id)","anchor":"get_character_by_ap_id!/1"},{"id":"get_character_by_id/2","deprecated":false,"title":"get_character_by_id(id, opts \\\\ [skip_boundary_check: true])","anchor":"get_character_by_id/2"},{"id":"get_character_by_username/1","deprecated":false,"title":"get_character_by_username(character)","anchor":"get_character_by_username/1"},{"id":"get_context_ap_id/1","deprecated":false,"title":"get_context_ap_id(arg1)","anchor":"get_context_ap_id/1"},{"id":"get_creator_ap_id/1","deprecated":false,"title":"get_creator_ap_id(arg1)","anchor":"get_creator_ap_id/1"},{"id":"get_different_creator_ap_id/1","deprecated":false,"title":"get_different_creator_ap_id(character)","anchor":"get_different_creator_ap_id/1"},{"id":"get_in_reply_to/1","deprecated":false,"title":"get_in_reply_to(comment)","anchor":"get_in_reply_to/1"},{"id":"get_local_actor_by_ap_id/1","deprecated":false,"title":"get_local_actor_by_ap_id(ap_id)","anchor":"get_local_actor_by_ap_id/1"},{"id":"get_local_character_by_ap_id/2","deprecated":false,"title":"get_local_character_by_ap_id(ap_id, local_instance \\\\ nil)","anchor":"get_local_character_by_ap_id/2"},{"id":"get_object_ap_id/1","deprecated":false,"title":"get_object_ap_id(arg1)","anchor":"get_object_ap_id/1"},{"id":"get_object_ap_id!/1","deprecated":false,"title":"get_object_ap_id!(object)","anchor":"get_object_ap_id!/1"},{"id":"get_object_or_actor_by_ap_id!/1","deprecated":false,"title":"get_object_or_actor_by_ap_id!(ap_id)","anchor":"get_object_or_actor_by_ap_id!/1"},{"id":"get_or_create_service_character/0","deprecated":false,"title":"get_or_create_service_character()","anchor":"get_or_create_service_character/0"},{"id":"get_or_fetch_and_create_by_uri/2","deprecated":false,"title":"get_or_fetch_and_create_by_uri(q, opts \\\\ [])","anchor":"get_or_fetch_and_create_by_uri/2"},{"id":"get_or_fetch_and_create_by_username/2","deprecated":false,"title":"get_or_fetch_and_create_by_username(q, opts \\\\ [])","anchor":"get_or_fetch_and_create_by_username/2"},{"id":"get_or_fetch_character_by_ap_id/1","deprecated":false,"title":"get_or_fetch_character_by_ap_id(actor_or_ap_id)","anchor":"get_or_fetch_character_by_ap_id/1"},{"id":"get_pointer_id_by_ap_id/1","deprecated":false,"title":"get_pointer_id_by_ap_id(ap_id)","anchor":"get_pointer_id_by_ap_id/1"},{"id":"id_or_object_id/1","deprecated":false,"title":"id_or_object_id(id)","anchor":"id_or_object_id/1"},{"id":"is_follow?/1","deprecated":false,"title":"is_follow?(arg1)","anchor":"is_follow?/1"},{"id":"is_local?/2","deprecated":false,"title":"is_local?(thing, preload_if_needed \\\\ true)","anchor":"is_local?/2"},{"id":"is_local_collection?/1","deprecated":false,"title":"is_local_collection?(ap_id)","anchor":"is_local_collection?/1"},{"id":"is_local_collection_or_built_in?/1","deprecated":false,"title":"is_local_collection_or_built_in?(ap_id)","anchor":"is_local_collection_or_built_in?/1"},{"id":"local_actor_ids/1","deprecated":false,"title":"local_actor_ids(actors)","anchor":"local_actor_ids/1"},{"id":"log/1","deprecated":false,"title":"log(l)","anchor":"log/1"},{"id":"maybe_add_aliases/2","deprecated":false,"title":"maybe_add_aliases(user_etc, aliases)","anchor":"maybe_add_aliases/2"},{"id":"maybe_apply_or/4","deprecated":false,"title":"maybe_apply_or(module, fun, args, fallback_fn \\\\ nil)","anchor":"maybe_apply_or/4"},{"id":"maybe_attach_property_value/2","deprecated":false,"title":"maybe_attach_property_value(key, url)","anchor":"maybe_attach_property_value/2"},{"id":"maybe_create_banner_object/2","deprecated":false,"title":"maybe_create_banner_object(url, actor)","anchor":"maybe_create_banner_object/2"},{"id":"maybe_create_icon_object/2","deprecated":false,"title":"maybe_create_icon_object(url, actor)","anchor":"maybe_create_icon_object/2"},{"id":"maybe_create_image_object/2","deprecated":false,"title":"maybe_create_image_object(url, actor)","anchor":"maybe_create_image_object/2"},{"id":"maybe_fix_image_object/1","deprecated":false,"title":"maybe_fix_image_object(url)","anchor":"maybe_fix_image_object/1"},{"id":"maybe_format_image_object_from_path/1","deprecated":false,"title":"maybe_format_image_object_from_path(url)","anchor":"maybe_format_image_object_from_path/1"},{"id":"maybe_pointer_id_for_ap_id/1","deprecated":false,"title":"maybe_pointer_id_for_ap_id(ap_id)","anchor":"maybe_pointer_id_for_ap_id/1"},{"id":"preload_peered/1","deprecated":false,"title":"preload_peered(object)","anchor":"preload_peered/1"},{"id":"public_uri/0","deprecated":false,"title":"public_uri()","anchor":"public_uri/0"},{"id":"return_pointable/2","deprecated":false,"title":"return_pointable(f, opts \\\\ [skip_boundary_check: true])","anchor":"return_pointable/2"},{"id":"return_pointer/2","deprecated":false,"title":"return_pointer(id, opts)","anchor":"return_pointer/2"},{"id":"the_ap_id/1","deprecated":false,"title":"the_ap_id(ap_id)","anchor":"the_ap_id/1"},{"id":"validate_url/1","deprecated":false,"title":"validate_url(str)","anchor":"validate_url/1"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.AdapterUtils","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.BoundariesMRF","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.BoundariesMRF","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor_blocked?/3","deprecated":false,"title":"actor_blocked?(actor, direction \\\\ nil, by_user \\\\ nil)","anchor":"actor_blocked?/3"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.BoundariesMRF","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.FederationModules","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.FederationModules","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"c:federation_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"federation_module/2","deprecated":false,"title":"federation_module(query, modules \\\\ federation_modules_data_types())","anchor":"federation_module/2"},{"id":"federation_module!/2","deprecated":false,"title":"federation_module!(query, modules \\\\ federation_modules_data_types())","anchor":"federation_module!/2"},{"id":"federation_modules/1","deprecated":false,"title":"federation_modules(queries)","anchor":"federation_modules/1"},{"id":"federation_modules_data_types/0","deprecated":false,"title":"federation_modules_data_types()","anchor":"federation_modules_data_types/0"},{"id":"maybe_federation_module/2","deprecated":false,"title":"maybe_federation_module(query, fallback \\\\ nil)","anchor":"maybe_federation_module/2"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.FederationModules","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Incoming","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Incoming","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"no_federation_module_match/2","deprecated":false,"title":"no_federation_module_match(error, attrs \\\\ nil)","anchor":"no_federation_module_match/2"},{"id":"receive_activity/1","deprecated":false,"title":"receive_activity(activity_id)","anchor":"receive_activity/1"},{"id":"receive_activity/2","deprecated":false,"title":"receive_activity(activity, object)","anchor":"receive_activity/2"},{"id":"receive_object/2","deprecated":false,"title":"receive_object(creator, object_uri)","anchor":"receive_object/2"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Incoming","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Instances","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Instances","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"get/1","deprecated":false,"title":"get(canonical_uri)","anchor":"get/1"},{"id":"get_or_create/1","deprecated":false,"title":"get_or_create(canonical_uri)","anchor":"get_or_create/1"},{"id":"get_or_create_instance_circle/1","deprecated":false,"title":"get_or_create_instance_circle(host)","anchor":"get_or_create_instance_circle/1"},{"id":"is_blocked?/3","deprecated":false,"title":"is_blocked?(peered, block_type \\\\ :any, opts \\\\ [])","anchor":"is_blocked?/3"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Instances","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.NodeinfoAdapter","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.NodeinfoAdapter","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"base_url/0"},{"id":"gather_nodeinfo_data/0","deprecated":false,"title":"gather_nodeinfo_data()","anchor":"gather_nodeinfo_data/0"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.NodeinfoAdapter","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Outgoing","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Outgoing","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_activity!/1","deprecated":false,"title":"ap_activity!(activity)","anchor":"ap_activity!/1"},{"id":"federate_outgoing?/1","deprecated":false,"title":"federate_outgoing?(subject \\\\ nil)","anchor":"federate_outgoing?/1"},{"id":"maybe_federate/4","deprecated":false,"title":"maybe_federate(subject, verb, thing, opts \\\\ [])","anchor":"maybe_federate/4"},{"id":"preparation_error/2","deprecated":false,"title":"preparation_error(error, object)","anchor":"preparation_error/2"},{"id":"push_now!/1","deprecated":false,"title":"push_now!(activity)","anchor":"push_now!/1"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Outgoing","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Peered","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Peered","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create/3","deprecated":false,"title":"create(id, peer, canonical_uri)","anchor":"create/3"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"get/1"},{"id":"get_canonical_uri/1","deprecated":false,"title":"get_canonical_uri(obj_or_id)","anchor":"get_canonical_uri/1"},{"id":"is_blocked?/3","deprecated":false,"title":"is_blocked?(peered, block_type \\\\ :any, opts \\\\ [])","anchor":"is_blocked?/3"},{"id":"save_canonical_uri/2","deprecated":false,"title":"save_canonical_uri(id, canonical_uri)","anchor":"save_canonical_uri/2"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Peered","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.RuntimeConfig","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Simulate","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Simulate","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor_json/1","deprecated":false,"title":"actor_json(binary)","anchor":"actor_json/1"},{"id":"fake_remote_user/1","deprecated":false,"title":"fake_remote_user(actor_id \\\\ \"https://mocked.local/users/karen\")","anchor":"fake_remote_user/1"},{"id":"webfingered/0","deprecated":false,"title":"webfingered()","anchor":"webfingered/0"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Simulate","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(user, attrs)","anchor":"create/2"},{"id":"date_expires/1","deprecated":false,"title":"date_expires(invite)","anchor":"date_expires/1"},{"id":"expired?/1","deprecated":false,"title":"expired?(invite)","anchor":"expired?/1"},{"id":"get/2","deprecated":false,"title":"get(id, opts \\\\ [])","anchor":"get/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts \\\\ [])","anchor":"list_paginated/2"},{"id":"one/2","deprecated":false,"title":"one(filters, opts \\\\ [])","anchor":"one/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts \\\\ [])","anchor":"query/2"},{"id":"redeem/1","deprecated":false,"title":"redeem(invite)","anchor":"redeem/1"},{"id":"redeemable?/1","deprecated":false,"title":"redeemable?(invite)","anchor":"redeemable?/1"}],"key":"functions"}],"nested_title":".Invite.Links","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links.Fake","sections":[],"nested_title":".Invite.Links.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Invite.Links.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Invite.Links.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links.Web.Routes","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links.Web.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".Invite.Links.Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.InviteLink","deprecated":false,"group":"Feature extensions","title":"Bonfire.InviteLink","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(obj \\\\ %InviteLink{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".InviteLink","nested_context":"Bonfire"},{"id":"Bonfire.Localise","deprecated":false,"group":"Feature extensions","title":"Bonfire.Localise","sections":[],"nested_title":".Localise","nested_context":"Bonfire"},{"id":"Bonfire.Logging","deprecated":false,"group":"Feature extensions","title":"Bonfire.Logging","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/4","deprecated":false,"title":"handle_event(list, measure, meta, _)","anchor":"handle_event/4"},{"id":"setup/2","deprecated":false,"title":"setup(env, repo_module)","anchor":"setup/2"},{"id":"setup_oban/0","deprecated":false,"title":"setup_oban()","anchor":"setup_oban/0"},{"id":"setup_opentelemetry/2","deprecated":false,"title":"setup_opentelemetry(env, repo_module)","anchor":"setup_opentelemetry/2"}],"key":"functions"}],"nested_title":".Logging","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"changeset_name/0","deprecated":false,"title":"changeset_name()","anchor":"t:changeset_name/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"allow_signup?/1","deprecated":false,"title":"allow_signup?(opts)","anchor":"allow_signup?/1"},{"id":"change_email/3","deprecated":false,"title":"change_email(current_account, params_or_changeset, opts \\\\ [])","anchor":"change_email/3"},{"id":"change_password/3","deprecated":false,"title":"change_password(current_account, params_or_changeset, opts \\\\ [])","anchor":"change_password/3"},{"id":"change_password/4","deprecated":false,"title":"change_password(current_account, cs, params, opts)","anchor":"change_password/4"},{"id":"changeset/3","deprecated":false,"title":"changeset(changeset_name, params, opts \\\\ [])","anchor":"changeset/3"},{"id":"confirm_email/2","deprecated":false,"title":"confirm_email(account_or_token, opts \\\\ [])","anchor":"confirm_email/2"},{"id":"count/0","deprecated":false,"title":"count()","anchor":"count/0"},{"id":"delete/2","deprecated":false,"title":"delete(account, opts \\\\ [])","anchor":"delete/2"},{"id":"do_signup/2","deprecated":false,"title":"do_signup(cs_or_params, opts)","anchor":"do_signup/2"},{"id":"enqueue_delete/1","deprecated":false,"title":"enqueue_delete(account)","anchor":"enqueue_delete/1"},{"id":"fetch_current/1","deprecated":false,"title":"fetch_current(id)","anchor":"fetch_current/1"},{"id":"get_by_email/1","deprecated":false,"title":"get_by_email(email)","anchor":"get_by_email/1"},{"id":"get_current/1","deprecated":false,"title":"get_current(id)","anchor":"get_current/1"},{"id":"instance_is_invite_only?/0","deprecated":false,"title":"instance_is_invite_only?()","anchor":"instance_is_invite_only?/0"},{"id":"is_admin?/1","deprecated":false,"title":"is_admin?(assigns)","anchor":"is_admin?/1"},{"id":"is_first_account?/0","deprecated":false,"title":"is_first_account?()","anchor":"is_first_account?/0"},{"id":"login/2","deprecated":false,"title":"login(params_or_changeset, opts \\\\ [])","anchor":"login/2"},{"id":"login_valid?/2","deprecated":false,"title":"login_valid?(user, password)","anchor":"login_valid?/2"},{"id":"maybe_redeem_invite/2","deprecated":false,"title":"maybe_redeem_invite(data, opts)","anchor":"maybe_redeem_invite/2"},{"id":"redeemable_invite?/1","deprecated":false,"title":"redeemable_invite?(invite)","anchor":"redeemable_invite?/1"},{"id":"request_confirm_email/2","deprecated":false,"title":"request_confirm_email(params_or_changeset_or_form_or_account, opts \\\\ [])","anchor":"request_confirm_email/2"},{"id":"request_forgot_password/1","deprecated":false,"title":"request_forgot_password(params)","anchor":"request_forgot_password/1"},{"id":"signup/2","deprecated":false,"title":"signup(params_or_changeset, opts \\\\ [])","anchor":"signup/2"},{"id":"update_is_admin/3","deprecated":false,"title":"update_is_admin(user_or_account, make_admin_or_revoke, user \\\\ nil)","anchor":"update_is_admin/3"}],"key":"functions"}],"nested_title":".Me.Accounts","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.ChangeEmailFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.ChangeEmailFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(form \\\\ %ChangeEmailFields{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Me.Accounts.ChangeEmailFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.ChangePasswordFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.ChangePasswordFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(form \\\\ %ChangePasswordFields{}, attrs, resetting_password? \\\\ false)","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Me.Accounts.ChangePasswordFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.ConfirmEmailFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.ConfirmEmailFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(form \\\\ %ConfirmEmailFields{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Me.Accounts.ConfirmEmailFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.ForgotPasswordFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.ForgotPasswordFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(form \\\\ %ForgotPasswordFields{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Me.Accounts.ForgotPasswordFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.LoginFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.LoginFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(form \\\\ %LoginFields{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Me.Accounts.LoginFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.Queries","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"by_email/1","deprecated":false,"title":"by_email(email)","anchor":"by_email/1"},{"id":"confirm_email/1","deprecated":false,"title":"confirm_email(token)","anchor":"confirm_email/1"},{"id":"count/1","deprecated":false,"title":"count(q \\\\ Account)","anchor":"count/1"},{"id":"current/1","deprecated":false,"title":"current(id)","anchor":"current/1"},{"id":"login_by_account_id/1","deprecated":false,"title":"login_by_account_id(id)","anchor":"login_by_account_id/1"},{"id":"login_by_email/1","deprecated":false,"title":"login_by_email(email)","anchor":"login_by_email/1"},{"id":"login_by_username/1","deprecated":false,"title":"login_by_username(username)","anchor":"login_by_username/1"},{"id":"request_confirm_email/1","deprecated":false,"title":"request_confirm_email(email)","anchor":"request_confirm_email/1"}],"key":"functions"}],"nested_title":".Me.Accounts.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.SecondFactors","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.SecondFactors","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(totp \\\\ %AuthSecondFactor{}, attrs, opts \\\\ [])","anchor":"changeset/3"},{"id":"delete_account_totp/1","deprecated":false,"title":"delete_account_totp(account_totp)","anchor":"delete_account_totp/1"},{"id":"enabled?/0","deprecated":false,"title":"enabled?()","anchor":"enabled?/0"},{"id":"format_secret/1","deprecated":false,"title":"format_secret(secret)","anchor":"format_secret/1"},{"id":"get_account_totp/1","deprecated":false,"title":"get_account_totp(account)","anchor":"get_account_totp/1"},{"id":"maybe_authenticate/2","deprecated":false,"title":"maybe_authenticate(account, params)","anchor":"maybe_authenticate/2"},{"id":"maybe_cast_totp_changeset/3","deprecated":false,"title":"maybe_cast_totp_changeset(changeset, params, opts)","anchor":"maybe_cast_totp_changeset/3"},{"id":"new/0","deprecated":false,"title":"new()","anchor":"new/0"},{"id":"new_qrcode/1","deprecated":false,"title":"new_qrcode(opts \\\\ [])","anchor":"new_qrcode/1"},{"id":"new_struct/1","deprecated":false,"title":"new_struct(secret \\\\ nil)","anchor":"new_struct/1"},{"id":"new_uri/1","deprecated":false,"title":"new_uri(secret \\\\ nil)","anchor":"new_uri/1"},{"id":"validate_account_totp/2","deprecated":false,"title":"validate_account_totp(totp, code)","anchor":"validate_account_totp/2"}],"key":"functions"}],"nested_title":".Me.Accounts.SecondFactors","nested_context":"Bonfire"},{"id":"Bonfire.Me.Acts.Caretaker","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Acts.Caretaker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Me.Acts.Caretaker","nested_context":"Bonfire"},{"id":"Bonfire.Me.Acts.Creator","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Acts.Creator","sections":[],"nested_title":".Me.Acts.Creator","nested_context":"Bonfire"},{"id":"Bonfire.Me.Characters","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Characters","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"by_username/1","deprecated":false,"title":"by_username(username)","anchor":"by_username/1"},{"id":"by_username!/1","deprecated":false,"title":"by_username!(username)","anchor":"by_username!/1"},{"id":"by_username_q/1","deprecated":false,"title":"by_username_q(username)","anchor":"by_username_q/1"},{"id":"changeset/3","deprecated":false,"title":"changeset(char \\\\ %Character{}, params, profile \\\\ :local)","anchor":"changeset/3"},{"id":"character_mention_prefix/1","deprecated":false,"title":"character_mention_prefix(object)","anchor":"character_mention_prefix/1"},{"id":"character_url/1","deprecated":false,"title":"character_url(character)","anchor":"character_url/1"},{"id":"clean_username/1","deprecated":false,"title":"clean_username(username)","anchor":"clean_username/1"},{"id":"display_username/4","deprecated":false,"title":"display_username(user, always_include_domain \\\\ false, is_local? \\\\ nil, prefix \\\\ nil)","anchor":"display_username/4"},{"id":"get/1","deprecated":false,"title":"get(ids)","anchor":"get/1"},{"id":"hash_available?/1","deprecated":false,"title":"hash_available?(hash)","anchor":"hash_available?/1"},{"id":"hash_delete/1","deprecated":false,"title":"hash_delete(hash)","anchor":"hash_delete/1"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(obj)","anchor":"indexing_object_format/1"},{"id":"q_by_id/1","deprecated":false,"title":"q_by_id(ids)","anchor":"q_by_id/1"},{"id":"remote_changeset/2","deprecated":false,"title":"remote_changeset(changeset, params)","anchor":"remote_changeset/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"update/2","deprecated":false,"title":"update(character, attrs)","anchor":"update/2"},{"id":"username_available?/1","deprecated":false,"title":"username_available?(username)","anchor":"username_available?/1"}],"key":"functions"}],"nested_title":".Me.Characters","nested_context":"Bonfire"},{"id":"Bonfire.Me.DeleteWorker","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.DeleteWorker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"care_taken/1","deprecated":false,"title":"care_taken(ids)","anchor":"care_taken/1"},{"id":"closures/1","deprecated":false,"title":"closures(ids)","anchor":"closures/1"},{"id":"delete/2","deprecated":false,"title":"delete(ids, opts)","anchor":"delete/2"},{"id":"delete_now/1","deprecated":false,"title":"delete_now(ids)","anchor":"delete_now/1"},{"id":"enqueue_delete/1","deprecated":false,"title":"enqueue_delete(ids)","anchor":"enqueue_delete/1"},{"id":"perform/1","deprecated":false,"title":"perform(map)","anchor":"perform/1"}],"key":"functions"}],"nested_title":".Me.DeleteWorker","nested_context":"Bonfire"},{"id":"Bonfire.Me.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_account!/2","deprecated":false,"title":"fake_account!(attrs \\\\ %{}, opts \\\\ [])","anchor":"fake_account!/2"},{"id":"fake_user!/3","deprecated":false,"title":"fake_user!(account \\\\ %{}, attrs \\\\ %{}, opts_or_extra \\\\ [])","anchor":"fake_user!/3"}],"key":"functions"}],"nested_title":".Me.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Me.Fake.Helpers","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Fake.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"atusername/0","deprecated":false,"title":"atusername()","anchor":"atusername/0"},{"id":"avatar_url/0","deprecated":false,"title":"avatar_url()","anchor":"avatar_url/0"},{"id":"avatar_url/1","deprecated":false,"title":"avatar_url(slug)","anchor":"avatar_url/1"},{"id":"character_subform/1","deprecated":false,"title":"character_subform(base \\\\ %{})","anchor":"character_subform/1"},{"id":"confirm_token/0","deprecated":false,"title":"confirm_token()","anchor":"confirm_token/0"},{"id":"create_user_form/1","deprecated":false,"title":"create_user_form(base \\\\ %{})","anchor":"create_user_form/1"},{"id":"credential_subform/1","deprecated":false,"title":"credential_subform(base \\\\ %{})","anchor":"credential_subform/1"},{"id":"email_subform/1","deprecated":false,"title":"email_subform(base \\\\ %{})","anchor":"email_subform/1"},{"id":"icon_url/1","deprecated":false,"title":"icon_url(slug \\\\ nil)","anchor":"icon_url/1"},{"id":"image/1","deprecated":false,"title":"image(arg1)","anchor":"image/1"},{"id":"image_url/1","deprecated":false,"title":"image_url(slug \\\\ nil)","anchor":"image_url/1"},{"id":"profile_subform/1","deprecated":false,"title":"profile_subform(base \\\\ %{})","anchor":"profile_subform/1"},{"id":"signup_form/1","deprecated":false,"title":"signup_form(base \\\\ %{})","anchor":"signup_form/1"},{"id":"user_live/1","deprecated":false,"title":"user_live(base \\\\ %{})","anchor":"user_live/1"}],"key":"functions"}],"nested_title":".Me.Fake.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.Me.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"indexing_format_created/2","deprecated":false,"title":"indexing_format_created(profile, character)","anchor":"indexing_format_created/2"},{"id":"indexing_format_creator/2","deprecated":false,"title":"indexing_format_creator(profile, character)","anchor":"indexing_format_creator/2"},{"id":"is_local?/1","deprecated":false,"title":"is_local?(thing)","anchor":"is_local?/1"},{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"maybe_index/1","deprecated":false,"title":"maybe_index(object)","anchor":"maybe_index/1"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Me.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Me.Mails","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Mails","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"confirm_email/2","deprecated":false,"title":"confirm_email(account, opts \\\\ [])","anchor":"confirm_email/2"},{"id":"forgot_password/1","deprecated":false,"title":"forgot_password(account)","anchor":"forgot_password/1"},{"id":"render/3","deprecated":false,"title":"render(email, template, assigns \\\\ [])","anchor":"render/3"},{"id":"signup_confirm_email/1","deprecated":false,"title":"signup_confirm_email(account)","anchor":"signup_confirm_email/1"}],"key":"functions"}],"nested_title":".Me.Mails","nested_context":"Bonfire"},{"id":"Bonfire.Me.Mails.EmailView","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Mails.EmailView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"render_template/2","deprecated":false,"title":"render_template(template, assigns)","anchor":"render_template/2"}],"key":"functions"}],"nested_title":".Me.Mails.EmailView","nested_context":"Bonfire"},{"id":"Bonfire.Me.Profiles","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Profiles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(profile \\\\ %Profile{}, params)","anchor":"changeset/2"},{"id":"changeset_simple/2","deprecated":false,"title":"changeset_simple(profile \\\\ %Profile{}, params)","anchor":"changeset_simple/2"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(obj)","anchor":"indexing_object_format/1"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"}],"key":"functions"}],"nested_title":".Me.Profiles","nested_context":"Bonfire"},{"id":"Bonfire.Me.Profiles.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Profiles.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"set_profile_image/5","deprecated":false,"title":"set_profile_image(atom, user, uploaded_media, assign_field, socket)","anchor":"set_profile_image/5"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Me.Profiles.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Me.RuntimeConfig","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Me.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Me.SharedUsers","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.SharedUsers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_account/3","deprecated":false,"title":"add_account(shared_user_or_username, email_or_username, params \\\\ %{})","anchor":"add_account/3"},{"id":"add_accounts/3","deprecated":false,"title":"add_accounts(shared_user_or_username, emails_or_usernames, params \\\\ %{})","anchor":"add_accounts/3"},{"id":"by_account/1","deprecated":false,"title":"by_account(account)","anchor":"by_account/1"},{"id":"by_username_and_account_query/2","deprecated":false,"title":"by_username_and_account_query(username, account)","anchor":"by_username_and_account_query/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"init_shared_user/2","deprecated":false,"title":"init_shared_user(user, params \\\\ %{})","anchor":"init_shared_user/2"}],"key":"functions"}],"nested_title":".Me.SharedUsers","nested_context":"Bonfire"},{"id":"Bonfire.Me.Users","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Users","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"changeset_extra/0","deprecated":false,"title":"changeset_extra()","anchor":"t:changeset_extra/0"},{"id":"changeset_name/0","deprecated":false,"title":"changeset_name()","anchor":"t:changeset_name/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"by_account/1","deprecated":false,"title":"by_account(account)","anchor":"by_account/1"},{"id":"by_ap_id/1","deprecated":false,"title":"by_ap_id(ap_id)","anchor":"by_ap_id/1"},{"id":"by_ap_id!/1","deprecated":false,"title":"by_ap_id!(ap_id)","anchor":"by_ap_id!/1"},{"id":"by_canonical_uri/1","deprecated":false,"title":"by_canonical_uri(uri)","anchor":"by_canonical_uri/1"},{"id":"by_id/2","deprecated":false,"title":"by_id(id, opts \\\\ [])","anchor":"by_id/2"},{"id":"by_username/2","deprecated":false,"title":"by_username(username, opts \\\\ [])","anchor":"by_username/2"},{"id":"by_username!/1","deprecated":false,"title":"by_username!(username)","anchor":"by_username!/1"},{"id":"by_username_and_account/2","deprecated":false,"title":"by_username_and_account(username, account_id)","anchor":"by_username_and_account/2"},{"id":"changeset/4","deprecated":false,"title":"changeset(name, user \\\\ %User{}, params, extra)","anchor":"changeset/4"},{"id":"check_active/1","deprecated":false,"title":"check_active(users)","anchor":"check_active/1"},{"id":"check_active!/1","deprecated":false,"title":"check_active!(users)","anchor":"check_active!/1"},{"id":"count/1","deprecated":false,"title":"count(show \\\\ :local)","anchor":"count/1"},{"id":"create/2","deprecated":false,"title":"create(params_or_changeset, extra \\\\ nil)","anchor":"create/2"},{"id":"create_remote/1","deprecated":false,"title":"create_remote(params)","anchor":"create_remote/1"},{"id":"delete/2","deprecated":false,"title":"delete(user, arg2 \\\\ [])","anchor":"delete/2"},{"id":"enqueue_delete/1","deprecated":false,"title":"enqueue_delete(user)","anchor":"enqueue_delete/1"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"fetch_current/1","deprecated":false,"title":"fetch_current(id)","anchor":"fetch_current/1"},{"id":"flatten/1","deprecated":false,"title":"flatten(user)","anchor":"flatten/1"},{"id":"format_actor/1","deprecated":false,"title":"format_actor(user)","anchor":"format_actor/1"},{"id":"get_current/1","deprecated":false,"title":"get_current(id)","anchor":"get_current/1"},{"id":"get_current/2","deprecated":false,"title":"get_current(id, account_id)","anchor":"get_current/2"},{"id":"get_only_in_account/1","deprecated":false,"title":"get_only_in_account(account)","anchor":"get_only_in_account/1"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(u)","anchor":"indexing_object_format/1"},{"id":"is_active?/1","deprecated":false,"title":"is_active?(user)","anchor":"is_active?/1"},{"id":"is_first_user?/0","deprecated":false,"title":"is_first_user?()","anchor":"is_first_user?/0"},{"id":"list/1","deprecated":false,"title":"list(opts)","anchor":"list/1"},{"id":"list_admins/0","deprecated":false,"title":"list_admins()","anchor":"list_admins/0"},{"id":"list_all/1","deprecated":false,"title":"list_all(show \\\\ :local)","anchor":"list_all/1"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts \\\\ [])","anchor":"list_paginated/2"},{"id":"make_admin/1","deprecated":false,"title":"make_admin(username)","anchor":"make_admin/1"},{"id":"maybe_count/1","deprecated":false,"title":"maybe_count(show \\\\ :local)","anchor":"maybe_count/1"},{"id":"maybe_index_user/1","deprecated":false,"title":"maybe_index_user(object)","anchor":"maybe_index_user/1"},{"id":"query/2","deprecated":false,"title":"query(list, opts \\\\ [])","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"remote_fetcher/0","deprecated":false,"title":"remote_fetcher()","anchor":"remote_fetcher/0"},{"id":"revoke_admin/1","deprecated":false,"title":"revoke_admin(username)","anchor":"revoke_admin/1"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"search/1","deprecated":false,"title":"search(search)","anchor":"search/1"},{"id":"search_db/1","deprecated":false,"title":"search_db(search)","anchor":"search_db/1"},{"id":"update/3","deprecated":false,"title":"update(user, params, extra \\\\ nil)","anchor":"update/3"},{"id":"update_local_actor/2","deprecated":false,"title":"update_local_actor(user, params)","anchor":"update_local_actor/2"},{"id":"update_remote_actor/2","deprecated":false,"title":"update_remote_actor(user, params)","anchor":"update_remote_actor/2"}],"key":"functions"}],"nested_title":".Me.Users","nested_context":"Bonfire"},{"id":"Bonfire.Me.Users.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Users.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, search, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"to_tuple/1","deprecated":false,"title":"to_tuple(u)","anchor":"to_tuple/1"}],"key":"functions"}],"nested_title":".Me.Users.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Me.Users.Queries","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Users.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"admins/1","deprecated":false,"title":"admins(opts \\\\ [])","anchor":"admins/1"},{"id":"base_by_id/1","deprecated":false,"title":"base_by_id(id)","anchor":"base_by_id/1"},{"id":"by_account/1","deprecated":false,"title":"by_account(account_id)","anchor":"by_account/1"},{"id":"by_canonical_uri/2","deprecated":false,"title":"by_canonical_uri(canonical_uri, opts \\\\ [])","anchor":"by_canonical_uri/2"},{"id":"by_id/2","deprecated":false,"title":"by_id(id, opts \\\\ [])","anchor":"by_id/2"},{"id":"by_username_and_account/2","deprecated":false,"title":"by_username_and_account(username, account_id)","anchor":"by_username_and_account/2"},{"id":"by_username_or_id/2","deprecated":false,"title":"by_username_or_id(username_or_id, opts \\\\ [])","anchor":"by_username_or_id/2"},{"id":"by_username_query/2","deprecated":false,"title":"by_username_query(username, opts \\\\ [])","anchor":"by_username_query/2"},{"id":"count/1","deprecated":false,"title":"count(arg1)","anchor":"count/1"},{"id":"current/1","deprecated":false,"title":"current(user_id)","anchor":"current/1"},{"id":"current/2","deprecated":false,"title":"current(user_id, account_id)","anchor":"current/2"},{"id":"join_peered/1","deprecated":false,"title":"join_peered(q)","anchor":"join_peered/1"},{"id":"list/1","deprecated":false,"title":"list(arg1)","anchor":"list/1"},{"id":"query/2","deprecated":false,"title":"query(filters, opts \\\\ [])","anchor":"query/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"search/1","deprecated":false,"title":"search(text)","anchor":"search/1"}],"key":"functions"}],"nested_title":".Me.Users.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Messages","deprecated":false,"group":"Feature extensions","title":"Bonfire.Messages","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, message)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"changeset/4","deprecated":false,"title":"changeset(atom, attrs, creator, opts \\\\ [])","anchor":"changeset/4"},{"id":"draft/2","deprecated":false,"title":"draft(creator, attrs)","anchor":"draft/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"filter/3","deprecated":false,"title":"filter(atom, arg2, query)","anchor":"filter/3"},{"id":"list/3","deprecated":false,"title":"list(current_user, with_user \\\\ nil, opts \\\\ [])","anchor":"list/3"},{"id":"list/4","deprecated":false,"title":"list(current_user, with_user, cursor_before, preloads)","anchor":"list/4"},{"id":"read/2","deprecated":false,"title":"read(message_id, opts)","anchor":"read/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"send/3","deprecated":false,"title":"send(creator_id, attrs, to \\\\ nil)","anchor":"send/3"}],"key":"functions"}],"nested_title":".Messages","nested_context":"Bonfire"},{"id":"Bonfire.Messages.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Messages.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_comment!/4","deprecated":false,"title":"fake_comment!(user, reply_to, boundary \\\\ nil, attrs \\\\ nil)","anchor":"fake_comment!/4"},{"id":"fake_post!/4","deprecated":false,"title":"fake_post!(user, boundary \\\\ nil, attrs \\\\ nil, opts \\\\ [])","anchor":"fake_post!/4"},{"id":"fake_remote_user!/0","deprecated":false,"title":"fake_remote_user!()","anchor":"fake_remote_user!/0"}],"key":"functions"}],"nested_title":".Messages.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Messages.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Messages.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Messages.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Posts","deprecated":false,"group":"Feature extensions","title":"Bonfire.Posts","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, post)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/4","deprecated":false,"title":"ap_receive_activity(creator, activity, object, circles \\\\ [])","anchor":"ap_receive_activity/4"},{"id":"changeset/4","deprecated":false,"title":"changeset(action, attrs, creator \\\\ nil, preset \\\\ nil)","anchor":"changeset/4"},{"id":"count_total/0","deprecated":false,"title":"count_total()","anchor":"count_total/0"},{"id":"delete/2","deprecated":false,"title":"delete(object, opts \\\\ [])","anchor":"delete/2"},{"id":"draft/2","deprecated":false,"title":"draft(creator, attrs)","anchor":"draft/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"filter/3","deprecated":false,"title":"filter(atom, user, query)","anchor":"filter/3"},{"id":"indexing_object_format/2","deprecated":false,"title":"indexing_object_format(post, opts \\\\ [])","anchor":"indexing_object_format/2"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts \\\\ [])","anchor":"list_paginated/2"},{"id":"prepare_post_attrs/1","deprecated":false,"title":"prepare_post_attrs(attrs)","anchor":"prepare_post_attrs/1"},{"id":"publish/1","deprecated":false,"title":"publish(opts \\\\ [])","anchor":"publish/1"},{"id":"query/2","deprecated":false,"title":"query(filters \\\\ [], opts \\\\ nil)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"query_paginated/2","deprecated":false,"title":"query_paginated(filters, opts \\\\ [])","anchor":"query_paginated/2"},{"id":"read/2","deprecated":false,"title":"read(post_id, opts_or_socket_or_current_user \\\\ [])","anchor":"read/2"},{"id":"run_epic/3","deprecated":false,"title":"run_epic(type, options \\\\ [], on \\\\ :post)","anchor":"run_epic/3"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"}],"key":"functions"}],"nested_title":".Posts","nested_context":"Bonfire"},{"id":"Bonfire.Posts.Acts.Posts.Publish","deprecated":false,"group":"Feature extensions","title":"Bonfire.Posts.Acts.Posts.Publish","sections":[],"nested_title":".Posts.Acts.Posts.Publish","nested_context":"Bonfire"},{"id":"Bonfire.Posts.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Posts.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_comment!/4","deprecated":false,"title":"fake_comment!(user, reply_to, boundary \\\\ nil, attrs \\\\ nil)","anchor":"fake_comment!/4"},{"id":"fake_post!/4","deprecated":false,"title":"fake_post!(user, boundary \\\\ nil, attrs \\\\ nil, opts \\\\ [])","anchor":"fake_post!/4"},{"id":"fake_remote_user!/0","deprecated":false,"title":"fake_remote_user!()","anchor":"fake_remote_user!/0"}],"key":"functions"}],"nested_title":".Posts.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Posts.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Posts.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Posts.Integration","nested_context":"Bonfire"},{"id":"Bonfire.RuntimeConfig","deprecated":false,"group":"Feature extensions","title":"Bonfire.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Search","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"adapter/0","deprecated":false,"title":"adapter()","anchor":"adapter/0"},{"id":"facet_from_map/1","deprecated":false,"title":"facet_from_map(arg)","anchor":"facet_from_map/1"},{"id":"public_index/0","deprecated":false,"title":"public_index()","anchor":"public_index/0"},{"id":"search/2","deprecated":false,"title":"search(string, opts_or_index \\\\ nil)","anchor":"search/2"},{"id":"search/4","deprecated":false,"title":"search(string, opts \\\\ %{}, calculate_facets, filter_facets)","anchor":"search/4"},{"id":"search_by_type/2","deprecated":false,"title":"search_by_type(tag_search, facets \\\\ nil)","anchor":"search_by_type/2"}],"key":"functions"}],"nested_title":".Search","nested_context":"Bonfire"},{"id":"Bonfire.Search.Acts.Queue","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Acts.Queue","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_indexable_object/2","deprecated":false,"title":"maybe_indexable_object(object, current_user)","anchor":"maybe_indexable_object/2"},{"id":"maybe_unindex/1","deprecated":false,"title":"maybe_unindex(object)","anchor":"maybe_unindex/1"},{"id":"prepare_object/1","deprecated":false,"title":"prepare_object(thing)","anchor":"prepare_object/1"}],"key":"functions"}],"nested_title":".Search.Acts.Queue","nested_context":"Bonfire"},{"id":"Bonfire.Search.Fuzzy","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Fuzzy","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_search/4","deprecated":false,"title":"do_search(q, opts, calculate_facets, facet_filters)","anchor":"do_search/4"},{"id":"search/4","deprecated":false,"title":"search(q, opts \\\\ %{limit: 20}, calculate_facets \\\\ [\"index_type\"], facet_filters \\\\ nil)","anchor":"search/4"},{"id":"search_filtered/2","deprecated":false,"title":"search_filtered(q, facet_filters)","anchor":"search_filtered/2"}],"key":"functions"}],"nested_title":".Search.Fuzzy","nested_context":"Bonfire"},{"id":"Bonfire.Search.HTTP","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.HTTP","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"http_adapter/0","deprecated":false,"title":"http_adapter()","anchor":"http_adapter/0"},{"id":"http_error/5","deprecated":false,"title":"http_error(arg1, http_method, message, object, url)","anchor":"http_error/5"},{"id":"http_request/4","deprecated":false,"title":"http_request(http_method, url, headers, object \\\\ nil)","anchor":"http_request/4"}],"key":"functions"}],"nested_title":".Search.HTTP","nested_context":"Bonfire"},{"id":"Bonfire.Search.Indexer","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Indexer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"host/1","deprecated":false,"title":"host(url)","anchor":"host/1"},{"id":"index_public_object/1","deprecated":false,"title":"index_public_object(object)","anchor":"index_public_object/1"},{"id":"init_index/2","deprecated":false,"title":"init_index(index_name \\\\ \"public\", fail_silently \\\\ false)","anchor":"init_index/2"},{"id":"maybe_delete_object/2","deprecated":false,"title":"maybe_delete_object(object, index_name \\\\ \"public\")","anchor":"maybe_delete_object/2"},{"id":"maybe_index_object/1","deprecated":false,"title":"maybe_index_object(object)","anchor":"maybe_index_object/1"},{"id":"maybe_indexable_and_discoverable/2","deprecated":false,"title":"maybe_indexable_and_discoverable(creator, object)","anchor":"maybe_indexable_and_discoverable/2"},{"id":"maybe_indexable_object/1","deprecated":false,"title":"maybe_indexable_object(object)","anchor":"maybe_indexable_object/1"}],"key":"functions"}],"nested_title":".Search.Indexer","nested_context":"Bonfire"},{"id":"Bonfire.Search.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"live_search/4","deprecated":false,"title":"live_search(q, search_limit \\\\ 20, facet_filters \\\\ nil, socket)","anchor":"live_search/4"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Search.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Search.Meili","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Meili","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"api/4","deprecated":false,"title":"api(http_method, object, index_path, fail_silently \\\\ false)","anchor":"api/4"},{"id":"create_index/2","deprecated":false,"title":"create_index(index_name, fail_silently \\\\ false)","anchor":"create_index/2"},{"id":"delete/3","deprecated":false,"title":"delete(object, index_path \\\\ \"\", fail_silently \\\\ false)","anchor":"delete/3"},{"id":"get/1","deprecated":false,"title":"get(object)","anchor":"get/1"},{"id":"get/3","deprecated":false,"title":"get(object, index_path, fail_silently \\\\ false)","anchor":"get/3"},{"id":"index_exists/1","deprecated":false,"title":"index_exists(index_name)","anchor":"index_exists/1"},{"id":"list_facets/1","deprecated":false,"title":"list_facets(index_name \\\\ \"public\")","anchor":"list_facets/1"},{"id":"patch/3","deprecated":false,"title":"patch(object, index_path \\\\ \"\", fail_silently \\\\ false)","anchor":"patch/3"},{"id":"post/3","deprecated":false,"title":"post(object, index_path \\\\ \"\", fail_silently \\\\ false)","anchor":"post/3"},{"id":"put/3","deprecated":false,"title":"put(object, index_path \\\\ \"\", fail_silently \\\\ false)","anchor":"put/3"},{"id":"search/2","deprecated":false,"title":"search(params, index)","anchor":"search/2"},{"id":"set_facets/2","deprecated":false,"title":"set_facets(index_name, facets)","anchor":"set_facets/2"},{"id":"set_searchable_fields/2","deprecated":false,"title":"set_searchable_fields(index_name, fields)","anchor":"set_searchable_fields/2"},{"id":"settings/2","deprecated":false,"title":"settings(object, index)","anchor":"settings/2"}],"key":"functions"}],"nested_title":".Search.Meili","nested_context":"Bonfire"},{"id":"Bonfire.Search.RuntimeConfig","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Search.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Search.Stopwords","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Stopwords","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(text, language \\\\ nil)","anchor":"filter/2"},{"id":"split_sentences/1","deprecated":false,"title":"split_sentences(text)","anchor":"split_sentences/1"},{"id":"split_words/1","deprecated":false,"title":"split_words(text)","anchor":"split_words/1"},{"id":"stop_words/1","deprecated":false,"title":"stop_words(language \\\\ \"english\")","anchor":"stop_words/1"}],"key":"functions"}],"nested_title":".Search.Stopwords","nested_context":"Bonfire"},{"id":"Bonfire.Search.Web.Routes","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Web.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".Search.Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Seeder","deprecated":false,"group":"Feature extensions","title":"Bonfire.Seeder","sections":[],"nested_title":".Seeder","nested_context":"Bonfire"},{"id":"Bonfire.Social.APActivities","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.APActivities","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"create/4","deprecated":false,"title":"create(character, activity, object, public \\\\ nil)","anchor":"create/4"},{"id":"insert/3","deprecated":false,"title":"insert(character, json, opts)","anchor":"insert/3"},{"id":"maybe_attach_video_oembed/3","deprecated":false,"title":"maybe_attach_video_oembed(changeset, arg2, current_user)","anchor":"maybe_attach_video_oembed/3"}],"key":"functions"}],"nested_title":".Social.APActivities","nested_context":"Bonfire"},{"id":"Bonfire.Social.Activities","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Activities","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"activity_preloads/2","deprecated":false,"title":"activity_preloads(query, opts)","anchor":"activity_preloads/2"},{"id":"activity_preloads/3","deprecated":false,"title":"activity_preloads(query, preloads, opts)","anchor":"activity_preloads/3"},{"id":"activity_under_object/1","deprecated":false,"title":"activity_under_object(top_object)","anchor":"activity_under_object/1"},{"id":"activity_under_object/2","deprecated":false,"title":"activity_under_object(activity, object)","anchor":"activity_under_object/2"},{"id":"activity_with_object_from_assigns/1","deprecated":false,"title":"activity_with_object_from_assigns(assigns)","anchor":"activity_with_object_from_assigns/1"},{"id":"all_verb_names/0","deprecated":false,"title":"all_verb_names()","anchor":"all_verb_names/0"},{"id":"all_verb_names_extra/0","deprecated":false,"title":"all_verb_names_extra()","anchor":"all_verb_names_extra/0"},{"id":"as_permitted_for/3","deprecated":false,"title":"as_permitted_for(q, opts \\\\ [], verbs \\\\ [:see, :read])","anchor":"as_permitted_for/3"},{"id":"build_assoc/3","deprecated":false,"title":"build_assoc(thing, verb, subject)","anchor":"build_assoc/3"},{"id":"build_assoc/4","deprecated":false,"title":"build_assoc(thing, verb, subject, object)","anchor":"build_assoc/4"},{"id":"by_subject_verb_object_q/3","deprecated":false,"title":"by_subject_verb_object_q(subject, verb, object)","anchor":"by_subject_verb_object_q/3"},{"id":"cast/4","deprecated":false,"title":"cast(changeset, verb, creator, opts)","anchor":"cast/4"},{"id":"count_total/0","deprecated":false,"title":"count_total()","anchor":"count_total/0"},{"id":"create/4","deprecated":false,"title":"create(subject, verb, object, activity_id \\\\ nil)","anchor":"create/4"},{"id":"delete/1","deprecated":false,"title":"delete(id)","anchor":"delete/1"},{"id":"delete_by_subject_verb_object/3","deprecated":false,"title":"delete_by_subject_verb_object(subject, verb, object)","anchor":"delete_by_subject_verb_object/3"},{"id":"delete_object/1","deprecated":false,"title":"delete_object(id)","anchor":"delete_object/1"},{"id":"fetch_cursor_value_fun/2","deprecated":false,"title":"fetch_cursor_value_fun(replied, list)","anchor":"fetch_cursor_value_fun/2"},{"id":"get/2","deprecated":false,"title":"get(id, opts)","anchor":"get/2"},{"id":"load_object/2","deprecated":false,"title":"load_object(id_or_pointer, opts \\\\ [])","anchor":"load_object/2"},{"id":"maybe_join_creator/2","deprecated":false,"title":"maybe_join_creator(query, exclude_user_ids)","anchor":"maybe_join_creator/2"},{"id":"maybe_join_subject/2","deprecated":false,"title":"maybe_join_subject(query, exclude_user_ids)","anchor":"maybe_join_subject/2"},{"id":"maybe_remove_for_deleters_feeds/1","deprecated":false,"title":"maybe_remove_for_deleters_feeds(id)","anchor":"maybe_remove_for_deleters_feeds/1"},{"id":"object_from_activity/1","deprecated":false,"title":"object_from_activity(activity)","anchor":"object_from_activity/1"},{"id":"object_preload_activity/2","deprecated":false,"title":"object_preload_activity(object, verb \\\\ :create)","anchor":"object_preload_activity/2"},{"id":"object_preload_create_activity/1","deprecated":false,"title":"object_preload_create_activity(object)","anchor":"object_preload_create_activity/1"},{"id":"object_under_activity/2","deprecated":false,"title":"object_under_activity(activity, object)","anchor":"object_under_activity/2"},{"id":"order_cursor_fields/2","deprecated":false,"title":"order_cursor_fields(arg1, sort_order)","anchor":"order_cursor_fields/2"},{"id":"order_pagination_opts/2","deprecated":false,"title":"order_pagination_opts(sort_by, sort_order)","anchor":"order_pagination_opts/2"},{"id":"put_assoc/3","deprecated":false,"title":"put_assoc(changeset, verb, subject)","anchor":"put_assoc/3"},{"id":"put_assoc/4","deprecated":false,"title":"put_assoc(changeset, verb, subject, object)","anchor":"put_assoc/4"},{"id":"query/2","deprecated":false,"title":"query(filters \\\\ [], opts_or_current_user \\\\ [])","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"query_object_preload_activity/4","deprecated":false,"title":"query_object_preload_activity(q, verb \\\\ :create, object_id_field \\\\ :id, opts \\\\ [])","anchor":"query_object_preload_activity/4"},{"id":"query_object_preload_create_activity/2","deprecated":false,"title":"query_object_preload_create_activity(q, opts \\\\ [])","anchor":"query_object_preload_create_activity/2"},{"id":"query_order/3","deprecated":false,"title":"query_order(query, arg2, sort_order)","anchor":"query_order/3"},{"id":"read/2","deprecated":false,"title":"read(query, opts \\\\ [])","anchor":"read/2"},{"id":"read_query/2","deprecated":false,"title":"read_query(query, opts \\\\ [])","anchor":"read_query/2"},{"id":"reply_to_as_permitted_for/3","deprecated":false,"title":"reply_to_as_permitted_for(q, opts \\\\ [], verbs \\\\ [:see, :read])","anchor":"reply_to_as_permitted_for/3"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"verb_congugate/1","deprecated":false,"title":"verb_congugate(verb)","anchor":"verb_congugate/1"},{"id":"verb_display/1","deprecated":false,"title":"verb_display(verb)","anchor":"verb_display/1"},{"id":"verb_id/1","deprecated":false,"title":"verb_id(verb)","anchor":"verb_id/1"},{"id":"verb_maybe_modify/2","deprecated":false,"title":"verb_maybe_modify(verb, activity)","anchor":"verb_maybe_modify/2"},{"id":"verb_name/1","deprecated":false,"title":"verb_name(slug)","anchor":"verb_name/1"}],"key":"functions"}],"nested_title":".Social.Activities","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Activity","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Activity","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Activity","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Activity.UnderObject","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Activity.UnderObject","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Activity.UnderObject","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Federate","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Federate","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Federate","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Feeds","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Feeds","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"},{"id":"thread_id/1","deprecated":false,"title":"thread_id(epic)","anchor":"thread_id/1"}],"key":"functions"}],"nested_title":".Social.Acts.Feeds","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.LivePush","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.LivePush","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.LivePush","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Objects.Delete","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Objects.Delete","sections":[],"nested_title":".Social.Acts.Objects.Delete","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.PostContents","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.PostContents","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.PostContents","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Sensitivity","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Sensitivity","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Sensitivity","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Threaded","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Threaded","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Threaded","nested_context":"Bonfire"},{"id":"Bonfire.Social.Bookmarks","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Bookmarks","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bookmark/3","deprecated":false,"title":"bookmark(bookmarker, bookmarked, opts \\\\ [])","anchor":"bookmark/3"},{"id":"bookmarked?/2","deprecated":false,"title":"bookmarked?(user, object)","anchor":"bookmarked?/2"},{"id":"by_bookmarked/2","deprecated":false,"title":"by_bookmarked(object, opts \\\\ [])","anchor":"by_bookmarked/2"},{"id":"by_bookmarker/2","deprecated":false,"title":"by_bookmarker(subject, opts \\\\ [])","anchor":"by_bookmarker/2"},{"id":"count/2","deprecated":false,"title":"count(filters \\\\ [], opts \\\\ [])","anchor":"count/2"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"insert/3","deprecated":false,"title":"insert(subject, object, options)","anchor":"insert/3"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(object, opts \\\\ [])","anchor":"list_of/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unbookmark/3","deprecated":false,"title":"unbookmark(bookmarker, object, opts \\\\ [])","anchor":"unbookmark/3"}],"key":"functions"}],"nested_title":".Social.Bookmarks","nested_context":"Bonfire"},{"id":"Bonfire.Social.Boosts","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Boosts","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, arg2, boost)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"boost/3","deprecated":false,"title":"boost(booster, boosted, opts \\\\ [])","anchor":"boost/3"},{"id":"boosted?/2","deprecated":false,"title":"boosted?(user, object)","anchor":"boosted?/2"},{"id":"count/2","deprecated":false,"title":"count(filters \\\\ [], opts \\\\ [])","anchor":"count/2"},{"id":"date_last_boosted/2","deprecated":false,"title":"date_last_boosted(user, object)","anchor":"date_last_boosted/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(id, opts \\\\ [])","anchor":"list_of/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts \\\\ [])","anchor":"list_paginated/2"},{"id":"maybe_boost/3","deprecated":false,"title":"maybe_boost(booster, boosted, opts \\\\ [])","anchor":"maybe_boost/3"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unboost/3","deprecated":false,"title":"unboost(booster, boosted, opts \\\\ [])","anchor":"unboost/3"}],"key":"functions"}],"nested_title":".Social.Boosts","nested_context":"Bonfire"},{"id":"Bonfire.Social.Edges","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Edges","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/5","deprecated":false,"title":"changeset(schema, subject, verb, object, options)","anchor":"changeset/5"},{"id":"changeset_base/4","deprecated":false,"title":"changeset_base(schema, subject, object, options)","anchor":"changeset_base/4"},{"id":"count/3","deprecated":false,"title":"count(type, filters_or_object, opts \\\\ [])","anchor":"count/3"},{"id":"count_for_subject/4","deprecated":false,"title":"count_for_subject(type, subject, object, opts)","anchor":"count_for_subject/4"},{"id":"delete_by_both/3","deprecated":false,"title":"delete_by_both(me, schema, object)","anchor":"delete_by_both/3"},{"id":"delete_by_object/1","deprecated":false,"title":"delete_by_object(user)","anchor":"delete_by_object/1"},{"id":"delete_by_subject/1","deprecated":false,"title":"delete_by_subject(user)","anchor":"delete_by_subject/1"},{"id":"edge_module_query/2","deprecated":false,"title":"edge_module_query(schema_or_context, args)","anchor":"edge_module_query/2"},{"id":"exists?/4","deprecated":false,"title":"exists?(schema_or_context, subject, object, opts)","anchor":"exists?/4"},{"id":"filters_from_opts/1","deprecated":false,"title":"filters_from_opts(assigns)","anchor":"filters_from_opts/1"},{"id":"get/4","deprecated":false,"title":"get(schema_or_context, subject, object, opts \\\\ [])","anchor":"get/4"},{"id":"get!/4","deprecated":false,"title":"get!(schema_or_context, subject, objects, opts \\\\ [])","anchor":"get!/4"},{"id":"insert/3","deprecated":false,"title":"insert(changeset, subject \\\\ nil, object \\\\ nil)","anchor":"insert/3"},{"id":"insert/5","deprecated":false,"title":"insert(schema, subject, verb, object, options)","anchor":"insert/5"},{"id":"last/4","deprecated":false,"title":"last(schema_or_context, subject, object, opts)","anchor":"last/4"},{"id":"last_date/4","deprecated":false,"title":"last_date(type, subject, object, opts)","anchor":"last_date/4"},{"id":"put_edge_assoc/3","deprecated":false,"title":"put_edge_assoc(changeset, subject, object)","anchor":"put_edge_assoc/3"},{"id":"put_edge_assoc/4","deprecated":false,"title":"put_edge_assoc(changeset, schema, subject, object)","anchor":"put_edge_assoc/4"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_parent/3","deprecated":false,"title":"query_parent(query_schema, filters, opts)","anchor":"query_parent/3"}],"key":"functions"}],"nested_title":".Social.Edges","nested_context":"Bonfire"},{"id":"Bonfire.Social.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_remote_user!/0","deprecated":false,"title":"fake_remote_user!()","anchor":"fake_remote_user!/0"}],"key":"functions"}],"nested_title":".Social.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Social.FeedActivities","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.FeedActivities","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cast/2","deprecated":false,"title":"cast(changeset, feed_ids)","anchor":"cast/2"},{"id":"cast/3","deprecated":false,"title":"cast(changeset, creator, opts)","anchor":"cast/3"},{"id":"count/2","deprecated":false,"title":"count(filters \\\\ [], opts \\\\ [])","anchor":"count/2"},{"id":"count_subjects/2","deprecated":false,"title":"count_subjects(filters \\\\ [], opts \\\\ [])","anchor":"count_subjects/2"},{"id":"count_total/0","deprecated":false,"title":"count_total()","anchor":"count_total/0"},{"id":"delete/1","deprecated":false,"title":"delete(filters)","anchor":"delete/1"},{"id":"delete/2","deprecated":false,"title":"delete(objects, by_field)","anchor":"delete/2"},{"id":"feed/2","deprecated":false,"title":"feed(feed, opts \\\\ [])","anchor":"feed/2"},{"id":"feed_contains?/3","deprecated":false,"title":"feed_contains?(feed_name, object, opts \\\\ [])","anchor":"feed_contains?/3"},{"id":"feed_ids_and_opts/2","deprecated":false,"title":"feed_ids_and_opts(feed_name, opts)","anchor":"feed_ids_and_opts/2"},{"id":"feed_many_paginated/2","deprecated":false,"title":"feed_many_paginated(query, opts)","anchor":"feed_many_paginated/2"},{"id":"feed_name/2","deprecated":false,"title":"feed_name(name, current_user_or_socket)","anchor":"feed_name/2"},{"id":"feed_paginated/2","deprecated":false,"title":"feed_paginated(filters \\\\ [], opts \\\\ [])","anchor":"feed_paginated/2"},{"id":"feed_paginated/3","deprecated":false,"title":"feed_paginated(filters, opts, query)","anchor":"feed_paginated/3"},{"id":"feed_with_object/3","deprecated":false,"title":"feed_with_object(feed_name, object, opts \\\\ [])","anchor":"feed_with_object/3"},{"id":"feeds_for_activity/1","deprecated":false,"title":"feeds_for_activity(id)","anchor":"feeds_for_activity/1"},{"id":"filters_from_opts/1","deprecated":false,"title":"filters_from_opts(opts)","anchor":"filters_from_opts/1"},{"id":"get_feed_ids/1","deprecated":false,"title":"get_feed_ids(options)","anchor":"get_feed_ids/1"},{"id":"get_feed_publishes/1","deprecated":false,"title":"get_feed_publishes(options)","anchor":"get_feed_publishes/1"},{"id":"mark_all_seen/2","deprecated":false,"title":"mark_all_seen(feed_id, opts)","anchor":"mark_all_seen/2"},{"id":"maybe_feed_publish/5","deprecated":false,"title":"maybe_feed_publish(subject, verb_or_activity, object, feeds, opts)","anchor":"maybe_feed_publish/5"},{"id":"my_feed/2","deprecated":false,"title":"my_feed(opts, home_feed_ids \\\\ nil)","anchor":"my_feed/2"},{"id":"publish/4","deprecated":false,"title":"publish(subject, verb_or_activity, object, opts \\\\ [])","anchor":"publish/4"},{"id":"put_feed_publishes/2","deprecated":false,"title":"put_feed_publishes(changeset, options)","anchor":"put_feed_publishes/2"},{"id":"query/3","deprecated":false,"title":"query(filters \\\\ [], opts \\\\ [], query \\\\ default_query())","anchor":"query/3"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"skip_verbs_default/0","deprecated":false,"title":"skip_verbs_default()","anchor":"skip_verbs_default/0"},{"id":"the_object/1","deprecated":false,"title":"the_object(object)","anchor":"the_object/1"},{"id":"to_feed_options/1","deprecated":false,"title":"to_feed_options(socket_or_opts)","anchor":"to_feed_options/1"},{"id":"unseen_count/2","deprecated":false,"title":"unseen_count(feed_id, opts)","anchor":"unseen_count/2"}],"key":"functions"}],"nested_title":".Social.FeedActivities","nested_context":"Bonfire"},{"id":"Bonfire.Social.Feeds","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Feeds","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"feed_name/0","deprecated":false,"title":"feed_name()","anchor":"t:feed_name/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"admin_notifications/1","deprecated":false,"title":"admin_notifications(admin)","anchor":"admin_notifications/1"},{"id":"admins_notifications/0","deprecated":false,"title":"admins_notifications()","anchor":"admins_notifications/0"},{"id":"admins_notifications/1","deprecated":false,"title":"admins_notifications(admins)","anchor":"admins_notifications/1"},{"id":"do_target_feeds/5","deprecated":false,"title":"do_target_feeds(creator, opts, mentions \\\\ [], reply_to_creator \\\\ nil, thread_id \\\\ nil)","anchor":"do_target_feeds/5"},{"id":"feed_id/2","deprecated":false,"title":"feed_id(type, object)","anchor":"feed_id/2"},{"id":"feed_id!/2","deprecated":false,"title":"feed_id!(feed_name, for_subject)","anchor":"feed_id!/2"},{"id":"feed_ids/2","deprecated":false,"title":"feed_ids(feed_name, for_subjects)","anchor":"feed_ids/2"},{"id":"feed_ids_to_publish/3","deprecated":false,"title":"feed_ids_to_publish(me, binary, _)","anchor":"feed_ids_to_publish/3"},{"id":"feed_ids_to_publish/4","deprecated":false,"title":"feed_ids_to_publish(me, boundary, assigns, reply_and_or_mentions_notifications_feeds \\\\ nil)","anchor":"feed_ids_to_publish/4"},{"id":"inbox_of_obj_creator/1","deprecated":false,"title":"inbox_of_obj_creator(object)","anchor":"inbox_of_obj_creator/1"},{"id":"maybe_create_feed/2","deprecated":false,"title":"maybe_create_feed(type, for_subject)","anchor":"maybe_create_feed/2"},{"id":"maybe_creator_notification/3","deprecated":false,"title":"maybe_creator_notification(subject, object_creator, opts \\\\ [])","anchor":"maybe_creator_notification/3"},{"id":"maybe_custom_feeds/1","deprecated":false,"title":"maybe_custom_feeds(preset_and_custom_boundary)","anchor":"maybe_custom_feeds/1"},{"id":"maybe_my_outbox_feed_id/2","deprecated":false,"title":"maybe_my_outbox_feed_id(me, boundary)","anchor":"maybe_my_outbox_feed_id/2"},{"id":"my_feed_id/2","deprecated":false,"title":"my_feed_id(type, other)","anchor":"my_feed_id/2"},{"id":"my_home_feed_ids/2","deprecated":false,"title":"my_home_feed_ids(socket_or_opts, extra_feeds \\\\ [])","anchor":"my_home_feed_ids/2"},{"id":"named_feed_id/2","deprecated":false,"title":"named_feed_id(name, opts \\\\ [])","anchor":"named_feed_id/2"},{"id":"reply_and_or_mentions_notifications_feeds/5","deprecated":false,"title":"reply_and_or_mentions_notifications_feeds(me, boundary, mentions, reply_to_creator, to_circles \\\\ [])","anchor":"reply_and_or_mentions_notifications_feeds/5"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"target_feeds/3","deprecated":false,"title":"target_feeds(changeset, creator, opts)","anchor":"target_feeds/3"}],"key":"functions"}],"nested_title":".Social.Feeds","nested_context":"Bonfire"},{"id":"Bonfire.Social.Feeds.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Feeds.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actions_update_many/2","deprecated":false,"title":"actions_update_many(assigns_sockets, opts)","anchor":"actions_update_many/2"},{"id":"activity_update_many/2","deprecated":false,"title":"activity_update_many(assigns_sockets, opts)","anchor":"activity_update_many/2"},{"id":"assign_feed/3","deprecated":false,"title":"assign_feed(socket, assigns, opts \\\\ [])","anchor":"assign_feed/3"},{"id":"feed_assigns_maybe_async/4","deprecated":false,"title":"feed_assigns_maybe_async(other, socket, show_loader \\\\ true, reset_stream \\\\ false)","anchor":"feed_assigns_maybe_async/4"},{"id":"feed_default_assigns/2","deprecated":false,"title":"feed_default_assigns(feed_name, socket)","anchor":"feed_default_assigns/2"},{"id":"feed_extra_preloads_list/2","deprecated":false,"title":"feed_extra_preloads_list(showing_within, thread_mode \\\\ nil)","anchor":"feed_extra_preloads_list/2"},{"id":"feed_live_update_many_preloads?/0","deprecated":false,"title":"feed_live_update_many_preloads?()","anchor":"feed_live_update_many_preloads?/0"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(arg, socket)","anchor":"handle_info/2"},{"id":"handle_params/3","deprecated":false,"title":"handle_params(attrs, _, socket)","anchor":"handle_params/3"},{"id":"insert_feed/3","deprecated":false,"title":"insert_feed(socket, feed_edges, opts \\\\ [])","anchor":"insert_feed/3"},{"id":"load_user_feed_assigns/3","deprecated":false,"title":"load_user_feed_assigns(selected_tab_and_user_id, params, socket)","anchor":"load_user_feed_assigns/3"},{"id":"load_user_feed_assigns/4","deprecated":false,"title":"load_user_feed_assigns(tab, feed_id, attrs, socket)","anchor":"load_user_feed_assigns/4"},{"id":"object_preloads/0","deprecated":false,"title":"object_preloads()","anchor":"object_preloads/0"},{"id":"paginate_feed/4","deprecated":false,"title":"paginate_feed(feed_id, attrs, socket, opts \\\\ [])","anchor":"paginate_feed/4"},{"id":"paginate_fetch_assign_default/2","deprecated":false,"title":"paginate_fetch_assign_default(opts, socket)","anchor":"paginate_fetch_assign_default/2"},{"id":"paginate_opts/3","deprecated":false,"title":"paginate_opts(attrs, socket, opts)","anchor":"paginate_opts/3"},{"id":"preload_activity_and_object_assocs/3","deprecated":false,"title":"preload_activity_and_object_assocs(feed, under, opts)","anchor":"preload_activity_and_object_assocs/3"},{"id":"remove_activity/1","deprecated":false,"title":"remove_activity(activity)","anchor":"remove_activity/1"},{"id":"reply_to_activity/2","deprecated":false,"title":"reply_to_activity(js \\\\ %JS{}, target)","anchor":"reply_to_activity/2"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"user_feed_assign_or_load_async/4","deprecated":false,"title":"user_feed_assign_or_load_async(tab, user_or_feed, params, socket)","anchor":"user_feed_assign_or_load_async/4"}],"key":"functions"}],"nested_title":".Social.Feeds.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.Flags","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Flags","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, flag)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, objects)","anchor":"ap_receive_activity/3"},{"id":"by_flagged/1","deprecated":false,"title":"by_flagged(object)","anchor":"by_flagged/1"},{"id":"by_flagger/1","deprecated":false,"title":"by_flagger(subject)","anchor":"by_flagger/1"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"flag/3","deprecated":false,"title":"flag(flagger, flagged, opts \\\\ [])","anchor":"flag/3"},{"id":"flagged?/2","deprecated":false,"title":"flagged?(user, object)","anchor":"flagged?/2"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"instance_moderators/0","deprecated":false,"title":"instance_moderators()","anchor":"instance_moderators/0"},{"id":"list/1","deprecated":false,"title":"list(opts)","anchor":"list/1"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(object, opts \\\\ [])","anchor":"list_of/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts)","anchor":"list_paginated/2"},{"id":"list_preloaded/1","deprecated":false,"title":"list_preloaded(opts)","anchor":"list_preloaded/1"},{"id":"moderators/1","deprecated":false,"title":"moderators(object)","anchor":"moderators/1"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unflag/2","deprecated":false,"title":"unflag(flagger, flagged)","anchor":"unflag/2"}],"key":"functions"}],"nested_title":".Social.Flags","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"graph_add/3","deprecated":false,"title":"graph_add(subject, object, type)","anchor":"graph_add/3"},{"id":"graph_clear/0","deprecated":false,"title":"graph_clear()","anchor":"graph_clear/0"},{"id":"graph_conn/0","deprecated":false,"title":"graph_conn()","anchor":"graph_conn/0"},{"id":"graph_distance/2","deprecated":false,"title":"graph_distance(subject, object)","anchor":"graph_distance/2"},{"id":"graph_distances/1","deprecated":false,"title":"graph_distances(subject)","anchor":"graph_distances/1"},{"id":"graph_meta/1","deprecated":false,"title":"graph_meta(subject \\\\ nil)","anchor":"graph_meta/1"},{"id":"graph_query/2","deprecated":false,"title":"graph_query(graph_conn \\\\ graph_conn(), query)","anchor":"graph_query/2"},{"id":"graph_remove/3","deprecated":false,"title":"graph_remove(subject, object, type)","anchor":"graph_remove/3"},{"id":"init/1","deprecated":false,"title":"init(_)","anchor":"init/1"},{"id":"init_and_load/0","deprecated":false,"title":"init_and_load()","anchor":"init_and_load/0"},{"id":"load_from_db/0","deprecated":false,"title":"load_from_db()","anchor":"load_from_db/0"},{"id":"maybe_applications/0","deprecated":false,"title":"maybe_applications()","anchor":"maybe_applications/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Social.Graph","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Aliases","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Aliases","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add/3","deprecated":false,"title":"add(user, target, opts \\\\ [])","anchor":"add/3"},{"id":"all_by_object/2","deprecated":false,"title":"all_by_object(user, opts \\\\ [])","anchor":"all_by_object/2"},{"id":"all_by_subject/2","deprecated":false,"title":"all_by_subject(user, opts \\\\ [])","anchor":"all_by_subject/2"},{"id":"all_objects_by_subject/2","deprecated":false,"title":"all_objects_by_subject(user, opts \\\\ [])","anchor":"all_objects_by_subject/2"},{"id":"all_subjects_by_object/2","deprecated":false,"title":"all_subjects_by_object(user, opts \\\\ [])","anchor":"all_subjects_by_object/2"},{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, arg2, target)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(subject, activity, origin_object)","anchor":"ap_receive_activity/3"},{"id":"exists?/2","deprecated":false,"title":"exists?(subject, target)","anchor":"exists?/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"insert/3","deprecated":false,"title":"insert(subject, object, options)","anchor":"insert/3"},{"id":"list_aliased/2","deprecated":false,"title":"list_aliased(user, opts \\\\ [])","anchor":"list_aliased/2"},{"id":"list_aliases/2","deprecated":false,"title":"list_aliases(user, opts \\\\ [])","anchor":"list_aliases/2"},{"id":"list_my_aliased/2","deprecated":false,"title":"list_my_aliased(current_user, opts \\\\ [])","anchor":"list_my_aliased/2"},{"id":"list_my_aliases/2","deprecated":false,"title":"list_my_aliases(current_user, opts \\\\ [])","anchor":"list_my_aliases/2"},{"id":"move/2","deprecated":false,"title":"move(subject, target)","anchor":"move/2"},{"id":"move_following/2","deprecated":false,"title":"move_following(origin, target)","anchor":"move_following/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"remove/2","deprecated":false,"title":"remove(user, target)","anchor":"remove/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"}],"key":"functions"}],"nested_title":".Social.Graph.Aliases","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_follow!/0","deprecated":false,"title":"fake_follow!()","anchor":"fake_follow!/0"},{"id":"fake_incoming_follow!/0","deprecated":false,"title":"fake_incoming_follow!()","anchor":"fake_incoming_follow!/0"},{"id":"fake_outgoing_follow!/0","deprecated":false,"title":"fake_outgoing_follow!()","anchor":"fake_outgoing_follow!/0"},{"id":"fake_remote_user!/0","deprecated":false,"title":"fake_remote_user!()","anchor":"fake_remote_user!/0"}],"key":"functions"}],"nested_title":".Social.Graph.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Follows","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Follows","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"accept/2","deprecated":false,"title":"accept(request, opts)","anchor":"accept/2"},{"id":"accept_from/2","deprecated":false,"title":"accept_from(subject, opts)","anchor":"accept_from/2"},{"id":"all_by_object/2","deprecated":false,"title":"all_by_object(user, opts \\\\ [])","anchor":"all_by_object/2"},{"id":"all_by_subject/2","deprecated":false,"title":"all_by_subject(user, opts \\\\ [])","anchor":"all_by_subject/2"},{"id":"all_followed_outboxes/2","deprecated":false,"title":"all_followed_outboxes(user, opts \\\\ [])","anchor":"all_followed_outboxes/2"},{"id":"all_objects_by_subject/2","deprecated":false,"title":"all_objects_by_subject(user, opts \\\\ [])","anchor":"all_objects_by_subject/2"},{"id":"all_subjects_by_object/2","deprecated":false,"title":"all_subjects_by_object(user, opts \\\\ [])","anchor":"all_subjects_by_object/2"},{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, object)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(follower, activity, object)","anchor":"ap_receive_activity/3"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"follow/3","deprecated":false,"title":"follow(user, object, opts \\\\ [])","anchor":"follow/3"},{"id":"following?/2","deprecated":false,"title":"following?(subject, object)","anchor":"following?/2"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"ignore/2","deprecated":false,"title":"ignore(request, opts)","anchor":"ignore/2"},{"id":"invalidate_followed_outboxes_cache/1","deprecated":false,"title":"invalidate_followed_outboxes_cache(user)","anchor":"invalidate_followed_outboxes_cache/1"},{"id":"list_followed/2","deprecated":false,"title":"list_followed(user, opts \\\\ [])","anchor":"list_followed/2"},{"id":"list_followers/2","deprecated":false,"title":"list_followers(user, opts \\\\ [])","anchor":"list_followers/2"},{"id":"list_my_followed/2","deprecated":false,"title":"list_my_followed(current_user, opts \\\\ [])","anchor":"list_my_followed/2"},{"id":"list_my_followers/2","deprecated":false,"title":"list_my_followers(current_user, opts \\\\ [])","anchor":"list_my_followers/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"requested?/2","deprecated":false,"title":"requested?(subject, object)","anchor":"requested?/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unfollow/3","deprecated":false,"title":"unfollow(user, object, opts \\\\ [])","anchor":"unfollow/3"}],"key":"functions"}],"nested_title":".Social.Graph.Follows","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Import","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Import","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"blocks_from_csv/2","deprecated":false,"title":"blocks_from_csv(user, csv)","anchor":"blocks_from_csv/2"},{"id":"blocks_from_csv_file/2","deprecated":false,"title":"blocks_from_csv_file(user, path)","anchor":"blocks_from_csv_file/2"},{"id":"follows_from_csv/2","deprecated":false,"title":"follows_from_csv(user, csv)","anchor":"follows_from_csv/2"},{"id":"follows_from_csv_file/2","deprecated":false,"title":"follows_from_csv_file(user, path)","anchor":"follows_from_csv_file/2"},{"id":"ghosts_from_csv/2","deprecated":false,"title":"ghosts_from_csv(user, csv)","anchor":"ghosts_from_csv/2"},{"id":"ghosts_from_csv_file/2","deprecated":false,"title":"ghosts_from_csv_file(user, path)","anchor":"ghosts_from_csv_file/2"},{"id":"import_from_csv_file/3","deprecated":false,"title":"import_from_csv_file(other, user, path)","anchor":"import_from_csv_file/3"},{"id":"perform/1","deprecated":false,"title":"perform(map)","anchor":"perform/1"},{"id":"perform/3","deprecated":false,"title":"perform(op, user, identifier)","anchor":"perform/3"},{"id":"silences_from_csv/2","deprecated":false,"title":"silences_from_csv(user, csv)","anchor":"silences_from_csv/2"},{"id":"silences_from_csv_file/2","deprecated":false,"title":"silences_from_csv_file(user, path)","anchor":"silences_from_csv_file/2"}],"key":"functions"}],"nested_title":".Social.Graph.Import","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Social.Graph.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Requests","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Requests","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"accept/2","deprecated":false,"title":"accept(request, opts)","anchor":"accept/2"},{"id":"all_by_object/3","deprecated":false,"title":"all_by_object(user, type, opts \\\\ [])","anchor":"all_by_object/3"},{"id":"all_by_subject/3","deprecated":false,"title":"all_by_subject(user, type, opts \\\\ [])","anchor":"all_by_subject/3"},{"id":"all_objects_by_subject/3","deprecated":false,"title":"all_objects_by_subject(user, type, opts \\\\ [])","anchor":"all_objects_by_subject/3"},{"id":"all_requested_outboxes/3","deprecated":false,"title":"all_requested_outboxes(user, type, opts \\\\ [])","anchor":"all_requested_outboxes/3"},{"id":"all_subjects_by_object/3","deprecated":false,"title":"all_subjects_by_object(user, type, opts \\\\ [])","anchor":"all_subjects_by_object/3"},{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, follow)","anchor":"ap_publish_activity/3"},{"id":"exists?/4","deprecated":false,"title":"exists?(subject, type, object, opts \\\\ [])","anchor":"exists?/4"},{"id":"get/2","deprecated":false,"title":"get(filters, opts \\\\ [])","anchor":"get/2"},{"id":"get/4","deprecated":false,"title":"get(subject, type, object, opts \\\\ [])","anchor":"get/4"},{"id":"get!/4","deprecated":false,"title":"get!(subject, type, object, opts \\\\ [])","anchor":"get!/4"},{"id":"ignore/2","deprecated":false,"title":"ignore(request, opts)","anchor":"ignore/2"},{"id":"list_my_requested/1","deprecated":false,"title":"list_my_requested(opts)","anchor":"list_my_requested/1"},{"id":"list_my_requesters/1","deprecated":false,"title":"list_my_requesters(opts)","anchor":"list_my_requesters/1"},{"id":"list_requested/2","deprecated":false,"title":"list_requested(user, opts \\\\ [])","anchor":"list_requested/2"},{"id":"list_requesters/2","deprecated":false,"title":"list_requesters(user, opts \\\\ [])","anchor":"list_requesters/2"},{"id":"many/2","deprecated":false,"title":"many(query, opts)","anchor":"many/2"},{"id":"query/3","deprecated":false,"title":"query(filters, type \\\\ nil, opts)","anchor":"query/3"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"request/4","deprecated":false,"title":"request(user, type, object, opts \\\\ [])","anchor":"request/4"},{"id":"requested/2","deprecated":false,"title":"requested(request, opts \\\\ [])","anchor":"requested/2"},{"id":"requested?/3","deprecated":false,"title":"requested?(subject, type, object)","anchor":"requested?/3"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unrequest/3","deprecated":false,"title":"unrequest(requester, type, object)","anchor":"unrequest/3"}],"key":"functions"}],"nested_title":".Social.Graph.Requests","nested_context":"Bonfire"},{"id":"Bonfire.Social.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"federate_outgoing?/1","deprecated":false,"title":"federate_outgoing?(subject \\\\ nil)","anchor":"federate_outgoing?/1"},{"id":"federating?/1","deprecated":false,"title":"federating?(subject \\\\ nil)","anchor":"federating?/1"},{"id":"is_local?/1","deprecated":false,"title":"is_local?(thing)","anchor":"is_local?/1"},{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"many/3","deprecated":false,"title":"many(query, paginate?, opts \\\\ [])","anchor":"many/3"},{"id":"maybe_federate/5","deprecated":false,"title":"maybe_federate(subject, verb, object, activity \\\\ nil, opts \\\\ [])","anchor":"maybe_federate/5"},{"id":"maybe_federate_and_gift_wrap_activity/4","deprecated":false,"title":"maybe_federate_and_gift_wrap_activity(subject, object, verb_override \\\\ nil, object_override \\\\ nil)","anchor":"maybe_federate_and_gift_wrap_activity/4"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Social.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Social.Likes","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Likes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, arg2, like)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(liker, activity, object)","anchor":"ap_receive_activity/3"},{"id":"by_liked/2","deprecated":false,"title":"by_liked(object, opts \\\\ [])","anchor":"by_liked/2"},{"id":"by_liker/2","deprecated":false,"title":"by_liker(subject, opts \\\\ [])","anchor":"by_liker/2"},{"id":"count/2","deprecated":false,"title":"count(filters \\\\ [], opts \\\\ [])","anchor":"count/2"},{"id":"do_like/3","deprecated":false,"title":"do_like(liker, liked, opts \\\\ [])","anchor":"do_like/3"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"like/3","deprecated":false,"title":"like(liker, object, opts \\\\ [])","anchor":"like/3"},{"id":"liked?/2","deprecated":false,"title":"liked?(user, object)","anchor":"liked?/2"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(object, opts \\\\ [])","anchor":"list_of/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts)","anchor":"list_paginated/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unlike/3","deprecated":false,"title":"unlike(liker, object, opts \\\\ [])","anchor":"unlike/3"}],"key":"functions"}],"nested_title":".Social.Likes","nested_context":"Bonfire"},{"id":"Bonfire.Social.LivePush","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.LivePush","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"hide_activity/2","deprecated":false,"title":"hide_activity(feed_id, activity_id)","anchor":"hide_activity/2"},{"id":"notify/2","deprecated":false,"title":"notify(activity, feed_ids)","anchor":"notify/2"},{"id":"notify/4","deprecated":false,"title":"notify(subject, verb, object, feed_ids)","anchor":"notify/4"},{"id":"notify_of_message/4","deprecated":false,"title":"notify_of_message(subject, verb, object, users)","anchor":"notify_of_message/4"},{"id":"notify_users/4","deprecated":false,"title":"notify_users(subject, verb, object, users)","anchor":"notify_users/4"},{"id":"prepare_activity/2","deprecated":false,"title":"prepare_activity(activity, opts \\\\ [])","anchor":"prepare_activity/2"},{"id":"push_activity/3","deprecated":false,"title":"push_activity(feed_ids, activity, opts \\\\ [])","anchor":"push_activity/3"},{"id":"push_activity_object/4","deprecated":false,"title":"push_activity_object(feed_ids, parent_object, object, opts)","anchor":"push_activity_object/4"}],"key":"functions"}],"nested_title":".Social.LivePush","nested_context":"Bonfire"},{"id":"Bonfire.Social.Objects","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Objects","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_maybe_delete/2","deprecated":false,"title":"ap_maybe_delete(creator, object)","anchor":"ap_maybe_delete/2"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"as_permitted_for/3","deprecated":false,"title":"as_permitted_for(q, opts \\\\ [], verbs \\\\ [:see, :read])","anchor":"as_permitted_for/3"},{"id":"cast/4","deprecated":false,"title":"cast(changeset, attrs, creator, opts)","anchor":"cast/4"},{"id":"cast_acl/3","deprecated":false,"title":"cast_acl(changeset, creator, opts)","anchor":"cast_acl/3"},{"id":"cast_basic/4","deprecated":false,"title":"cast_basic(changeset, attrs, creator, opts)","anchor":"cast_basic/4"},{"id":"cast_caretaker/2","deprecated":false,"title":"cast_caretaker(changeset, caretaker)","anchor":"cast_caretaker/2"},{"id":"cast_creator/2","deprecated":false,"title":"cast_creator(changeset, creator)","anchor":"cast_creator/2"},{"id":"cast_creator_caretaker/2","deprecated":false,"title":"cast_creator_caretaker(changeset, user)","anchor":"cast_creator_caretaker/2"},{"id":"cast_mini/4","deprecated":false,"title":"cast_mini(changeset, attrs, creator, opts)","anchor":"cast_mini/4"},{"id":"cast_publish/4","deprecated":false,"title":"cast_publish(changeset, attrs, creator, opts)","anchor":"cast_publish/4"},{"id":"cast_sensitivity/2","deprecated":false,"title":"cast_sensitivity(changeset, sensitive?)","anchor":"cast_sensitivity/2"},{"id":"changeset_named/2","deprecated":false,"title":"changeset_named(object \\\\ %{}, attrs)","anchor":"changeset_named/2"},{"id":"delete/2","deprecated":false,"title":"delete(object, opts)","anchor":"delete/2"},{"id":"delete_apply_error/2","deprecated":false,"title":"delete_apply_error(error, args)","anchor":"delete_apply_error/2"},{"id":"do_delete/2","deprecated":false,"title":"do_delete(objects, opts)","anchor":"do_delete/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"list_query/2","deprecated":false,"title":"list_query(type_or_query \\\\ nil, opts)","anchor":"list_query/2"},{"id":"maybe_generic_delete/3","deprecated":false,"title":"maybe_generic_delete(type, object, options \\\\ [])","anchor":"maybe_generic_delete/3"},{"id":"maybe_preload_activity_object/2","deprecated":false,"title":"maybe_preload_activity_object(pointer, current_user)","anchor":"maybe_preload_activity_object/2"},{"id":"object_creator/1","deprecated":false,"title":"object_creator(object)","anchor":"object_creator/1"},{"id":"preload_creator/1","deprecated":false,"title":"preload_creator(object)","anchor":"preload_creator/1"},{"id":"preload_reply_creator/1","deprecated":false,"title":"preload_reply_creator(object)","anchor":"preload_reply_creator/1"},{"id":"publish/5","deprecated":false,"title":"publish(creator, verb, thing, opts_or_attrs \\\\ nil, for_module \\\\ __MODULE__)","anchor":"publish/5"},{"id":"query_base/1","deprecated":false,"title":"query_base(type \\\\ nil)","anchor":"query_base/1"},{"id":"read/2","deprecated":false,"title":"read(object_id, socket_or_current_user)","anchor":"read/2"},{"id":"reset_preset_boundary/5","deprecated":false,"title":"reset_preset_boundary(creator, thing, previous_preset, opts_or_attrs \\\\ [], for_module \\\\ nil)","anchor":"reset_preset_boundary/5"},{"id":"run_epic/3","deprecated":false,"title":"run_epic(type, options \\\\ [], on \\\\ :object)","anchor":"run_epic/3"},{"id":"set_boundaries/4","deprecated":false,"title":"set_boundaries(creator, thing, opts_or_attrs \\\\ [], for_module \\\\ __MODULE__)","anchor":"set_boundaries/4"},{"id":"set_name/3","deprecated":false,"title":"set_name(id, name, opts)","anchor":"set_name/3"},{"id":"set_sensitivity/2","deprecated":false,"title":"set_sensitivity(pointer, arg2)","anchor":"set_sensitivity/2"}],"key":"functions"}],"nested_title":".Social.Objects","nested_context":"Bonfire"},{"id":"Bonfire.Social.Objects.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Objects.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"load_object_assigns/1","deprecated":false,"title":"load_object_assigns(socket)","anchor":"load_object_assigns/1"},{"id":"load_object_assigns/2","deprecated":false,"title":"load_object_assigns(assigns, socket)","anchor":"load_object_assigns/2"},{"id":"not_found_fallback/3","deprecated":false,"title":"not_found_fallback(id, params, socket)","anchor":"not_found_fallback/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Social.Objects.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.Pins","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Pins","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, pin)","anchor":"ap_publish_activity/3"},{"id":"by_pinned/2","deprecated":false,"title":"by_pinned(object, opts \\\\ [])","anchor":"by_pinned/2"},{"id":"by_pinner/2","deprecated":false,"title":"by_pinner(subject, opts \\\\ [])","anchor":"by_pinner/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_instance_pins/1","deprecated":false,"title":"list_instance_pins(opts)","anchor":"list_instance_pins/1"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(object, opts \\\\ [])","anchor":"list_of/2"},{"id":"pin/4","deprecated":false,"title":"pin(pinner, object, scope \\\\ nil, opts \\\\ [])","anchor":"pin/4"},{"id":"pinned?/2","deprecated":false,"title":"pinned?(scope, object)","anchor":"pinned?/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"rank_pin/3","deprecated":false,"title":"rank_pin(pin, scope, position)","anchor":"rank_pin/3"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unpin/3","deprecated":false,"title":"unpin(user, object, scope \\\\ nil)","anchor":"unpin/3"}],"key":"functions"}],"nested_title":".Social.Pins","nested_context":"Bonfire"},{"id":"Bonfire.Social.PostContents","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.PostContents","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_text_content/1","deprecated":false,"title":"all_text_content(attrs)","anchor":"all_text_content/1"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity_data, object)","anchor":"ap_receive_activity/3"},{"id":"ap_receive_attrs_prepare/4","deprecated":false,"title":"ap_receive_attrs_prepare(creator, activity_data, post_data, direct_recipients \\\\ [])","anchor":"ap_receive_attrs_prepare/4"},{"id":"cast/5","deprecated":false,"title":"cast(changeset, attrs, creator, boundary, opts)","anchor":"cast/5"},{"id":"changeset/2","deprecated":false,"title":"changeset(cs \\\\ %PostContent{}, attrs)","anchor":"changeset/2"},{"id":"diff/2","deprecated":false,"title":"diff(previous_version, current_version)","anchor":"diff/2"},{"id":"edit/3","deprecated":false,"title":"edit(current_user, id, attrs)","anchor":"edit/3"},{"id":"editor_output_content_type/1","deprecated":false,"title":"editor_output_content_type(user)","anchor":"editor_output_content_type/1"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/2","deprecated":false,"title":"get(id, opts \\\\ [])","anchor":"get/2"},{"id":"get_versions/1","deprecated":false,"title":"get_versions(post_content)","anchor":"get_versions/1"},{"id":"get_versions_diffed/1","deprecated":false,"title":"get_versions_diffed(post_content)","anchor":"get_versions_diffed/1"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(obj)","anchor":"indexing_object_format/1"},{"id":"maybe_detect_languages/2","deprecated":false,"title":"maybe_detect_languages(attrs, fields \\\\ [:name, :summary, :html_body])","anchor":"maybe_detect_languages/2"},{"id":"maybe_prepare_contents/4","deprecated":false,"title":"maybe_prepare_contents(attrs, creator, boundary, opts)","anchor":"maybe_prepare_contents/4"},{"id":"merge_with_body_or_nil/2","deprecated":false,"title":"merge_with_body_or_nil(attrs, map)","anchor":"merge_with_body_or_nil/2"},{"id":"no_known_output/2","deprecated":false,"title":"no_known_output(error, args)","anchor":"no_known_output/2"},{"id":"one/2","deprecated":false,"title":"one(filters, opts \\\\ [])","anchor":"one/2"},{"id":"prepare_text/3","deprecated":false,"title":"prepare_text(text, arg2, opts)","anchor":"prepare_text/3"},{"id":"query/2","deprecated":false,"title":"query(filters, opts \\\\ [])","anchor":"query/2"},{"id":"query_base/0","deprecated":false,"title":"query_base()","anchor":"query_base/0"}],"key":"functions"}],"nested_title":".Social.PostContents","nested_context":"Bonfire"},{"id":"Bonfire.Social.Seen","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Seen","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"mark_seen/2","deprecated":false,"title":"mark_seen(subject, object)","anchor":"mark_seen/2"},{"id":"mark_unseen/2","deprecated":false,"title":"mark_unseen(subject, object)","anchor":"mark_unseen/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"seen?/2","deprecated":false,"title":"seen?(user, object)","anchor":"seen?/2"}],"key":"functions"}],"nested_title":".Social.Seen","nested_context":"Bonfire"},{"id":"Bonfire.Social.Tags","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Tags","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"auto_boost/2","deprecated":false,"title":"auto_boost(categories_auto_boost, object)","anchor":"auto_boost/2"},{"id":"cast/4","deprecated":false,"title":"cast(changeset, attrs, creator, opts)","anchor":"cast/4"},{"id":"indexing_format_tags/1","deprecated":false,"title":"indexing_format_tags(tags)","anchor":"indexing_format_tags/1"},{"id":"maybe_auto_boost/3","deprecated":false,"title":"maybe_auto_boost(creator, category_or_categories, object)","anchor":"maybe_auto_boost/3"},{"id":"maybe_boostable_categories/2","deprecated":false,"title":"maybe_boostable_categories(creator, categories)","anchor":"maybe_boostable_categories/2"},{"id":"maybe_process/3","deprecated":false,"title":"maybe_process(creator, text, opts)","anchor":"maybe_process/3"},{"id":"maybe_tag/4","deprecated":false,"title":"maybe_tag(creator, object, tags, mentions_are_private? \\\\ false)","anchor":"maybe_tag/4"}],"key":"functions"}],"nested_title":".Social.Tags","nested_context":"Bonfire"},{"id":"Bonfire.Social.Threads","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Threads","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_prepare/2","deprecated":false,"title":"ap_prepare(object_or_thread_or_reply_to_id, key \\\\ :thread_id)","anchor":"ap_prepare/2"},{"id":"arrange_replies/2","deprecated":false,"title":"arrange_replies(replies, opts \\\\ [])","anchor":"arrange_replies/2"},{"id":"arrange_replies_tree/2","deprecated":false,"title":"arrange_replies_tree(replies, opts \\\\ [])","anchor":"arrange_replies_tree/2"},{"id":"base_query/0","deprecated":false,"title":"base_query()","anchor":"base_query/0"},{"id":"cast/4","deprecated":false,"title":"cast(changeset, attrs, user, preset_or_custom_boundary)","anchor":"cast/4"},{"id":"changeset/2","deprecated":false,"title":"changeset(replied \\\\ %Replied{}, attrs)","anchor":"changeset/2"},{"id":"count_participants/2","deprecated":false,"title":"count_participants(thread_id, opts \\\\ [])","anchor":"count_participants/2"},{"id":"fetch_participants/2","deprecated":false,"title":"fetch_participants(thread_id, opts \\\\ [])","anchor":"fetch_participants/2"},{"id":"filter/3","deprecated":false,"title":"filter(arg1, thread_id, query)","anchor":"filter/3"},{"id":"find_reply_to/2","deprecated":false,"title":"find_reply_to(attrs, user)","anchor":"find_reply_to/2"},{"id":"find_thread/2","deprecated":false,"title":"find_thread(attrs, user)","anchor":"find_thread/2"},{"id":"list_participants/3","deprecated":false,"title":"list_participants(activity_or_object, thread_or_object_id \\\\ nil, opts \\\\ [])","anchor":"list_participants/3"},{"id":"list_replies/2","deprecated":false,"title":"list_replies(thread, opts \\\\ [])","anchor":"list_replies/2"},{"id":"mark_all_seen/2","deprecated":false,"title":"mark_all_seen(filters, opts)","anchor":"mark_all_seen/2"},{"id":"maybe_re_order_result/2","deprecated":false,"title":"maybe_re_order_result(result, opts)","anchor":"maybe_re_order_result/2"},{"id":"query/2","deprecated":false,"title":"query(filter, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"re_order_using_subquery/2","deprecated":false,"title":"re_order_using_subquery(query, opts)","anchor":"re_order_using_subquery/2"},{"id":"read/2","deprecated":false,"title":"read(object_id, socket_or_current_user)","anchor":"read/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unseen_count/2","deprecated":false,"title":"unseen_count(filters, opts)","anchor":"unseen_count/2"},{"id":"unseen_query/2","deprecated":false,"title":"unseen_query(filters, opts)","anchor":"unseen_query/2"}],"key":"functions"}],"nested_title":".Social.Threads","nested_context":"Bonfire"},{"id":"Bonfire.Social.Threads.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Threads.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(arg1, socket)","anchor":"handle_info/2"},{"id":"handle_params/3","deprecated":false,"title":"handle_params(attrs, uri, socket)","anchor":"handle_params/3"},{"id":"insert_comments/3","deprecated":false,"title":"insert_comments(socket, replies, opts \\\\ [])","anchor":"insert_comments/3"},{"id":"live_more/3","deprecated":false,"title":"live_more(thread_id, paginate, socket)","anchor":"live_more/3"},{"id":"load_thread/1","deprecated":false,"title":"load_thread(socket)","anchor":"load_thread/1"},{"id":"load_thread_assigns/1","deprecated":false,"title":"load_thread_assigns(socket)","anchor":"load_thread_assigns/1"},{"id":"load_thread_maybe_async/3","deprecated":false,"title":"load_thread_maybe_async(socket_or_opts, show_loader \\\\ true, reset_stream \\\\ false)","anchor":"load_thread_maybe_async/3"},{"id":"max_depth/1","deprecated":false,"title":"max_depth(ui_compact \\\\ nil)","anchor":"max_depth/1"},{"id":"maybe_subscribe/2","deprecated":false,"title":"maybe_subscribe(socket, thread_id)","anchor":"maybe_subscribe/2"},{"id":"reply/3","deprecated":false,"title":"reply(reply_to, activity, socket)","anchor":"reply/3"},{"id":"send_thread_updates/4","deprecated":false,"title":"send_thread_updates(pid \\\\ self(), thread_id, assigns, component \\\\ Bonfire.UI.Social.ThreadLive)","anchor":"send_thread_updates/4"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"thread_init/1","deprecated":false,"title":"thread_init(socket)","anchor":"thread_init/1"}],"key":"functions"}],"nested_title":".Social.Threads.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.System.OS.Monitor","deprecated":false,"group":"Feature extensions","title":"Bonfire.System.OS.Monitor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"format_bytes/1","deprecated":false,"title":"format_bytes(bytes)","anchor":"format_bytes/1"},{"id":"format_percent/1","deprecated":false,"title":"format_percent(percent)","anchor":"format_percent/1"},{"id":"handle_alarm/2","deprecated":false,"title":"handle_alarm(alarm_name, alarm_description)","anchor":"handle_alarm/2"},{"id":"handle_event/2","deprecated":false,"title":"handle_event(arg, state)","anchor":"handle_event/2"},{"id":"init/1","deprecated":false,"title":"init(arg)","anchor":"init/1"}],"key":"functions"}],"nested_title":".System.OS.Monitor","nested_context":"Bonfire"},{"id":"Bonfire.Tag","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"context_module/0","deprecated":false,"title":"context_module()","anchor":"context_module/0"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"tag_things_changeset/2","deprecated":false,"title":"tag_things_changeset(tag, things)","anchor":"tag_things_changeset/2"},{"id":"thing_tags_changeset/2","deprecated":false,"title":"thing_tags_changeset(thing, tags)","anchor":"thing_tags_changeset/2"},{"id":"thing_tags_insert/2","deprecated":false,"title":"thing_tags_insert(thing, tags)","anchor":"thing_tags_insert/2"}],"key":"functions"}],"nested_title":".Tag","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Autocomplete","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Autocomplete","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"api_tag_lookup/3","deprecated":false,"title":"api_tag_lookup(tag_search, prefix, consumer)","anchor":"api_tag_lookup/3"},{"id":"api_tag_lookup_public/4","deprecated":false,"title":"api_tag_lookup_public(tag_search, prefix, consumer, index_type)","anchor":"api_tag_lookup_public/4"},{"id":"filter_results/1","deprecated":false,"title":"filter_results(res)","anchor":"filter_results/1"},{"id":"find_all_tags/1","deprecated":false,"title":"find_all_tags(content)","anchor":"find_all_tags/1"},{"id":"maybe_find_tags/2","deprecated":false,"title":"maybe_find_tags(tag_search, index_type)","anchor":"maybe_find_tags/2"},{"id":"maybe_search/4","deprecated":false,"title":"maybe_search(tag_search, facets \\\\ nil, prefix \\\\ nil, consumer \\\\ nil)","anchor":"maybe_search/4"},{"id":"prefix_index/1","deprecated":false,"title":"prefix_index(prefix)","anchor":"prefix_index/1"},{"id":"search_or_lookup/3","deprecated":false,"title":"search_or_lookup(tag_search, index, facets \\\\ nil)","anchor":"search_or_lookup/3"},{"id":"search_prefix/2","deprecated":false,"title":"search_prefix(tag_search, prefix)","anchor":"search_prefix/2"},{"id":"search_type/2","deprecated":false,"title":"search_type(tag_search, type)","anchor":"search_type/2"},{"id":"tag_add_field/4","deprecated":false,"title":"tag_add_field(hit, consumer, prefix, username)","anchor":"tag_add_field/4"},{"id":"tag_hit_prepare/4","deprecated":false,"title":"tag_hit_prepare(hit, tag_search, prefix, consumer)","anchor":"tag_hit_prepare/4"},{"id":"tag_lookup_public/4","deprecated":false,"title":"tag_lookup_public(tag_search, index_type, prefix \\\\ nil, consumer \\\\ nil)","anchor":"tag_lookup_public/4"},{"id":"tag_search/2","deprecated":false,"title":"tag_search(tag_search, tag_prefix)","anchor":"tag_search/2"},{"id":"tag_search_from_tags/1","deprecated":false,"title":"tag_search_from_tags(text)","anchor":"tag_search_from_tags/1"},{"id":"tag_search_from_text/2","deprecated":false,"title":"tag_search_from_text(text, prefix)","anchor":"tag_search_from_text/2"},{"id":"tags_split/1","deprecated":false,"title":"tags_split(text)","anchor":"tags_split/1"},{"id":"try_all_prefixes/1","deprecated":false,"title":"try_all_prefixes(content)","anchor":"try_all_prefixes/1"},{"id":"try_prefixes/1","deprecated":false,"title":"try_prefixes(content)","anchor":"try_prefixes/1"},{"id":"try_tag_search/1","deprecated":false,"title":"try_tag_search(content)","anchor":"try_tag_search/1"},{"id":"try_tag_search/2","deprecated":false,"title":"try_tag_search(tag_prefix, words)","anchor":"try_tag_search/2"}],"key":"functions"}],"nested_title":".Tag.Autocomplete","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Hashtag","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Hashtag","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(hashtag \\\\ %Hashtag{}, params)","anchor":"changeset/2"},{"id":"get_or_create_by_name/1","deprecated":false,"title":"get_or_create_by_name(name)","anchor":"get_or_create_by_name/1"},{"id":"normalize_name/1","deprecated":false,"title":"normalize_name(name)","anchor":"normalize_name/1"}],"key":"functions"}],"nested_title":".Tag.Hashtag","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Queries","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(q, filter_or_filters)","anchor":"filter/2"},{"id":"join_to/3","deprecated":false,"title":"join_to(q, table_or_tables, jq \\\\ :left)","anchor":"join_to/3"},{"id":"list_trending/3","deprecated":false,"title":"list_trending(since_date, exclude_table_ids \\\\ [], limit \\\\ 10)","anchor":"list_trending/3"},{"id":"queries/4","deprecated":false,"title":"queries(query, base_filters, data_filters, count_filters)","anchor":"queries/4"},{"id":"query/1","deprecated":false,"title":"query(pointable)","anchor":"query/1"},{"id":"query/2","deprecated":false,"title":"query(q, filters)","anchor":"query/2"}],"key":"functions"}],"nested_title":".Tag.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Simulate","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Simulate","sections":[],"nested_title":".Tag.Simulate","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Tagged","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Tagged","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all/0","deprecated":false,"title":"all()","anchor":"all/0"},{"id":"changeset/2","deprecated":false,"title":"changeset(struct, params \\\\ %{})","anchor":"changeset/2"},{"id":"latest/1","deprecated":false,"title":"latest(thing_id)","anchor":"latest/1"},{"id":"q_with_tag/1","deprecated":false,"title":"q_with_tag(tag_id)","anchor":"q_with_tag/1"},{"id":"q_with_thing/1","deprecated":false,"title":"q_with_thing(thing_id)","anchor":"q_with_thing/1"},{"id":"q_with_type/1","deprecated":false,"title":"q_with_type(types)","anchor":"q_with_type/1"},{"id":"with_tag/1","deprecated":false,"title":"with_tag(tag_id)","anchor":"with_tag/1"},{"id":"with_thing/1","deprecated":false,"title":"with_thing(thing_id)","anchor":"with_thing/1"},{"id":"with_type/1","deprecated":false,"title":"with_type(types)","anchor":"with_type/1"}],"key":"functions"}],"nested_title":".Tag.Tagged","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Tags","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Tags","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"find/2","deprecated":false,"title":"find(id, types \\\\ nil)","anchor":"find/2"},{"id":"get/2","deprecated":false,"title":"get(id, opts \\\\ [])","anchor":"get/2"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(object)","anchor":"indexing_object_format/1"},{"id":"indexing_object_format_name/1","deprecated":false,"title":"indexing_object_format_name(object)","anchor":"indexing_object_format_name/1"},{"id":"list_trending/2","deprecated":false,"title":"list_trending(in_last_x_days \\\\ 30, limit \\\\ 10)","anchor":"list_trending/2"},{"id":"list_trending_reset/2","deprecated":false,"title":"list_trending_reset(in_last_x_days \\\\ 30, limit \\\\ 10)","anchor":"list_trending_reset/2"},{"id":"many/2","deprecated":false,"title":"many(filters \\\\ [], opts \\\\ [])","anchor":"many/2"},{"id":"maybe_find_tag/3","deprecated":false,"title":"maybe_find_tag(current_user, id_or_username_or_url, types \\\\ nil)","anchor":"maybe_find_tag/3"},{"id":"maybe_find_tags/3","deprecated":false,"title":"maybe_find_tags(current_user, id_or_username_or_url, types \\\\ nil)","anchor":"maybe_find_tags/3"},{"id":"maybe_lookup_tag/2","deprecated":false,"title":"maybe_lookup_tag(id_or_username_or_url, prefix \\\\ \"@\")","anchor":"maybe_lookup_tag/2"},{"id":"maybe_tag/4","deprecated":false,"title":"maybe_tag(user, thing, tags \\\\ nil, boost_category_mentions? \\\\ true)","anchor":"maybe_tag/4"},{"id":"maybe_taxonomy_tag/2","deprecated":false,"title":"maybe_taxonomy_tag(user, id)","anchor":"maybe_taxonomy_tag/2"},{"id":"one/2","deprecated":false,"title":"one(filters, opts \\\\ [])","anchor":"one/2"},{"id":"tag_ids/1","deprecated":false,"title":"tag_ids(tags)","anchor":"tag_ids/1"},{"id":"tag_something/4","deprecated":false,"title":"tag_something(user, thing, tags, boost_category_mentions? \\\\ true)","anchor":"tag_something/4"}],"key":"functions"}],"nested_title":".Tag.Tags","nested_context":"Bonfire"},{"id":"Bonfire.Tag.TextContent.Formatter","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.TextContent.Formatter","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"escape_mention_handler/4","deprecated":false,"title":"escape_mention_handler(mention, buffer, _, _)","anchor":"escape_mention_handler/4"},{"id":"linkify/2","deprecated":false,"title":"linkify(text, options \\\\ [])","anchor":"linkify/2"},{"id":"nothing_handler/3","deprecated":false,"title":"nothing_handler(text, opts, acc)","anchor":"nothing_handler/3"},{"id":"tag_handler/4","deprecated":false,"title":"tag_handler(tag_text, buffer, opts, acc)","anchor":"tag_handler/4"},{"id":"url_handler/3","deprecated":false,"title":"url_handler(url, opts, acc)","anchor":"url_handler/3"}],"key":"functions"}],"nested_title":".Tag.TextContent.Formatter","nested_context":"Bonfire"},{"id":"Bonfire.Tag.TextContent.Process","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.TextContent.Process","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"html_escape/2","deprecated":false,"title":"html_escape(text, type)","anchor":"html_escape/2"},{"id":"process/3","deprecated":false,"title":"process(user \\\\ nil, text, content_type \\\\ nil)","anchor":"process/3"}],"key":"functions"}],"nested_title":".Tag.TextContent.Process","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Web.Routes","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Web.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".Tag.Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Tags.Acts.AutoBoost","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tags.Acts.AutoBoost","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Tags.Acts.AutoBoost","nested_context":"Bonfire"},{"id":"Bonfire.Tags.Acts.Tag","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tags.Acts.Tag","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Tags.Acts.Tag","nested_context":"Bonfire"},{"id":"Bonfire.Telemetry.Storage","deprecated":false,"group":"Feature extensions","title":"Bonfire.Telemetry.Storage","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"handle_event/4","deprecated":false,"title":"handle_event(event_name, data, metadata, metric)","anchor":"handle_event/4"},{"id":"metrics_history/1","deprecated":false,"title":"metrics_history(metric)","anchor":"metrics_history/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(args)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Telemetry.Storage","nested_context":"Bonfire"},{"id":"ActivityPub","deprecated":false,"group":"Federation","title":"ActivityPub","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"accept/1","deprecated":false,"title":"accept(params)","anchor":"accept/1"},{"id":"accept_activity/1","deprecated":false,"title":"accept_activity(params)","anchor":"accept_activity/1"},{"id":"announce/1","deprecated":false,"title":"announce(params)","anchor":"announce/1"},{"id":"block/1","deprecated":false,"title":"block(params)","anchor":"block/1"},{"id":"create/1","deprecated":false,"title":"create(params)","anchor":"create/1"},{"id":"delete/3","deprecated":false,"title":"delete(object, local \\\\ true, delete_actor \\\\ nil)","anchor":"delete/3"},{"id":"flag/1","deprecated":false,"title":"flag(params)","anchor":"flag/1"},{"id":"follow/1","deprecated":false,"title":"follow(params)","anchor":"follow/1"},{"id":"like/1","deprecated":false,"title":"like(params)","anchor":"like/1"},{"id":"move/4","deprecated":false,"title":"move(origin, target, local \\\\ true, not_in_also_known_as \\\\ false)","anchor":"move/4"},{"id":"reject/1","deprecated":false,"title":"reject(params)","anchor":"reject/1"},{"id":"unannounce/1","deprecated":false,"title":"unannounce(params)","anchor":"unannounce/1"},{"id":"unblock/1","deprecated":false,"title":"unblock(params)","anchor":"unblock/1"},{"id":"unfollow/1","deprecated":false,"title":"unfollow(params)","anchor":"unfollow/1"},{"id":"unlike/1","deprecated":false,"title":"unlike(params)","anchor":"unlike/1"},{"id":"update/1","deprecated":false,"title":"update(params)","anchor":"update/1"}],"key":"functions"}]},{"id":"ActivityPub.Actor","deprecated":false,"group":"Federation","title":"ActivityPub.Actor","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"actor?/1","deprecated":false,"title":"actor?(arg1)","anchor":"actor?/1"},{"id":"actor_url/1","deprecated":false,"title":"actor_url(username)","anchor":"actor_url/1"},{"id":"check_actor_is_active/1","deprecated":false,"title":"check_actor_is_active(actor)","anchor":"check_actor_is_active/1"},{"id":"deactivate/1","deprecated":false,"title":"deactivate(actor)","anchor":"deactivate/1"},{"id":"delete/1","deprecated":false,"title":"delete(actor)","anchor":"delete/1"},{"id":"fetch_by_username/2","deprecated":false,"title":"fetch_by_username(username, opts \\\\ [])","anchor":"fetch_by_username/2"},{"id":"format_remote_actor/1","deprecated":false,"title":"format_remote_actor(object)","anchor":"format_remote_actor/1"},{"id":"format_username/1","deprecated":false,"title":"format_username(ap_id)","anchor":"format_username/1"},{"id":"format_username/2","deprecated":false,"title":"format_username(ap_id, nick)","anchor":"format_username/2"},{"id":"get_cached/1","deprecated":false,"title":"get_cached(id)","anchor":"get_cached/1"},{"id":"get_cached!/1","deprecated":false,"title":"get_cached!(opts)","anchor":"get_cached!/1"},{"id":"get_cached_or_fetch/1","deprecated":false,"title":"get_cached_or_fetch(username_or_uri)","anchor":"get_cached_or_fetch/1"},{"id":"get_external_followers/1","deprecated":false,"title":"get_external_followers(actor)","anchor":"get_external_followers/1"},{"id":"get_followers/1","deprecated":false,"title":"get_followers(actor)","anchor":"get_followers/1"},{"id":"get_followings/1","deprecated":false,"title":"get_followings(actor)","anchor":"get_followings/1"},{"id":"invalidate_cache/1","deprecated":false,"title":"invalidate_cache(actor)","anchor":"invalidate_cache/1"},{"id":"maybe_create_actor_from_object/1","deprecated":false,"title":"maybe_create_actor_from_object(actor)","anchor":"maybe_create_actor_from_object/1"},{"id":"reactivate/1","deprecated":false,"title":"reactivate(actor)","anchor":"reactivate/1"},{"id":"save_actor_tombstone/2","deprecated":false,"title":"save_actor_tombstone(actor, tombstone)","anchor":"save_actor_tombstone/2"},{"id":"set_cache/1","deprecated":false,"title":"set_cache(actor)","anchor":"set_cache/1"},{"id":"swap_or_create_actor_tombstone/1","deprecated":false,"title":"swap_or_create_actor_tombstone(actor)","anchor":"swap_or_create_actor_tombstone/1"},{"id":"update_actor/1","deprecated":false,"title":"update_actor(actor_id)","anchor":"update_actor/1"},{"id":"update_actor/2","deprecated":false,"title":"update_actor(actor_id, data)","anchor":"update_actor/2"}],"key":"functions"}],"nested_title":".Actor","nested_context":"ActivityPub"},{"id":"ActivityPub.Config","deprecated":false,"group":"Federation","title":"ActivityPub.Config","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actors_and_collections/0","deprecated":false,"title":"actors_and_collections()","anchor":"actors_and_collections/0"},{"id":"collection_types/0","deprecated":false,"title":"collection_types()","anchor":"collection_types/0"},{"id":"delete/1","deprecated":false,"title":"delete(key)","anchor":"delete/1"},{"id":"env/0","deprecated":false,"title":"env()","anchor":"env/0"},{"id":"federating?/0","deprecated":false,"title":"federating?()","anchor":"federating?/0"},{"id":"get/1","deprecated":false,"title":"get(key)","anchor":"get/1"},{"id":"get/2","deprecated":false,"title":"get(key, default)","anchor":"get/2"},{"id":"get!/1","deprecated":false,"title":"get!(key)","anchor":"get!/1"},{"id":"is_in/2","deprecated":false,"title":"is_in(type, fun)","anchor":"is_in/2"},{"id":"public_uri/0","deprecated":false,"title":"public_uri()","anchor":"public_uri/0"},{"id":"public_uris/0","deprecated":false,"title":"public_uris()","anchor":"public_uris/0"},{"id":"put/2","deprecated":false,"title":"put(key, value)","anchor":"put/2"},{"id":"supported_activity_types/0","deprecated":false,"title":"supported_activity_types()","anchor":"supported_activity_types/0"},{"id":"supported_actor_types/0","deprecated":false,"title":"supported_actor_types()","anchor":"supported_actor_types/0"}],"key":"functions"}],"nested_title":".Config","nested_context":"ActivityPub"},{"id":"ActivityPub.Config.Error","deprecated":false,"group":"Federation","title":"ActivityPub.Config.Error","sections":[],"nested_title":".Config.Error","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator","deprecated":false,"group":"Federation","title":"ActivityPub.Federator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enqueue_incoming_ap_doc/1","deprecated":false,"title":"enqueue_incoming_ap_doc(params)","anchor":"enqueue_incoming_ap_doc/1"},{"id":"perform/2","deprecated":false,"title":"perform(type, activity)","anchor":"perform/2"},{"id":"perform/3","deprecated":false,"title":"perform(atom, module, params)","anchor":"perform/3"},{"id":"publish/1","deprecated":false,"title":"publish(activity)","anchor":"publish/1"}],"key":"functions"}],"nested_title":".Federator","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.APPublisher","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.APPublisher","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"determine_inbox/4","deprecated":false,"title":"determine_inbox(user, is_public, type, num_recipients)","anchor":"determine_inbox/4"},{"id":"gather_webfinger_links/1","deprecated":false,"title":"gather_webfinger_links(actor)","anchor":"gather_webfinger_links/1"},{"id":"is_representable?/1","deprecated":false,"title":"is_representable?(activity)","anchor":"is_representable?/1"},{"id":"maybe_federate_to_search_index/2","deprecated":false,"title":"maybe_federate_to_search_index(recipients, activity)","anchor":"maybe_federate_to_search_index/2"},{"id":"publish/2","deprecated":false,"title":"publish(actor, activity)","anchor":"publish/2"},{"id":"publish_one/1","deprecated":false,"title":"publish_one(params)","anchor":"publish_one/1"}],"key":"functions"}],"nested_title":".Federator.APPublisher","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Adapter","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Adapter","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"c:base_url/0"},{"id":"external_followers_for_activity/2","deprecated":false,"title":"external_followers_for_activity(t, t)","anchor":"c:external_followers_for_activity/2"},{"id":"get_actor_by_ap_id/1","deprecated":false,"title":"get_actor_by_ap_id(t)","anchor":"c:get_actor_by_ap_id/1"},{"id":"get_actor_by_id/1","deprecated":false,"title":"get_actor_by_id(t)","anchor":"c:get_actor_by_id/1"},{"id":"get_actor_by_username/1","deprecated":false,"title":"get_actor_by_username(t)","anchor":"c:get_actor_by_username/1"},{"id":"get_follower_local_ids/1","deprecated":false,"title":"get_follower_local_ids(t)","anchor":"c:get_follower_local_ids/1"},{"id":"get_following_local_ids/1","deprecated":false,"title":"get_following_local_ids(t)","anchor":"c:get_following_local_ids/1"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"c:get_locale/0"},{"id":"get_or_create_service_actor/0","deprecated":false,"title":"get_or_create_service_actor()","anchor":"c:get_or_create_service_actor/0"},{"id":"get_redirect_url/1","deprecated":false,"title":"get_redirect_url(arg1)","anchor":"c:get_redirect_url/1"},{"id":"handle_activity/1","deprecated":false,"title":"handle_activity(t)","anchor":"c:handle_activity/1"},{"id":"maybe_create_remote_actor/1","deprecated":false,"title":"maybe_create_remote_actor(t)","anchor":"c:maybe_create_remote_actor/1"},{"id":"maybe_publish_object/2","deprecated":false,"title":"maybe_publish_object(t, t)","anchor":"c:maybe_publish_object/2"},{"id":"update_local_actor/2","deprecated":false,"title":"update_local_actor(t, t)","anchor":"c:update_local_actor/2"},{"id":"update_remote_actor/1","deprecated":false,"title":"update_remote_actor(t)","anchor":"c:update_remote_actor/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"adapter/0","deprecated":false,"title":"adapter()","anchor":"adapter/0"},{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"base_url/0"},{"id":"call_or/3","deprecated":false,"title":"call_or(fun, args \\\\ [], fallback \\\\ nil)","anchor":"call_or/3"},{"id":"external_followers_for_activity/2","deprecated":false,"title":"external_followers_for_activity(actor, activity)","anchor":"external_followers_for_activity/2"},{"id":"federate_actor?/3","deprecated":false,"title":"federate_actor?(actor, direction \\\\ nil, by_actor \\\\ nil)","anchor":"federate_actor?/3"},{"id":"get_actor_by_ap_id/1","deprecated":false,"title":"get_actor_by_ap_id(id)","anchor":"get_actor_by_ap_id/1"},{"id":"get_actor_by_id/1","deprecated":false,"title":"get_actor_by_id(id)","anchor":"get_actor_by_id/1"},{"id":"get_actor_by_username/1","deprecated":false,"title":"get_actor_by_username(username)","anchor":"get_actor_by_username/1"},{"id":"get_follower_local_ids/1","deprecated":false,"title":"get_follower_local_ids(actor)","anchor":"get_follower_local_ids/1"},{"id":"get_following_local_ids/1","deprecated":false,"title":"get_following_local_ids(actor)","anchor":"get_following_local_ids/1"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"get_locale/0"},{"id":"get_or_create_service_actor/0","deprecated":false,"title":"get_or_create_service_actor()","anchor":"get_or_create_service_actor/0"},{"id":"get_redirect_url/1","deprecated":false,"title":"get_redirect_url(id_or_username_or_object)","anchor":"get_redirect_url/1"},{"id":"handle_activity/1","deprecated":false,"title":"handle_activity(activity)","anchor":"handle_activity/1"},{"id":"maybe_create_remote_actor/1","deprecated":false,"title":"maybe_create_remote_actor(actor)","anchor":"maybe_create_remote_actor/1"},{"id":"maybe_handle_activity/1","deprecated":false,"title":"maybe_handle_activity(activity)","anchor":"maybe_handle_activity/1"},{"id":"maybe_publish_object/2","deprecated":false,"title":"maybe_publish_object(object, manually_fetching? \\\\ false)","anchor":"maybe_publish_object/2"},{"id":"update_local_actor/2","deprecated":false,"title":"update_local_actor(actor, params)","anchor":"update_local_actor/2"},{"id":"update_remote_actor/1","deprecated":false,"title":"update_remote_actor(actor)","anchor":"update_remote_actor/1"},{"id":"update_remote_actor/2","deprecated":false,"title":"update_remote_actor(actor, data)","anchor":"update_remote_actor/2"}],"key":"functions"}],"nested_title":".Federator.Adapter","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Fetcher","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Fetcher","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"allowed_recursion?/2","deprecated":false,"title":"allowed_recursion?(distance, max_recursion \\\\ nil)","anchor":"allowed_recursion?/2"},{"id":"enqueue_fetch/2","deprecated":false,"title":"enqueue_fetch(id, worker_attrs \\\\ %{})","anchor":"enqueue_fetch/2"},{"id":"fetch_collection/2","deprecated":false,"title":"fetch_collection(ap_id, opts \\\\ [])","anchor":"fetch_collection/2"},{"id":"fetch_fresh_object_from_id/2","deprecated":false,"title":"fetch_fresh_object_from_id(id, opts \\\\ [])","anchor":"fetch_fresh_object_from_id/2"},{"id":"fetch_object_from_id/2","deprecated":false,"title":"fetch_object_from_id(id, opts \\\\ [])","anchor":"fetch_object_from_id/2"},{"id":"fetch_objects_from_id/2","deprecated":false,"title":"fetch_objects_from_id(ids, opts \\\\ [])","anchor":"fetch_objects_from_id/2"},{"id":"fetch_outbox/2","deprecated":false,"title":"fetch_outbox(actor, opts \\\\ [fetch_collection: :async])","anchor":"fetch_outbox/2"},{"id":"fetch_remote_object_from_id/2","deprecated":false,"title":"fetch_remote_object_from_id(id, options \\\\ [])","anchor":"fetch_remote_object_from_id/2"},{"id":"fetch_replies/2","deprecated":false,"title":"fetch_replies(actor, opts \\\\ [fetch_collection: :async])","anchor":"fetch_replies/2"},{"id":"get_cached_object_or_fetch_ap_id/2","deprecated":false,"title":"get_cached_object_or_fetch_ap_id(id, opts \\\\ [])","anchor":"get_cached_object_or_fetch_ap_id/2"},{"id":"get_cached_object_or_fetch_pointer_id/2","deprecated":false,"title":"get_cached_object_or_fetch_pointer_id(pointer, opts \\\\ [])","anchor":"get_cached_object_or_fetch_pointer_id/2"},{"id":"maybe_fetch/2","deprecated":false,"title":"maybe_fetch(entries, opts \\\\ [])","anchor":"maybe_fetch/2"}],"key":"functions"}],"nested_title":".Federator.Fetcher","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"delete/4","deprecated":false,"title":"delete(url, body \\\\ \"\", headers \\\\ [], options \\\\ [])","anchor":"delete/4"},{"id":"get/3","deprecated":false,"title":"get(url, headers \\\\ [], options \\\\ [])","anchor":"get/3"},{"id":"http_request/5","deprecated":false,"title":"http_request(method, url, body \\\\ \"\", headers \\\\ [], options \\\\ [])","anchor":"http_request/5"},{"id":"post/4","deprecated":false,"title":"post(url, body, headers \\\\ [], options \\\\ [])","anchor":"post/4"},{"id":"put/4","deprecated":false,"title":"put(url, body, headers \\\\ [], options \\\\ [])","anchor":"put/4"}],"key":"functions"}],"nested_title":".Federator.HTTP","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.Connection","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.Connection","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"adapter_options/2","deprecated":false,"title":"adapter_options(adapter \\\\ Tesla.Adapter.Hackney, opts)","anchor":"adapter_options/2"},{"id":"new/1","deprecated":false,"title":"new(opts \\\\ [])","anchor":"new/1"}],"key":"functions"}],"nested_title":".Federator.HTTP.Connection","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.RateLimit","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.RateLimit","sections":[],"nested_title":".Federator.HTTP.RateLimit","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.RequestBuilder","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.RequestBuilder","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_param/4","deprecated":false,"title":"add_param(request, atom1, atom2, values)","anchor":"add_param/4"},{"id":"headers/2","deprecated":false,"title":"headers(request, header_list)","anchor":"headers/2"},{"id":"method/2","deprecated":false,"title":"method(request, m)","anchor":"method/2"},{"id":"opts/2","deprecated":false,"title":"opts(request, options)","anchor":"opts/2"},{"id":"url/2","deprecated":false,"title":"url(request, u)","anchor":"url/2"}],"key":"functions"}],"nested_title":".Federator.HTTP.RequestBuilder","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.RetryAfter","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.RetryAfter","sections":[],"nested_title":".Federator.HTTP.RetryAfter","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.Tesla","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.Tesla","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"option/0","deprecated":false,"title":"option()","anchor":"t:option/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"delete/3","deprecated":false,"title":"delete(client, url, opts)","anchor":"delete/3"},{"id":"delete!/3","deprecated":false,"title":"delete!(client, url, opts)","anchor":"delete!/3"},{"id":"get/3","deprecated":false,"title":"get(client, url, opts)","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(client, url, opts)","anchor":"get!/3"},{"id":"head/3","deprecated":false,"title":"head(client, url, opts)","anchor":"head/3"},{"id":"head!/3","deprecated":false,"title":"head!(client, url, opts)","anchor":"head!/3"},{"id":"options/3","deprecated":false,"title":"options(client, url, opts)","anchor":"options/3"},{"id":"options!/3","deprecated":false,"title":"options!(client, url, opts)","anchor":"options!/3"},{"id":"patch/4","deprecated":false,"title":"patch(client, url, body, opts)","anchor":"patch/4"},{"id":"patch!/4","deprecated":false,"title":"patch!(client, url, body, opts)","anchor":"patch!/4"},{"id":"post/4","deprecated":false,"title":"post(client, url, body, opts)","anchor":"post/4"},{"id":"post!/4","deprecated":false,"title":"post!(client, url, body, opts)","anchor":"post!/4"},{"id":"put/4","deprecated":false,"title":"put(client, url, body, opts)","anchor":"put/4"},{"id":"put!/4","deprecated":false,"title":"put!(client, url, body, opts)","anchor":"put!/4"},{"id":"request/2","deprecated":false,"title":"request(client \\\\ %Tesla.Client{}, options)","anchor":"request/2"},{"id":"request!/2","deprecated":false,"title":"request!(client \\\\ %Tesla.Client{}, options)","anchor":"request!/2"},{"id":"trace/3","deprecated":false,"title":"trace(client, url, opts)","anchor":"trace/3"},{"id":"trace!/3","deprecated":false,"title":"trace!(client, url, opts)","anchor":"trace!/3"}],"key":"functions"}],"nested_title":".Federator.HTTP.Tesla","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Publisher","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Publisher","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"gather_webfinger_links/1","deprecated":false,"title":"gather_webfinger_links(t)","anchor":"c:gather_webfinger_links/1"},{"id":"is_representable?/1","deprecated":false,"title":"is_representable?(t)","anchor":"c:is_representable?/1"},{"id":"publish/2","deprecated":false,"title":"publish(t, t)","anchor":"c:publish/2"},{"id":"publish_one/1","deprecated":false,"title":"publish_one(t)","anchor":"c:publish_one/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"enqueue_one/2","deprecated":false,"title":"enqueue_one(module, params)","anchor":"enqueue_one/2"},{"id":"gather_webfinger_links/1","deprecated":false,"title":"gather_webfinger_links(user)","anchor":"gather_webfinger_links/1"},{"id":"publish/2","deprecated":false,"title":"publish(user, activity)","anchor":"publish/2"}],"key":"functions"}],"nested_title":".Federator.Publisher","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Transformer","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Transformer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_emoji_tags/1","deprecated":false,"title":"add_emoji_tags(object)","anchor":"add_emoji_tags/1"},{"id":"determine_explicit_mentions/1","deprecated":false,"title":"determine_explicit_mentions(object)","anchor":"determine_explicit_mentions/1"},{"id":"fix_actor/1","deprecated":false,"title":"fix_actor(data)","anchor":"fix_actor/1"},{"id":"fix_addressing/1","deprecated":false,"title":"fix_addressing(object)","anchor":"fix_addressing/1"},{"id":"fix_addressing_list/2","deprecated":false,"title":"fix_addressing_list(map, field)","anchor":"fix_addressing_list/2"},{"id":"fix_attachments/1","deprecated":false,"title":"fix_attachments(object)","anchor":"fix_attachments/1"},{"id":"fix_content_map/1","deprecated":false,"title":"fix_content_map(object)","anchor":"fix_content_map/1"},{"id":"fix_context/1","deprecated":false,"title":"fix_context(object)","anchor":"fix_context/1"},{"id":"fix_emoji/1","deprecated":false,"title":"fix_emoji(object)","anchor":"fix_emoji/1"},{"id":"fix_explicit_addressing/2","deprecated":false,"title":"fix_explicit_addressing(object, follower_collection)","anchor":"fix_explicit_addressing/2"},{"id":"fix_in_reply_to/2","deprecated":false,"title":"fix_in_reply_to(object, options \\\\ [])","anchor":"fix_in_reply_to/2"},{"id":"fix_object/2","deprecated":false,"title":"fix_object(object, options \\\\ [])","anchor":"fix_object/2"},{"id":"fix_quote_url/2","deprecated":false,"title":"fix_quote_url(object, options \\\\ [])","anchor":"fix_quote_url/2"},{"id":"fix_replies/2","deprecated":false,"title":"fix_replies(data, options)","anchor":"fix_replies/2"},{"id":"fix_summary/1","deprecated":false,"title":"fix_summary(object)","anchor":"fix_summary/1"},{"id":"fix_tag/1","deprecated":false,"title":"fix_tag(object)","anchor":"fix_tag/1"},{"id":"fix_url/1","deprecated":false,"title":"fix_url(object)","anchor":"fix_url/1"},{"id":"format_input/3","deprecated":false,"title":"format_input(text, binary, options \\\\ [])","anchor":"format_input/3"},{"id":"handle_incoming/1","deprecated":false,"title":"handle_incoming(data)","anchor":"handle_incoming/1"},{"id":"maybe_handle_other_activity/1","deprecated":false,"title":"maybe_handle_other_activity(data)","anchor":"maybe_handle_other_activity/1"},{"id":"maybe_handle_other_object/1","deprecated":false,"title":"maybe_handle_other_object(data)","anchor":"maybe_handle_other_object/1"},{"id":"prepare_outgoing/1","deprecated":false,"title":"prepare_outgoing(data)","anchor":"prepare_outgoing/1"},{"id":"preserve_privacy_of_outgoing/2","deprecated":false,"title":"preserve_privacy_of_outgoing(other, target_instance_uri \\\\ nil)","anchor":"preserve_privacy_of_outgoing/2"},{"id":"replies/1","deprecated":false,"title":"replies(arg1)","anchor":"replies/1"},{"id":"set_replies/1","deprecated":false,"title":"set_replies(object)","anchor":"set_replies/1"},{"id":"take_emoji_tags/1","deprecated":false,"title":"take_emoji_tags(arg1)","anchor":"take_emoji_tags/1"}],"key":"functions"}],"nested_title":".Federator.Transformer","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.WebFinger","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.WebFinger","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_url/1","deprecated":false,"title":"base_url(account)","anchor":"base_url/1"},{"id":"finger/1","deprecated":false,"title":"finger(account)","anchor":"finger/1"},{"id":"output/1","deprecated":false,"title":"output(resource)","anchor":"output/1"},{"id":"represent_user/1","deprecated":false,"title":"represent_user(actor)","anchor":"represent_user/1"},{"id":"webfinger_from_json/1","deprecated":false,"title":"webfinger_from_json(doc)","anchor":"webfinger_from_json/1"}],"key":"functions"}],"nested_title":".Federator.WebFinger","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Worker","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Worker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"worker_args/1","deprecated":false,"title":"worker_args(queue)","anchor":"worker_args/1"}],"key":"functions"}],"nested_title":".Federator.Worker","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Workers.PublisherWorker","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Workers.PublisherWorker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enqueue/3","deprecated":false,"title":"enqueue(op, params, worker_args \\\\ [])","anchor":"enqueue/3"},{"id":"enqueueable/3","deprecated":false,"title":"enqueueable(op, params, worker_args \\\\ [])","anchor":"enqueueable/3"}],"key":"functions"}],"nested_title":".Federator.Workers.PublisherWorker","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Workers.ReceiverWorker","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Workers.ReceiverWorker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enqueue/3","deprecated":false,"title":"enqueue(op, params, worker_args \\\\ [])","anchor":"enqueue/3"},{"id":"enqueueable/3","deprecated":false,"title":"enqueueable(op, params, worker_args \\\\ [])","anchor":"enqueueable/3"}],"key":"functions"}],"nested_title":".Federator.Workers.ReceiverWorker","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Workers.RemoteFetcherWorker","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Workers.RemoteFetcherWorker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enqueue/3","deprecated":false,"title":"enqueue(op, params, worker_args \\\\ [])","anchor":"enqueue/3"},{"id":"enqueueable/3","deprecated":false,"title":"enqueueable(op, params, worker_args \\\\ [])","anchor":"enqueueable/3"}],"key":"functions"}],"nested_title":".Federator.Workers.RemoteFetcherWorker","nested_context":"ActivityPub"},{"id":"ActivityPub.Fixtures","deprecated":false,"group":"Federation","title":"ActivityPub.Fixtures","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"file/1","deprecated":false,"title":"file(path)","anchor":"file/1"},{"id":"fixtures/0","deprecated":false,"title":"fixtures()","anchor":"fixtures/0"},{"id":"fixtures_generic/0","deprecated":false,"title":"fixtures_generic()","anchor":"fixtures_generic/0"},{"id":"fixtures_get/0","deprecated":false,"title":"fixtures_get()","anchor":"fixtures_get/0"},{"id":"get/4","deprecated":false,"title":"get(url, query \\\\ [], body \\\\ [], headers \\\\ [])","anchor":"get/4"},{"id":"head/4","deprecated":false,"title":"head(url, query, body, headers)","anchor":"head/4"},{"id":"insert/1","deprecated":false,"title":"insert(url)","anchor":"insert/1"},{"id":"insert_all/0","deprecated":false,"title":"insert_all()","anchor":"insert_all/0"},{"id":"maybe_get_local/4","deprecated":false,"title":"maybe_get_local(url, query, body, headers)","anchor":"maybe_get_local/4"},{"id":"mock_global/1","deprecated":false,"title":"mock_global(fun)","anchor":"mock_global/1"},{"id":"none/4","deprecated":false,"title":"none(url, query, body, headers)","anchor":"none/4"},{"id":"post/4","deprecated":false,"title":"post(url, query \\\\ [], body \\\\ [], headers \\\\ [])","anchor":"post/4"},{"id":"request/1","deprecated":false,"title":"request(env)","anchor":"request/1"}],"key":"functions"}],"nested_title":".Fixtures","nested_context":"ActivityPub"},{"id":"ActivityPub.Instances","deprecated":false,"group":"Federation","title":"ActivityPub.Instances","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter_reachable/1","deprecated":false,"title":"filter_reachable(urls_or_hosts)","anchor":"filter_reachable/1"},{"id":"host/1","deprecated":false,"title":"host(url_or_host)","anchor":"host/1"},{"id":"reachability_datetime_threshold/0","deprecated":false,"title":"reachability_datetime_threshold()","anchor":"reachability_datetime_threshold/0"},{"id":"reachable?/1","deprecated":false,"title":"reachable?(url_or_host)","anchor":"reachable?/1"},{"id":"set_consistently_unreachable/1","deprecated":false,"title":"set_consistently_unreachable(url_or_host)","anchor":"set_consistently_unreachable/1"},{"id":"set_reachable/1","deprecated":false,"title":"set_reachable(url_or_host)","anchor":"set_reachable/1"},{"id":"set_unreachable/2","deprecated":false,"title":"set_unreachable(url_or_host, unreachable_since \\\\ nil)","anchor":"set_unreachable/2"}],"key":"functions"}],"nested_title":".Instances","nested_context":"ActivityPub"},{"id":"ActivityPub.Instances.Instance","deprecated":false,"group":"Federation","title":"ActivityPub.Instances.Instance","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(struct, params \\\\ %{})","anchor":"changeset/2"},{"id":"do_set_reachable/1","deprecated":false,"title":"do_set_reachable(host)","anchor":"do_set_reachable/1"},{"id":"filter_reachable/1","deprecated":false,"title":"filter_reachable(urls_or_hosts)","anchor":"filter_reachable/1"},{"id":"host/1","deprecated":false,"title":"host(url_or_host)","anchor":"host/1"},{"id":"reachable?/1","deprecated":false,"title":"reachable?(uri_or_host)","anchor":"reachable?/1"},{"id":"set_reachable/1","deprecated":false,"title":"set_reachable(uri_or_host)","anchor":"set_reachable/1"},{"id":"set_unreachable/2","deprecated":false,"title":"set_unreachable(uri_or_host, unreachable_since \\\\ nil)","anchor":"set_unreachable/2"}],"key":"functions"}],"nested_title":".Instances.Instance","nested_context":"ActivityPub"},{"id":"ActivityPub.MRF","deprecated":false,"group":"Federation","title":"ActivityPub.MRF","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(t, boolean)","anchor":"c:filter/2"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(object, is_local?)","anchor":"filter/2"},{"id":"filter/3","deprecated":false,"title":"filter(policies, object, is_local?)","anchor":"filter/3"},{"id":"get_policies/0","deprecated":false,"title":"get_policies()","anchor":"get_policies/0"},{"id":"subdomain_match?/2","deprecated":false,"title":"subdomain_match?(domains, host)","anchor":"subdomain_match?/2"},{"id":"subdomains_regex/1","deprecated":false,"title":"subdomains_regex(domains)","anchor":"subdomains_regex/1"}],"key":"functions"}],"nested_title":".MRF","nested_context":"ActivityPub"},{"id":"ActivityPub.MRF.SimplePolicy","deprecated":false,"group":"Federation","title":"ActivityPub.MRF.SimplePolicy","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check_reject/2","deprecated":false,"title":"check_reject(actor_info, object \\\\ nil)","anchor":"check_reject/2"}],"key":"functions"}],"nested_title":".MRF.SimplePolicy","nested_context":"ActivityPub"},{"id":"ActivityPub.Object","deprecated":false,"group":"Federation","title":"ActivityPub.Object","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"actor_from_data/1","deprecated":false,"title":"actor_from_data(actor)","anchor":"actor_from_data/1"},{"id":"actor_id_from_data/1","deprecated":false,"title":"actor_id_from_data(id)","anchor":"actor_id_from_data/1"},{"id":"changeset/1","deprecated":false,"title":"changeset(attrs)","anchor":"changeset/1"},{"id":"changeset/2","deprecated":false,"title":"changeset(object, attrs)","anchor":"changeset/2"},{"id":"common_changeset/1","deprecated":false,"title":"common_changeset(object)","anchor":"common_changeset/1"},{"id":"delete/1","deprecated":false,"title":"delete(object)","anchor":"delete/1"},{"id":"do_insert/1","deprecated":false,"title":"do_insert(attrs)","anchor":"do_insert/1"},{"id":"do_update_existing/2","deprecated":false,"title":"do_update_existing(object, attrs)","anchor":"do_update_existing/2"},{"id":"fetch_latest_block/2","deprecated":false,"title":"fetch_latest_block(map1, map2)","anchor":"fetch_latest_block/2"},{"id":"fetch_latest_follow/2","deprecated":false,"title":"fetch_latest_follow(follower_id, followed_id)","anchor":"fetch_latest_follow/2"},{"id":"get_activity_for_object_ap_id/2","deprecated":false,"title":"get_activity_for_object_ap_id(ap_id, verb \\\\ \"Create\")","anchor":"get_activity_for_object_ap_id/2"},{"id":"get_ap_id/1","deprecated":false,"title":"get_ap_id(_)","anchor":"get_ap_id/1"},{"id":"get_cached/1","deprecated":false,"title":"get_cached(id)","anchor":"get_cached/1"},{"id":"get_cached!/1","deprecated":false,"title":"get_cached!(opts)","anchor":"get_cached!/1"},{"id":"get_existing_announce/2","deprecated":false,"title":"get_existing_announce(actor, map)","anchor":"get_existing_announce/2"},{"id":"get_existing_like/2","deprecated":false,"title":"get_existing_like(actor, object_id)","anchor":"get_existing_like/2"},{"id":"get_follow_activity/2","deprecated":false,"title":"get_follow_activity(follow_object, followed)","anchor":"get_follow_activity/2"},{"id":"get_outbox_for_actor/2","deprecated":false,"title":"get_outbox_for_actor(ap_id, page \\\\ 1)","anchor":"get_outbox_for_actor/2"},{"id":"get_outbox_for_instance/0","deprecated":false,"title":"get_outbox_for_instance()","anchor":"get_outbox_for_instance/0"},{"id":"get_uncached/1","deprecated":false,"title":"get_uncached(opts)","anchor":"get_uncached/1"},{"id":"hard_delete/1","deprecated":false,"title":"hard_delete(object)","anchor":"hard_delete/1"},{"id":"hashtags/1","deprecated":false,"title":"hashtags(arg1)","anchor":"hashtags/1"},{"id":"invalidate_cache/1","deprecated":false,"title":"invalidate_cache(object)","anchor":"invalidate_cache/1"},{"id":"make_tombstone/2","deprecated":false,"title":"make_tombstone(map, deleted \\\\ DateTime.utc_now())","anchor":"make_tombstone/2"},{"id":"maybe_fetch/2","deprecated":false,"title":"maybe_fetch(ap_id, arg2)","anchor":"maybe_fetch/2"},{"id":"maybe_upsert/3","deprecated":false,"title":"maybe_upsert(arg1, existing_object, attrs)","anchor":"maybe_upsert/3"},{"id":"normalize/3","deprecated":false,"title":"normalize(object, fetch_remote? \\\\ true, pointer \\\\ nil)","anchor":"normalize/3"},{"id":"normalize_actors/1","deprecated":false,"title":"normalize_actors(params)","anchor":"normalize_actors/1"},{"id":"normalize_params/3","deprecated":false,"title":"normalize_params(params, activity_id \\\\ nil, pointer \\\\ nil)","anchor":"normalize_params/3"},{"id":"object_url/1","deprecated":false,"title":"object_url(id)","anchor":"object_url/1"},{"id":"prepare_data/4","deprecated":false,"title":"prepare_data(data, local \\\\ false, pointer \\\\ nil, associated_activity \\\\ nil)","anchor":"prepare_data/4"},{"id":"self_replies_ids/2","deprecated":false,"title":"self_replies_ids(object, limit)","anchor":"self_replies_ids/2"},{"id":"set_cache/1","deprecated":false,"title":"set_cache(object)","anchor":"set_cache/1"},{"id":"swap_object_with_tombstone/1","deprecated":false,"title":"swap_object_with_tombstone(object)","anchor":"swap_object_with_tombstone/1"},{"id":"update_and_set_cache/1","deprecated":false,"title":"update_and_set_cache(changeset)","anchor":"update_and_set_cache/1"},{"id":"update_changeset/2","deprecated":false,"title":"update_changeset(object, attrs)","anchor":"update_changeset/2"},{"id":"update_existing/2","deprecated":false,"title":"update_existing(object_id, attrs)","anchor":"update_existing/2"},{"id":"update_state/3","deprecated":false,"title":"update_state(activity, type, state)","anchor":"update_state/3"}],"key":"functions"}],"nested_title":".Object","nested_context":"ActivityPub"},{"id":"ActivityPub.Pruner","deprecated":false,"group":"Federation","title":"ActivityPub.Pruner","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"prune_all/1","deprecated":false,"title":"prune_all(cutoff_days \\\\ nil)","anchor":"prune_all/1"},{"id":"prune_deletes/1","deprecated":false,"title":"prune_deletes(cutoff_days)","anchor":"prune_deletes/1"},{"id":"prune_objects/1","deprecated":false,"title":"prune_objects(options \\\\ [prune_orphaned_activities: true, keep_threads: false, keep_non_public: false])","anchor":"prune_objects/1"},{"id":"prune_orphaned_activities/0","deprecated":false,"title":"prune_orphaned_activities()","anchor":"prune_orphaned_activities/0"},{"id":"prune_removes/1","deprecated":false,"title":"prune_removes(cutoff_days)","anchor":"prune_removes/1"},{"id":"prune_stale_follow_requests/1","deprecated":false,"title":"prune_stale_follow_requests(cutoff_days)","anchor":"prune_stale_follow_requests/1"},{"id":"prune_tombstones/1","deprecated":false,"title":"prune_tombstones(cutoff_days)","anchor":"prune_tombstones/1"},{"id":"prune_undos/1","deprecated":false,"title":"prune_undos(cutoff_days)","anchor":"prune_undos/1"},{"id":"remove_embedded_objects/0","deprecated":false,"title":"remove_embedded_objects()","anchor":"remove_embedded_objects/0"}],"key":"functions"}],"nested_title":".Pruner","nested_context":"ActivityPub"},{"id":"ActivityPub.Pruner.PruneDatabaseWorker","deprecated":false,"group":"Federation","title":"ActivityPub.Pruner.PruneDatabaseWorker","sections":[],"nested_title":".Pruner.PruneDatabaseWorker","nested_context":"ActivityPub"},{"id":"ActivityPub.Queries","deprecated":false,"group":"Federation","title":"ActivityPub.Queries","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"query/0","deprecated":false,"title":"query()","anchor":"t:query/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"activity_by_object_ap_id/2","deprecated":false,"title":"activity_by_object_ap_id(ap_id, verb \\\\ \"Create\")","anchor":"activity_by_object_ap_id/2"},{"id":"by_actor/2","deprecated":false,"title":"by_actor(query \\\\ Object, ap_id)","anchor":"by_actor/2"},{"id":"by_ap_id/2","deprecated":false,"title":"by_ap_id(query \\\\ Object, ap_id)","anchor":"by_ap_id/2"},{"id":"by_id/2","deprecated":false,"title":"by_id(query \\\\ Object, id)","anchor":"by_id/2"},{"id":"by_object_id/2","deprecated":false,"title":"by_object_id(query \\\\ Object, object_id)","anchor":"by_object_id/2"},{"id":"by_object_in_reply_to_id/3","deprecated":false,"title":"by_object_in_reply_to_id(query, in_reply_to_id, opts \\\\ [])","anchor":"by_object_in_reply_to_id/3"},{"id":"by_type/2","deprecated":false,"title":"by_type(query \\\\ Object, activity_type)","anchor":"by_type/2"},{"id":"exclude_type/2","deprecated":false,"title":"exclude_type(query \\\\ Object, type)","anchor":"exclude_type/2"},{"id":"find_by_object_ap_id/2","deprecated":false,"title":"find_by_object_ap_id(activities, object_ap_id)","anchor":"find_by_object_ap_id/2"},{"id":"last_follow/2","deprecated":false,"title":"last_follow(query, followed_id)","anchor":"last_follow/2"},{"id":"replies/2","deprecated":false,"title":"replies(object, opts \\\\ [])","anchor":"replies/2"},{"id":"self_replies/1","deprecated":false,"title":"self_replies(object)","anchor":"self_replies/1"},{"id":"with_joined_activity/3","deprecated":false,"title":"with_joined_activity(query, activity_type \\\\ \"Create\", join_type \\\\ :left)","anchor":"with_joined_activity/3"},{"id":"with_joined_object/2","deprecated":false,"title":"with_joined_object(query, join_type \\\\ :inner)","anchor":"with_joined_object/2"},{"id":"with_preloaded_object/2","deprecated":false,"title":"with_preloaded_object(query, join_type \\\\ :left)","anchor":"with_preloaded_object/2"}],"key":"functions"}],"nested_title":".Queries","nested_context":"ActivityPub"},{"id":"ActivityPub.Safety.Containment","deprecated":false,"group":"Federation","title":"ActivityPub.Safety.Containment","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"contain_child/1","deprecated":false,"title":"contain_child(arg1)","anchor":"contain_child/1"},{"id":"contain_origin/2","deprecated":false,"title":"contain_origin(id, params)","anchor":"contain_origin/2"},{"id":"contain_origin_from_id/2","deprecated":false,"title":"contain_origin_from_id(id, params)","anchor":"contain_origin_from_id/2"},{"id":"contain_uri/2","deprecated":false,"title":"contain_uri(id, data)","anchor":"contain_uri/2"},{"id":"get_object/1","deprecated":false,"title":"get_object(arg1)","anchor":"get_object/1"},{"id":"is_public?/1","deprecated":false,"title":"is_public?(data)","anchor":"is_public?/1"},{"id":"restrict_unauthenticated_access?/1","deprecated":false,"title":"restrict_unauthenticated_access?(object)","anchor":"restrict_unauthenticated_access?/1"},{"id":"restrict_unauthenticated_access?/2","deprecated":false,"title":"restrict_unauthenticated_access?(resource, kind)","anchor":"restrict_unauthenticated_access?/2"},{"id":"visible_for_user?/2","deprecated":false,"title":"visible_for_user?(object, actor)","anchor":"visible_for_user?/2"}],"key":"functions"}],"nested_title":".Safety.Containment","nested_context":"ActivityPub"},{"id":"ActivityPub.Safety.Keys","deprecated":false,"group":"Federation","title":"ActivityPub.Safety.Keys","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_public_key/2","deprecated":false,"title":"add_public_key(actor, generate_if_missing \\\\ true)","anchor":"add_public_key/2"},{"id":"cast_uri/1","deprecated":false,"title":"cast_uri(object)","anchor":"cast_uri/1"},{"id":"ensure_keys_present/1","deprecated":false,"title":"ensure_keys_present(actor)","anchor":"ensure_keys_present/1"},{"id":"generate_rsa_pem/0","deprecated":false,"title":"generate_rsa_pem()","anchor":"generate_rsa_pem/0"},{"id":"get_public_key_for_ap_id/1","deprecated":false,"title":"get_public_key_for_ap_id(ap_id)","anchor":"get_public_key_for_ap_id/1"},{"id":"http_host/1","deprecated":false,"title":"http_host(map)","anchor":"http_host/1"},{"id":"key_id_to_actor_id/1","deprecated":false,"title":"key_id_to_actor_id(key_id)","anchor":"key_id_to_actor_id/1"},{"id":"keypair_from_pem/1","deprecated":false,"title":"keypair_from_pem(pem)","anchor":"keypair_from_pem/1"},{"id":"maybe_add_fetch_signature_headers/3","deprecated":false,"title":"maybe_add_fetch_signature_headers(headers, id, date \\\\ nil)","anchor":"maybe_add_fetch_signature_headers/3"},{"id":"public_key_decode/1","deprecated":false,"title":"public_key_decode(public_key_pem)","anchor":"public_key_decode/1"},{"id":"public_key_from_data/1","deprecated":false,"title":"public_key_from_data(actor)","anchor":"public_key_from_data/1"},{"id":"sign/2","deprecated":false,"title":"sign(actor, headers)","anchor":"sign/2"}],"key":"functions"}],"nested_title":".Safety.Keys","nested_context":"ActivityPub"},{"id":"ActivityPub.Safety.Signatures","deprecated":false,"group":"Federation","title":"ActivityPub.Safety.Signatures","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fetch_public_key/1","deprecated":false,"title":"fetch_public_key(conn)","anchor":"fetch_public_key/1"},{"id":"refetch_public_key/1","deprecated":false,"title":"refetch_public_key(conn)","anchor":"refetch_public_key/1"}],"key":"functions"}],"nested_title":".Safety.Signatures","nested_context":"ActivityPub"},{"id":"ActivityPub.Utils","deprecated":false,"group":"Federation","title":"ActivityPub.Utils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"activitypub_object_headers/0","deprecated":false,"title":"activitypub_object_headers()","anchor":"activitypub_object_headers/0"},{"id":"adapter_fallback/0","deprecated":false,"title":"adapter_fallback()","anchor":"adapter_fallback/0"},{"id":"ap_base_url/0","deprecated":false,"title":"ap_base_url()","anchor":"ap_base_url/0"},{"id":"ap_id/1","deprecated":false,"title":"ap_id(map)","anchor":"ap_id/1"},{"id":"as_local_public/0","deprecated":false,"title":"as_local_public()","anchor":"as_local_public/0"},{"id":"cache_clear/0","deprecated":false,"title":"cache_clear()","anchor":"cache_clear/0"},{"id":"cachex_fetch/4","deprecated":false,"title":"cachex_fetch(cache, key, fallback, options \\\\ [])","anchor":"cachex_fetch/4"},{"id":"error_json/3","deprecated":false,"title":"error_json(conn, error, status \\\\ 500)","anchor":"error_json/3"},{"id":"format_date/1","deprecated":false,"title":"format_date(date \\\\ NaiveDateTime.utc_now(Calendar.ISO))","anchor":"format_date/1"},{"id":"generate_id/1","deprecated":false,"title":"generate_id(type)","anchor":"generate_id/1"},{"id":"generate_object_id/0","deprecated":false,"title":"generate_object_id()","anchor":"generate_object_id/0"},{"id":"get_with_cache/4","deprecated":false,"title":"get_with_cache(get_fun, cache_bucket, key, identifier)","anchor":"get_with_cache/4"},{"id":"is_ulid?/1","deprecated":false,"title":"is_ulid?(str)","anchor":"is_ulid?/1"},{"id":"is_uuid?/1","deprecated":false,"title":"is_uuid?(str)","anchor":"is_uuid?/1"},{"id":"json_with_cache/6","deprecated":false,"title":"json_with_cache(conn \\\\ nil, get_fun, cache_bucket, id, ret_fn \\\\ &return_json/4, opts \\\\ [])","anchor":"json_with_cache/6"},{"id":"label_in_message?/2","deprecated":false,"title":"label_in_message?(label, params)","anchor":"label_in_message?/2"},{"id":"make_date/0","deprecated":false,"title":"make_date()","anchor":"make_date/0"},{"id":"make_json_ld_header/1","deprecated":false,"title":"make_json_ld_header(type \\\\ :object)","anchor":"make_json_ld_header/1"},{"id":"maybe_put/3","deprecated":false,"title":"maybe_put(map, key, value)","anchor":"maybe_put/3"},{"id":"maybe_to_atom/1","deprecated":false,"title":"maybe_to_atom(str)","anchor":"maybe_to_atom/1"},{"id":"maybe_to_string/1","deprecated":false,"title":"maybe_to_string(atom)","anchor":"maybe_to_string/1"},{"id":"ok_unwrap/2","deprecated":false,"title":"ok_unwrap(val, fallback \\\\ nil)","anchor":"ok_unwrap/2"},{"id":"public?/1","deprecated":false,"title":"public?(data)","anchor":"public?/1"},{"id":"public?/2","deprecated":false,"title":"public?(activity_data, object_data)","anchor":"public?/2"},{"id":"put_if_present/4","deprecated":false,"title":"put_if_present(map, key, value, value_function \\\\ &{:ok, &1})","anchor":"put_if_present/4"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"},{"id":"request_ip/1","deprecated":false,"title":"request_ip(conn)","anchor":"request_ip/1"},{"id":"return_json/4","deprecated":false,"title":"return_json(conn, meta, json, opts \\\\ [])","anchor":"return_json/4"},{"id":"safe_put_in/3","deprecated":false,"title":"safe_put_in(data, keys, value)","anchor":"safe_put_in/3"},{"id":"service_actor/0","deprecated":false,"title":"service_actor()","anchor":"service_actor/0"},{"id":"set_repo/1","deprecated":false,"title":"set_repo(repo)","anchor":"set_repo/1"},{"id":"single_ap_id/1","deprecated":false,"title":"single_ap_id(ap_id)","anchor":"single_ap_id/1"},{"id":"single_ap_id_or_object/1","deprecated":false,"title":"single_ap_id_or_object(ap_id)","anchor":"single_ap_id_or_object/1"},{"id":"stringify_keys/2","deprecated":false,"title":"stringify_keys(map, recursive \\\\ false)","anchor":"stringify_keys/2"},{"id":"ulid/1","deprecated":false,"title":"ulid(input)","anchor":"ulid/1"}],"key":"functions"}],"nested_title":".Utils","nested_context":"ActivityPub"},{"id":"ActivityPub.Web","deprecated":false,"group":"Federation","title":"ActivityPub.Web","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"__using__/1","deprecated":false,"title":"__using__(which)","anchor":"__using__/1"},{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"base_url/0"},{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"channel/0"},{"id":"controller/0","deprecated":false,"title":"controller()","anchor":"controller/0"},{"id":"rate_limit_reached/2","deprecated":false,"title":"rate_limit_reached(conn, opts)","anchor":"rate_limit_reached/2"},{"id":"router/0","deprecated":false,"title":"router()","anchor":"router/0"},{"id":"view/0","deprecated":false,"title":"view()","anchor":"view/0"}],"key":"functions"}],"nested_title":".Web","nested_context":"ActivityPub"},{"id":"ActivityPub.Web.ActivityPubController","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ActivityPubController","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor/2","deprecated":false,"title":"actor(conn, map)","anchor":"actor/2"},{"id":"ap_route_helper/1","deprecated":false,"title":"ap_route_helper(uuid)","anchor":"ap_route_helper/1"},{"id":"followers/2","deprecated":false,"title":"followers(conn, map)","anchor":"followers/2"},{"id":"following/2","deprecated":false,"title":"following(conn, map)","anchor":"following/2"},{"id":"inbox/2","deprecated":false,"title":"inbox(conn, params)","anchor":"inbox/2"},{"id":"inbox_info/2","deprecated":false,"title":"inbox_info(conn, params)","anchor":"inbox_info/2"},{"id":"json_object_with_cache/3","deprecated":false,"title":"json_object_with_cache(conn \\\\ nil, id, opts \\\\ [])","anchor":"json_object_with_cache/3"},{"id":"noop/2","deprecated":false,"title":"noop(conn, params)","anchor":"noop/2"},{"id":"object/2","deprecated":false,"title":"object(conn, map)","anchor":"object/2"},{"id":"outbox/2","deprecated":false,"title":"outbox(conn, map)","anchor":"outbox/2"}],"key":"functions"}],"nested_title":".ActivityPubController","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.ActorView","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ActorView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor_json/1","deprecated":false,"title":"actor_json(username)","anchor":"actor_json/1"},{"id":"collection/4","deprecated":false,"title":"collection(collection, iri, page, total \\\\ nil)","anchor":"collection/4"},{"id":"render/2","deprecated":false,"title":"render(binary, map)","anchor":"render/2"}],"key":"functions"}],"nested_title":".ActorView","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Endpoint","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Endpoint","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"broadcast/3","deprecated":false,"title":"broadcast(topic, event, msg)","anchor":"broadcast/3"},{"id":"broadcast!/3","deprecated":false,"title":"broadcast!(topic, event, msg)","anchor":"broadcast!/3"},{"id":"broadcast_from/4","deprecated":false,"title":"broadcast_from(from, topic, event, msg)","anchor":"broadcast_from/4"},{"id":"broadcast_from!/4","deprecated":false,"title":"broadcast_from!(from, topic, event, msg)","anchor":"broadcast_from!/4"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/2","deprecated":false,"title":"config(key, default \\\\ nil)","anchor":"config/2"},{"id":"config_change/2","deprecated":false,"title":"config_change(changed, removed)","anchor":"config_change/2"},{"id":"host/0","deprecated":false,"title":"host()","anchor":"host/0"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"local_broadcast/3","deprecated":false,"title":"local_broadcast(topic, event, msg)","anchor":"local_broadcast/3"},{"id":"local_broadcast_from/4","deprecated":false,"title":"local_broadcast_from(from, topic, event, msg)","anchor":"local_broadcast_from/4"},{"id":"path/1","deprecated":false,"title":"path(path)","anchor":"path/1"},{"id":"script_name/0","deprecated":false,"title":"script_name()","anchor":"script_name/0"},{"id":"server_info/1","deprecated":false,"title":"server_info(scheme)","anchor":"server_info/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"static_integrity/1","deprecated":false,"title":"static_integrity(path)","anchor":"static_integrity/1"},{"id":"static_lookup/1","deprecated":false,"title":"static_lookup(path)","anchor":"static_lookup/1"},{"id":"static_path/1","deprecated":false,"title":"static_path(path)","anchor":"static_path/1"},{"id":"static_url/0","deprecated":false,"title":"static_url()","anchor":"static_url/0"},{"id":"struct_url/0","deprecated":false,"title":"struct_url()","anchor":"struct_url/0"},{"id":"subscribe/2","deprecated":false,"title":"subscribe(topic, opts \\\\ [])","anchor":"subscribe/2"},{"id":"unsubscribe/1","deprecated":false,"title":"unsubscribe(topic)","anchor":"unsubscribe/1"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"url/0"}],"key":"functions"}],"nested_title":".Endpoint","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.ErrorHelpers","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ErrorHelpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"error_tag/2","deprecated":false,"title":"error_tag(form, field)","anchor":"error_tag/2"}],"key":"functions"}],"nested_title":".ErrorHelpers","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.ErrorView","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ErrorView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"render/2","deprecated":false,"title":"render(binary, assigns)","anchor":"render/2"},{"id":"template_not_found/2","deprecated":false,"title":"template_not_found(template, assigns)","anchor":"template_not_found/2"}],"key":"functions"}],"nested_title":".ErrorView","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.LayoutView","deprecated":false,"group":"Federation","title":"ActivityPub.Web.LayoutView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"render/2","deprecated":false,"title":"render(binary, assigns)","anchor":"render/2"}],"key":"functions"}],"nested_title":".LayoutView","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.ObjectView","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ObjectView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"collection/4","deprecated":false,"title":"collection(collection, iri, page, total \\\\ nil)","anchor":"collection/4"},{"id":"render/2","deprecated":false,"title":"render(binary, params)","anchor":"render/2"}],"key":"functions"}],"nested_title":".ObjectView","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Plugs.DigestPlug","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Plugs.DigestPlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"read_body/2","deprecated":false,"title":"read_body(conn, opts)","anchor":"read_body/2"}],"key":"functions"}],"nested_title":".Plugs.DigestPlug","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, _)","anchor":"call/2"},{"id":"ignore/1","deprecated":false,"title":"ignore(conn)","anchor":"ignore/1"},{"id":"init/1","deprecated":false,"title":"init(options)","anchor":"init/1"},{"id":"maybe_reject!/2","deprecated":false,"title":"maybe_reject!(conn, arg2)","anchor":"maybe_reject!/2"},{"id":"unauthorized/1","deprecated":false,"title":"unauthorized(conn)","anchor":"unauthorized/1"}],"key":"functions"}],"nested_title":".Plugs.EnsureHTTPSignaturePlug","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Plugs.HTTPSignaturePlug","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Plugs.HTTPSignaturePlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(options)","anchor":"init/1"}],"key":"functions"}],"nested_title":".Plugs.HTTPSignaturePlug","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(options)","anchor":"init/1"}],"key":"functions"}],"nested_title":".Plugs.MappedSignatureToIdentityPlug","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.RedirectController","deprecated":false,"group":"Federation","title":"ActivityPub.Web.RedirectController","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor/2","deprecated":false,"title":"actor(conn, map)","anchor":"actor/2"},{"id":"object/2","deprecated":false,"title":"object(conn, map)","anchor":"object/2"},{"id":"remote_interaction/2","deprecated":false,"title":"remote_interaction(conn, params)","anchor":"remote_interaction/2"}],"key":"functions"}],"nested_title":".RedirectController","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Router","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Router","sections":[],"nested_title":".Router","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Telemetry","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Telemetry","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"metrics/0","deprecated":false,"title":"metrics()","anchor":"metrics/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Telemetry","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.UserSocket","deprecated":false,"group":"Federation","title":"ActivityPub.Web.UserSocket","sections":[],"nested_title":".UserSocket","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.WebFingerController","deprecated":false,"group":"Federation","title":"ActivityPub.Web.WebFingerController","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"webfinger/2","deprecated":false,"title":"webfinger(conn, map)","anchor":"webfinger/2"}],"key":"functions"}],"nested_title":".WebFingerController","nested_context":"ActivityPub.Web"},{"id":"AnimalAvatarGenerator","deprecated":false,"group":"Utilities","title":"AnimalAvatarGenerator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"avatar/2","deprecated":false,"title":"avatar(seed, opts \\\\ [])","anchor":"avatar/2"},{"id":"avatar_face/2","deprecated":false,"title":"avatar_face(seed, opts \\\\ [])","anchor":"avatar_face/2"},{"id":"brows/0","deprecated":false,"title":"brows()","anchor":"brows/0"},{"id":"clamp/3","deprecated":false,"title":"clamp(value, min, max)","anchor":"clamp/3"},{"id":"create_background/3","deprecated":false,"title":"create_background(round, color, class)","anchor":"create_background/3"},{"id":"create_blackout/1","deprecated":false,"title":"create_blackout(round)","anchor":"create_blackout/1"},{"id":"create_svg/2","deprecated":false,"title":"create_svg(size, children)","anchor":"create_svg/2"},{"id":"darken/2","deprecated":false,"title":"darken(hex, amount)","anchor":"darken/2"},{"id":"ears/0","deprecated":false,"title":"ears()","anchor":"ears/0"},{"id":"empty_shape/0","deprecated":false,"title":"empty_shape()","anchor":"empty_shape/0"},{"id":"eyes/0","deprecated":false,"title":"eyes()","anchor":"eyes/0"},{"id":"faces/0","deprecated":false,"title":"faces()","anchor":"faces/0"},{"id":"hairs/0","deprecated":false,"title":"hairs()","anchor":"hairs/0"},{"id":"muzzles/0","deprecated":false,"title":"muzzles()","anchor":"muzzles/0"},{"id":"patterns/0","deprecated":false,"title":"patterns()","anchor":"patterns/0"}],"key":"functions"}]},{"id":"Arrows","deprecated":false,"group":"Utilities","title":"Arrows","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"<|>/2","deprecated":false,"title":"l <|> r","anchor":"%3C%7C%3E/2"},{"id":"<~>/2","deprecated":false,"title":"l <~> r","anchor":"%3C~%3E/2"},{"id":"from_ok/1","deprecated":false,"title":"from_ok(x)","anchor":"from_ok/1"},{"id":"ok/1","deprecated":false,"title":"ok(x)","anchor":"ok/1"},{"id":"ok_or/2","deprecated":false,"title":"ok_or(x, err)","anchor":"ok_or/2"},{"id":"to_ok/1","deprecated":false,"title":"to_ok(x)","anchor":"to_ok/1"},{"id":"|>/2","deprecated":false,"title":"l |> r","anchor":"%7C%3E/2"},{"id":"~>/2","deprecated":false,"title":"l ~> r","anchor":"~%3E/2"}],"key":"functions"}]},{"id":"ConsoleHelpers","deprecated":false,"group":"Utilities","title":"ConsoleHelpers","sections":[]},{"id":"DaisyTheme","deprecated":false,"group":"Utilities","title":"DaisyTheme","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"adjust/5","deprecated":false,"title":"adjust(theme, name, variable, field, percent \\\\ 0.8)","anchor":"adjust/5"},{"id":"clamp/3","deprecated":false,"title":"clamp(value, min, max)","anchor":"clamp/3"},{"id":"darken/2","deprecated":false,"title":"darken(hex, amount)","anchor":"darken/2"},{"id":"darker/5","deprecated":false,"title":"darker(theme, name, variable, field, percent \\\\ 0.2)","anchor":"darker/5"},{"id":"default_theme/0","deprecated":false,"title":"default_theme()","anchor":"default_theme/0"},{"id":"generate/1","deprecated":false,"title":"generate(config \\\\ %{})","anchor":"generate/1"},{"id":"is_dark?/1","deprecated":false,"title":"is_dark?(value)","anchor":"is_dark?/1"},{"id":"keys/0","deprecated":false,"title":"keys()","anchor":"keys/0"},{"id":"lighten/2","deprecated":false,"title":"lighten(hex, amount)","anchor":"lighten/2"},{"id":"style_attr/1","deprecated":false,"title":"style_attr(config \\\\ %{})","anchor":"style_attr/1"},{"id":"theme/1","deprecated":false,"title":"theme(config)","anchor":"theme/1"}],"key":"functions"}]},{"id":"DummyAdapter","deprecated":false,"group":"Utilities","title":"DummyAdapter","sections":[]},{"id":"EctoSparkles","deprecated":false,"group":"Utilities","title":"EctoSparkles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"join_preload/2","deprecated":false,"title":"join_preload(query, associations)","anchor":"join_preload/2"},{"id":"proload/3","deprecated":false,"title":"proload(query, qual \\\\ :left, associations)","anchor":"proload/3"},{"id":"query_filter/4","deprecated":false,"title":"query_filter(module_or_query, filters, order_by_prop \\\\ :id, order_direction \\\\ :desc)","anchor":"query_filter/4"},{"id":"reusable_join/5","deprecated":false,"title":"reusable_join(query, qual \\\\ :left, bindings, expr, opts)","anchor":"reusable_join/5"}],"key":"functions"}]},{"id":"EctoSparkles.AutoMigrator","deprecated":false,"group":"Utilities","title":"EctoSparkles.AutoMigrator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(_)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"},{"id":"startup_migrations/0","deprecated":false,"title":"startup_migrations()","anchor":"startup_migrations/0"}],"key":"functions"}]},{"id":"EctoSparkles.Changesets","deprecated":false,"group":"Utilities","title":"EctoSparkles.Changesets","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"change_synced_timestamp/3","deprecated":false,"title":"change_synced_timestamp(changeset, bool_field, timestamp_field)","anchor":"change_synced_timestamp/3"},{"id":"change_synced_timestamps/5","deprecated":false,"title":"change_synced_timestamps(changeset, bool_field, on_field, off_field, default \\\\ true)","anchor":"change_synced_timestamps/5"},{"id":"validate_exactly_one/3","deprecated":false,"title":"validate_exactly_one(changeset, columns, message)","anchor":"validate_exactly_one/3"},{"id":"validate_http_url/2","deprecated":false,"title":"validate_http_url(changeset, field)","anchor":"validate_http_url/2"},{"id":"validate_not_expired/4","deprecated":false,"title":"validate_not_expired(cs, now \\\\ DateTime.utc_now(), column \\\\ :expires_at, message \\\\ \"expired\")","anchor":"validate_not_expired/4"}],"key":"functions"}]},{"id":"EctoSparkles.Changesets.Errors","deprecated":false,"group":"Utilities","title":"EctoSparkles.Changesets.Errors","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset_errors_string/2","deprecated":false,"title":"changeset_errors_string(changeset, include_schema_tree \\\\ true)","anchor":"changeset_errors_string/2"},{"id":"error/2","deprecated":false,"title":"error(changeset, list)","anchor":"error/2"}],"key":"functions"}]},{"id":"EctoSparkles.DataMigration","deprecated":false,"group":"Utilities","title":"EctoSparkles.DataMigration","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"base_query/0","deprecated":false,"title":"base_query()","anchor":"c:base_query/0"},{"id":"config/0","deprecated":false,"title":"config()","anchor":"c:config/0"},{"id":"migrate/1","deprecated":false,"title":"migrate(list)","anchor":"c:migrate/1"}],"key":"callbacks"}]},{"id":"EctoSparkles.DataMigration.Config","deprecated":false,"group":"Utilities","title":"EctoSparkles.DataMigration.Config","sections":[]},{"id":"EctoSparkles.DataMigration.Runner","deprecated":false,"group":"Utilities","title":"EctoSparkles.DataMigration.Runner","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(migration_module)","anchor":"run/1"}],"key":"functions"}]},{"id":"EctoSparkles.ErlangTermBinary","deprecated":false,"group":"Utilities","title":"EctoSparkles.ErlangTermBinary","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cast/1","deprecated":false,"title":"cast(term)","anchor":"cast/1"},{"id":"cast/2","deprecated":false,"title":"cast(atom, term)","anchor":"cast/2"},{"id":"dump/1","deprecated":false,"title":"dump(term)","anchor":"dump/1"},{"id":"embed_as/1","deprecated":false,"title":"embed_as(_)","anchor":"embed_as/1"},{"id":"equal?/2","deprecated":false,"title":"equal?(term1, term2)","anchor":"equal?/2"},{"id":"load/1","deprecated":false,"title":"load(raw_binary)","anchor":"load/1"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"type/0"}],"key":"functions"}]},{"id":"EctoSparkles.Log","deprecated":false,"group":"Utilities","title":"EctoSparkles.Log","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check_if_n_plus_1/1","deprecated":false,"title":"check_if_n_plus_1(query)","anchor":"check_if_n_plus_1/1"},{"id":"format_log/4","deprecated":false,"title":"format_log(result_key, duration_in_ms, measurements, metadata)","anchor":"format_log/4"},{"id":"format_stacktrace_sliced/3","deprecated":false,"title":"format_stacktrace_sliced(stacktrace, starts \\\\ 2, ends \\\\ 5)","anchor":"format_stacktrace_sliced/3"},{"id":"handle_event/4","deprecated":false,"title":"handle_event(_, measurements, metadata, config)","anchor":"handle_event/4"},{"id":"inline_params/3","deprecated":false,"title":"inline_params(query, params, repo_adapter \\\\ Ecto.Adapters.SQL)","anchor":"inline_params/3"},{"id":"log_query/4","deprecated":false,"title":"log_query(result_key, duration_in_ms, measurements, metadata)","anchor":"log_query/4"},{"id":"setup/1","deprecated":false,"title":"setup(repo_module)","anchor":"setup/1"}],"key":"functions"}]},{"id":"EctoSparkles.Migrator","deprecated":false,"group":"Utilities","title":"EctoSparkles.Migrator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create/0","deprecated":false,"title":"create()","anchor":"create/0"},{"id":"create/2","deprecated":false,"title":"create(repo, attempt \\\\ 0)","anchor":"create/2"},{"id":"migrate/0","deprecated":false,"title":"migrate()","anchor":"migrate/0"},{"id":"migrate/1","deprecated":false,"title":"migrate(repo)","anchor":"migrate/1"},{"id":"rollback/2","deprecated":false,"title":"rollback(repo \\\\ nil, step \\\\ 1)","anchor":"rollback/2"},{"id":"rollback_all/0","deprecated":false,"title":"rollback_all()","anchor":"rollback_all/0"},{"id":"rollback_all/1","deprecated":false,"title":"rollback_all(repo)","anchor":"rollback_all/1"},{"id":"rollback_to/1","deprecated":false,"title":"rollback_to(version)","anchor":"rollback_to/1"},{"id":"rollback_to/2","deprecated":false,"title":"rollback_to(repo, version)","anchor":"rollback_to/2"},{"id":"status/0","deprecated":false,"title":"status()","anchor":"status/0"}],"key":"functions"}]},{"id":"EctoSparkles.NPlus1Detector","deprecated":false,"group":"Utilities","title":"EctoSparkles.NPlus1Detector","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check/1","deprecated":false,"title":"check(query)","anchor":"check/1"},{"id":"do_check/2","deprecated":false,"title":"do_check(query, counter)","anchor":"do_check/2"}],"key":"functions"}]},{"id":"EctoSparkles.SanitiseStrings","deprecated":false,"group":"Utilities","title":"EctoSparkles.SanitiseStrings","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"clean_html/2","deprecated":false,"title":"clean_html(changeset, opts \\\\ [])","anchor":"clean_html/2"},{"id":"sanitise_strings/2","deprecated":false,"title":"sanitise_strings(changeset, opts \\\\ [])","anchor":"sanitise_strings/2"},{"id":"strip_all_tags/2","deprecated":false,"title":"strip_all_tags(changeset, opts \\\\ [])","anchor":"strip_all_tags/2"}],"key":"functions"}]},{"id":"Exto","deprecated":false,"group":"Utilities","title":"Exto","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"flex_schema/1","deprecated":false,"title":"flex_schema(otp_app)","anchor":"flex_schema/1"}],"key":"functions"}]},{"id":"Import2Alias","deprecated":false,"group":"Utilities","title":"Import2Alias","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"import2alias/2","deprecated":false,"title":"import2alias(alias, entries)","anchor":"import2alias/2"}],"key":"functions"}]},{"id":"Import2Alias.CallerTracer","deprecated":false,"group":"Utilities","title":"Import2Alias.CallerTracer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"trace/2","deprecated":false,"title":"trace(arg1, env)","anchor":"trace/2"}],"key":"functions"}]},{"id":"Import2Alias.Server","deprecated":false,"group":"Utilities","title":"Import2Alias.Server","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(arg)","anchor":"child_spec/1"},{"id":"entries/0","deprecated":false,"title":"entries()","anchor":"entries/0"},{"id":"record/6","deprecated":false,"title":"record(file, line, column, module, name, arity)","anchor":"record/6"},{"id":"start_link/1","deprecated":false,"title":"start_link(module)","anchor":"start_link/1"}],"key":"functions"}]},{"id":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive","deprecated":false,"group":"Utilities","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"class_tree/1","deprecated":false,"title":"class_tree(stylesheet_key)","anchor":"class_tree/1"}],"key":"functions"}]},{"id":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView","deprecated":false,"group":"Utilities","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"class_tree/1","deprecated":false,"title":"class_tree(stylesheet_key)","anchor":"class_tree/1"}],"key":"functions"}]},{"id":"Paginator","deprecated":false,"group":"Utilities","title":"Paginator","sections":[{"id":"Usage","anchor":"module-usage"},{"id":"Options","anchor":"module-options"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"paginate/3","deprecated":false,"title":"paginate(queryable, opts, repo_opts)","anchor":"c:paginate/3"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"cursor_for_record/3","deprecated":false,"title":"cursor_for_record(record, cursor_fields, fetch_cursor_value_fun \\\\ &Paginator.default_fetch_cursor_value/2)","anchor":"cursor_for_record/3"},{"id":"default_fetch_cursor_value/2","deprecated":false,"title":"default_fetch_cursor_value(schema, field)","anchor":"default_fetch_cursor_value/2"},{"id":"paginated_query/2","deprecated":false,"title":"paginated_query(queryable, opts)","anchor":"paginated_query/2"}],"key":"functions"}]},{"id":"Paginator.Page","deprecated":false,"group":"Utilities","title":"Paginator.Page","sections":[{"id":"Fields","anchor":"module-fields"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}]},{"id":"Paginator.PageInfo","deprecated":false,"group":"Utilities","title":"Paginator.PageInfo","sections":[{"id":"Fields","anchor":"module-fields"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"opaque_cursor/0","deprecated":false,"title":"opaque_cursor()","anchor":"t:opaque_cursor/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}]},{"id":"Releaser.Git","deprecated":false,"group":"Utilities","title":"Releaser.Git","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_commit_and_tag/1","deprecated":false,"title":"add_commit_and_tag(version)","anchor":"add_commit_and_tag/1"}],"key":"functions"}]},{"id":"Releaser.Publish","deprecated":false,"group":"Utilities","title":"Releaser.Publish","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"publish!/0","deprecated":false,"title":"publish!()","anchor":"publish!/0"}],"key":"functions"}]},{"id":"Releaser.Tests","deprecated":false,"group":"Utilities","title":"Releaser.Tests","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run_tests!/0","deprecated":false,"title":"run_tests!()","anchor":"run_tests!/0"}],"key":"functions"}]},{"id":"Releaser.VersionUtils","deprecated":false,"group":"Utilities","title":"Releaser.VersionUtils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bump_major/1","deprecated":false,"title":"bump_major(version)","anchor":"bump_major/1"},{"id":"bump_minor/1","deprecated":false,"title":"bump_minor(version)","anchor":"bump_minor/1"},{"id":"bump_patch/1","deprecated":false,"title":"bump_patch(version)","anchor":"bump_patch/1"},{"id":"bump_pre/2","deprecated":false,"title":"bump_pre(version, pre_label)","anchor":"bump_pre/2"},{"id":"get_version/1","deprecated":false,"title":"get_version(mix_path \\\\ \".\")","anchor":"get_version/1"},{"id":"set_version/2","deprecated":false,"title":"set_version(version, mix_path \\\\ \".\")","anchor":"set_version/2"},{"id":"update_version/2","deprecated":false,"title":"update_version(version, pre_label)","anchor":"update_version/2"},{"id":"version_to_string/1","deprecated":false,"title":"version_to_string(version)","anchor":"version_to_string/1"}],"key":"functions"}]},{"id":"UserAuthLiveMount","deprecated":false,"group":"Utilities","title":"UserAuthLiveMount","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"on_mount/4","deprecated":false,"title":"on_mount(type, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}]},{"id":"Voodoo","deprecated":false,"group":"Utilities","title":"Voodoo","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"def_reverse_router/2","deprecated":false,"title":"def_reverse_router(name, opts)","anchor":"def_reverse_router/2"},{"id":"router/1","deprecated":false,"title":"router(map)","anchor":"router/1"}],"key":"functions"}]},{"id":"Zest","deprecated":false,"group":"Utilities","title":"Zest","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"intercept_type/0","deprecated":false,"title":"intercept_type()","anchor":"t:intercept_type/0"},{"id":"interceptor/0","deprecated":false,"title":"interceptor()","anchor":"t:interceptor/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"each/2","deprecated":false,"title":"each(arg1, fun)","anchor":"each/2"},{"id":"each/3","deprecated":false,"title":"each(a, b, fun)","anchor":"each/3"},{"id":"hijack/2","deprecated":false,"title":"hijack(fun, jack)","anchor":"hijack/2"},{"id":"in_scope/2","deprecated":false,"title":"in_scope(scopes, fun)","anchor":"in_scope/2"},{"id":"intercept/2","deprecated":false,"title":"intercept(fun, interceptor)","anchor":"intercept/2"},{"id":"rethrow/3","deprecated":false,"title":"rethrow(atom, e, stacktrace)","anchor":"rethrow/3"},{"id":"rethrowing/1","deprecated":false,"title":"rethrowing(fun)","anchor":"rethrowing/1"},{"id":"scope/2","deprecated":false,"title":"scope(list, expr)","anchor":"scope/2"},{"id":"scoped/2","deprecated":false,"title":"scoped(scopes, fun)","anchor":"scoped/2"}],"key":"functions"}]},{"id":"Zest.Faking","deprecated":false,"group":"Utilities","title":"Zest.Faking","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"forbid/2","deprecated":false,"title":"forbid(name, values)","anchor":"forbid/2"},{"id":"sequential/2","deprecated":false,"title":"sequential(name, start)","anchor":"sequential/2"},{"id":"such_that/4","deprecated":false,"title":"such_that(faker, name, test, limit \\\\ 10)","anchor":"such_that/4"},{"id":"unused/3","deprecated":false,"title":"unused(faker, name, limit \\\\ 10)","anchor":"unused/3"}],"key":"functions"}]}],"extras":[{"id":"api-reference","group":"","title":"API Reference","headers":[{"id":"Modules","anchor":"modules"},{"id":"Mix Tasks","anchor":"mix-tasks"}]},{"id":"readme","group":"","title":"README","headers":[{"id":"📖 Documentation","anchor":"documentation"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire","group":"","title":"Bonfire Spark","headers":[]},{"id":"extension-bonfire_common","group":"","title":"Bonfire.Common","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_mailer","group":"","title":"Bonfire.Mailer","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_epics","group":"","title":"Bonfire.Epics","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ecto","group":"","title":"Bonfire.Ecto","headers":[]},{"id":"extension-bonfire_search","group":"","title":"Bonfire.Search","headers":[{"id":"Development & Deployment Documentation","anchor":"development-deployment-documentation"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_assort","group":"","title":"Bonfire.Data.Assort","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_files","group":"","title":"Bonfire.Files","headers":[{"id":"Configuration","anchor":"configuration"},{"id":"TODO's","anchor":"todo-s"}]},{"id":"extension-bonfire_boundaries","group":"","title":"Bonfire.Boundaries","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_federate_activitypub","group":"","title":"Bonfire.Federate.ActivityPub","headers":[{"id":"Testing","anchor":"testing"},{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_invite_links","group":"","title":"Bonfire.Invite.Links","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_access_control","group":"","title":"Bonfire.Data.AccessControl","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_activity_pub","group":"","title":"Bonfire.Data.ActivityPub","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_identity","group":"","title":"Bonfire.Data.Identity","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_social","group":"","title":"Bonfire.Data.Social","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_me","group":"","title":"Bonfire.Me","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_social","group":"","title":"Bonfire.Social","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_social_graph","group":"","title":"Bonfire.Social.Graph","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_posts","group":"","title":"Bonfire.Posts","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_messages","group":"","title":"Bonfire.Messages","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_common","group":"","title":"Bonfire.UI.Common","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_social","group":"","title":"Bonfire.UI.Social","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_me","group":"","title":"Bonfire.UI.Me","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_shared_user","group":"","title":"Bonfire.Data.SharedUser","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_tag","group":"","title":"Bonfire.Tag","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-activity_pub","group":"","title":"ActivityPub","headers":[{"id":"Installation","anchor":"installation"}]},{"id":"extension-paginator","group":"","title":"Paginator","headers":[{"id":"Why?","anchor":"why"},{"id":"Getting started","anchor":"getting-started"},{"id":"Install","anchor":"install"},{"id":"Usage","anchor":"usage"},{"id":"Security Considerations","anchor":"security-considerations"},{"id":"Indexes","anchor":"indexes"},{"id":"Caveats","anchor":"caveats"},{"id":"Documentation","anchor":"documentation"},{"id":"Contributing","anchor":"contributing"},{"id":"LICENSE","anchor":"license"}]},{"id":"extension-voodoo","group":"","title":"Voodoo","headers":[]},{"id":"extension-ecto_sparkles","group":"","title":"EctoSparkles","headers":[{"id":"join_preload Documentation","anchor":"join_preload-documentation"},{"id":"Example using join_preload","anchor":"example-using-join_preload"},{"id":"reusable_join Documentation","anchor":"reusable_join-documentation"},{"id":"Copyright","anchor":"copyright"}]},{"id":"extension-bonfire_editor_milkdown","group":"","title":"Bonfire.Editor.Milkdown","headers":[{"id":"ROADMAP","anchor":"roadmap"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-arrows","group":"","title":"Arrows","headers":[{"id":"Installation","anchor":"installation"},{"id":"Documentation","anchor":"documentation"}]},{"id":"extension-needle_ulid","group":"","title":"Needle.ULID","headers":[{"id":"Installation","anchor":"installation"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-needle","group":"","title":"Needle","headers":[{"id":"Background","anchor":"background"},{"id":"Installation","anchor":"installation"},{"id":"Defining a Pointable Type","anchor":"defining-a-pointable-type"},{"id":"Referencing Needle","anchor":"referencing-needle"},{"id":"Dereferencing Needle","anchor":"dereferencing-needle"},{"id":"Querying Needle","anchor":"querying-needle"},{"id":"Virtual pointables ("virtuals")","anchor":"virtual-pointables-virtuals"},{"id":"Elixir-based logic","anchor":"elixir-based-logic"},{"id":"Configuration and overrides","anchor":"configuration-and-overrides"},{"id":"Tradeoffs","anchor":"tradeoffs"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-exto","group":"","title":"Exto","headers":[{"id":"Usage","anchor":"usage"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-zest","group":"","title":"Zest","headers":[{"id":"Usage","anchor":"usage"},{"id":"Contributing","anchor":"contributing"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-grumble","group":"","title":"Grumble","headers":[{"id":"Status: beta","anchor":"status-beta"},{"id":"Usage","anchor":"usage"},{"id":"Guide","anchor":"guide"},{"id":"Contributing","anchor":"contributing"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"hacking","group":"Guides","title":"Development guide","headers":[{"id":"Status: beta - have fun and provide feedback 🙏","anchor":"status-beta-have-fun-and-provide-feedback"},{"id":"Download","anchor":"download"},{"id":"Configure","anchor":"configure"},{"id":"Hello world!","anchor":"hello-world"},{"id":"Onboarding","anchor":"onboarding"},{"id":"The Bonfire Environment","anchor":"the-bonfire-environment"},{"id":"Documentation","anchor":"documentation"},{"id":"Additional information","anchor":"additional-information"},{"id":"just commands","anchor":"just-commands"},{"id":"Troubleshooting","anchor":"troubleshooting"}]},{"id":"deploy","group":"Guides","title":"Deployment guide","headers":[{"id":"Security Warning","anchor":"security-warning"},{"id":"Step - 0 - Decide how you want to deploy and manage the app","anchor":"step-0-decide-how-you-want-to-deploy-and-manage-the-app"},{"id":"Step 1 - Download and configure the app","anchor":"step-1-download-and-configure-the-app"},{"id":"Step 2- Prepare the config","anchor":"step-2-prepare-the-config"},{"id":"Step 3 - Install","anchor":"step-3-install"},{"id":"Step 4 - Run","anchor":"step-4-run"},{"id":"Admin tools","anchor":"admin-tools"},{"id":"Troubleshooting","anchor":"troubleshooting"}]},{"id":"architecture","group":"Guides","title":"Bonfire Architecture","headers":[{"id":"Hacking","anchor":"hacking"},{"id":"Design Decisions","anchor":"design-decisions"},{"id":"Stack","anchor":"stack"},{"id":"The Bonfire Environment","anchor":"the-bonfire-environment"},{"id":"Code Structure","anchor":"code-structure"},{"id":"Naming","anchor":"naming"},{"id":"Federation libraries","anchor":"federation-libraries"}]},{"id":"bonfire-flavoured-elixir","group":"Guides","title":"Bonfire-flavoured Elixir","headers":[{"id":"Arrows","anchor":"arrows"},{"id":"Untangle","anchor":"untangle"},{"id":"Error handling","anchor":"error-handling"}]},{"id":"database","group":"Guides","title":"Bonfire's Database - an intro","headers":[{"id":"Identifying objects - the ULID type","anchor":"identifying-objects-the-ulid-type"},{"id":"It's just a table","anchor":"it-s-just-a-table"},{"id":"Mixins - storing data about objects","anchor":"mixins-storing-data-about-objects"},{"id":"Multimixins","anchor":"multimixins"},{"id":"Declaring Object Types","anchor":"declaring-object-types"},{"id":"Writing Migrations","anchor":"writing-migrations"},{"id":"More examples","anchor":"more-examples"}]},{"id":"boundaries","group":"Guides","title":"Boundaries & Access Control","headers":[{"id":"Users and Circles","anchor":"users-and-circles"},{"id":"Verbs","anchor":"verbs"},{"id":"Permissions","anchor":"permissions"},{"id":"ACLs and Grants","anchor":"acls-and-grants"},{"id":"Controlled - Applying boundaries to an object","anchor":"controlled-applying-boundaries-to-an-object"}]},{"id":"graphql","group":"Guides","title":"GraphQL API","headers":[{"id":"GraphQL Introduction","anchor":"graphql-introduction"},{"id":"Absinthe Introduction","anchor":"absinthe-introduction"},{"id":"Patterns","anchor":"patterns"}]},{"id":"mrf","group":"Guides","title":"Message Rewrite Facility","headers":[{"id":"Using SimplePolicy","anchor":"using-simplepolicy"},{"id":"Writing your own MRF Policy","anchor":"writing-your-own-mrf-policy"}]},{"id":"changelog","group":"Guides","title":"Bonfire Changelog","headers":[{"id":"[0.3.5-beta (2022-09-23)]","anchor":"0-3-5-beta-2022-09-23"},{"id":"[0.3.4-beta.8 (2022-08-26)]","anchor":"0-3-4-beta-8-2022-08-26"},{"id":"[0.3.4-beta.6 (2022-08-19)]","anchor":"0-3-4-beta-6-2022-08-19"},{"id":"[0.3.4 (2022-08-09)]","anchor":"0-3-4-2022-08-09"},{"id":"[0.3.3 (2022-08-02)]","anchor":"0-3-3-2022-08-02"},{"id":"[0.3.2 (2022-07-30)]","anchor":"0-3-2-2022-07-30"},{"id":"0.3.1-beta.9 (2022-07-22)","anchor":"0-3-1-beta-9-2022-07-22"},{"id":"0.3.1-beta (2022-07-19)","anchor":"0-3-1-beta-2022-07-19"}]},{"id":"changelog-autogenerated","group":"Guides","title":"Changelog","headers":[{"id":"[Unreleased (2022-11-19)]","anchor":"unreleased-2022-11-19"}]},{"id":"classic","group":"Flavours of Bonfire","title":"Bonfire Classic","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"community","group":"Flavours of Bonfire","title":"Bonfire Community","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"cooperation","group":"Flavours of Bonfire","title":"Bonfire Cooperation","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"haha","group":"Flavours of Bonfire","title":"Haha Academy","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"reflow","group":"Flavours of Bonfire","title":"Reflow","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"upcycle","group":"Flavours of Bonfire","title":"Upcycle","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"deps-classic","group":"Dependencies","title":"Classic","headers":[]},{"id":"deps-cooperation","group":"Dependencies","title":"Cooperation","headers":[]}],"tasks":[{"id":"Mix.Tasks.Bonfire.Account.New","deprecated":false,"group":"Utilities","title":"mix bonfire.account.new","sections":[{"id":"Usage","anchor":"module-usage"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.Deps.Compile","deprecated":false,"group":"Utilities","title":"mix bonfire.deps.compile","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"force_compile/2","deprecated":false,"title":"force_compile(dep_or_deps, compile_args \\\\ [])","anchor":"force_compile/2"},{"id":"loaded_by_name/3","deprecated":false,"title":"loaded_by_name(given, all_deps \\\\ nil, opts)","anchor":"loaded_by_name/3"},{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"},{"id":"touch_manifests/0","deprecated":false,"title":"touch_manifests()","anchor":"touch_manifests/0"},{"id":"try_compile/2","deprecated":false,"title":"try_compile(dep_or_deps, compile_args \\\\ [])","anchor":"try_compile/2"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.Localise.Extract","deprecated":false,"group":"Utilities","title":"mix bonfire.localise.extract","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.Release","deprecated":false,"group":"Utilities","title":"mix bonfire.release","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"main/1","deprecated":false,"title":"main(args)","anchor":"main/1"},{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.Secrets","deprecated":false,"group":"Utilities","title":"mix bonfire.secrets","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"main/1","deprecated":false,"title":"main(args)","anchor":"main/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.User.Admin.Promote","deprecated":false,"group":"Utilities","title":"mix bonfire.user.admin.promote","sections":[{"id":"Usage","anchor":"module-usage"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Docs.Deps","deprecated":false,"group":"Utilities","title":"mix docs.deps","sections":[{"id":"Command line options","anchor":"module-command-line-options"}]},{"id":"Mix.Tasks.Import2alias","deprecated":false,"group":"Utilities","title":"mix import2alias","sections":[]}]} \ No newline at end of file diff --git a/dist/sidebar_items-DDA9C532.js b/dist/sidebar_items-DDA9C532.js new file mode 100644 index 00000000000..dc11895951e --- /dev/null +++ b/dist/sidebar_items-DDA9C532.js @@ -0,0 +1 @@ +sidebarNodes={"modules":[{"id":"Bonfire.Data.AccessControl.Acl","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Acl","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(acl \\\\ %Acl{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Acl","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Circle","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Circle","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(circle \\\\ %Circle{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Circle","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Controlled","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Controlled","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(controlled \\\\ %Controlled{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Controlled","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Encircle","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Encircle","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(encircle \\\\ %Encircle{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Encircle","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Grant","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Grant","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(grant \\\\ %Grant{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Grant","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.InstanceAdmin","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.InstanceAdmin","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(admin \\\\ %InstanceAdmin{}, params, cast \\\\ [:is_instance_admin])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".AccessControl.InstanceAdmin","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Stereotyped","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Stereotyped","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(stereotype \\\\ %Stereotyped{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Stereotyped","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.AccessControl.Verb","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.AccessControl.Verb","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(verb \\\\ %Verb{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".AccessControl.Verb","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.ActivityPub.Actor","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.ActivityPub.Actor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(actor \\\\ %Actor{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".ActivityPub.Actor","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.ActivityPub.Actor.Migration","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.ActivityPub.Actor.Migration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_actor_table/0","deprecated":false,"title":"create_actor_table()","anchor":"create_actor_table/0"},{"id":"create_actor_table/1","deprecated":false,"title":"create_actor_table(list)","anchor":"create_actor_table/1"},{"id":"drop_actor_table/0","deprecated":false,"title":"drop_actor_table()","anchor":"drop_actor_table/0"},{"id":"migrate_actor/0","deprecated":false,"title":"migrate_actor()","anchor":"migrate_actor/0"},{"id":"migrate_actor/1","deprecated":false,"title":"migrate_actor(dir)","anchor":"migrate_actor/1"}],"key":"functions"}],"nested_title":".ActivityPub.Actor.Migration","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.ActivityPub.Peer","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.ActivityPub.Peer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(peer \\\\ %Peer{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".ActivityPub.Peer","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.ActivityPub.Peered","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.ActivityPub.Peered","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(peered \\\\ %Peered{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".ActivityPub.Peered","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Assort.Ranked","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Assort.Ranked","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(model \\\\ %Ranked{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Assort.Ranked","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Assort.Ranked.Migration","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Assort.Ranked.Migration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_ranked_table/0","deprecated":false,"title":"create_ranked_table()","anchor":"create_ranked_table/0"},{"id":"create_ranked_table/1","deprecated":false,"title":"create_ranked_table(list)","anchor":"create_ranked_table/1"},{"id":"create_unique_index/1","deprecated":false,"title":"create_unique_index(opts \\\\ [])","anchor":"create_unique_index/1"},{"id":"drop_ranked_table/0","deprecated":false,"title":"drop_ranked_table()","anchor":"drop_ranked_table/0"},{"id":"drop_unique_index/1","deprecated":false,"title":"drop_unique_index(opts \\\\ [])","anchor":"drop_unique_index/1"},{"id":"migrate_ranked/0","deprecated":false,"title":"migrate_ranked()","anchor":"migrate_ranked/0"},{"id":"migrate_ranked/1","deprecated":false,"title":"migrate_ranked(dir)","anchor":"migrate_ranked/1"}],"key":"functions"}],"nested_title":".Assort.Ranked.Migration","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Edges.Edge","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Edges.Edge","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(edge \\\\ %Edge{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Edges.Edge","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Edges.EdgeTotal","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Edges.EdgeTotal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(me \\\\ %EdgeTotal{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Edges.EdgeTotal","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Account","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Account","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(account \\\\ %Account{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Identity.Account","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Accounted","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Accounted","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(acc \\\\ %Accounted{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Identity.Accounted","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Alias","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Alias","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(alias \\\\ %Alias{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Identity.Alias","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.AuthSecondFactor","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.AuthSecondFactor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(totp, attrs)","anchor":"changeset/2"},{"id":"valid_totp?/2","deprecated":false,"title":"valid_totp?(totp, code)","anchor":"valid_totp?/2"}],"key":"functions"}],"nested_title":".Identity.AuthSecondFactor","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.CareClosure","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.CareClosure","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"by_branch/1","deprecated":false,"title":"by_branch(branch)","anchor":"by_branch/1"}],"key":"functions"}],"nested_title":".Identity.CareClosure","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Caretaker","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Caretaker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(ct \\\\ %Caretaker{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Identity.Caretaker","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Character","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Character","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(char \\\\ %Character{}, params, extra \\\\ nil)","anchor":"changeset/3"},{"id":"changeset_basic/2","deprecated":false,"title":"changeset_basic(char, params)","anchor":"changeset_basic/2"},{"id":"hash/1","deprecated":false,"title":"hash(name)","anchor":"hash/1"},{"id":"uniform/1","deprecated":false,"title":"uniform(name)","anchor":"uniform/1"}],"key":"functions"}],"nested_title":".Identity.Character","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Credential","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Credential","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(cred \\\\ %Credential{}, params)","anchor":"changeset/2"},{"id":"check_password/2","deprecated":false,"title":"check_password(password, hash)","anchor":"check_password/2"},{"id":"confirmation_changeset/2","deprecated":false,"title":"confirmation_changeset(cred \\\\ %Credential{}, params)","anchor":"confirmation_changeset/2"},{"id":"dummy_check/0","deprecated":false,"title":"dummy_check()","anchor":"dummy_check/0"},{"id":"hash_password/1","deprecated":false,"title":"hash_password(password)","anchor":"hash_password/1"}],"key":"functions"}],"nested_title":".Identity.Credential","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Credential.Migration","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Credential.Migration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_credential_table/0","deprecated":false,"title":"create_credential_table()","anchor":"create_credential_table/0"},{"id":"create_credential_table/1","deprecated":false,"title":"create_credential_table(list)","anchor":"create_credential_table/1"},{"id":"drop_credential_table/0","deprecated":false,"title":"drop_credential_table()","anchor":"drop_credential_table/0"},{"id":"migrate_credential/0","deprecated":false,"title":"migrate_credential()","anchor":"migrate_credential/0"},{"id":"migrate_credential/1","deprecated":false,"title":"migrate_credential(dir)","anchor":"migrate_credential/1"}],"key":"functions"}],"nested_title":".Identity.Credential.Migration","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Email","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Email","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(email \\\\ %Email{}, params, opts \\\\ [])","anchor":"changeset/3"},{"id":"confirm/1","deprecated":false,"title":"confirm(email)","anchor":"confirm/1"},{"id":"may_confirm?/2","deprecated":false,"title":"may_confirm?(email, opts \\\\ [])","anchor":"may_confirm?/2"},{"id":"may_request_confirm_email?/2","deprecated":false,"title":"may_request_confirm_email?(email, opts \\\\ [])","anchor":"may_request_confirm_email?/2"},{"id":"put_token/1","deprecated":false,"title":"put_token(email)","anchor":"put_token/1"},{"id":"should_request_or_refresh?/2","deprecated":false,"title":"should_request_or_refresh?(email, opts \\\\ [])","anchor":"should_request_or_refresh?/2"}],"key":"functions"}],"nested_title":".Identity.Email","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.ExtraInfo","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.ExtraInfo","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(extra_info \\\\ %ExtraInfo{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Identity.ExtraInfo","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Named","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Named","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(named \\\\ %Named{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Identity.Named","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Self","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Self","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(self \\\\ %Self{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Identity.Self","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.Settings","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.Settings","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(settings \\\\ %Settings{}, params, opts \\\\ [])","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Identity.Settings","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Identity.User","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Identity.User","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(user \\\\ %User{}, params)","anchor":"changeset/2"},{"id":"maybe_redact/1","deprecated":false,"title":"maybe_redact(arg1)","anchor":"maybe_redact/1"}],"key":"functions"}],"nested_title":".Identity.User","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.SharedUser","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.SharedUser","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(user \\\\ %SharedUser{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".SharedUser","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.APActivity","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.APActivity","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(activity \\\\ %APActivity{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.APActivity","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Activity","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Activity","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(activity \\\\ %Activity{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Activity","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Bookmark","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Bookmark","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(bookmark \\\\ %Bookmark{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Bookmark","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Boost","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Boost","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(boost \\\\ %Boost{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Boost","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Created","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Created","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(created \\\\ %Created{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Created","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Feed","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Feed","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(feed \\\\ %Feed{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Feed","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.FeedPublish","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.FeedPublish","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(pub \\\\ %FeedPublish{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.FeedPublish","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Flag","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Flag","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(flag \\\\ %Flag{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Flag","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Follow","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Follow","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(follow \\\\ %Follow{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Follow","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Inbox","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Inbox","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(inbox \\\\ %Inbox{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Inbox","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Like","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Like","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(like \\\\ %Like{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Like","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Message","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Message","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(message \\\\ %Message{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Message","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Pin","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Pin","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(pin \\\\ %Pin{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Pin","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Post","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Post","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(post \\\\ %Post{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Post","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.PostContent","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.PostContent","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(content \\\\ %PostContent{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.PostContent","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Profile","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Profile","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(profile \\\\ %Profile{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Profile","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Replied","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Replied","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ancestor_ids/1","deprecated":false,"title":"ancestor_ids(schema)","anchor":"ancestor_ids/1"},{"id":"ancestors/1","deprecated":false,"title":"ancestors(schema)","anchor":"ancestors/1"},{"id":"arrange/2","deprecated":false,"title":"arrange(structs_list, opts \\\\ [])","anchor":"arrange/2"},{"id":"build_child/1","deprecated":false,"title":"build_child(schema)","anchor":"build_child/1"},{"id":"changeset/2","deprecated":false,"title":"changeset(replied \\\\ %Replied{}, attrs)","anchor":"changeset/2"},{"id":"children/1","deprecated":false,"title":"children(schema)","anchor":"children/1"},{"id":"depth/1","deprecated":false,"title":"depth(schema)","anchor":"depth/1"},{"id":"descendants/1","deprecated":false,"title":"descendants(schema)","anchor":"descendants/1"},{"id":"make_child_of/2","deprecated":false,"title":"make_child_of(changeset, parent)","anchor":"make_child_of/2"},{"id":"parent/1","deprecated":false,"title":"parent(schema)","anchor":"parent/1"},{"id":"parent_id/1","deprecated":false,"title":"parent_id(schema)","anchor":"parent_id/1"},{"id":"path/1","deprecated":false,"title":"path(schema)","anchor":"path/1"},{"id":"path_ids/1","deprecated":false,"title":"path_ids(schema)","anchor":"path_ids/1"},{"id":"root/1","deprecated":false,"title":"root(schema)","anchor":"root/1"},{"id":"root?/1","deprecated":false,"title":"root?(schema)","anchor":"root?/1"},{"id":"root_id/1","deprecated":false,"title":"root_id(schema)","anchor":"root_id/1"},{"id":"siblings/1","deprecated":false,"title":"siblings(schema)","anchor":"siblings/1"},{"id":"subtree/1","deprecated":false,"title":"subtree(schema)","anchor":"subtree/1"},{"id":"where_depth/2","deprecated":false,"title":"where_depth(query \\\\ __MODULE__, depth_params)","anchor":"where_depth/2"}],"key":"functions"}],"nested_title":".Social.Replied","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Request","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Request","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(request \\\\ %Request{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Request","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Seen","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Seen","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(seen \\\\ %Seen{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Seen","nested_context":"Bonfire.Data"},{"id":"Bonfire.Data.Social.Sensitive","deprecated":false,"group":"Data schemas","title":"Bonfire.Data.Social.Sensitive","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(sensitive \\\\ %Sensitive{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Social.Sensitive","nested_context":"Bonfire.Data"},{"id":"Bonfire.UI.Common","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_error/3","deprecated":false,"title":"assign_error(socket, msg, pid \\\\ self())","anchor":"assign_error/3"},{"id":"assign_flash/5","deprecated":false,"title":"assign_flash(socket_or_conn, type, message, assigns \\\\ %{}, pid \\\\ self())","anchor":"assign_flash/5"},{"id":"assign_generic/2","deprecated":false,"title":"assign_generic(socket_or_conn, assigns)","anchor":"assign_generic/2"},{"id":"assign_generic/3","deprecated":false,"title":"assign_generic(socket, key, value)","anchor":"assign_generic/3"},{"id":"assign_generic_global/2","deprecated":false,"title":"assign_generic_global(socket, assigns)","anchor":"assign_generic_global/2"},{"id":"assign_global/2","deprecated":false,"title":"assign_global(socket, assigns)","anchor":"assign_global/2"},{"id":"assign_global/3","deprecated":false,"title":"assign_global(socket, key, value)","anchor":"assign_global/3"},{"id":"assigns_clean/1","deprecated":false,"title":"assigns_clean(tuple)","anchor":"assigns_clean/1"},{"id":"assigns_merge/2","deprecated":false,"title":"assigns_merge(assigns, new)","anchor":"assigns_merge/2"},{"id":"assigns_merge/3","deprecated":false,"title":"assigns_merge(socket, assigns, new)","anchor":"assigns_merge/3"},{"id":"assigns_minimal/1","deprecated":false,"title":"assigns_minimal(assigns)","anchor":"assigns_minimal/1"},{"id":"assigns_subscribe/2","deprecated":false,"title":"assigns_subscribe(socket, assign_names)","anchor":"assigns_subscribe/2"},{"id":"batch_update_many_async/3","deprecated":false,"title":"batch_update_many_async(assigns_sockets, many_opts, opts)","anchor":"batch_update_many_async/3"},{"id":"batch_update_many_async/4","deprecated":false,"title":"batch_update_many_async(current_user, assigns_sockets, many_opts, opts)","anchor":"batch_update_many_async/4"},{"id":"can?/4","deprecated":false,"title":"can?(subject, verbs, object, opts \\\\ [])","anchor":"can?/4"},{"id":"cast_public/2","deprecated":false,"title":"cast_public(socket, assigns_to_broadcast)","anchor":"cast_public/2"},{"id":"cast_self/2","deprecated":false,"title":"cast_self(socket, assigns_to_broadcast)","anchor":"cast_self/2"},{"id":"copy_go/1","deprecated":false,"title":"copy_go(arg1)","anchor":"copy_go/1"},{"id":"current_url/2","deprecated":false,"title":"current_url(socket_or_assigns, default \\\\ nil)","anchor":"current_url/2"},{"id":"current_user_or_remote_interaction/3","deprecated":false,"title":"current_user_or_remote_interaction(socket, verb, object)","anchor":"current_user_or_remote_interaction/3"},{"id":"go_query/1","deprecated":false,"title":"go_query(url)","anchor":"go_query/1"},{"id":"hero_icons_list/0","deprecated":false,"title":"hero_icons_list()","anchor":"hero_icons_list/0"},{"id":"live_aliases/5","deprecated":false,"title":"live_aliases(aliases, path, live_view, action \\\\ nil, opts \\\\ [])","anchor":"live_aliases/5"},{"id":"live_render_component/2","deprecated":false,"title":"live_render_component(conn, load_live_component)","anchor":"live_render_component/2"},{"id":"live_render_with_conn/2","deprecated":false,"title":"live_render_with_conn(conn, live_view)","anchor":"live_render_with_conn/2"},{"id":"live_upload_files/3","deprecated":false,"title":"live_upload_files(current_user, metadata, socket)","anchor":"live_upload_files/3"},{"id":"markdown/1","deprecated":false,"title":"markdown(content)","anchor":"markdown/1"},{"id":"maybe_assign/3","deprecated":false,"title":"maybe_assign(socket, key, value)","anchor":"maybe_assign/3"},{"id":"maybe_component/2","deprecated":false,"title":"maybe_component(module, context \\\\ [])","anchor":"maybe_component/2"},{"id":"maybe_consume_uploaded_entries/3","deprecated":false,"title":"maybe_consume_uploaded_entries(socket, key, fun)","anchor":"maybe_consume_uploaded_entries/3"},{"id":"maybe_consume_uploaded_entry/3","deprecated":false,"title":"maybe_consume_uploaded_entry(socket, key, fun)","anchor":"maybe_consume_uploaded_entry/3"},{"id":"maybe_cute_gif/0","deprecated":false,"title":"maybe_cute_gif()","anchor":"maybe_cute_gif/0"},{"id":"maybe_last_sentry_event_id/0","deprecated":false,"title":"maybe_last_sentry_event_id()","anchor":"maybe_last_sentry_event_id/0"},{"id":"maybe_push_event/3","deprecated":false,"title":"maybe_push_event(socket, name, data)","anchor":"maybe_push_event/3"},{"id":"maybe_send_update/4","deprecated":false,"title":"maybe_send_update(component, id, assigns, opts \\\\ [])","anchor":"maybe_send_update/4"},{"id":"maybe_stream_insert/4","deprecated":false,"title":"maybe_stream_insert(socket, name, items, opts)","anchor":"maybe_stream_insert/4"},{"id":"opts_for_update_many_async/2","deprecated":false,"title":"opts_for_update_many_async(arg, opts)","anchor":"opts_for_update_many_async/2"},{"id":"patch_to/3","deprecated":false,"title":"patch_to(socket_or_conn, to \\\\ nil, opts \\\\ [])","anchor":"patch_to/3"},{"id":"path_fallback/2","deprecated":false,"title":"path_fallback(socket_or_conn, opts)","anchor":"path_fallback/2"},{"id":"redirect_to/3","deprecated":false,"title":"redirect_to(socket_or_conn, to \\\\ nil, opts \\\\ [])","anchor":"redirect_to/3"},{"id":"redirect_to_previous_go/4","deprecated":false,"title":"redirect_to_previous_go(conn, params, default, current_path)","anchor":"redirect_to_previous_go/4"},{"id":"render_sface_or_native/0","deprecated":false,"title":"render_sface_or_native()","anchor":"render_sface_or_native/0"},{"id":"rich/2","deprecated":false,"title":"rich(content, opts \\\\ [])","anchor":"rich/2"},{"id":"self_subscribe/2","deprecated":false,"title":"self_subscribe(socket, assign_names)","anchor":"self_subscribe/2"},{"id":"send_self/2","deprecated":false,"title":"send_self(socket \\\\ nil, assigns)","anchor":"send_self/2"},{"id":"send_self_global/2","deprecated":false,"title":"send_self_global(socket \\\\ nil, assigns)","anchor":"send_self_global/2"},{"id":"set_go_after/2","deprecated":false,"title":"set_go_after(conn, path \\\\ nil)","anchor":"set_go_after/2"},{"id":"templated/2","deprecated":false,"title":"templated(content, data \\\\ %{})","anchor":"templated/2"},{"id":"templated_or_remote_markdown/2","deprecated":false,"title":"templated_or_remote_markdown(content, data \\\\ nil)","anchor":"templated_or_remote_markdown/2"},{"id":"the_object/1","deprecated":false,"title":"the_object(assigns)","anchor":"the_object/1"},{"id":"undead/3","deprecated":false,"title":"undead(socket, fun, return_key \\\\ :noreply)","anchor":"undead/3"},{"id":"undead_mount/2","deprecated":false,"title":"undead_mount(socket, fun)","anchor":"undead_mount/2"},{"id":"undead_on_mount/2","deprecated":false,"title":"undead_on_mount(socket, fun)","anchor":"undead_on_mount/2"},{"id":"undead_params/2","deprecated":false,"title":"undead_params(socket, fun)","anchor":"undead_params/2"},{"id":"update_many_async/2","deprecated":false,"title":"update_many_async(assigns_sockets, opts)","anchor":"update_many_async/2"},{"id":"update_many_async/3","deprecated":false,"title":"update_many_async(current_user, assigns_sockets, opts)","anchor":"update_many_async/3"}],"key":"functions"}],"nested_title":".UI.Common","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.ComponentID","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.ComponentID","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"new/3","deprecated":false,"title":"new(component_module, object_id, parent_id \\\\ nil)","anchor":"new/3"},{"id":"send_assigns/5","deprecated":false,"title":"send_assigns(component_module, id, set, socket, pid \\\\ nil)","anchor":"send_assigns/5"},{"id":"send_updates/4","deprecated":false,"title":"send_updates(component_module, object_id, assigns, pid \\\\ nil)","anchor":"send_updates/4"}],"key":"functions"}],"nested_title":".UI.Common.ComponentID","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.EndpointTemplate","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.EndpointTemplate","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"session_options/0","deprecated":false,"title":"session_options()","anchor":"session_options/0"}],"key":"functions"}],"nested_title":".UI.Common.EndpointTemplate","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.ErrorHelpers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.ErrorHelpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"error_tag/2","deprecated":false,"title":"error_tag(form, field)","anchor":"error_tag/2"},{"id":"translate_error/1","deprecated":false,"title":"translate_error(arg)","anchor":"translate_error/1"}],"key":"functions"}],"nested_title":".UI.Common.ErrorHelpers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.ErrorReportingPlug","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.ErrorReportingPlug","sections":[],"nested_title":".UI.Common.ErrorReportingPlug","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LiveHandlers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LiveHandlers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_attrs/2","deprecated":false,"title":"assign_attrs(socket, attrs)","anchor":"assign_attrs/2"},{"id":"handle_event/5","deprecated":false,"title":"handle_event(action, attrs, socket, source_module \\\\ nil, fun \\\\ nil)","anchor":"handle_event/5"},{"id":"handle_info/3","deprecated":false,"title":"handle_info(blob, socket, source_module \\\\ nil)","anchor":"handle_info/3"},{"id":"handle_params/5","deprecated":false,"title":"handle_params(params, uri, socket, source_module \\\\ nil, fun \\\\ nil)","anchor":"handle_params/5"},{"id":"handle_progress/5","deprecated":false,"title":"handle_progress(type, entry, socket, source_module, target_fn)","anchor":"handle_progress/5"},{"id":"maybe_from_json/1","deprecated":false,"title":"maybe_from_json(json)","anchor":"maybe_from_json/1"},{"id":"mod_delegate/4","deprecated":false,"title":"mod_delegate(mod, fun, args, socket)","anchor":"mod_delegate/4"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".UI.Common.LiveHandlers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_send_persistent_assigns/2","deprecated":false,"title":"maybe_send_persistent_assigns(assigns \\\\ nil, socket)","anchor":"maybe_send_persistent_assigns/2"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(modules, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.AllowTestSandbox","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.AllowTestSandbox","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.Csrf","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.Csrf","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(_, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.Csrf","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.Helpers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_default_params/3","deprecated":false,"title":"assign_default_params(params, uri, socket)","anchor":"assign_default_params/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(modules, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.Locale","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.Locale","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_put_locale/2","deprecated":false,"title":"assign_put_locale(locale, socket)","anchor":"assign_put_locale/2"},{"id":"assign_put_locale/3","deprecated":false,"title":"assign_put_locale(locale, current_user, socket)","anchor":"assign_put_locale/3"},{"id":"default/2","deprecated":false,"title":"default(_, _)","anchor":"default/2"},{"id":"mount/3","deprecated":false,"title":"mount(_, arg2, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.Locale","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.LivePlugs.StaticChanged","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.LivePlugs.StaticChanged","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(_, _, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Common.LivePlugs.StaticChanged","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.MaybeStaticGeneratorPlug","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.MaybeStaticGeneratorPlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"maybe_add_index_html/2","deprecated":false,"title":"maybe_add_index_html(conn, _)","anchor":"maybe_add_index_html/2"}],"key":"functions"}],"nested_title":".UI.Common.MaybeStaticGeneratorPlug","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.MultiTenancyPlug","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.MultiTenancyPlug","sections":[],"nested_title":".UI.Common.MultiTenancyPlug","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.MultiselectLive.LiveHandler","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.MultiselectLive.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".UI.Common.MultiselectLive.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.NavModule","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.NavModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"declared_nav/0","deprecated":false,"title":"declared_nav()","anchor":"c:declared_nav/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"nav/0","deprecated":false,"title":"nav()","anchor":"nav/0"},{"id":"nav/1","deprecated":false,"title":"nav(app)","anchor":"nav/1"},{"id":"nav_function_error/2","deprecated":false,"title":"nav_function_error(error, args)","anchor":"nav_function_error/2"}],"key":"functions"}],"nested_title":".UI.Common.NavModule","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Notifications","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Notifications","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assign_notification/2","deprecated":false,"title":"assign_notification(attrs, socket)","anchor":"assign_notification/2"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(attrs, socket)","anchor":"handle_info/2"},{"id":"notify_feeds/5","deprecated":false,"title":"notify_feeds(feed_ids, title, message, url \\\\ nil, icon \\\\ nil)","anchor":"notify_feeds/5"},{"id":"notify_me/4","deprecated":false,"title":"notify_me(title, message, icon, socket \\\\ nil)","anchor":"notify_me/4"},{"id":"receive_flash/3","deprecated":false,"title":"receive_flash(attrs, pid \\\\ self(), context \\\\ nil)","anchor":"receive_flash/3"},{"id":"receive_notification/2","deprecated":false,"title":"receive_notification(attrs, socket \\\\ nil)","anchor":"receive_notification/2"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".UI.Common.Notifications","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.PlugProtect","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.PlugProtect","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"allow_action/3","deprecated":false,"title":"allow_action(conn, data, opts)","anchor":"allow_action/3"},{"id":"block_action/3","deprecated":false,"title":"block_action(conn, data, opts)","anchor":"block_action/3"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Common.PlugProtect","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Plugs.ActivityPub","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Plugs.ActivityPub","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"maybe_redirect/1","deprecated":false,"title":"maybe_redirect(conn)","anchor":"maybe_redirect/1"},{"id":"with_headers/3","deprecated":false,"title":"with_headers(conn, arg2, opts)","anchor":"with_headers/3"}],"key":"functions"}],"nested_title":".UI.Common.Plugs.ActivityPub","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Presence","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Presence","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"fetch/2","deprecated":false,"title":"fetch(topic, presences)","anchor":"fetch/2"},{"id":"fetchers_pids/0","deprecated":false,"title":"fetchers_pids()","anchor":"fetchers_pids/0"},{"id":"get_by_key/2","deprecated":false,"title":"get_by_key(topic, key)","anchor":"get_by_key/2"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(broadcast, socket)","anchor":"handle_info/2"},{"id":"list/0","deprecated":false,"title":"list()","anchor":"list/0"},{"id":"list/1","deprecated":false,"title":"list(topic)","anchor":"list/1"},{"id":"list_and_maybe_subscribe_to_presence/1","deprecated":false,"title":"list_and_maybe_subscribe_to_presence(socket)","anchor":"list_and_maybe_subscribe_to_presence/1"},{"id":"present!/2","deprecated":false,"title":"present!(socket, meta \\\\ %{})","anchor":"present!/2"},{"id":"present?/2","deprecated":false,"title":"present?(user_id \\\\ nil, socket)","anchor":"present?/2"},{"id":"present_meta/2","deprecated":false,"title":"present_meta(user \\\\ nil, socket)","anchor":"present_meta/2"},{"id":"track/3","deprecated":false,"title":"track(socket, key, meta)","anchor":"track/3"},{"id":"track/4","deprecated":false,"title":"track(pid, topic, key, meta)","anchor":"track/4"},{"id":"untrack/2","deprecated":false,"title":"untrack(socket, key)","anchor":"untrack/2"},{"id":"untrack/3","deprecated":false,"title":"untrack(pid, topic, key)","anchor":"untrack/3"},{"id":"update/3","deprecated":false,"title":"update(socket, key, meta)","anchor":"update/3"},{"id":"update/4","deprecated":false,"title":"update(pid, topic, key, meta)","anchor":"update/4"}],"key":"functions"}],"nested_title":".UI.Common.Presence","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.PreviewContentLive","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.PreviewContentLive","sections":[{"id":"Properties","anchor":"module-properties"},{"id":"Slots","anchor":"module-slots"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_handle_event/3","deprecated":false,"title":"do_handle_event(binary, _, socket)","anchor":"do_handle_event/3"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(action, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(info, socket)","anchor":"handle_info/2"},{"id":"mount/1","deprecated":false,"title":"mount(socket)","anchor":"mount/1"},{"id":"render/1","deprecated":false,"title":"render(assigns)","anchor":"render/1"},{"id":"render_native/1","deprecated":false,"title":"render_native(assigns)","anchor":"render_native/1"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"sigil_SWIFTUI/2","deprecated":false,"title":"sigil_SWIFTUI(arg, modifiers)","anchor":"sigil_SWIFTUI/2"},{"id":"update/2","deprecated":false,"title":"update(assigns, socket)","anchor":"update/2"}],"key":"functions"}],"nested_title":".UI.Common.PreviewContentLive","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.ReusableModalLive","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.ReusableModalLive","sections":[{"id":"Properties","anchor":"module-properties"},{"id":"Slots","anchor":"module-slots"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"default_assigns/0","deprecated":false,"title":"default_assigns()","anchor":"default_assigns/0"},{"id":"do_handle_event/3","deprecated":false,"title":"do_handle_event(binary, _, socket)","anchor":"do_handle_event/3"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(action, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(info, socket)","anchor":"handle_info/2"},{"id":"mount/1","deprecated":false,"title":"mount(socket)","anchor":"mount/1"},{"id":"render/1","deprecated":false,"title":"render(assigns)","anchor":"render/1"},{"id":"render_native/1","deprecated":false,"title":"render_native(assigns)","anchor":"render_native/1"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"sigil_SWIFTUI/2","deprecated":false,"title":"sigil_SWIFTUI(arg, modifiers)","anchor":"sigil_SWIFTUI/2"},{"id":"update/2","deprecated":false,"title":"update(assigns, socket)","anchor":"update/2"}],"key":"functions"}],"nested_title":".UI.Common.ReusableModalLive","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Routes","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"gon_js_config/0","deprecated":false,"title":"gon_js_config()","anchor":"gon_js_config/0"}],"key":"functions"}],"nested_title":".UI.Common.Routes","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.SEO","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.SEO","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"open_graph_config/1","deprecated":false,"title":"open_graph_config(conn \\\\ nil)","anchor":"open_graph_config/1"},{"id":"site_config/1","deprecated":false,"title":"site_config(conn \\\\ nil)","anchor":"site_config/1"},{"id":"twitter_config/1","deprecated":false,"title":"twitter_config(conn \\\\ nil)","anchor":"twitter_config/1"}],"key":"functions"}],"nested_title":".UI.Common.SEO","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.SettingsModule","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.SettingsModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"declared_component/0","deprecated":false,"title":"declared_component()","anchor":"c:declared_component/0"},{"id":"declared_nav/0","deprecated":false,"title":"declared_nav()","anchor":"c:declared_nav/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"component_function_error/2","deprecated":false,"title":"component_function_error(error, args)","anchor":"component_function_error/2"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"components/0"},{"id":"components/1","deprecated":false,"title":"components(extension)","anchor":"components/1"},{"id":"extension_has_components?/2","deprecated":false,"title":"extension_has_components?(extension, modules \\\\ nil)","anchor":"extension_has_components?/2"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"modules_component/1","deprecated":false,"title":"modules_component(modules)","anchor":"modules_component/1"},{"id":"modules_nav/1","deprecated":false,"title":"modules_nav(modules)","anchor":"modules_nav/1"},{"id":"nav/0","deprecated":false,"title":"nav()","anchor":"nav/0"},{"id":"nav/1","deprecated":false,"title":"nav(app)","anchor":"nav/1"},{"id":"nav_function_error/2","deprecated":false,"title":"nav_function_error(error, args)","anchor":"nav_function_error/2"}],"key":"functions"}],"nested_title":".UI.Common.SettingsModule","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.SmartInput.LiveHandler","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.SmartInput.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"active_smart_input_component/2","deprecated":false,"title":"active_smart_input_component(smart_input_component, create_object_type)","anchor":"active_smart_input_component/2"},{"id":"active_smart_input_components/2","deprecated":false,"title":"active_smart_input_components(smart_input_component, create_object_type)","anchor":"active_smart_input_components/2"},{"id":"activity_type_or_reply/1","deprecated":false,"title":"activity_type_or_reply(assigns)","anchor":"activity_type_or_reply/1"},{"id":"all_smart_input_components/0","deprecated":false,"title":"all_smart_input_components()","anchor":"all_smart_input_components/0"},{"id":"assign_open/2","deprecated":false,"title":"assign_open(context, assigns)","anchor":"assign_open/2"},{"id":"close_smart_input/1","deprecated":false,"title":"close_smart_input(js \\\\ %JS{})","anchor":"close_smart_input/1"},{"id":"confirm_close_smart_input/2","deprecated":false,"title":"confirm_close_smart_input(js \\\\ %JS{}, reusable_modal_id)","anchor":"confirm_close_smart_input/2"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(action, params, socket)","anchor":"handle_event/3"},{"id":"max_length/0","deprecated":false,"title":"max_length()","anchor":"max_length/0"},{"id":"maximize/1","deprecated":false,"title":"maximize(js \\\\ %JS{})","anchor":"maximize/1"},{"id":"maybe_from_json/1","deprecated":false,"title":"maybe_from_json(json)","anchor":"maybe_from_json/1"},{"id":"maybe_from_json_string/1","deprecated":false,"title":"maybe_from_json_string(json)","anchor":"maybe_from_json_string/1"},{"id":"minimize/1","deprecated":false,"title":"minimize(js \\\\ %JS{})","anchor":"minimize/1"},{"id":"open/2","deprecated":false,"title":"open(js \\\\ %JS{}, opts \\\\ nil)","anchor":"open/2"},{"id":"open_type/4","deprecated":false,"title":"open_type(js \\\\ %JS{}, component, create_object_type, opts \\\\ nil)","anchor":"open_type/4"},{"id":"open_with_text_suggestion/3","deprecated":false,"title":"open_with_text_suggestion(text, set_assigns, socket_or_context)","anchor":"open_with_text_suggestion/3"},{"id":"replace_input_next_time/1","deprecated":false,"title":"replace_input_next_time(socket_or_context)","anchor":"replace_input_next_time/1"},{"id":"reply_to_param/1","deprecated":false,"title":"reply_to_param(arg1)","anchor":"reply_to_param/1"},{"id":"reset_input/1","deprecated":false,"title":"reset_input(socket)","anchor":"reset_input/1"},{"id":"set/2","deprecated":false,"title":"set(context, assigns)","anchor":"set/2"},{"id":"set_smart_input_text/2","deprecated":false,"title":"set_smart_input_text(socket_or_context, text \\\\ \"\\n\")","anchor":"set_smart_input_text/2"},{"id":"show_main/2","deprecated":false,"title":"show_main(js \\\\ %JS{}, opts \\\\ nil)","anchor":"show_main/2"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"smart_input_name/1","deprecated":false,"title":"smart_input_name(component)","anchor":"smart_input_name/1"},{"id":"switch_smart_input_type/2","deprecated":false,"title":"switch_smart_input_type(type, js \\\\ %JS{})","anchor":"switch_smart_input_type/2"},{"id":"toggle_expanded/4","deprecated":false,"title":"toggle_expanded(js \\\\ %JS{}, target, btn, class)","anchor":"toggle_expanded/4"}],"key":"functions"}],"nested_title":".UI.Common.SmartInput.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.SmartInputModule","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.SmartInputModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"smart_input_module/0","deprecated":false,"title":"smart_input_module()","anchor":"c:smart_input_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"smart_input_modules_types/0","deprecated":false,"title":"smart_input_modules_types()","anchor":"smart_input_modules_types/0"}],"key":"functions"}],"nested_title":".UI.Common.SmartInputModule","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.StaticGenerator","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.StaticGenerator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_path/0","deprecated":false,"title":"base_path()","anchor":"base_path/0"},{"id":"generate/2","deprecated":false,"title":"generate(urls, opts \\\\ [])","anchor":"generate/2"}],"key":"functions"}],"nested_title":".UI.Common.StaticGenerator","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.StaticGeneratorPlug","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.StaticGeneratorPlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_index_html/2","deprecated":false,"title":"add_index_html(conn, _)","anchor":"add_index_html/2"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Common.StaticGeneratorPlug","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.Testing.Helpers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.Testing.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assert_field_error/3","deprecated":false,"title":"assert_field_error(doc, name, error)","anchor":"assert_field_error/3"},{"id":"assert_field_good/2","deprecated":false,"title":"assert_field_good(doc, name)","anchor":"assert_field_good/2"},{"id":"assert_flash/3","deprecated":false,"title":"assert_flash(view, kind, message)","anchor":"assert_flash/3"},{"id":"assert_flash_kind/2","deprecated":false,"title":"assert_flash_kind(flash, atom)","anchor":"assert_flash_kind/2"},{"id":"assert_flash_message/2","deprecated":false,"title":"assert_flash_message(flash, r)","anchor":"assert_flash_message/2"},{"id":"conn/0","deprecated":false,"title":"conn()","anchor":"conn/0"},{"id":"conn/1","deprecated":false,"title":"conn(conn)","anchor":"conn/1"},{"id":"conn/2","deprecated":false,"title":"conn(conn, filters)","anchor":"conn/2"},{"id":"fake_account!/2","deprecated":false,"title":"fake_account!(attrs \\\\ %{}, opts \\\\ [])","anchor":"fake_account!/2"},{"id":"fake_admin!/3","deprecated":false,"title":"fake_admin!(account \\\\ %{}, attrs \\\\ %{}, opts \\\\ [])","anchor":"fake_admin!/3"},{"id":"fake_user!/3","deprecated":false,"title":"fake_user!(account \\\\ %{}, attrs \\\\ %{}, opts \\\\ [])","anchor":"fake_user!/3"},{"id":"fake_user_and_conn!/1","deprecated":false,"title":"fake_user_and_conn!(account \\\\ fake_account!())","anchor":"fake_user_and_conn!/1"},{"id":"fancy_fake_user!/2","deprecated":false,"title":"fancy_fake_user!(name, opts \\\\ [])","anchor":"fancy_fake_user!/2"},{"id":"fancy_fake_user_on_test_instance/1","deprecated":false,"title":"fancy_fake_user_on_test_instance(opts \\\\ [])","anchor":"fancy_fake_user_on_test_instance/1"},{"id":"find_flash/1","deprecated":false,"title":"find_flash(view_or_doc)","anchor":"find_flash/1"},{"id":"find_form_error/2","deprecated":false,"title":"find_form_error(doc, name)","anchor":"find_form_error/2"},{"id":"floki_attr/2","deprecated":false,"title":"floki_attr(elem, attr)","anchor":"floki_attr/2"},{"id":"floki_click/3","deprecated":false,"title":"floki_click(conn_or_view \\\\ conn(), path_or_value \\\\ %{}, value \\\\ %{})","anchor":"floki_click/3"},{"id":"floki_live/2","deprecated":false,"title":"floki_live(conn \\\\ conn(), path \\\\ nil)","anchor":"floki_live/2"},{"id":"floki_redirect/2","deprecated":false,"title":"floki_redirect(conn \\\\ conn(), path \\\\ nil)","anchor":"floki_redirect/2"},{"id":"floki_response/2","deprecated":false,"title":"floki_response(conn, code \\\\ 200)","anchor":"floki_response/2"},{"id":"floki_submit/4","deprecated":false,"title":"floki_submit(conn_or_view \\\\ conn(), path_or_event, event_or_value \\\\ %{}, value \\\\ %{})","anchor":"floki_submit/4"},{"id":"live_pubsub_wait/1","deprecated":false,"title":"live_pubsub_wait(live_view)","anchor":"live_pubsub_wait/1"},{"id":"live_sockets_disconnect/1","deprecated":false,"title":"live_sockets_disconnect(context)","anchor":"live_sockets_disconnect/1"},{"id":"live_view_stop/1","deprecated":false,"title":"live_view_stop(view)","anchor":"live_view_stop/1"},{"id":"render_stateful/3","deprecated":false,"title":"render_stateful(component, assigns \\\\ %{}, context \\\\ [])","anchor":"render_stateful/3"},{"id":"render_stateless/3","deprecated":false,"title":"render_stateless(component, assigns \\\\ [], context \\\\ [])","anchor":"render_stateless/3"},{"id":"session_conn/1","deprecated":false,"title":"session_conn(conn \\\\ build_conn())","anchor":"session_conn/1"}],"key":"functions"}],"nested_title":".UI.Common.Testing.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Common.WidgetModule","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Common.WidgetModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"declared_widget/0","deprecated":false,"title":"declared_widget()","anchor":"c:declared_widget/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"widget/1","deprecated":false,"title":"widget(module)","anchor":"widget/1"},{"id":"widget_function_error/2","deprecated":false,"title":"widget_function_error(error, args)","anchor":"widget_function_error/2"},{"id":"widgets/0","deprecated":false,"title":"widgets()","anchor":"widgets/0"},{"id":"widgets/1","deprecated":false,"title":"widgets(extension)","anchor":"widgets/1"}],"key":"functions"}],"nested_title":".UI.Common.WidgetModule","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Integration","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".UI.Me.Integration","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.AccountRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.AccountRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params \\\\ nil, session \\\\ nil, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.AccountRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.AdminRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.AdminRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.AdminRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccount","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params \\\\ nil, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.LoadCurrentAccount","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentAccountUsers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(_, _, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.LoadCurrentAccountUsers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUser","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params \\\\ nil, session, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.LoadCurrentUser","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.LoadCurrentUserCircles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(_, _, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.LoadCurrentUserCircles","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.LivePlugs.UserRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.LivePlugs.UserRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mount/3","deprecated":false,"title":"mount(params \\\\ nil, session \\\\ nil, socket)","anchor":"mount/3"},{"id":"on_mount/4","deprecated":false,"title":"on_mount(atom, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}],"nested_title":".UI.Me.LivePlugs.UserRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.AccountRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.AccountRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.AccountRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.AdminRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.AdminRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.AdminRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.GuestOnly","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.GuestOnly","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.GuestOnly","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.LoadCurrentAccount","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccount","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.LoadCurrentAccount","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.LoadCurrentAccountUsers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.LoadCurrentAccountUsers","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.LoadCurrentUser","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.LoadCurrentUser","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.LoadCurrentUser","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Plugs.UserRequired","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Plugs.UserRequired","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"}],"key":"functions"}],"nested_title":".UI.Me.Plugs.UserRequired","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.Routes","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.Routes","sections":[],"nested_title":".UI.Me.Routes","nested_context":"Bonfire"},{"id":"Bonfire.UI.Me.RuntimeConfig","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Me.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".UI.Me.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.UI.Messages.Routes","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Messages.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".UI.Messages.Routes","nested_context":"Bonfire"},{"id":"Bonfire.UI.Messages.RuntimeConfig","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Messages.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".UI.Messages.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.UI.Moderation.RuntimeConfig","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Moderation.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".UI.Moderation.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.UI.Posts.Routes","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Posts.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".UI.Posts.Routes","nested_context":"Bonfire"},{"id":"Bonfire.UI.Posts.RuntimeConfig","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Posts.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".UI.Posts.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.UI.Reactions.Routes","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Reactions.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".UI.Reactions.Routes","nested_context":"Bonfire"},{"id":"Bonfire.UI.Reactions.RuntimeConfig","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Reactions.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".UI.Reactions.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.UI.Social.Benchmark","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Social.Benchmark","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"feed/0","deprecated":false,"title":"feed()","anchor":"feed/0"},{"id":"feed_page/0","deprecated":false,"title":"feed_page()","anchor":"feed_page/0"},{"id":"feed_queries_without_benchee/0","deprecated":false,"title":"feed_queries_without_benchee()","anchor":"feed_queries_without_benchee/0"},{"id":"feed_query_methods/0","deprecated":false,"title":"feed_query_methods()","anchor":"feed_query_methods/0"},{"id":"feed_render_page/0","deprecated":false,"title":"feed_render_page()","anchor":"feed_render_page/0"},{"id":"live_feed/1","deprecated":false,"title":"live_feed(opts \\\\ [])","anchor":"live_feed/1"},{"id":"render_feed/2","deprecated":false,"title":"render_feed(feed, opts \\\\ [])","anchor":"render_feed/2"}],"key":"functions"}],"nested_title":".UI.Social.Benchmark","nested_context":"Bonfire"},{"id":"Bonfire.UI.Social.Graph.RuntimeConfig","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Social.Graph.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".UI.Social.Graph.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.UI.Social.Integration","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Social.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".UI.Social.Integration","nested_context":"Bonfire"},{"id":"Bonfire.UI.Social.Routes","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Social.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".UI.Social.Routes","nested_context":"Bonfire"},{"id":"Bonfire.UI.Social.RuntimeConfig","deprecated":false,"group":"UI extensions","title":"Bonfire.UI.Social.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".UI.Social.RuntimeConfig","nested_context":"Bonfire"},{"id":"Needle.Changesets","deprecated":false,"group":"Bonfire utilities","title":"Needle.Changesets","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"build_assoc/3","deprecated":false,"title":"build_assoc(changeset, assoc_key, rel)","anchor":"build_assoc/3"},{"id":"built?/1","deprecated":false,"title":"built?(arg1)","anchor":"built?/1"},{"id":"cast/3","deprecated":false,"title":"cast(changeset, params, cols)","anchor":"cast/3"},{"id":"cast_assoc/3","deprecated":false,"title":"cast_assoc(changeset, assoc_key, opts \\\\ [])","anchor":"cast_assoc/3"},{"id":"cast_belongs_to/4","deprecated":false,"title":"cast_belongs_to(changeset, assoc_key, assoc, opts)","anchor":"cast_belongs_to/4"},{"id":"cast_has_many/4","deprecated":false,"title":"cast_has_many(changeset, assoc_key, assoc, opts)","anchor":"cast_has_many/4"},{"id":"cast_has_one/4","deprecated":false,"title":"cast_has_one(changeset, assoc_key, assoc, opts)","anchor":"cast_has_one/4"},{"id":"config_for/3","deprecated":false,"title":"config_for(module, key, default \\\\ [])","anchor":"config_for/3"},{"id":"deleted?/1","deprecated":false,"title":"deleted?(arg1)","anchor":"deleted?/1"},{"id":"get_field/2","deprecated":false,"title":"get_field(cs, key)","anchor":"get_field/2"},{"id":"insert_verb/1","deprecated":false,"title":"insert_verb(thing)","anchor":"insert_verb/1"},{"id":"loaded?/1","deprecated":false,"title":"loaded?(arg1)","anchor":"loaded?/1"},{"id":"merge_child_errors/1","deprecated":false,"title":"merge_child_errors(cs)","anchor":"merge_child_errors/1"},{"id":"put_assoc/3","deprecated":false,"title":"put_assoc(changeset, assoc_key, rels)","anchor":"put_assoc/3"},{"id":"put_assoc!/3","deprecated":false,"title":"put_assoc!(changeset, assoc_key, rels)","anchor":"put_assoc!/3"},{"id":"put_id_on_mixins/3","deprecated":false,"title":"put_id_on_mixins(attrs, mixin_names, pointable)","anchor":"put_id_on_mixins/3"},{"id":"put_new_id/1","deprecated":false,"title":"put_new_id(changeset)","anchor":"put_new_id/1"},{"id":"state/1","deprecated":false,"title":"state(thing)","anchor":"state/1"},{"id":"update_data/2","deprecated":false,"title":"update_data(changeset, fun)","anchor":"update_data/2"},{"id":"valid?/1","deprecated":false,"title":"valid?(cs)","anchor":"valid?/1"}],"key":"functions"}]},{"id":"Needle.Form","deprecated":false,"group":"Bonfire utilities","title":"Needle.Form","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"form_schema/1","deprecated":false,"title":"form_schema(list)","anchor":"form_schema/1"},{"id":"using/2","deprecated":false,"title":"using(module, options)","anchor":"using/2"}],"key":"functions"}]},{"id":"Needle.Migration","deprecated":false,"group":"Bonfire utilities","title":"Needle.Migration","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"pointer_type/0","deprecated":false,"title":"pointer_type()","anchor":"t:pointer_type/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"add_is_not_deleted/1","deprecated":false,"title":"add_is_not_deleted(table)","anchor":"add_is_not_deleted/1"},{"id":"create_mixin_table/3","deprecated":false,"title":"create_mixin_table(name, opts \\\\ [], body)","anchor":"create_mixin_table/3"},{"id":"create_pointable_table/2","deprecated":false,"title":"create_pointable_table(a, b)","anchor":"create_pointable_table/2"},{"id":"create_pointable_table/3","deprecated":false,"title":"create_pointable_table(a, b, c)","anchor":"create_pointable_table/3"},{"id":"create_pointable_table/4","deprecated":false,"title":"create_pointable_table(a, b, c, d)","anchor":"create_pointable_table/4"},{"id":"create_random_table/3","deprecated":false,"title":"create_random_table(name, opts \\\\ [], body)","anchor":"create_random_table/3"},{"id":"create_virtual/1","deprecated":false,"title":"create_virtual(schema)","anchor":"create_virtual/1"},{"id":"create_virtual/2","deprecated":false,"title":"create_virtual(source, id)","anchor":"create_virtual/2"},{"id":"create_virtual_trigger_function/0","deprecated":false,"title":"create_virtual_trigger_function()","anchor":"create_virtual_trigger_function/0"},{"id":"drop_mixin_table/1","deprecated":false,"title":"drop_mixin_table(name)","anchor":"drop_mixin_table/1"},{"id":"drop_pointable_table/1","deprecated":false,"title":"drop_pointable_table(schema)","anchor":"drop_pointable_table/1"},{"id":"drop_pointable_table/2","deprecated":false,"title":"drop_pointable_table(name, id)","anchor":"drop_pointable_table/2"},{"id":"drop_random_table/1","deprecated":false,"title":"drop_random_table(name)","anchor":"drop_random_table/1"},{"id":"drop_table/1","deprecated":false,"title":"drop_table(name)","anchor":"drop_table/1"},{"id":"drop_virtual/1","deprecated":false,"title":"drop_virtual(schema)","anchor":"drop_virtual/1"},{"id":"drop_virtual/2","deprecated":false,"title":"drop_virtual(name, id)","anchor":"drop_virtual/2"},{"id":"init_pointers/0","deprecated":false,"title":"init_pointers()","anchor":"init_pointers/0"},{"id":"init_pointers/1","deprecated":false,"title":"init_pointers(atom)","anchor":"init_pointers/1"},{"id":"init_pointers_ulid_extra/0","deprecated":false,"title":"init_pointers_ulid_extra()","anchor":"init_pointers_ulid_extra/0"},{"id":"migrate_virtual/1","deprecated":false,"title":"migrate_virtual(schema)","anchor":"migrate_virtual/1"},{"id":"migrate_virtual/2","deprecated":false,"title":"migrate_virtual(name, schema)","anchor":"migrate_virtual/2"},{"id":"migrate_virtual/3","deprecated":false,"title":"migrate_virtual(atom, name, id)","anchor":"migrate_virtual/3"},{"id":"pointer/2","deprecated":false,"title":"pointer(table \\\\ Pointer, type)","anchor":"pointer/2"},{"id":"strong_pointer/1","deprecated":false,"title":"strong_pointer(table \\\\ Pointer)","anchor":"strong_pointer/1"},{"id":"unbreakable_pointer/1","deprecated":false,"title":"unbreakable_pointer(table \\\\ Pointer)","anchor":"unbreakable_pointer/1"},{"id":"weak_pointer/1","deprecated":false,"title":"weak_pointer(table \\\\ Pointer)","anchor":"weak_pointer/1"}],"key":"functions"}]},{"id":"Needle.Mixin","deprecated":false,"group":"Bonfire utilities","title":"Needle.Mixin","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mixin_schema/1","deprecated":false,"title":"mixin_schema(list)","anchor":"mixin_schema/1"},{"id":"using/2","deprecated":false,"title":"using(module, options)","anchor":"using/2"}],"key":"functions"}]},{"id":"Needle.NotFound","deprecated":false,"group":"Bonfire utilities","title":"Needle.NotFound","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"new/1","deprecated":false,"title":"new(name \\\\ \"Pointer\")","anchor":"new/1"}],"key":"functions"}]},{"id":"Needle.Pointable","deprecated":false,"group":"Bonfire utilities","title":"Needle.Pointable","sections":[{"id":"Sample Usage","anchor":"module-sample-usage"},{"id":"Overriding with configuration","anchor":"module-overriding-with-configuration"},{"id":"Introspection","anchor":"module-introspection"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"pointable_schema/1","deprecated":false,"title":"pointable_schema(body)","anchor":"pointable_schema/1"}],"key":"functions"}]},{"id":"Needle.Pointer","deprecated":false,"group":"Bonfire utilities","title":"Needle.Pointer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(id \\\\ Needle.ULID.generate(), table)","anchor":"create/2"}],"key":"functions"}]},{"id":"Needle.Pointers","deprecated":false,"group":"Bonfire utilities","title":"Needle.Pointers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assert_points_to!/2","deprecated":false,"title":"assert_points_to!(pointer, term)","anchor":"assert_points_to!/2"},{"id":"cast!/1","deprecated":false,"title":"cast!(p)","anchor":"cast!/1"},{"id":"get_table_id!/1","deprecated":false,"title":"get_table_id!(schema)","anchor":"get_table_id!/1"},{"id":"plan/1","deprecated":false,"title":"plan(pointers)","anchor":"plan/1"},{"id":"query_base/1","deprecated":false,"title":"query_base(type \\\\ nil)","anchor":"query_base/1"},{"id":"schema/1","deprecated":false,"title":"schema(pointer)","anchor":"schema/1"},{"id":"table/1","deprecated":false,"title":"table(pointer)","anchor":"table/1"}],"key":"functions"}]},{"id":"Needle.Random","deprecated":false,"group":"Bonfire utilities","title":"Needle.Random","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"random_schema/1","deprecated":false,"title":"random_schema(list)","anchor":"random_schema/1"},{"id":"using/2","deprecated":false,"title":"using(module, options)","anchor":"using/2"}],"key":"functions"}]},{"id":"Needle.Table","deprecated":false,"group":"Bonfire utilities","title":"Needle.Table","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}]},{"id":"Needle.Tables","deprecated":false,"group":"Bonfire utilities","title":"Needle.Tables","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"query/0","deprecated":false,"title":"query()","anchor":"t:query/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"data/0","deprecated":false,"title":"data()","anchor":"data/0"},{"id":"id/1","deprecated":false,"title":"id(query)","anchor":"id/1"},{"id":"id!/1","deprecated":false,"title":"id!(query)","anchor":"id!/1"},{"id":"ids!/1","deprecated":false,"title":"ids!(ids)","anchor":"ids!/1"},{"id":"mixin_modules/0","deprecated":false,"title":"mixin_modules()","anchor":"mixin_modules/0"},{"id":"schema/1","deprecated":false,"title":"schema(query)","anchor":"schema/1"},{"id":"schema!/1","deprecated":false,"title":"schema!(query)","anchor":"schema!/1"},{"id":"schema?/1","deprecated":false,"title":"schema?(module)","anchor":"schema?/1"},{"id":"schema_modules/0","deprecated":false,"title":"schema_modules()","anchor":"schema_modules/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"},{"id":"table/1","deprecated":false,"title":"table(query)","anchor":"table/1"},{"id":"table!/1","deprecated":false,"title":"table!(query)","anchor":"table!/1"}],"key":"functions"}]},{"id":"Needle.ULID","deprecated":false,"group":"Bonfire utilities","title":"Needle.ULID","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bingenerate/1","deprecated":false,"title":"bingenerate(timestamp \\\\ System.system_time(:millisecond))","anchor":"bingenerate/1"},{"id":"bintimestamp/1","deprecated":false,"title":"bintimestamp(arg)","anchor":"bintimestamp/1"},{"id":"cast/1","deprecated":false,"title":"cast(value)","anchor":"cast/1"},{"id":"cast!/1","deprecated":false,"title":"cast!(value)","anchor":"cast!/1"},{"id":"dump/1","deprecated":false,"title":"dump(encoded)","anchor":"dump/1"},{"id":"dump!/1","deprecated":false,"title":"dump!(encoded)","anchor":"dump!/1"},{"id":"embed_as/1","deprecated":false,"title":"embed_as(_)","anchor":"embed_as/1"},{"id":"encoded_randomness/1","deprecated":false,"title":"encoded_randomness(arg)","anchor":"encoded_randomness/1"},{"id":"encoded_timestamp/1","deprecated":false,"title":"encoded_timestamp(arg)","anchor":"encoded_timestamp/1"},{"id":"equal?/2","deprecated":false,"title":"equal?(term1, term2)","anchor":"equal?/2"},{"id":"generate/1","deprecated":false,"title":"generate(timestamp \\\\ System.system_time(:millisecond))","anchor":"generate/1"},{"id":"load/1","deprecated":false,"title":"load(bytes)","anchor":"load/1"},{"id":"synthesise!/1","deprecated":false,"title":"synthesise!(x)","anchor":"synthesise!/1"},{"id":"timestamp/1","deprecated":false,"title":"timestamp(encoded)","anchor":"timestamp/1"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"type/0"}],"key":"functions"}]},{"id":"Needle.ULID.Migration","deprecated":false,"group":"Bonfire utilities","title":"Needle.ULID.Migration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"init_pointers_ulid_extra/0","deprecated":false,"title":"init_pointers_ulid_extra()","anchor":"init_pointers_ulid_extra/0"},{"id":"init_pointers_ulid_extra/1","deprecated":false,"title":"init_pointers_ulid_extra(atom)","anchor":"init_pointers_ulid_extra/1"}],"key":"functions"}]},{"id":"Needle.Unpointable","deprecated":false,"group":"Bonfire utilities","title":"Needle.Unpointable","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"unpointable_schema/1","deprecated":false,"title":"unpointable_schema(list)","anchor":"unpointable_schema/1"},{"id":"using/2","deprecated":false,"title":"using(module, options)","anchor":"using/2"}],"key":"functions"}]},{"id":"Needle.Virtual","deprecated":false,"group":"Bonfire utilities","title":"Needle.Virtual","sections":[{"id":"Sample Usage","anchor":"module-sample-usage"},{"id":"Overriding with configuration","anchor":"module-overriding-with-configuration"},{"id":"Introspection","anchor":"module-introspection"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"virtual_schema/1","deprecated":false,"title":"virtual_schema(body)","anchor":"virtual_schema/1"}],"key":"functions"}]},{"id":"Bonfire.Boundaries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acls_from_preset_boundary_names/1","deprecated":false,"title":"acls_from_preset_boundary_names(presets)","anchor":"acls_from_preset_boundary_names/1"},{"id":"boundaries_normalise/1","deprecated":false,"title":"boundaries_normalise(text)","anchor":"boundaries_normalise/1"},{"id":"boundaries_or_default/2","deprecated":false,"title":"boundaries_or_default(to_boundaries, context \\\\ [])","anchor":"boundaries_or_default/2"},{"id":"can?/4","deprecated":false,"title":"can?(circle_name, verbs, object, opts \\\\ [])","anchor":"can?/4"},{"id":"default_boundaries/1","deprecated":false,"title":"default_boundaries(context \\\\ [])","anchor":"default_boundaries/1"},{"id":"find_caretaker_stereotype/3","deprecated":false,"title":"find_caretaker_stereotype(caretaker, stereotype, from)","anchor":"find_caretaker_stereotype/3"},{"id":"find_caretaker_stereotypes/3","deprecated":false,"title":"find_caretaker_stereotypes(caretaker, stereotypes, from \\\\ Pointer)","anchor":"find_caretaker_stereotypes/3"},{"id":"find_caretaker_stereotypes_q/3","deprecated":false,"title":"find_caretaker_stereotypes_q(caretaker, stereotypes, from)","anchor":"find_caretaker_stereotypes_q/3"},{"id":"list_grants_on/1","deprecated":false,"title":"list_grants_on(things)","anchor":"list_grants_on/1"},{"id":"list_grants_on/2","deprecated":false,"title":"list_grants_on(things, verbs)","anchor":"list_grants_on/2"},{"id":"list_object_acls/2","deprecated":false,"title":"list_object_acls(object, opts \\\\ [])","anchor":"list_object_acls/2"},{"id":"list_object_boundaries/2","deprecated":false,"title":"list_object_boundaries(object, opts \\\\ [])","anchor":"list_object_boundaries/2"},{"id":"load_pointer/2","deprecated":false,"title":"load_pointer(item, opts)","anchor":"load_pointer/2"},{"id":"load_pointers/2","deprecated":false,"title":"load_pointers(items, opts)","anchor":"load_pointers/2"},{"id":"pointer_permitted?/2","deprecated":false,"title":"pointer_permitted?(item, opts)","anchor":"pointer_permitted?/2"},{"id":"preset_boundary_from_acl/2","deprecated":false,"title":"preset_boundary_from_acl(acl, object_type \\\\ nil)","anchor":"preset_boundary_from_acl/2"},{"id":"preset_boundary_tuple_from_acl/2","deprecated":false,"title":"preset_boundary_tuple_from_acl(acl, object_type \\\\ nil)","anchor":"preset_boundary_tuple_from_acl/2"},{"id":"preset_name/2","deprecated":false,"title":"preset_name(boundaries, include_remote? \\\\ false)","anchor":"preset_name/2"},{"id":"replace_boundaries/4","deprecated":false,"title":"replace_boundaries(creator, object, previous_preset, opts)","anchor":"replace_boundaries/4"},{"id":"set_boundaries/3","deprecated":false,"title":"set_boundaries(creator, object, opts)","anchor":"set_boundaries/3"},{"id":"take_care_of!/2","deprecated":false,"title":"take_care_of!(things, user)","anchor":"take_care_of!/2"},{"id":"user_default_boundaries/0","deprecated":false,"title":"user_default_boundaries()","anchor":"user_default_boundaries/0"},{"id":"users_grants_on/2","deprecated":false,"title":"users_grants_on(users, things)","anchor":"users_grants_on/2"},{"id":"users_grants_on/3","deprecated":false,"title":"users_grants_on(users, things, verbs)","anchor":"users_grants_on/3"}],"key":"functions"}],"nested_title":".Boundaries","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Acls","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Acls","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl_grants_to_tuples/2","deprecated":false,"title":"acl_grants_to_tuples(creator, acls)","anchor":"acl_grants_to_tuples/2"},{"id":"acl_id/1","deprecated":false,"title":"acl_id(obj)","anchor":"acl_id/1"},{"id":"acls/0","deprecated":false,"title":"acls()","anchor":"acls/0"},{"id":"acls_from_preset/3","deprecated":false,"title":"acls_from_preset(creator, to_boundaries, opts \\\\ [])","anchor":"acls_from_preset/3"},{"id":"base_acls_from_preset/3","deprecated":false,"title":"base_acls_from_preset(creator, preset, opts \\\\ [])","anchor":"base_acls_from_preset/3"},{"id":"built_in_ids/0","deprecated":false,"title":"built_in_ids()","anchor":"built_in_ids/0"},{"id":"cast/3","deprecated":false,"title":"cast(changeset, creator, opts)","anchor":"cast/3"},{"id":"changeset/3","deprecated":false,"title":"changeset(atom, attrs, opts)","anchor":"changeset/3"},{"id":"create/2","deprecated":false,"title":"create(attrs \\\\ %{}, opts)","anchor":"create/2"},{"id":"default_exclude_ids/1","deprecated":false,"title":"default_exclude_ids(including_custom? \\\\ true)","anchor":"default_exclude_ids/1"},{"id":"delete/2","deprecated":false,"title":"delete(acl, opts)","anchor":"delete/2"},{"id":"edit/3","deprecated":false,"title":"edit(acl, user, params)","anchor":"edit/3"},{"id":"exclude_stereotypes/1","deprecated":false,"title":"exclude_stereotypes(including_custom? \\\\ true)","anchor":"exclude_stereotypes/1"},{"id":"get/1","deprecated":false,"title":"get(slug)","anchor":"get/1"},{"id":"get!/1","deprecated":false,"title":"get!(slug)","anchor":"get!/1"},{"id":"get_for_caretaker/3","deprecated":false,"title":"get_for_caretaker(id, caretaker, opts \\\\ [])","anchor":"get_for_caretaker/3"},{"id":"get_for_caretaker_q/3","deprecated":false,"title":"get_for_caretaker_q(id, caretaker, opts \\\\ [])","anchor":"get_for_caretaker_q/3"},{"id":"get_id/1","deprecated":false,"title":"get_id(slug)","anchor":"get_id/1"},{"id":"get_id!/1","deprecated":false,"title":"get_id!(slug)","anchor":"get_id!/1"},{"id":"get_object_custom_acl/1","deprecated":false,"title":"get_object_custom_acl(object)","anchor":"get_object_custom_acl/1"},{"id":"get_or_create_object_custom_acl/2","deprecated":false,"title":"get_or_create_object_custom_acl(object, caretaker \\\\ nil)","anchor":"get_or_create_object_custom_acl/2"},{"id":"grant_tuples_from_preset/3","deprecated":false,"title":"grant_tuples_from_preset(creator, to_boundaries, opts \\\\ [])","anchor":"grant_tuples_from_preset/3"},{"id":"is_built_in?/1","deprecated":false,"title":"is_built_in?(acl)","anchor":"is_built_in?/1"},{"id":"is_object_custom?/1","deprecated":false,"title":"is_object_custom?(acl)","anchor":"is_object_custom?/1"},{"id":"is_stereotype?/1","deprecated":false,"title":"is_stereotype?(acl)","anchor":"is_stereotype?/1"},{"id":"is_stereotyped?/1","deprecated":false,"title":"is_stereotyped?(acl)","anchor":"is_stereotyped?/1"},{"id":"list/1","deprecated":false,"title":"list(opts \\\\ [])","anchor":"list/1"},{"id":"list_built_ins/1","deprecated":false,"title":"list_built_ins(opts \\\\ [])","anchor":"list_built_ins/1"},{"id":"list_my/2","deprecated":false,"title":"list_my(user, opts \\\\ [])","anchor":"list_my/2"},{"id":"list_my_q/2","deprecated":false,"title":"list_my_q(user, opts \\\\ [])","anchor":"list_my_q/2"},{"id":"list_my_with_counts/2","deprecated":false,"title":"list_my_with_counts(user, opts \\\\ [])","anchor":"list_my_with_counts/2"},{"id":"list_q/1","deprecated":false,"title":"list_q(opts \\\\ [])","anchor":"list_q/1"},{"id":"local_acl_ids/1","deprecated":false,"title":"local_acl_ids(preset_acls \\\\ Config.get!(:preset_acls_match))","anchor":"local_acl_ids/1"},{"id":"maybe_by_ids/2","deprecated":false,"title":"maybe_by_ids(query, ids)","anchor":"maybe_by_ids/2"},{"id":"maybe_search/2","deprecated":false,"title":"maybe_search(query, text)","anchor":"maybe_search/2"},{"id":"opts_for_dropdown/0","deprecated":false,"title":"opts_for_dropdown()","anchor":"opts_for_dropdown/0"},{"id":"opts_for_list/0","deprecated":false,"title":"opts_for_list()","anchor":"opts_for_list/0"},{"id":"prepare_cast/3","deprecated":false,"title":"prepare_cast(changeset_or_obj, creator, opts)","anchor":"prepare_cast/3"},{"id":"preset_acl_ids/0","deprecated":false,"title":"preset_acl_ids()","anchor":"preset_acl_ids/0"},{"id":"preview/2","deprecated":false,"title":"preview(creator, opts)","anchor":"preview/2"},{"id":"public_acl_ids/1","deprecated":false,"title":"public_acl_ids(preset_acls \\\\ Config.get!(:preset_acls_match))","anchor":"public_acl_ids/1"},{"id":"remote_public_acl_ids/0","deprecated":false,"title":"remote_public_acl_ids()","anchor":"remote_public_acl_ids/0"},{"id":"set/3","deprecated":false,"title":"set(object, creator, opts)","anchor":"set/3"},{"id":"simple_create/2","deprecated":false,"title":"simple_create(caretaker, name)","anchor":"simple_create/2"},{"id":"soft_delete/2","deprecated":false,"title":"soft_delete(acl, opts)","anchor":"soft_delete/2"},{"id":"stereotype_ids/0","deprecated":false,"title":"stereotype_ids()","anchor":"stereotype_ids/0"},{"id":"user_default_acl/1","deprecated":false,"title":"user_default_acl(name)","anchor":"user_default_acl/1"},{"id":"user_default_acls/0","deprecated":false,"title":"user_default_acls()","anchor":"user_default_acls/0"}],"key":"functions"}],"nested_title":".Boundaries.Acls","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Acts.SetBoundaries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Acts.SetBoundaries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Boundaries.Acts.SetBoundaries","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Blocks","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Blocks","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(blocker, activity, blocked)","anchor":"ap_receive_activity/3"},{"id":"block/3","deprecated":false,"title":"block(user_or_instance_to_block, block_type \\\\ nil, scope)","anchor":"block/3"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"instance_wide_block/2","deprecated":false,"title":"instance_wide_block(user_or_instance_to_block, block_type \\\\ nil)","anchor":"instance_wide_block/2"},{"id":"instance_wide_circles/1","deprecated":false,"title":"instance_wide_circles(block_types)","anchor":"instance_wide_circles/1"},{"id":"is_blocked?/3","deprecated":false,"title":"is_blocked?(user_or_instance, block_type \\\\ :any, opts \\\\ [])","anchor":"is_blocked?/3"},{"id":"list/2","deprecated":false,"title":"list(block_type, opts)","anchor":"list/2"},{"id":"remote_instance_block/3","deprecated":false,"title":"remote_instance_block(display_hostname, block_type, scope)","anchor":"remote_instance_block/3"},{"id":"types_blocked/1","deprecated":false,"title":"types_blocked(types)","anchor":"types_blocked/1"},{"id":"unblock/3","deprecated":false,"title":"unblock(user_or_instance_to_block, block_type \\\\ nil, scope)","anchor":"unblock/3"},{"id":"unblock_all/2","deprecated":false,"title":"unblock_all(block_type \\\\ nil, scope)","anchor":"unblock_all/2"},{"id":"user_block_circles/2","deprecated":false,"title":"user_block_circles(current_user, block_type)","anchor":"user_block_circles/2"}],"key":"functions"}],"nested_title":".Boundaries.Blocks","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Blocks.LiveHandler","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Blocks.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"update_many/2","deprecated":false,"title":"update_many(assigns_sockets, opts \\\\ [])","anchor":"update_many/2"},{"id":"update_many_opts/1","deprecated":false,"title":"update_many_opts(opts \\\\ [])","anchor":"update_many_opts/1"}],"key":"functions"}],"nested_title":".Boundaries.Blocks.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Circles","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Circles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_to_circles/2","deprecated":false,"title":"add_to_circles(subject, circles)","anchor":"add_to_circles/2"},{"id":"built_in_ids/0","deprecated":false,"title":"built_in_ids()","anchor":"built_in_ids/0"},{"id":"changeset/2","deprecated":false,"title":"changeset(circle \\\\ %Circle{}, attrs)","anchor":"changeset/2"},{"id":"changeset/3","deprecated":false,"title":"changeset(atom, circle, params)","anchor":"changeset/3"},{"id":"circle_ids/1","deprecated":false,"title":"circle_ids(subjects)","anchor":"circle_ids/1"},{"id":"circles/0","deprecated":false,"title":"circles()","anchor":"circles/0"},{"id":"create/2","deprecated":false,"title":"create(user, attrs)","anchor":"create/2"},{"id":"delete/2","deprecated":false,"title":"delete(circle, opts)","anchor":"delete/2"},{"id":"edit/3","deprecated":false,"title":"edit(circle, user, params)","anchor":"edit/3"},{"id":"empty_circles/1","deprecated":false,"title":"empty_circles(circles)","anchor":"empty_circles/1"},{"id":"get/1","deprecated":false,"title":"get(slug)","anchor":"get/1"},{"id":"get!/1","deprecated":false,"title":"get!(slug)","anchor":"get!/1"},{"id":"get_by_name/2","deprecated":false,"title":"get_by_name(name, caretaker)","anchor":"get_by_name/2"},{"id":"get_for_caretaker/3","deprecated":false,"title":"get_for_caretaker(id, caretaker, opts \\\\ [])","anchor":"get_for_caretaker/3"},{"id":"get_id/1","deprecated":false,"title":"get_id(slug)","anchor":"get_id/1"},{"id":"get_id!/1","deprecated":false,"title":"get_id!(slug)","anchor":"get_id!/1"},{"id":"get_or_create/2","deprecated":false,"title":"get_or_create(name, caretaker \\\\ nil)","anchor":"get_or_create/2"},{"id":"get_stereotype_circles/2","deprecated":false,"title":"get_stereotype_circles(subject, stereotypes)","anchor":"get_stereotype_circles/2"},{"id":"get_tuple/1","deprecated":false,"title":"get_tuple(slug)","anchor":"get_tuple/1"},{"id":"is_built_in?/1","deprecated":false,"title":"is_built_in?(circle)","anchor":"is_built_in?/1"},{"id":"is_encircled_by?/2","deprecated":false,"title":"is_encircled_by?(subject, circle)","anchor":"is_encircled_by?/2"},{"id":"is_encircled_by_q/2","deprecated":false,"title":"is_encircled_by_q(subject, circles)","anchor":"is_encircled_by_q/2"},{"id":"is_stereotype?/1","deprecated":false,"title":"is_stereotype?(acl)","anchor":"is_stereotype?/1"},{"id":"list_built_ins/0","deprecated":false,"title":"list_built_ins()","anchor":"list_built_ins/0"},{"id":"list_by_ids/1","deprecated":false,"title":"list_by_ids(ids)","anchor":"list_by_ids/1"},{"id":"list_my/2","deprecated":false,"title":"list_my(user, opts \\\\ [])","anchor":"list_my/2"},{"id":"list_my_defaults/1","deprecated":false,"title":"list_my_defaults(user \\\\ nil)","anchor":"list_my_defaults/1"},{"id":"list_my_with_counts/2","deprecated":false,"title":"list_my_with_counts(user, opts \\\\ [])","anchor":"list_my_with_counts/2"},{"id":"list_my_with_global/2","deprecated":false,"title":"list_my_with_global(user, opts \\\\ [])","anchor":"list_my_with_global/2"},{"id":"list_visible/2","deprecated":false,"title":"list_visible(user, opts \\\\ [])","anchor":"list_visible/2"},{"id":"preload_encircled_by/3","deprecated":false,"title":"preload_encircled_by(subject, circles, opts \\\\ [])","anchor":"preload_encircled_by/3"},{"id":"query/1","deprecated":false,"title":"query(opts \\\\ [])","anchor":"query/1"},{"id":"query_my/2","deprecated":false,"title":"query_my(caretaker, opts \\\\ [])","anchor":"query_my/2"},{"id":"query_my_by_id/3","deprecated":false,"title":"query_my_by_id(id, caretaker, opts \\\\ [])","anchor":"query_my_by_id/3"},{"id":"query_visible/2","deprecated":false,"title":"query_visible(user, opts \\\\ [])","anchor":"query_visible/2"},{"id":"remove_from_circles/2","deprecated":false,"title":"remove_from_circles(subject, circles)","anchor":"remove_from_circles/2"},{"id":"stereotype_ids/0","deprecated":false,"title":"stereotype_ids()","anchor":"stereotype_ids/0"},{"id":"stereotypes/1","deprecated":false,"title":"stereotypes(atom)","anchor":"stereotypes/1"},{"id":"to_circle_ids/1","deprecated":false,"title":"to_circle_ids(subjects)","anchor":"to_circle_ids/1"}],"key":"functions"}],"nested_title":".Boundaries.Circles","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Controlleds","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Controlleds","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_acls/2","deprecated":false,"title":"add_acls(object, acl)","anchor":"add_acls/2"},{"id":"changeset/2","deprecated":false,"title":"changeset(c \\\\ %Controlled{}, attrs)","anchor":"changeset/2"},{"id":"create/1","deprecated":false,"title":"create(attrs)","anchor":"create/1"},{"id":"get_preset_on_object/1","deprecated":false,"title":"get_preset_on_object(object)","anchor":"get_preset_on_object/1"},{"id":"grant_role/4","deprecated":false,"title":"grant_role(subject_id, object, role, opts \\\\ [])","anchor":"grant_role/4"},{"id":"list_acls_on_object/2","deprecated":false,"title":"list_acls_on_object(object, opts \\\\ [])","anchor":"list_acls_on_object/2"},{"id":"list_grants_by_verbs/3","deprecated":false,"title":"list_grants_by_verbs(objects, verbs, value \\\\ true)","anchor":"list_grants_by_verbs/3"},{"id":"list_on_object/2","deprecated":false,"title":"list_on_object(object, opts \\\\ [])","anchor":"list_on_object/2"},{"id":"list_on_objects_by_subject/2","deprecated":false,"title":"list_on_objects_by_subject(objects, current_user)","anchor":"list_on_objects_by_subject/2"},{"id":"list_presets_on_objects/1","deprecated":false,"title":"list_presets_on_objects(objects)","anchor":"list_presets_on_objects/1"},{"id":"list_q/1","deprecated":false,"title":"list_q(opts \\\\ [])","anchor":"list_q/1"},{"id":"list_subjects_by_verb/3","deprecated":false,"title":"list_subjects_by_verb(objects, verb, value \\\\ true)","anchor":"list_subjects_by_verb/3"},{"id":"remove_acls/2","deprecated":false,"title":"remove_acls(object, acls)","anchor":"remove_acls/2"}],"key":"functions"}],"nested_title":".Boundaries.Controlleds","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Debug","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Debug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"debug_grants_on/1","deprecated":false,"title":"debug_grants_on(things)","anchor":"debug_grants_on/1"},{"id":"debug_grants_on/2","deprecated":false,"title":"debug_grants_on(things, verbs)","anchor":"debug_grants_on/2"},{"id":"debug_my_grants_on/2","deprecated":false,"title":"debug_my_grants_on(users, things)","anchor":"debug_my_grants_on/2"},{"id":"debug_object_acls/1","deprecated":false,"title":"debug_object_acls(thing)","anchor":"debug_object_acls/1"},{"id":"debug_user_acls/2","deprecated":false,"title":"debug_user_acls(user, label \\\\ \"\")","anchor":"debug_user_acls/2"},{"id":"debug_user_circles/1","deprecated":false,"title":"debug_user_circles(user)","anchor":"debug_user_circles/1"}],"key":"functions"}],"nested_title":".Boundaries.Debug","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Fixtures","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Fixtures","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"activity_pub_circle/0","deprecated":false,"title":"activity_pub_circle()","anchor":"activity_pub_circle/0"},{"id":"admin_circle/0","deprecated":false,"title":"admin_circle()","anchor":"admin_circle/0"},{"id":"custom_acl/0","deprecated":false,"title":"custom_acl()","anchor":"custom_acl/0"},{"id":"fixtures/0","deprecated":false,"title":"fixtures()","anchor":"fixtures/0"},{"id":"global_circles/0","deprecated":false,"title":"global_circles()","anchor":"global_circles/0"},{"id":"insert/0","deprecated":false,"title":"insert()","anchor":"insert/0"},{"id":"instance_acl/0","deprecated":false,"title":"instance_acl()","anchor":"instance_acl/0"},{"id":"mod_circle/0","deprecated":false,"title":"mod_circle()","anchor":"mod_circle/0"}],"key":"functions"}],"nested_title":".Boundaries.Fixtures","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.FixturesUsersMigrations","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.FixturesUsersMigrations","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"down/0","deprecated":false,"title":"down()","anchor":"down/0"},{"id":"up/0","deprecated":false,"title":"up()","anchor":"up/0"}],"key":"functions"}],"nested_title":".Boundaries.FixturesUsersMigrations","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Grants","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Grants","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(grant \\\\ %Grant{}, attrs)","anchor":"changeset/2"},{"id":"changeset/3","deprecated":false,"title":"changeset(atom, attrs, opts)","anchor":"changeset/3"},{"id":"create/1","deprecated":false,"title":"create(attrs)","anchor":"create/1"},{"id":"create/2","deprecated":false,"title":"create(attrs, opts)","anchor":"create/2"},{"id":"get/1","deprecated":false,"title":"get(slug)","anchor":"get/1"},{"id":"grant/5","deprecated":false,"title":"grant(subject_id, acl_id, verb, value, opts \\\\ [])","anchor":"grant/5"},{"id":"grant_role/4","deprecated":false,"title":"grant_role(subject_id, acl_id, role, opts \\\\ [])","anchor":"grant_role/4"},{"id":"grants/0","deprecated":false,"title":"grants()","anchor":"grants/0"},{"id":"grants_to_tuples/2","deprecated":false,"title":"grants_to_tuples(creator, grants)","anchor":"grants_to_tuples/2"},{"id":"list/1","deprecated":false,"title":"list(opts)","anchor":"list/1"},{"id":"list_for_acl/2","deprecated":false,"title":"list_for_acl(acl, opts)","anchor":"list_for_acl/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(user)","anchor":"list_my/1"},{"id":"list_q/1","deprecated":false,"title":"list_q(opts)","anchor":"list_q/1"},{"id":"remove_subject_from_acl/2","deprecated":false,"title":"remove_subject_from_acl(subject, acls)","anchor":"remove_subject_from_acl/2"},{"id":"subject_grants/1","deprecated":false,"title":"subject_grants(grants)","anchor":"subject_grants/1"},{"id":"subject_verb_grants/1","deprecated":false,"title":"subject_verb_grants(grants)","anchor":"subject_verb_grants/1"},{"id":"subjects/1","deprecated":false,"title":"subjects(grants)","anchor":"subjects/1"},{"id":"upsert_or_delete/2","deprecated":false,"title":"upsert_or_delete(attrs, opts)","anchor":"upsert_or_delete/2"},{"id":"verb_subject_grant/1","deprecated":false,"title":"verb_subject_grant(grants)","anchor":"verb_subject_grant/1"}],"key":"functions"}],"nested_title":".Boundaries.Grants","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Integration","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"is_local?/1","deprecated":false,"title":"is_local?(thing)","anchor":"is_local?/1"},{"id":"many/3","deprecated":false,"title":"many(query, paginate?, opts \\\\ [])","anchor":"many/3"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Boundaries.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.LiveHandler","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl_create/2","deprecated":false,"title":"acl_create(attrs, socket)","anchor":"acl_create/2"},{"id":"boundaries_on_objects/2","deprecated":false,"title":"boundaries_on_objects(list_of_ids, current_user)","anchor":"boundaries_on_objects/2"},{"id":"circle_create/2","deprecated":false,"title":"circle_create(attrs, socket)","anchor":"circle_create/2"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(action, attrs, socket)","anchor":"handle_event/3"},{"id":"maybe_check_boundaries/2","deprecated":false,"title":"maybe_check_boundaries(assigns_sockets, opts \\\\ [])","anchor":"maybe_check_boundaries/2"},{"id":"maybe_redirect_to/3","deprecated":false,"title":"maybe_redirect_to(socket, path, arg3)","anchor":"maybe_redirect_to/3"},{"id":"my_acls/2","deprecated":false,"title":"my_acls(current_user_id, opts \\\\ nil)","anchor":"my_acls/2"},{"id":"my_circles_paginated/2","deprecated":false,"title":"my_circles_paginated(scope, attrs \\\\ nil)","anchor":"my_circles_paginated/2"},{"id":"prepare_assigns/1","deprecated":false,"title":"prepare_assigns(socket)","anchor":"prepare_assigns/1"},{"id":"remove_from_circle_tuples/2","deprecated":false,"title":"remove_from_circle_tuples(ids, previous_circles)","anchor":"remove_from_circle_tuples/2"},{"id":"scope_origin/2","deprecated":false,"title":"scope_origin(assigns \\\\ nil, socket)","anchor":"scope_origin/2"},{"id":"set_circles_tuples/3","deprecated":false,"title":"set_circles_tuples(field, circles, socket)","anchor":"set_circles_tuples/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"subject_name/1","deprecated":false,"title":"subject_name(subject)","anchor":"subject_name/1"},{"id":"unblock/4","deprecated":false,"title":"unblock(id, block_type, scope, socket)","anchor":"unblock/4"},{"id":"update_many/2","deprecated":false,"title":"update_many(assigns_sockets, opts \\\\ [])","anchor":"update_many/2"},{"id":"update_many_opts/1","deprecated":false,"title":"update_many_opts(opts \\\\ [])","anchor":"update_many_opts/1"}],"key":"functions"}],"nested_title":".Boundaries.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Queries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_perms/2","deprecated":false,"title":"add_perms(l, r)","anchor":"add_perms/2"},{"id":"agg_perms/1","deprecated":false,"title":"agg_perms(p)","anchor":"agg_perms/1"},{"id":"boundarise/3","deprecated":false,"title":"boundarise(query, field_ref, opts)","anchor":"boundarise/3"},{"id":"object_boundarised/2","deprecated":false,"title":"object_boundarised(q, opts \\\\ nil)","anchor":"object_boundarised/2"},{"id":"permitted/1","deprecated":false,"title":"permitted(user)","anchor":"permitted/1"},{"id":"permitted/2","deprecated":false,"title":"permitted(user, verbs)","anchor":"permitted/2"},{"id":"query_with_summary/3","deprecated":false,"title":"query_with_summary(user, verbs \\\\ [:see, :read], query \\\\ Summary)","anchor":"query_with_summary/3"},{"id":"skip_boundary_check?/2","deprecated":false,"title":"skip_boundary_check?(opts, object \\\\ nil)","anchor":"skip_boundary_check?/2"}],"key":"functions"}],"nested_title":".Boundaries.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Roles","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Roles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cannot_role_from_verb/5","deprecated":false,"title":"cannot_role_from_verb(verbs, verb_field \\\\ :verb, all_role_verbs \\\\ role_verbs(:all), role_for_all \\\\ :read, verbs_field \\\\ :cannot_verbs)","anchor":"cannot_role_from_verb/5"},{"id":"create/2","deprecated":false,"title":"create(attrs, opts)","anchor":"create/2"},{"id":"create/3","deprecated":false,"title":"create(name, usage, opts)","anchor":"create/3"},{"id":"edit_verb_permission/4","deprecated":false,"title":"edit_verb_permission(role_name, verb, value, opts)","anchor":"edit_verb_permission/4"},{"id":"get/2","deprecated":false,"title":"get(role_name, opts \\\\ [])","anchor":"get/2"},{"id":"preset_boundary_role_from_acl/1","deprecated":false,"title":"preset_boundary_role_from_acl(summary)","anchor":"preset_boundary_role_from_acl/1"},{"id":"reset_instance_roles/0","deprecated":false,"title":"reset_instance_roles()","anchor":"reset_instance_roles/0"},{"id":"role_from_grants/2","deprecated":false,"title":"role_from_grants(grants, opts)","anchor":"role_from_grants/2"},{"id":"role_from_verb/5","deprecated":false,"title":"role_from_verb(verbs, verb_field \\\\ :verb, all_role_verbs \\\\ role_verbs(:all), role_for_all \\\\ :administer, verbs_field \\\\ :can_verbs)","anchor":"role_from_verb/5"},{"id":"role_verbs/2","deprecated":false,"title":"role_verbs(usage \\\\ :all, opts \\\\ [])","anchor":"role_verbs/2"},{"id":"roles_for_dropdown/2","deprecated":false,"title":"roles_for_dropdown(usage \\\\ nil, opts)","anchor":"roles_for_dropdown/2"},{"id":"split_tuples_can_cannot/1","deprecated":false,"title":"split_tuples_can_cannot(tuples)","anchor":"split_tuples_can_cannot/1"},{"id":"verbs_for_role/2","deprecated":false,"title":"verbs_for_role(role, opts \\\\ [])","anchor":"verbs_for_role/2"}],"key":"functions"}],"nested_title":".Boundaries.Roles","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.RuntimeConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Boundaries.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Summary","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Summary","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"migrate_views/0","deprecated":false,"title":"migrate_views()","anchor":"migrate_views/0"}],"key":"functions"}],"nested_title":".Boundaries.Summary","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Users","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Users","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create_default_boundaries/2","deprecated":false,"title":"create_default_boundaries(user, opts \\\\ [])","anchor":"create_default_boundaries/2"},{"id":"create_missing_boundaries/2","deprecated":false,"title":"create_missing_boundaries(user, opts \\\\ [])","anchor":"create_missing_boundaries/2"},{"id":"do_insert_main/2","deprecated":false,"title":"do_insert_main(user, map)","anchor":"do_insert_main/2"},{"id":"prepare_default_boundaries/3","deprecated":false,"title":"prepare_default_boundaries(user, acls_extra, opts)","anchor":"prepare_default_boundaries/3"}],"key":"functions"}],"nested_title":".Boundaries.Users","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Verbs","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Verbs","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(verb \\\\ %Verb{}, attrs)","anchor":"changeset/2"},{"id":"create/1","deprecated":false,"title":"create(attrs)","anchor":"create/1"},{"id":"get/2","deprecated":false,"title":"get(slug, all_verbs \\\\ verbs())","anchor":"get/2"},{"id":"get!/2","deprecated":false,"title":"get!(id_or_name, all_verbs \\\\ verbs())","anchor":"get!/2"},{"id":"get_id/2","deprecated":false,"title":"get_id(slug, all_verbs \\\\ verbs())","anchor":"get_id/2"},{"id":"get_id!/2","deprecated":false,"title":"get_id!(slug, all_verbs \\\\ verbs())","anchor":"get_id!/2"},{"id":"get_slug/2","deprecated":false,"title":"get_slug(id_or_name, all_verbs \\\\ verbs())","anchor":"get_slug/2"},{"id":"get_tuple/2","deprecated":false,"title":"get_tuple(id_or_name, all_verbs \\\\ verbs())","anchor":"get_tuple/2"},{"id":"ids/2","deprecated":false,"title":"ids(verbs, all_verbs \\\\ verbs())","anchor":"ids/2"},{"id":"list/2","deprecated":false,"title":"list(from \\\\ :db, key \\\\ :verb)","anchor":"list/2"},{"id":"list_verbs_debug/0","deprecated":false,"title":"list_verbs_debug()","anchor":"list_verbs_debug/0"},{"id":"slugs/0","deprecated":false,"title":"slugs()","anchor":"slugs/0"},{"id":"verbs/0","deprecated":false,"title":"verbs()","anchor":"verbs/0"},{"id":"verbs_count/0","deprecated":false,"title":"verbs_count()","anchor":"verbs_count/0"}],"key":"functions"}],"nested_title":".Boundaries.Verbs","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Web.ExcludeBoundaries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Web.ExcludeBoundaries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_handle_event/3","deprecated":false,"title":"do_handle_event(event, params, socket)","anchor":"do_handle_event/3"}],"key":"functions"}],"nested_title":".Boundaries.Web.ExcludeBoundaries","nested_context":"Bonfire"},{"id":"Bonfire.Boundaries.Web.Routes","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Boundaries.Web.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".Boundaries.Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Common","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common","sections":[],"nested_title":".Common","nested_context":"Bonfire"},{"id":"Bonfire.Common.Benchmark","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Benchmark","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"apply_timed/1","deprecated":false,"title":"apply_timed(function)","anchor":"apply_timed/1"},{"id":"apply_timed/2","deprecated":false,"title":"apply_timed(function, args)","anchor":"apply_timed/2"},{"id":"apply_timed/3","deprecated":false,"title":"apply_timed(module, function, args)","anchor":"apply_timed/3"}],"key":"functions"}],"nested_title":".Common.Benchmark","nested_context":"Bonfire"},{"id":"Bonfire.Common.Cache","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Cache","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cache/0","deprecated":false,"title":"cache()","anchor":"cache/0"},{"id":"cache_store/1","deprecated":false,"title":"cache_store(opts \\\\ [])","anchor":"cache_store/1"},{"id":"cached_preloads_for_objects/3","deprecated":false,"title":"cached_preloads_for_objects(name, objects, fun)","anchor":"cached_preloads_for_objects/3"},{"id":"get/2","deprecated":false,"title":"get(key, opts \\\\ [])","anchor":"get/2"},{"id":"get!/2","deprecated":false,"title":"get!(key, opts \\\\ [])","anchor":"get!/2"},{"id":"maybe_apply_cached/3","deprecated":false,"title":"maybe_apply_cached(fun, args \\\\ [], opts \\\\ [])","anchor":"maybe_apply_cached/3"},{"id":"put/3","deprecated":false,"title":"put(key, value, opts \\\\ [])","anchor":"put/3"},{"id":"remove/2","deprecated":false,"title":"remove(key, opts \\\\ [])","anchor":"remove/2"},{"id":"remove_all/1","deprecated":false,"title":"remove_all(opts \\\\ [])","anchor":"remove_all/1"},{"id":"reset/3","deprecated":false,"title":"reset(fun, args, opts \\\\ [])","anchor":"reset/3"}],"key":"functions"}],"nested_title":".Common.Cache","nested_context":"Bonfire"},{"id":"Bonfire.Common.Changelog.Github.DataGrabber","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Changelog.Github.DataGrabber","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fetch_issues/1","deprecated":false,"title":"fetch_issues(opts \\\\ [])","anchor":"fetch_issues/1"},{"id":"format_issue/1","deprecated":false,"title":"format_issue(issue)","anchor":"format_issue/1"},{"id":"prepare_data/2","deprecated":false,"title":"prepare_data(issues, new_version)","anchor":"prepare_data/2"}],"key":"functions"}],"nested_title":".Common.Changelog.Github.DataGrabber","nested_context":"Bonfire"},{"id":"Bonfire.Common.Config","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Config","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"compilation_error/1","deprecated":false,"title":"compilation_error(error)","anchor":"compilation_error/1"},{"id":"delete/2","deprecated":false,"title":"delete(key, otp_app \\\\ top_level_otp_app())","anchor":"delete/2"},{"id":"endpoint_module/0","deprecated":false,"title":"endpoint_module()","anchor":"endpoint_module/0"},{"id":"env/0","deprecated":false,"title":"env()","anchor":"env/0"},{"id":"get/3","deprecated":false,"title":"get(key_or_keys, default \\\\ nil, otp_app \\\\ nil)","anchor":"get/3"},{"id":"get!/2","deprecated":false,"title":"get!(key, otp_app \\\\ top_level_otp_app())","anchor":"get!/2"},{"id":"get_ext/1","deprecated":false,"title":"get_ext(module_or_otp_app)","anchor":"get_ext/1"},{"id":"get_ext/3","deprecated":false,"title":"get_ext(module_or_otp_app, key, default \\\\ nil)","anchor":"get_ext/3"},{"id":"get_ext!/1","deprecated":false,"title":"get_ext!(module_or_otp_app)","anchor":"get_ext!/1"},{"id":"get_ext!/2","deprecated":false,"title":"get_ext!(module_or_otp_app, key)","anchor":"get_ext!/2"},{"id":"keys_tree/1","deprecated":false,"title":"keys_tree(keys)","anchor":"keys_tree/1"},{"id":"module_enabled?/1","deprecated":false,"title":"module_enabled?(module)","anchor":"module_enabled?/1"},{"id":"put/1","deprecated":false,"title":"put(tree)","anchor":"put/1"},{"id":"put/3","deprecated":false,"title":"put(key, value, otp_app \\\\ nil)","anchor":"put/3"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"},{"id":"require_extension_config!/1","deprecated":false,"title":"require_extension_config!(extension)","anchor":"require_extension_config!/1"},{"id":"top_level_otp_app/0","deprecated":false,"title":"top_level_otp_app()","anchor":"top_level_otp_app/0"}],"key":"functions"}],"nested_title":".Common.Config","nested_context":"Bonfire"},{"id":"Bonfire.Common.Config.Error","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Config.Error","sections":[],"nested_title":".Common.Config.Error","nested_context":"Bonfire"},{"id":"Bonfire.Common.Config.LoadExtensionsConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Config.LoadExtensionsConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"load_configs/1","deprecated":false,"title":"load_configs(extras \\\\ [])","anchor":"load_configs/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Common.Config.LoadExtensionsConfig","nested_context":"Bonfire"},{"id":"Bonfire.Common.ConfigModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.ConfigModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"c:config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"c:config_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Common.ConfigModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.ContextModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.ContextModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"context_module/0","deprecated":false,"title":"context_module()","anchor":"c:context_module/0"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"c:query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"c:schema_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"apply_error/2","deprecated":false,"title":"apply_error(error, args)","anchor":"apply_error/2"},{"id":"context_function_error/2","deprecated":false,"title":"context_function_error(error, args)","anchor":"context_function_error/2"},{"id":"context_module/1","deprecated":false,"title":"context_module(query)","anchor":"context_module/1"},{"id":"context_module!/1","deprecated":false,"title":"context_module!(query)","anchor":"context_module!/1"},{"id":"context_modules/1","deprecated":false,"title":"context_modules(modules)","anchor":"context_modules/1"},{"id":"linked_query_modules/0","deprecated":false,"title":"linked_query_modules()","anchor":"linked_query_modules/0"},{"id":"linked_schema_modules/0","deprecated":false,"title":"linked_schema_modules()","anchor":"linked_schema_modules/0"},{"id":"maybe_apply/4","deprecated":false,"title":"maybe_apply(object_schema_or_context, fun, args \\\\ [], fallback_fun \\\\ &apply_error/2)","anchor":"maybe_apply/4"},{"id":"maybe_context_module/1","deprecated":false,"title":"maybe_context_module(query)","anchor":"maybe_context_module/1"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Common.ContextModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.DatesTimes","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.DatesTimes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"date_from_now/2","deprecated":false,"title":"date_from_now(date, opts \\\\ [])","anchor":"date_from_now/2"},{"id":"date_from_pointer/1","deprecated":false,"title":"date_from_pointer(object)","anchor":"date_from_pointer/1"},{"id":"format/2","deprecated":false,"title":"format(date, opts \\\\ [])","anchor":"format/2"},{"id":"future?/1","deprecated":false,"title":"future?(dt)","anchor":"future?/1"},{"id":"now/0","deprecated":false,"title":"now()","anchor":"now/0"},{"id":"past/2","deprecated":false,"title":"past(amount_to_remove, unit \\\\ :second)","anchor":"past/2"},{"id":"past?/1","deprecated":false,"title":"past?(dt)","anchor":"past?/1"},{"id":"remove/3","deprecated":false,"title":"remove(dt, amount_to_remove, unit \\\\ :second)","anchor":"remove/3"},{"id":"to_date/1","deprecated":false,"title":"to_date(date)","anchor":"to_date/1"}],"key":"functions"}],"nested_title":".Common.DatesTimes","nested_context":"Bonfire"},{"id":"Bonfire.Common.Enums","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Enums","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"attr_get_id/2","deprecated":false,"title":"attr_get_id(attrs, field_name)","anchor":"attr_get_id/2"},{"id":"count_where/2","deprecated":false,"title":"count_where(collection, function \\\\ &is_nil/1)","anchor":"count_where/2"},{"id":"deep_merge/3","deprecated":false,"title":"deep_merge(left, right, opts \\\\ [])","anchor":"deep_merge/3"},{"id":"deep_merge_reduce/2","deprecated":false,"title":"deep_merge_reduce(list_or_map, opts \\\\ [])","anchor":"deep_merge_reduce/2"},{"id":"enum_get/3","deprecated":false,"title":"enum_get(map, key, fallback \\\\ nil)","anchor":"enum_get/3"},{"id":"filter_empty/2","deprecated":false,"title":"filter_empty(val, fallback)","anchor":"filter_empty/2"},{"id":"filter_empty/3","deprecated":false,"title":"filter_empty(enum, fallback, key)","anchor":"filter_empty/3"},{"id":"flatter/1","deprecated":false,"title":"flatter(list)","anchor":"flatter/1"},{"id":"fun/3","deprecated":false,"title":"fun(map, fun, args \\\\ [])","anchor":"fun/3"},{"id":"group/2","deprecated":false,"title":"group(list, fun)","anchor":"group/2"},{"id":"group_map/2","deprecated":false,"title":"group_map(list, fun)","anchor":"group_map/2"},{"id":"has_duplicates?/2","deprecated":false,"title":"has_duplicates?(list, fun \\\\ nil)","anchor":"has_duplicates?/2"},{"id":"id/1","deprecated":false,"title":"id(id)","anchor":"id/1"},{"id":"ids/1","deprecated":false,"title":"ids(objects)","anchor":"ids/1"},{"id":"input_to_atoms/2","deprecated":false,"title":"input_to_atoms(data, opts \\\\ [])","anchor":"input_to_atoms/2"},{"id":"input_to_value/7","deprecated":false,"title":"input_to_value(v, _, including_values, _, force, arg6, values_to_integers)","anchor":"input_to_value/7"},{"id":"map_filter_empty/1","deprecated":false,"title":"map_filter_empty(data)","anchor":"map_filter_empty/1"},{"id":"map_key_replace/4","deprecated":false,"title":"map_key_replace(map, key, new_key, new_value \\\\ nil)","anchor":"map_key_replace/4"},{"id":"map_key_replace_existing/4","deprecated":false,"title":"map_key_replace_existing(map, key, new_key, new_value \\\\ nil)","anchor":"map_key_replace_existing/4"},{"id":"map_new/2","deprecated":false,"title":"map_new(data, fallback_key \\\\ :data)","anchor":"map_new/2"},{"id":"maybe_append/2","deprecated":false,"title":"maybe_append(list, value)","anchor":"maybe_append/2"},{"id":"maybe_elem/3","deprecated":false,"title":"maybe_elem(tuple, index, fallback \\\\ nil)","anchor":"maybe_elem/3"},{"id":"maybe_flatten/1","deprecated":false,"title":"maybe_flatten(list)","anchor":"maybe_flatten/1"},{"id":"maybe_from_struct/1","deprecated":false,"title":"maybe_from_struct(obj)","anchor":"maybe_from_struct/1"},{"id":"maybe_get/3","deprecated":false,"title":"maybe_get(map, key, fallback \\\\ nil)","anchor":"maybe_get/3"},{"id":"maybe_list/2","deprecated":false,"title":"maybe_list(val, change_fn)","anchor":"maybe_list/2"},{"id":"maybe_merge_to_struct/2","deprecated":false,"title":"maybe_merge_to_struct(first, precedence)","anchor":"maybe_merge_to_struct/2"},{"id":"maybe_put/3","deprecated":false,"title":"maybe_put(map, key, value)","anchor":"maybe_put/3"},{"id":"maybe_to_keyword_list/2","deprecated":false,"title":"maybe_to_keyword_list(obj, recursive \\\\ false)","anchor":"maybe_to_keyword_list/2"},{"id":"maybe_to_map/2","deprecated":false,"title":"maybe_to_map(obj, recursive \\\\ false)","anchor":"maybe_to_map/2"},{"id":"maybe_to_struct/2","deprecated":false,"title":"maybe_to_struct(obj, type \\\\ nil)","anchor":"maybe_to_struct/2"},{"id":"maybe_to_structs/2","deprecated":false,"title":"maybe_to_structs(v, opts \\\\ [])","anchor":"maybe_to_structs/2"},{"id":"merge_as_map/3","deprecated":false,"title":"merge_as_map(left, right, opts \\\\ [])","anchor":"merge_as_map/3"},{"id":"merge_changesets/2","deprecated":false,"title":"merge_changesets(cs1, cs2)","anchor":"merge_changesets/2"},{"id":"merge_keeping_only_first_keys/2","deprecated":false,"title":"merge_keeping_only_first_keys(map_1, map_2)","anchor":"merge_keeping_only_first_keys/2"},{"id":"merge_structs_as_map/2","deprecated":false,"title":"merge_structs_as_map(target, merge)","anchor":"merge_structs_as_map/2"},{"id":"merge_uniq/2","deprecated":false,"title":"merge_uniq(left, right)","anchor":"merge_uniq/2"},{"id":"naughty_to_atoms!/2","deprecated":false,"title":"naughty_to_atoms!(data, opts \\\\ [])","anchor":"naughty_to_atoms!/2"},{"id":"nested_structs_to_maps/1","deprecated":false,"title":"nested_structs_to_maps(struct)","anchor":"nested_structs_to_maps/1"},{"id":"put_new_in/3","deprecated":false,"title":"put_new_in(map, list, val)","anchor":"put_new_in/3"},{"id":"stringify_keys/2","deprecated":false,"title":"stringify_keys(map, recursive \\\\ false)","anchor":"stringify_keys/2"},{"id":"struct_from_map/2","deprecated":false,"title":"struct_from_map(a_map, list)","anchor":"struct_from_map/2"},{"id":"struct_to_map/1","deprecated":false,"title":"struct_to_map(struct)","anchor":"struct_to_map/1"},{"id":"uniq_by_id/1","deprecated":false,"title":"uniq_by_id(list)","anchor":"uniq_by_id/1"}],"key":"functions"}],"nested_title":".Common.Enums","nested_context":"Bonfire"},{"id":"Bonfire.Common.Errors","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Errors","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"debug_banner_with_trace/4","deprecated":false,"title":"debug_banner_with_trace(kind, exception, stacktrace, opts \\\\ [])","anchor":"debug_banner_with_trace/4"},{"id":"debug_exception/5","deprecated":false,"title":"debug_exception(msg, exception \\\\ nil, stacktrace \\\\ nil, kind \\\\ :error, opts \\\\ [])","anchor":"debug_exception/5"},{"id":"debug_log/4","deprecated":false,"title":"debug_log(msg, exception \\\\ nil, stacktrace \\\\ nil, kind \\\\ :error)","anchor":"debug_log/4"},{"id":"error_msg/1","deprecated":false,"title":"error_msg(errors)","anchor":"error_msg/1"},{"id":"format_banner/4","deprecated":false,"title":"format_banner(kind, exception, stacktrace \\\\ [], opts \\\\ [])","anchor":"format_banner/4"},{"id":"format_location/1","deprecated":false,"title":"format_location(opts)","anchor":"format_location/1"},{"id":"format_mfa/3","deprecated":false,"title":"format_mfa(module, fun, arity)","anchor":"format_mfa/3"},{"id":"format_stacktrace/2","deprecated":false,"title":"format_stacktrace(trace \\\\ nil, opts)","anchor":"format_stacktrace/2"},{"id":"format_stacktrace_entry/2","deprecated":false,"title":"format_stacktrace_entry(entry, opts \\\\ [])","anchor":"format_stacktrace_entry/2"},{"id":"format_stacktrace_entry_sliced/2","deprecated":false,"title":"format_stacktrace_entry_sliced(entry, opts)","anchor":"format_stacktrace_entry_sliced/2"},{"id":"last_stacktrace/0","deprecated":false,"title":"last_stacktrace()","anchor":"last_stacktrace/0"},{"id":"map_error/2","deprecated":false,"title":"map_error(other, fun)","anchor":"map_error/2"},{"id":"maybe_ok_error/2","deprecated":false,"title":"maybe_ok_error(other, change_fn)","anchor":"maybe_ok_error/2"},{"id":"mf_maybe_link_to_code/4","deprecated":false,"title":"mf_maybe_link_to_code(text \\\\ nil, mod, fun, opts)","anchor":"mf_maybe_link_to_code/4"},{"id":"module_maybe_link_to_code/3","deprecated":false,"title":"module_maybe_link_to_code(text \\\\ nil, mod, opts)","anchor":"module_maybe_link_to_code/3"},{"id":"replace_error/2","deprecated":false,"title":"replace_error(other, value)","anchor":"replace_error/2"}],"key":"functions"}],"nested_title":".Common.Errors","nested_context":"Bonfire"},{"id":"Bonfire.Common.Extend","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Extend","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"application_loaded?/1","deprecated":false,"title":"application_loaded?(extension)","anchor":"application_loaded?/1"},{"id":"disabled_value?/1","deprecated":false,"title":"disabled_value?(value)","anchor":"disabled_value?/1"},{"id":"extend_module/1","deprecated":false,"title":"extend_module(module)","anchor":"extend_module/1"},{"id":"extension_enabled?/2","deprecated":false,"title":"extension_enabled?(module_or_otp_app, opts \\\\ [])","anchor":"extension_enabled?/2"},{"id":"extension_loaded?/1","deprecated":false,"title":"extension_loaded?(module_or_otp_app)","anchor":"extension_loaded?/1"},{"id":"function_ast/2","deprecated":false,"title":"function_ast(module, fun)","anchor":"function_ast/2"},{"id":"function_code/2","deprecated":false,"title":"function_code(module, fun)","anchor":"function_code/2"},{"id":"function_line_number/2","deprecated":false,"title":"function_line_number(module, fun)","anchor":"function_line_number/2"},{"id":"function_line_numbers/2","deprecated":false,"title":"function_line_numbers(module, fun)","anchor":"function_line_numbers/2"},{"id":"generate_reverse_router!/0","deprecated":false,"title":"generate_reverse_router!()","anchor":"generate_reverse_router!/0"},{"id":"has_extension_config?/1","deprecated":false,"title":"has_extension_config?(module_or_otp_app)","anchor":"has_extension_config?/1"},{"id":"import_if_enabled/2","deprecated":false,"title":"import_if_enabled(module, fallback_module \\\\ nil)","anchor":"import_if_enabled/2"},{"id":"inject_function/3","deprecated":false,"title":"inject_function(module, fun, target_module \\\\ nil)","anchor":"inject_function/3"},{"id":"macro_inspect/1","deprecated":false,"title":"macro_inspect(fun)","anchor":"macro_inspect/1"},{"id":"maybe_extension_loaded/1","deprecated":false,"title":"maybe_extension_loaded(module_or_otp_app)","anchor":"maybe_extension_loaded/1"},{"id":"maybe_extension_loaded!/1","deprecated":false,"title":"maybe_extension_loaded!(module_or_otp_app)","anchor":"maybe_extension_loaded!/1"},{"id":"maybe_module/2","deprecated":false,"title":"maybe_module(module, opts \\\\ [])","anchor":"maybe_module/2"},{"id":"maybe_module!/2","deprecated":false,"title":"maybe_module!(module, opts \\\\ [])","anchor":"maybe_module!/2"},{"id":"maybe_module_loaded/1","deprecated":false,"title":"maybe_module_loaded(module)","anchor":"maybe_module_loaded/1"},{"id":"maybe_schema_or_pointer/1","deprecated":false,"title":"maybe_schema_or_pointer(schema_module)","anchor":"maybe_schema_or_pointer/1"},{"id":"module_code/1","deprecated":false,"title":"module_code(module)","anchor":"module_code/1"},{"id":"module_enabled?/2","deprecated":false,"title":"module_enabled?(module, opts \\\\ [])","anchor":"module_enabled?/2"},{"id":"module_exists?/1","deprecated":false,"title":"module_exists?(module)","anchor":"module_exists?/1"},{"id":"module_exists_or/2","deprecated":false,"title":"module_exists_or(module, fallback)","anchor":"module_exists_or/2"},{"id":"module_file/1","deprecated":false,"title":"module_file(module)","anchor":"module_file/1"},{"id":"module_file_code/1","deprecated":false,"title":"module_file_code(module)","anchor":"module_file_code/1"},{"id":"quoted_import_if_enabled/3","deprecated":false,"title":"quoted_import_if_enabled(module, fallback_module \\\\ nil, caller \\\\ nil)","anchor":"quoted_import_if_enabled/3"},{"id":"quoted_require_if_enabled/3","deprecated":false,"title":"quoted_require_if_enabled(module, fallback_module \\\\ nil, caller \\\\ nil)","anchor":"quoted_require_if_enabled/3"},{"id":"quoted_use_if_enabled/3","deprecated":false,"title":"quoted_use_if_enabled(module, fallback_module \\\\ nil, caller \\\\ nil)","anchor":"quoted_use_if_enabled/3"},{"id":"require_if_enabled/2","deprecated":false,"title":"require_if_enabled(module, fallback_module \\\\ nil)","anchor":"require_if_enabled/2"},{"id":"split_lines/1","deprecated":false,"title":"split_lines(string)","anchor":"split_lines/1"},{"id":"use_if_enabled/2","deprecated":false,"title":"use_if_enabled(module, fallback_module \\\\ nil)","anchor":"use_if_enabled/2"}],"key":"functions"}],"nested_title":".Common.Extend","nested_context":"Bonfire"},{"id":"Bonfire.Common.ExtensionBehaviour","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.ExtensionBehaviour","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"c:modules/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"adopters_of_behaviour/1","deprecated":false,"title":"adopters_of_behaviour(behaviour \\\\ __MODULE__)","anchor":"adopters_of_behaviour/1"},{"id":"apply_modules/2","deprecated":false,"title":"apply_modules(modules, fun)","anchor":"apply_modules/2"},{"id":"apply_modules_cached/2","deprecated":false,"title":"apply_modules_cached(modules, fun)","anchor":"apply_modules_cached/2"},{"id":"apps_to_scan/0","deprecated":false,"title":"apps_to_scan()","anchor":"apps_to_scan/0"},{"id":"behaviour_app_modules/2","deprecated":false,"title":"behaviour_app_modules(behaviour, behaviours \\\\ nil)","anchor":"behaviour_app_modules/2"},{"id":"behaviour_modules/2","deprecated":false,"title":"behaviour_modules(behaviour, behaviours \\\\ nil)","anchor":"behaviour_modules/2"},{"id":"behaviours/0","deprecated":false,"title":"behaviours()","anchor":"behaviours/0"},{"id":"cached_behaviours/0","deprecated":false,"title":"cached_behaviours()","anchor":"cached_behaviours/0"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"find_adopters_of_behaviours/1","deprecated":false,"title":"find_adopters_of_behaviours(behaviours \\\\ find_extension_behaviours())","anchor":"find_adopters_of_behaviours/1"},{"id":"find_extension_behaviours/0","deprecated":false,"title":"find_extension_behaviours()","anchor":"find_extension_behaviours/0"},{"id":"module_behaviours/1","deprecated":false,"title":"module_behaviours(module \\\\ __MODULE__)","anchor":"module_behaviours/1"},{"id":"populate/0","deprecated":false,"title":"populate()","anchor":"populate/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Common.ExtensionBehaviour","nested_context":"Bonfire"},{"id":"Bonfire.Common.ExtensionModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.ExtensionModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"declared_extension/0","deprecated":false,"title":"declared_extension()","anchor":"c:declared_extension/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"declared_extension/1","deprecated":false,"title":"declared_extension(module)","anchor":"declared_extension/1"},{"id":"declared_extensions/1","deprecated":false,"title":"declared_extensions(modules \\\\ app_modules())","anchor":"declared_extensions/1"},{"id":"default_nav/0","deprecated":false,"title":"default_nav()","anchor":"default_nav/0"},{"id":"default_nav/1","deprecated":false,"title":"default_nav(app)","anchor":"default_nav/1"},{"id":"extension/1","deprecated":false,"title":"extension(app)","anchor":"extension/1"},{"id":"extension_function_error/2","deprecated":false,"title":"extension_function_error(error, args)","anchor":"extension_function_error/2"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Common.ExtensionModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.Extensions","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Extensions","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"data/0","deprecated":false,"title":"data()","anchor":"data/0"},{"id":"get_branch/1","deprecated":false,"title":"get_branch(arg1)","anchor":"get_branch/1"},{"id":"get_code_link/1","deprecated":false,"title":"get_code_link(dep)","anchor":"get_code_link/1"},{"id":"get_link/1","deprecated":false,"title":"get_link(dep)","anchor":"get_link/1"},{"id":"get_version/1","deprecated":false,"title":"get_version(dep)","anchor":"get_version/1"},{"id":"get_version_link/1","deprecated":false,"title":"get_version_link(dep)","anchor":"get_version_link/1"},{"id":"global_disable/1","deprecated":false,"title":"global_disable(extension)","anchor":"global_disable/1"},{"id":"global_enable/1","deprecated":false,"title":"global_enable(extension)","anchor":"global_enable/1"},{"id":"loaded_deps/1","deprecated":false,"title":"loaded_deps(opts \\\\ [])","anchor":"loaded_deps/1"}],"key":"functions"}],"nested_title":".Common.Extensions","nested_context":"Bonfire"},{"id":"Bonfire.Common.Extensions.Diff","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Extensions.Diff","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"analyse_repo_latest_diff_stream/1","deprecated":false,"title":"analyse_repo_latest_diff_stream(path_diff)","anchor":"analyse_repo_latest_diff_stream/1"},{"id":"generate_diff/2","deprecated":false,"title":"generate_diff(ref_or_branch, repo_path)","anchor":"generate_diff/2"},{"id":"git!/4","deprecated":false,"title":"git!(args, repo_path \\\\ \".\", into \\\\ default_into(), original_cwd \\\\ root())","anchor":"git!/4"},{"id":"git_add_all/1","deprecated":false,"title":"git_add_all(repo_path)","anchor":"git_add_all/1"},{"id":"git_fetch/1","deprecated":false,"title":"git_fetch(repo_path)","anchor":"git_fetch/1"},{"id":"git_generate_diff/4","deprecated":false,"title":"git_generate_diff(ref_or_branch, repo_path, path_output, extra_opt \\\\ \"--cached\")","anchor":"git_generate_diff/4"},{"id":"git_pre_configure/1","deprecated":false,"title":"git_pre_configure(repo_path)","anchor":"git_pre_configure/1"},{"id":"parse_repo_latest_diff/1","deprecated":false,"title":"parse_repo_latest_diff(path_diff)","anchor":"parse_repo_latest_diff/1"},{"id":"repo_latest_diff/3","deprecated":false,"title":"repo_latest_diff(ref_or_branch, repo_path, msg \\\\ nil)","anchor":"repo_latest_diff/3"},{"id":"root/0","deprecated":false,"title":"root()","anchor":"root/0"},{"id":"tmp_path/1","deprecated":false,"title":"tmp_path(prefix)","anchor":"tmp_path/1"}],"key":"functions"}],"nested_title":".Common.Extensions.Diff","nested_context":"Bonfire"},{"id":"Bonfire.Common.HTTP","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.HTTP","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"delete/4","deprecated":false,"title":"delete(url, body \\\\ \"\", headers \\\\ [], options \\\\ [])","anchor":"delete/4"},{"id":"get/3","deprecated":false,"title":"get(url, headers \\\\ [], options \\\\ [])","anchor":"get/3"},{"id":"get_cached/1","deprecated":false,"title":"get_cached(url)","anchor":"get_cached/1"},{"id":"patch/4","deprecated":false,"title":"patch(url, body, headers \\\\ [], options \\\\ [])","anchor":"patch/4"},{"id":"post/4","deprecated":false,"title":"post(url, body, headers \\\\ [], options \\\\ [])","anchor":"post/4"},{"id":"put/4","deprecated":false,"title":"put(url, body, headers \\\\ [], options \\\\ [])","anchor":"put/4"},{"id":"request/5","deprecated":false,"title":"request(method, url, body \\\\ \"\", headers \\\\ [], options \\\\ [])","anchor":"request/5"}],"key":"functions"}],"nested_title":".Common.HTTP","nested_context":"Bonfire"},{"id":"Bonfire.Common.HTTP.Connection","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.HTTP.Connection","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"adapter_options/2","deprecated":false,"title":"adapter_options(adapter \\\\ Tesla.Adapter.Hackney, opts)","anchor":"adapter_options/2"},{"id":"new/1","deprecated":false,"title":"new(opts \\\\ [])","anchor":"new/1"}],"key":"functions"}],"nested_title":".Common.HTTP.Connection","nested_context":"Bonfire"},{"id":"Bonfire.Common.HTTP.RequestBuilder","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.HTTP.RequestBuilder","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_param/4","deprecated":false,"title":"add_param(request, atom1, atom2, values)","anchor":"add_param/4"},{"id":"headers/2","deprecated":false,"title":"headers(request, header_list)","anchor":"headers/2"},{"id":"method/2","deprecated":false,"title":"method(request, m)","anchor":"method/2"},{"id":"opts/2","deprecated":false,"title":"opts(request, options)","anchor":"opts/2"},{"id":"url/2","deprecated":false,"title":"url(request, u)","anchor":"url/2"}],"key":"functions"}],"nested_title":".Common.HTTP.RequestBuilder","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"default_locale/0","deprecated":false,"title":"default_locale()","anchor":"default_locale/0"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"get_locale/0"},{"id":"get_locale_id/0","deprecated":false,"title":"get_locale_id()","anchor":"get_locale_id/0"},{"id":"known_locales/0","deprecated":false,"title":"known_locales()","anchor":"known_locales/0"},{"id":"locale_name/1","deprecated":false,"title":"locale_name(locale)","anchor":"locale_name/1"},{"id":"put_locale/1","deprecated":false,"title":"put_locale(locale)","anchor":"put_locale/1"},{"id":"set_locale_config/0","deprecated":false,"title":"set_locale_config()","anchor":"set_locale_config/0"}],"key":"functions"}],"nested_title":".Common.Localise","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"available_locale_name?/1","deprecated":false,"title":"available_locale_name?(locale_name)","anchor":"available_locale_name?/1"},{"id":"default_locale/0","deprecated":false,"title":"default_locale()","anchor":"default_locale/0"},{"id":"default_territory/0","deprecated":false,"title":"default_territory()","anchor":"default_territory/0"},{"id":"ellipsis/2","deprecated":false,"title":"ellipsis(string, options \\\\ [])","anchor":"ellipsis/2"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"get_locale/0"},{"id":"known_calendars/0","deprecated":false,"title":"known_calendars()","anchor":"known_calendars/0"},{"id":"known_currencies/0","deprecated":false,"title":"known_currencies()","anchor":"known_currencies/0"},{"id":"known_gettext_locale_name/1","deprecated":false,"title":"known_gettext_locale_name(locale_name)","anchor":"known_gettext_locale_name/1"},{"id":"known_gettext_locale_name?/1","deprecated":false,"title":"known_gettext_locale_name?(locale_name)","anchor":"known_gettext_locale_name?/1"},{"id":"known_gettext_locale_names/0","deprecated":false,"title":"known_gettext_locale_names()","anchor":"known_gettext_locale_names/0"},{"id":"known_locale_name/1","deprecated":false,"title":"known_locale_name(locale_name)","anchor":"known_locale_name/1"},{"id":"known_locale_name?/1","deprecated":false,"title":"known_locale_name?(locale_name)","anchor":"known_locale_name?/1"},{"id":"known_locale_names/0","deprecated":false,"title":"known_locale_names()","anchor":"known_locale_names/0"},{"id":"known_number_system_types/0","deprecated":false,"title":"known_number_system_types()","anchor":"known_number_system_types/0"},{"id":"known_number_systems/0","deprecated":false,"title":"known_number_systems()","anchor":"known_number_systems/0"},{"id":"known_rbnf_locale_name/1","deprecated":false,"title":"known_rbnf_locale_name(locale_name)","anchor":"known_rbnf_locale_name/1"},{"id":"known_rbnf_locale_name?/1","deprecated":false,"title":"known_rbnf_locale_name?(locale_name)","anchor":"known_rbnf_locale_name?/1"},{"id":"known_rbnf_locale_names/0","deprecated":false,"title":"known_rbnf_locale_names()","anchor":"known_rbnf_locale_names/0"},{"id":"known_territories/0","deprecated":false,"title":"known_territories()","anchor":"known_territories/0"},{"id":"normalize_lenient_parse/3","deprecated":false,"title":"normalize_lenient_parse(string, scope, locale \\\\ get_locale())","anchor":"normalize_lenient_parse/3"},{"id":"put_gettext_locale/1","deprecated":false,"title":"put_gettext_locale(locale)","anchor":"put_gettext_locale/1"},{"id":"put_locale/1","deprecated":false,"title":"put_locale(locale_name)","anchor":"put_locale/1"},{"id":"quote/2","deprecated":false,"title":"quote(string, options \\\\ [])","anchor":"quote/2"},{"id":"unknown_locale_names/0","deprecated":false,"title":"unknown_locale_names()","anchor":"unknown_locale_names/0"},{"id":"validate_calendar/1","deprecated":false,"title":"validate_calendar(calendar)","anchor":"validate_calendar/1"},{"id":"validate_currency/1","deprecated":false,"title":"validate_currency(currency)","anchor":"validate_currency/1"},{"id":"validate_locale/1","deprecated":false,"title":"validate_locale(locale)","anchor":"validate_locale/1"},{"id":"validate_number_system/1","deprecated":false,"title":"validate_number_system(number_system)","anchor":"validate_number_system/1"},{"id":"validate_number_system_type/1","deprecated":false,"title":"validate_number_system_type(number_system_type)","anchor":"validate_number_system_type/1"},{"id":"validate_territory/1","deprecated":false,"title":"validate_territory(territory)","anchor":"validate_territory/1"},{"id":"with_locale/2","deprecated":false,"title":"with_locale(locale, fun)","anchor":"with_locale/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.AcceptLanguage","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.AcceptLanguage","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"best_match/1","deprecated":false,"title":"best_match(accept_language)","anchor":"best_match/1"},{"id":"parse/1","deprecated":false,"title":"parse(tokens_or_string)","anchor":"parse/1"},{"id":"parse!/1","deprecated":false,"title":"parse!(accept_language)","anchor":"parse!/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.AcceptLanguage","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Calendar","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Calendar","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"calendar_from_locale/1","deprecated":false,"title":"calendar_from_locale(locale)","anchor":"calendar_from_locale/1"},{"id":"calendar_from_territory/1","deprecated":false,"title":"calendar_from_territory(territory)","anchor":"calendar_from_territory/1"},{"id":"cyclic_years/2","deprecated":false,"title":"cyclic_years(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"cyclic_years/2"},{"id":"day_periods/2","deprecated":false,"title":"day_periods(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"day_periods/2"},{"id":"days/2","deprecated":false,"title":"days(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"days/2"},{"id":"eras/2","deprecated":false,"title":"eras(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"eras/2"},{"id":"month_patterns/2","deprecated":false,"title":"month_patterns(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"month_patterns/2"},{"id":"months/2","deprecated":false,"title":"months(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"months/2"},{"id":"quarters/2","deprecated":false,"title":"quarters(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ :gregorian)","anchor":"quarters/2"},{"id":"strftime_options!/2","deprecated":false,"title":"strftime_options!(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), options \\\\ [])","anchor":"strftime_options!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Calendar","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Currency","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Currency","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"currencies_for_locale/3","deprecated":false,"title":"currencies_for_locale(locale, only \\\\ :all, except \\\\ nil)","anchor":"currencies_for_locale/3"},{"id":"currencies_for_locale!/3","deprecated":false,"title":"currencies_for_locale!(locale, only \\\\ :all, except \\\\ nil)","anchor":"currencies_for_locale!/3"},{"id":"currency_for_code/2","deprecated":false,"title":"currency_for_code(currency_or_currency_code, options \\\\ [locale: Bonfire.Common.Localise.Cldr.default_locale()])","anchor":"currency_for_code/2"},{"id":"currency_for_code!/2","deprecated":false,"title":"currency_for_code!(currency_or_currency_code, options \\\\ [locale: Bonfire.Common.Localise.Cldr.default_locale()])","anchor":"currency_for_code!/2"},{"id":"currency_from_locale/1","deprecated":false,"title":"currency_from_locale(locale)","anchor":"currency_from_locale/1"},{"id":"currency_history_for_locale/1","deprecated":false,"title":"currency_history_for_locale(language_tag)","anchor":"currency_history_for_locale/1"},{"id":"currency_strings/3","deprecated":false,"title":"currency_strings(locale, only \\\\ :all, except \\\\ nil)","anchor":"currency_strings/3"},{"id":"currency_strings!/3","deprecated":false,"title":"currency_strings!(locale_name, only \\\\ :all, except \\\\ nil)","anchor":"currency_strings!/3"},{"id":"current_currency_from_locale/1","deprecated":false,"title":"current_currency_from_locale(locale)","anchor":"current_currency_from_locale/1"},{"id":"current_territory_currencies/0","deprecated":false,"title":"current_territory_currencies()","anchor":"current_territory_currencies/0"},{"id":"known_currencies/0","deprecated":false,"title":"known_currencies()","anchor":"known_currencies/0"},{"id":"known_currency?/1","deprecated":false,"title":"known_currency?(code)","anchor":"known_currency?/1"},{"id":"known_currency_code/1","deprecated":false,"title":"known_currency_code(currency_code)","anchor":"known_currency_code/1"},{"id":"known_currency_code?/1","deprecated":false,"title":"known_currency_code?(currency_code)","anchor":"known_currency_code?/1"},{"id":"known_currency_codes/0","deprecated":false,"title":"known_currency_codes()","anchor":"known_currency_codes/0"},{"id":"new/2","deprecated":false,"title":"new(currency, options \\\\ [])","anchor":"new/2"},{"id":"pluralize/3","deprecated":false,"title":"pluralize(number, currency, options \\\\ [])","anchor":"pluralize/3"},{"id":"strings_for_currency/2","deprecated":false,"title":"strings_for_currency(currency, locale)","anchor":"strings_for_currency/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Currency","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Date","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Date","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(date, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(date, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Date","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Date.Interval","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Date.Interval","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_to_string!/3","deprecated":false,"title":"do_to_string!(from, to, options)","anchor":"do_to_string!/3"},{"id":"to_string/3","deprecated":false,"title":"to_string(from, to, options)","anchor":"to_string/3"},{"id":"to_string!/3","deprecated":false,"title":"to_string!(from, to, options)","anchor":"to_string!/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Date.Interval","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(date_time, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(date_time, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime.Format","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime.Format","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"calendar/0","deprecated":false,"title":"calendar()","anchor":"t:calendar/0"},{"id":"formats/0","deprecated":false,"title":"formats()","anchor":"t:formats/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"calendars_for/1","deprecated":false,"title":"calendars_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"calendars_for/1"},{"id":"date_formats/2","deprecated":false,"title":"date_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_formats/2"},{"id":"date_time_at_formats/2","deprecated":false,"title":"date_time_at_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_at_formats/2"},{"id":"date_time_available_formats/2","deprecated":false,"title":"date_time_available_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_available_formats/2"},{"id":"date_time_formats/2","deprecated":false,"title":"date_time_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_formats/2"},{"id":"date_time_interval_fallback/2","deprecated":false,"title":"date_time_interval_fallback(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_interval_fallback/2"},{"id":"date_time_interval_formats/2","deprecated":false,"title":"date_time_interval_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"date_time_interval_formats/2"},{"id":"day_period_for/2","deprecated":false,"title":"day_period_for(time, language)","anchor":"day_period_for/2"},{"id":"gmt_format/1","deprecated":false,"title":"gmt_format(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"gmt_format/1"},{"id":"gmt_zero_format/1","deprecated":false,"title":"gmt_zero_format(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"gmt_zero_format/1"},{"id":"hour_format/1","deprecated":false,"title":"hour_format(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"hour_format/1"},{"id":"language_has_noon_and_midnight?/1","deprecated":false,"title":"language_has_noon_and_midnight?(locale)","anchor":"language_has_noon_and_midnight?/1"},{"id":"time_formats/2","deprecated":false,"title":"time_formats(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), calendar \\\\ Cldr.Calendar.default_cldr_calendar())","anchor":"time_formats/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime.Format","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime.Formatter","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime.Formatter","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"format/4","deprecated":false,"title":"format(date, format, locale \\\\ Cldr.get_locale(), options \\\\ [])","anchor":"format/4"},{"id":"gmt_tz_format/3","deprecated":false,"title":"gmt_tz_format(locale, offset, options \\\\ [])","anchor":"gmt_tz_format/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime.Formatter","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime.Interval","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime.Interval","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_to_string/3","deprecated":false,"title":"do_to_string(from, to, options)","anchor":"do_to_string/3"},{"id":"do_to_string!/3","deprecated":false,"title":"do_to_string!(from, to, options)","anchor":"do_to_string!/3"},{"id":"to_string/3","deprecated":false,"title":"to_string(from, to, options \\\\ [])","anchor":"to_string/3"},{"id":"to_string!/3","deprecated":false,"title":"to_string!(from, to, options \\\\ [])","anchor":"to_string!/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime.Interval","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.DateTime.Relative","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.DateTime.Relative","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(time, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(time, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.DateTime.Relative","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Interval","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Interval","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(interval, options)","anchor":"to_string/2"},{"id":"to_string/3","deprecated":false,"title":"to_string(from, to, options \\\\ [])","anchor":"to_string/3"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(interval, options)","anchor":"to_string!/2"},{"id":"to_string!/3","deprecated":false,"title":"to_string!(from, to, options \\\\ [])","anchor":"to_string!/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Interval","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Language","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Language","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"styles/0","deprecated":false,"title":"styles()","anchor":"t:styles/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"available_languages/1","deprecated":false,"title":"available_languages(locale \\\\ get_locale())","anchor":"available_languages/1"},{"id":"known_languages/1","deprecated":false,"title":"known_languages(locale \\\\ get_locale())","anchor":"known_languages/1"},{"id":"to_string/2","deprecated":false,"title":"to_string(key, options \\\\ [])","anchor":"to_string/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Language","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.List","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.List","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"intersperse/2","deprecated":false,"title":"intersperse(list, options \\\\ [])","anchor":"intersperse/2"},{"id":"intersperse/3","deprecated":false,"title":"intersperse(list, locale, pattern_type)","anchor":"intersperse/3"},{"id":"intersperse!/2","deprecated":false,"title":"intersperse!(list, options \\\\ [])","anchor":"intersperse!/2"},{"id":"list_formats_for/1","deprecated":false,"title":"list_formats_for(locale_name)","anchor":"list_formats_for/1"},{"id":"list_patterns_for/1","deprecated":false,"title":"list_patterns_for(locale_name)","anchor":"list_patterns_for/1"},{"id":"to_string/2","deprecated":false,"title":"to_string(list, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(list, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.List","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Locale","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Locale","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fallback_locale_names/1","deprecated":false,"title":"fallback_locale_names(locale)","anchor":"fallback_locale_names/1"},{"id":"fallback_locales/1","deprecated":false,"title":"fallback_locales(locale)","anchor":"fallback_locales/1"},{"id":"locale_for_territory/1","deprecated":false,"title":"locale_for_territory(territory)","anchor":"locale_for_territory/1"},{"id":"locale_from_host/2","deprecated":false,"title":"locale_from_host(host, options \\\\ [])","anchor":"locale_from_host/2"},{"id":"new/1","deprecated":false,"title":"new(locale_name)","anchor":"new/1"},{"id":"new!/1","deprecated":false,"title":"new!(locale_name)","anchor":"new!/1"},{"id":"script_direction_from_locale/1","deprecated":false,"title":"script_direction_from_locale(locale)","anchor":"script_direction_from_locale/1"},{"id":"territory_from_host/1","deprecated":false,"title":"territory_from_host(host)","anchor":"territory_from_host/1"},{"id":"territory_from_locale/1","deprecated":false,"title":"territory_from_locale(locale)","anchor":"territory_from_locale/1"},{"id":"timezone_from_locale/1","deprecated":false,"title":"timezone_from_locale(locale)","anchor":"timezone_from_locale/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Locale","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"parse/2","deprecated":false,"title":"parse(string, options \\\\ [])","anchor":"parse/2"},{"id":"resolve_currencies/2","deprecated":false,"title":"resolve_currencies(list, options \\\\ [])","anchor":"resolve_currencies/2"},{"id":"resolve_currency/2","deprecated":false,"title":"resolve_currency(string, options \\\\ [])","anchor":"resolve_currency/2"},{"id":"resolve_per/2","deprecated":false,"title":"resolve_per(string, options \\\\ [])","anchor":"resolve_per/2"},{"id":"resolve_pers/2","deprecated":false,"title":"resolve_pers(list, options \\\\ [])","anchor":"resolve_pers/2"},{"id":"scan/2","deprecated":false,"title":"scan(string, options \\\\ [])","anchor":"scan/2"},{"id":"to_approx_string/2","deprecated":false,"title":"to_approx_string(number, options \\\\ [])","anchor":"to_approx_string/2"},{"id":"to_at_least_string/2","deprecated":false,"title":"to_at_least_string(number, options \\\\ [])","anchor":"to_at_least_string/2"},{"id":"to_at_most_string/2","deprecated":false,"title":"to_at_most_string(number, options \\\\ [])","anchor":"to_at_most_string/2"},{"id":"to_range_string/2","deprecated":false,"title":"to_range_string(range, options \\\\ [])","anchor":"to_range_string/2"},{"id":"to_string/2","deprecated":false,"title":"to_string(number, options \\\\ default_options())","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(number, options \\\\ default_options())","anchor":"to_string!/2"},{"id":"validate_number_system/2","deprecated":false,"title":"validate_number_system(locale, number_system)","anchor":"validate_number_system/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Cardinal","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Cardinal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"available_locale_names/0","deprecated":false,"title":"available_locale_names()","anchor":"available_locale_names/0"},{"id":"known_locale_names/0","deprecated":false,"title":"known_locale_names()","anchor":"known_locale_names/0"},{"id":"plural_rule/3","deprecated":false,"title":"plural_rule(number, locale, rounding \\\\ Math.default_rounding())","anchor":"plural_rule/3"},{"id":"plural_rules/0","deprecated":false,"title":"plural_rules()","anchor":"plural_rules/0"},{"id":"plural_rules_for/1","deprecated":false,"title":"plural_rules_for(locale_name)","anchor":"plural_rules_for/1"},{"id":"pluralize/3","deprecated":false,"title":"pluralize(number, locale_name, substitutions)","anchor":"pluralize/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Cardinal","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Format","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Format","sections":[{"id":"Number Pattern Examples","anchor":"module-number-pattern-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_formats_for/1","deprecated":false,"title":"all_formats_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"all_formats_for/1"},{"id":"all_formats_for!/1","deprecated":false,"title":"all_formats_for!(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"all_formats_for!/1"},{"id":"currency_spacing/2","deprecated":false,"title":"currency_spacing(locale, number_system)","anchor":"currency_spacing/2"},{"id":"decimal_format_list/0","deprecated":false,"title":"decimal_format_list()","anchor":"decimal_format_list/0"},{"id":"decimal_format_list_for/1","deprecated":false,"title":"decimal_format_list_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"decimal_format_list_for/1"},{"id":"default_grouping_for/1","deprecated":false,"title":"default_grouping_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"default_grouping_for/1"},{"id":"default_grouping_for!/1","deprecated":false,"title":"default_grouping_for!(locale)","anchor":"default_grouping_for!/1"},{"id":"formats_for/2","deprecated":false,"title":"formats_for(locale \\\\ Bonfire.Common.Localise.Cldr.default_locale(), number_system \\\\ Cldr.Number.System.default_number_system_type())","anchor":"formats_for/2"},{"id":"formats_for!/2","deprecated":false,"title":"formats_for!(locale \\\\ Bonfire.Common.Localise.Cldr.default_locale(), number_system \\\\ Cldr.Number.System.default_number_system_type())","anchor":"formats_for!/2"},{"id":"minimum_grouping_digits_for/1","deprecated":false,"title":"minimum_grouping_digits_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"minimum_grouping_digits_for/1"},{"id":"minimum_grouping_digits_for!/1","deprecated":false,"title":"minimum_grouping_digits_for!(locale)","anchor":"minimum_grouping_digits_for!/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Format","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Formatter.Decimal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"metadata!/1","deprecated":false,"title":"metadata!(format)","anchor":"metadata!/1"},{"id":"to_string/3","deprecated":false,"title":"to_string(number, format, options \\\\ [])","anchor":"to_string/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Formatter.Decimal","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Ordinal","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Ordinal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"available_locale_names/0","deprecated":false,"title":"available_locale_names()","anchor":"available_locale_names/0"},{"id":"known_locale_names/0","deprecated":false,"title":"known_locale_names()","anchor":"known_locale_names/0"},{"id":"plural_rule/3","deprecated":false,"title":"plural_rule(number, locale, rounding \\\\ Math.default_rounding())","anchor":"plural_rule/3"},{"id":"plural_rules/0","deprecated":false,"title":"plural_rules()","anchor":"plural_rules/0"},{"id":"plural_rules_for/1","deprecated":false,"title":"plural_rules_for(locale_name)","anchor":"plural_rules_for/1"},{"id":"pluralize/3","deprecated":false,"title":"pluralize(number, locale_name, substitutions)","anchor":"pluralize/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Ordinal","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.PluralRule.Range","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"plural_rule/3","deprecated":false,"title":"plural_rule(first, last, locale)","anchor":"plural_rule/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.PluralRule.Range","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Symbol","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Symbol","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_decimal_symbols/0","deprecated":false,"title":"all_decimal_symbols()","anchor":"all_decimal_symbols/0"},{"id":"all_decimal_symbols_class/0","deprecated":false,"title":"all_decimal_symbols_class()","anchor":"all_decimal_symbols_class/0"},{"id":"all_grouping_symbols/0","deprecated":false,"title":"all_grouping_symbols()","anchor":"all_grouping_symbols/0"},{"id":"all_grouping_symbols_class/0","deprecated":false,"title":"all_grouping_symbols_class()","anchor":"all_grouping_symbols_class/0"},{"id":"number_symbols_for/1","deprecated":false,"title":"number_symbols_for(locale \\\\ Bonfire.Common.Localise.Cldr.get_locale())","anchor":"number_symbols_for/1"},{"id":"number_symbols_for/2","deprecated":false,"title":"number_symbols_for(locale, number_system)","anchor":"number_symbols_for/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Symbol","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.System","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.System","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"number_system_for/2","deprecated":false,"title":"number_system_for(locale, system_name)","anchor":"number_system_for/2"},{"id":"number_system_from_locale/1","deprecated":false,"title":"number_system_from_locale(locale)","anchor":"number_system_from_locale/1"},{"id":"number_system_names_for/1","deprecated":false,"title":"number_system_names_for(locale)","anchor":"number_system_names_for/1"},{"id":"number_system_names_for!/1","deprecated":false,"title":"number_system_names_for!(locale)","anchor":"number_system_names_for!/1"},{"id":"number_system_types_for/1","deprecated":false,"title":"number_system_types_for(locale)","anchor":"number_system_types_for/1"},{"id":"number_systems_for/1","deprecated":false,"title":"number_systems_for(locale)","anchor":"number_systems_for/1"},{"id":"number_systems_for!/1","deprecated":false,"title":"number_systems_for!(locale)","anchor":"number_systems_for!/1"},{"id":"number_systems_like/2","deprecated":false,"title":"number_systems_like(locale, number_system)","anchor":"number_systems_like/2"},{"id":"system_name_from/2","deprecated":false,"title":"system_name_from(system_name, locale)","anchor":"system_name_from/2"},{"id":"to_system/2","deprecated":false,"title":"to_system(number, system)","anchor":"to_system/2"},{"id":"to_system!/2","deprecated":false,"title":"to_system!(number, system_name)","anchor":"to_system!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.System","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Number.Transliterate","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Number.Transliterate","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"transliterate/3","deprecated":false,"title":"transliterate(sequence, locale \\\\ Bonfire.Common.Localise.Cldr.get_locale(), number_system \\\\ System.default_number_system_type())","anchor":"transliterate/3"},{"id":"transliterate!/3","deprecated":false,"title":"transliterate!(sequence, locale, number_system)","anchor":"transliterate!/3"},{"id":"transliterate_digits/3","deprecated":false,"title":"transliterate_digits(digits, from_system, to_system)","anchor":"transliterate_digits/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Number.Transliterate","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Rbnf.NumberSystem","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_rule_sets/0","deprecated":false,"title":"all_rule_sets()","anchor":"all_rule_sets/0"},{"id":"armenian_lower/1","deprecated":false,"title":"armenian_lower(number)","anchor":"armenian_lower/1"},{"id":"armenian_lower/2","deprecated":false,"title":"armenian_lower(number, locale)","anchor":"armenian_lower/2"},{"id":"armenian_upper/1","deprecated":false,"title":"armenian_upper(number)","anchor":"armenian_upper/1"},{"id":"armenian_upper/2","deprecated":false,"title":"armenian_upper(number, locale)","anchor":"armenian_upper/2"},{"id":"cyrillic_lower/1","deprecated":false,"title":"cyrillic_lower(number)","anchor":"cyrillic_lower/1"},{"id":"cyrillic_lower/2","deprecated":false,"title":"cyrillic_lower(number, locale)","anchor":"cyrillic_lower/2"},{"id":"cyrillic_lower_1_10/2","deprecated":false,"title":"cyrillic_lower_1_10(number, language_tag)","anchor":"cyrillic_lower_1_10/2"},{"id":"cyrillic_lower_final/2","deprecated":false,"title":"cyrillic_lower_final(number, language_tag)","anchor":"cyrillic_lower_final/2"},{"id":"cyrillic_lower_post/2","deprecated":false,"title":"cyrillic_lower_post(number, language_tag)","anchor":"cyrillic_lower_post/2"},{"id":"cyrillic_lower_thousands/2","deprecated":false,"title":"cyrillic_lower_thousands(number, language_tag)","anchor":"cyrillic_lower_thousands/2"},{"id":"ethiopic/1","deprecated":false,"title":"ethiopic(number)","anchor":"ethiopic/1"},{"id":"ethiopic/2","deprecated":false,"title":"ethiopic(number, locale)","anchor":"ethiopic/2"},{"id":"ethiopic_p1/2","deprecated":false,"title":"ethiopic_p1(number, language_tag)","anchor":"ethiopic_p1/2"},{"id":"ethiopic_p2/2","deprecated":false,"title":"ethiopic_p2(number, language_tag)","anchor":"ethiopic_p2/2"},{"id":"ethiopic_p3/2","deprecated":false,"title":"ethiopic_p3(number, language_tag)","anchor":"ethiopic_p3/2"},{"id":"ethiopic_p/2","deprecated":false,"title":"ethiopic_p(number, language_tag)","anchor":"ethiopic_p/2"},{"id":"georgian/1","deprecated":false,"title":"georgian(number)","anchor":"georgian/1"},{"id":"georgian/2","deprecated":false,"title":"georgian(number, locale)","anchor":"georgian/2"},{"id":"greek_lower/1","deprecated":false,"title":"greek_lower(number)","anchor":"greek_lower/1"},{"id":"greek_lower/2","deprecated":false,"title":"greek_lower(number, locale)","anchor":"greek_lower/2"},{"id":"greek_numeral_majuscules/2","deprecated":false,"title":"greek_numeral_majuscules(number, language_tag)","anchor":"greek_numeral_majuscules/2"},{"id":"greek_numeral_minuscules/2","deprecated":false,"title":"greek_numeral_minuscules(number, language_tag)","anchor":"greek_numeral_minuscules/2"},{"id":"greek_upper/1","deprecated":false,"title":"greek_upper(number)","anchor":"greek_upper/1"},{"id":"greek_upper/2","deprecated":false,"title":"greek_upper(number, locale)","anchor":"greek_upper/2"},{"id":"hebrew/1","deprecated":false,"title":"hebrew(number)","anchor":"hebrew/1"},{"id":"hebrew/2","deprecated":false,"title":"hebrew(number, locale)","anchor":"hebrew/2"},{"id":"hebrew_0_99/2","deprecated":false,"title":"hebrew_0_99(number, language_tag)","anchor":"hebrew_0_99/2"},{"id":"hebrew_item/1","deprecated":false,"title":"hebrew_item(number)","anchor":"hebrew_item/1"},{"id":"hebrew_item/2","deprecated":false,"title":"hebrew_item(number, locale)","anchor":"hebrew_item/2"},{"id":"hebrew_item_hundreds/2","deprecated":false,"title":"hebrew_item_hundreds(number, language_tag)","anchor":"hebrew_item_hundreds/2"},{"id":"hebrew_thousands/2","deprecated":false,"title":"hebrew_thousands(number, language_tag)","anchor":"hebrew_thousands/2"},{"id":"roman_lower/1","deprecated":false,"title":"roman_lower(number)","anchor":"roman_lower/1"},{"id":"roman_lower/2","deprecated":false,"title":"roman_lower(number, locale)","anchor":"roman_lower/2"},{"id":"roman_upper/1","deprecated":false,"title":"roman_upper(number)","anchor":"roman_upper/1"},{"id":"roman_upper/2","deprecated":false,"title":"roman_upper(number, locale)","anchor":"roman_upper/2"},{"id":"rule_sets/0","deprecated":false,"title":"rule_sets()","anchor":"rule_sets/0"},{"id":"rule_sets/1","deprecated":false,"title":"rule_sets(rbnf_locale_name)","anchor":"rule_sets/1"},{"id":"tamil/1","deprecated":false,"title":"tamil(number)","anchor":"tamil/1"},{"id":"tamil/2","deprecated":false,"title":"tamil(number, locale)","anchor":"tamil/2"},{"id":"tamil_thousands/2","deprecated":false,"title":"tamil_thousands(number, language_tag)","anchor":"tamil_thousands/2"},{"id":"zz_default/1","deprecated":false,"title":"zz_default(number)","anchor":"zz_default/1"},{"id":"zz_default/2","deprecated":false,"title":"zz_default(number, locale)","anchor":"zz_default/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Rbnf.NumberSystem","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Rbnf.Ordinal","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_rule_sets/0","deprecated":false,"title":"all_rule_sets()","anchor":"all_rule_sets/0"},{"id":"digits_ordinal/2","deprecated":false,"title":"digits_ordinal(number, locale)","anchor":"digits_ordinal/2"},{"id":"digits_ordinal_feminine/2","deprecated":false,"title":"digits_ordinal_feminine(number, locale)","anchor":"digits_ordinal_feminine/2"},{"id":"digits_ordinal_feminine_plural/2","deprecated":false,"title":"digits_ordinal_feminine_plural(number, locale)","anchor":"digits_ordinal_feminine_plural/2"},{"id":"digits_ordinal_indicator_m/2","deprecated":false,"title":"digits_ordinal_indicator_m(number, language_tag)","anchor":"digits_ordinal_indicator_m/2"},{"id":"digits_ordinal_masculine/2","deprecated":false,"title":"digits_ordinal_masculine(number, locale)","anchor":"digits_ordinal_masculine/2"},{"id":"digits_ordinal_masculine_adjective/2","deprecated":false,"title":"digits_ordinal_masculine_adjective(number, locale)","anchor":"digits_ordinal_masculine_adjective/2"},{"id":"digits_ordinal_masculine_plural/2","deprecated":false,"title":"digits_ordinal_masculine_plural(number, locale)","anchor":"digits_ordinal_masculine_plural/2"},{"id":"dord_femabbrev/2","deprecated":false,"title":"dord_femabbrev(number, language_tag)","anchor":"dord_femabbrev/2"},{"id":"dord_mascabbrev/2","deprecated":false,"title":"dord_mascabbrev(number, language_tag)","anchor":"dord_mascabbrev/2"},{"id":"rule_sets/0","deprecated":false,"title":"rule_sets()","anchor":"rule_sets/0"},{"id":"rule_sets/1","deprecated":false,"title":"rule_sets(rbnf_locale_name)","anchor":"rule_sets/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Rbnf.Ordinal","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Rbnf.Spellout","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"after_hundred/2","deprecated":false,"title":"after_hundred(number, language_tag)","anchor":"after_hundred/2"},{"id":"after_thousand_or_more/2","deprecated":false,"title":"after_thousand_or_more(number, language_tag)","anchor":"after_thousand_or_more/2"},{"id":"all_rule_sets/0","deprecated":false,"title":"all_rule_sets()","anchor":"all_rule_sets/0"},{"id":"and/2","deprecated":false,"title":"number and language_tag","anchor":"and/2"},{"id":"and_o/2","deprecated":false,"title":"and_o(number, language_tag)","anchor":"and_o/2"},{"id":"cents_f/2","deprecated":false,"title":"cents_f(number, language_tag)","anchor":"cents_f/2"},{"id":"cents_m/2","deprecated":false,"title":"cents_m(number, language_tag)","anchor":"cents_m/2"},{"id":"cents_o/2","deprecated":false,"title":"cents_o(number, language_tag)","anchor":"cents_o/2"},{"id":"commas/2","deprecated":false,"title":"commas(number, language_tag)","anchor":"commas/2"},{"id":"commas_o/2","deprecated":false,"title":"commas_o(number, language_tag)","anchor":"commas_o/2"},{"id":"et_un/2","deprecated":false,"title":"et_un(number, language_tag)","anchor":"et_un/2"},{"id":"et_une/2","deprecated":false,"title":"et_une(number, language_tag)","anchor":"et_une/2"},{"id":"et_unieme/2","deprecated":false,"title":"et_unieme(number, language_tag)","anchor":"et_unieme/2"},{"id":"fem_with_a/2","deprecated":false,"title":"fem_with_a(number, language_tag)","anchor":"fem_with_a/2"},{"id":"fem_with_i/2","deprecated":false,"title":"fem_with_i(number, language_tag)","anchor":"fem_with_i/2"},{"id":"fem_with_o/2","deprecated":false,"title":"fem_with_o(number, language_tag)","anchor":"fem_with_o/2"},{"id":"lenient_parse/2","deprecated":false,"title":"lenient_parse(number, language_tag)","anchor":"lenient_parse/2"},{"id":"mille_o/2","deprecated":false,"title":"mille_o(number, language_tag)","anchor":"mille_o/2"},{"id":"msc_no_final/2","deprecated":false,"title":"msc_no_final(number, language_tag)","anchor":"msc_no_final/2"},{"id":"msc_with_a/2","deprecated":false,"title":"msc_with_a(number, language_tag)","anchor":"msc_with_a/2"},{"id":"msc_with_a_nofinal/2","deprecated":false,"title":"msc_with_a_nofinal(number, language_tag)","anchor":"msc_with_a_nofinal/2"},{"id":"msc_with_i/2","deprecated":false,"title":"msc_with_i(number, language_tag)","anchor":"msc_with_i/2"},{"id":"msc_with_i_nofinal/2","deprecated":false,"title":"msc_with_i_nofinal(number, language_tag)","anchor":"msc_with_i_nofinal/2"},{"id":"msc_with_o/2","deprecated":false,"title":"msc_with_o(number, language_tag)","anchor":"msc_with_o/2"},{"id":"msc_with_o_nofinal/2","deprecated":false,"title":"msc_with_o_nofinal(number, language_tag)","anchor":"msc_with_o_nofinal/2"},{"id":"msco_with_a/2","deprecated":false,"title":"msco_with_a(number, language_tag)","anchor":"msco_with_a/2"},{"id":"msco_with_i/2","deprecated":false,"title":"msco_with_i(number, language_tag)","anchor":"msco_with_i/2"},{"id":"msco_with_o/2","deprecated":false,"title":"msco_with_o(number, language_tag)","anchor":"msco_with_o/2"},{"id":"ordinal_esima/2","deprecated":false,"title":"ordinal_esima(number, language_tag)","anchor":"ordinal_esima/2"},{"id":"ordinal_esima_with_a/2","deprecated":false,"title":"ordinal_esima_with_a(number, language_tag)","anchor":"ordinal_esima_with_a/2"},{"id":"ordinal_esima_with_i/2","deprecated":false,"title":"ordinal_esima_with_i(number, language_tag)","anchor":"ordinal_esima_with_i/2"},{"id":"ordinal_esima_with_o/2","deprecated":false,"title":"ordinal_esima_with_o(number, language_tag)","anchor":"ordinal_esima_with_o/2"},{"id":"ordinal_esime/2","deprecated":false,"title":"ordinal_esime(number, language_tag)","anchor":"ordinal_esime/2"},{"id":"ordinal_esime_with_a/2","deprecated":false,"title":"ordinal_esime_with_a(number, language_tag)","anchor":"ordinal_esime_with_a/2"},{"id":"ordinal_esime_with_i/2","deprecated":false,"title":"ordinal_esime_with_i(number, language_tag)","anchor":"ordinal_esime_with_i/2"},{"id":"ordinal_esime_with_o/2","deprecated":false,"title":"ordinal_esime_with_o(number, language_tag)","anchor":"ordinal_esime_with_o/2"},{"id":"ordinal_esimi/2","deprecated":false,"title":"ordinal_esimi(number, language_tag)","anchor":"ordinal_esimi/2"},{"id":"ordinal_esimi_with_a/2","deprecated":false,"title":"ordinal_esimi_with_a(number, language_tag)","anchor":"ordinal_esimi_with_a/2"},{"id":"ordinal_esimi_with_i/2","deprecated":false,"title":"ordinal_esimi_with_i(number, language_tag)","anchor":"ordinal_esimi_with_i/2"},{"id":"ordinal_esimi_with_o/2","deprecated":false,"title":"ordinal_esimi_with_o(number, language_tag)","anchor":"ordinal_esimi_with_o/2"},{"id":"ordinal_esimo/2","deprecated":false,"title":"ordinal_esimo(number, language_tag)","anchor":"ordinal_esimo/2"},{"id":"ordinal_esimo_with_a/2","deprecated":false,"title":"ordinal_esimo_with_a(number, language_tag)","anchor":"ordinal_esimo_with_a/2"},{"id":"ordinal_esimo_with_i/2","deprecated":false,"title":"ordinal_esimo_with_i(number, language_tag)","anchor":"ordinal_esimo_with_i/2"},{"id":"ordinal_esimo_with_o/2","deprecated":false,"title":"ordinal_esimo_with_o(number, language_tag)","anchor":"ordinal_esimo_with_o/2"},{"id":"r2d_year/2","deprecated":false,"title":"r2d_year(number, language_tag)","anchor":"r2d_year/2"},{"id":"rule_sets/0","deprecated":false,"title":"rule_sets()","anchor":"rule_sets/0"},{"id":"rule_sets/1","deprecated":false,"title":"rule_sets(rbnf_locale_name)","anchor":"rule_sets/1"},{"id":"spellout_cardinal/2","deprecated":false,"title":"spellout_cardinal(number, locale)","anchor":"spellout_cardinal/2"},{"id":"spellout_cardinal_feminine/2","deprecated":false,"title":"spellout_cardinal_feminine(number, locale)","anchor":"spellout_cardinal_feminine/2"},{"id":"spellout_cardinal_feminine_cents/2","deprecated":false,"title":"spellout_cardinal_feminine_cents(number, language_tag)","anchor":"spellout_cardinal_feminine_cents/2"},{"id":"spellout_cardinal_masculine/2","deprecated":false,"title":"spellout_cardinal_masculine(number, locale)","anchor":"spellout_cardinal_masculine/2"},{"id":"spellout_cardinal_masculine_cents/2","deprecated":false,"title":"spellout_cardinal_masculine_cents(number, language_tag)","anchor":"spellout_cardinal_masculine_cents/2"},{"id":"spellout_cardinal_verbose/2","deprecated":false,"title":"spellout_cardinal_verbose(number, locale)","anchor":"spellout_cardinal_verbose/2"},{"id":"spellout_leading/2","deprecated":false,"title":"spellout_leading(number, language_tag)","anchor":"spellout_leading/2"},{"id":"spellout_numbering/2","deprecated":false,"title":"spellout_numbering(number, locale)","anchor":"spellout_numbering/2"},{"id":"spellout_numbering_cents/2","deprecated":false,"title":"spellout_numbering_cents(number, language_tag)","anchor":"spellout_numbering_cents/2"},{"id":"spellout_numbering_verbose/2","deprecated":false,"title":"spellout_numbering_verbose(number, locale)","anchor":"spellout_numbering_verbose/2"},{"id":"spellout_numbering_year/2","deprecated":false,"title":"spellout_numbering_year(number, locale)","anchor":"spellout_numbering_year/2"},{"id":"spellout_ordinal/2","deprecated":false,"title":"spellout_ordinal(number, locale)","anchor":"spellout_ordinal/2"},{"id":"spellout_ordinal_feminine/2","deprecated":false,"title":"spellout_ordinal_feminine(number, locale)","anchor":"spellout_ordinal_feminine/2"},{"id":"spellout_ordinal_feminine_cont/2","deprecated":false,"title":"spellout_ordinal_feminine_cont(number, language_tag)","anchor":"spellout_ordinal_feminine_cont/2"},{"id":"spellout_ordinal_feminine_conts/2","deprecated":false,"title":"spellout_ordinal_feminine_conts(number, language_tag)","anchor":"spellout_ordinal_feminine_conts/2"},{"id":"spellout_ordinal_feminine_plural/2","deprecated":false,"title":"spellout_ordinal_feminine_plural(number, locale)","anchor":"spellout_ordinal_feminine_plural/2"},{"id":"spellout_ordinal_masculine/2","deprecated":false,"title":"spellout_ordinal_masculine(number, locale)","anchor":"spellout_ordinal_masculine/2"},{"id":"spellout_ordinal_masculine_adjective/2","deprecated":false,"title":"spellout_ordinal_masculine_adjective(number, locale)","anchor":"spellout_ordinal_masculine_adjective/2"},{"id":"spellout_ordinal_masculine_cont/2","deprecated":false,"title":"spellout_ordinal_masculine_cont(number, language_tag)","anchor":"spellout_ordinal_masculine_cont/2"},{"id":"spellout_ordinal_masculine_conts/2","deprecated":false,"title":"spellout_ordinal_masculine_conts(number, language_tag)","anchor":"spellout_ordinal_masculine_conts/2"},{"id":"spellout_ordinal_masculine_plural/2","deprecated":false,"title":"spellout_ordinal_masculine_plural(number, locale)","anchor":"spellout_ordinal_masculine_plural/2"},{"id":"spellout_ordinal_verbose/2","deprecated":false,"title":"spellout_ordinal_verbose(number, locale)","anchor":"spellout_ordinal_verbose/2"},{"id":"subcents_f/2","deprecated":false,"title":"subcents_f(number, language_tag)","anchor":"subcents_f/2"},{"id":"subcents_m/2","deprecated":false,"title":"subcents_m(number, language_tag)","anchor":"subcents_m/2"},{"id":"subcents_o/2","deprecated":false,"title":"subcents_o(number, language_tag)","anchor":"subcents_o/2"},{"id":"teen/2","deprecated":false,"title":"teen(number, language_tag)","anchor":"teen/2"},{"id":"th/2","deprecated":false,"title":"th(number, language_tag)","anchor":"th/2"},{"id":"tieth/2","deprecated":false,"title":"tieth(number, language_tag)","anchor":"tieth/2"},{"id":"x_ty/2","deprecated":false,"title":"x_ty(number, language_tag)","anchor":"x_ty/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Rbnf.Spellout","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Time","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Time","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"to_string/2","deprecated":false,"title":"to_string(time, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(time, options \\\\ [])","anchor":"to_string!/2"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Time","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Time.Interval","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Time.Interval","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_to_string/3","deprecated":false,"title":"do_to_string(from, to, options)","anchor":"do_to_string/3"},{"id":"do_to_string!/3","deprecated":false,"title":"do_to_string!(from, to, options)","anchor":"do_to_string!/3"},{"id":"to_string/3","deprecated":false,"title":"to_string(from, to, options \\\\ [])","anchor":"to_string/3"},{"id":"to_string!/3","deprecated":false,"title":"to_string!(from, to, options \\\\ [])","anchor":"to_string!/3"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Time.Interval","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Cldr.Unit","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Cldr.Unit","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add/2","deprecated":false,"title":"add(unit_1, unit_2)","anchor":"add/2"},{"id":"add!/2","deprecated":false,"title":"add!(unit_1, unit_2)","anchor":"add!/2"},{"id":"compatible?/2","deprecated":false,"title":"compatible?(unit_1, unit_2)","anchor":"compatible?/2"},{"id":"convert/2","deprecated":false,"title":"convert(unit_1, to_unit)","anchor":"convert/2"},{"id":"convert!/2","deprecated":false,"title":"convert!(unit_1, to_unit)","anchor":"convert!/2"},{"id":"decompose/2","deprecated":false,"title":"decompose(unit, list)","anchor":"decompose/2"},{"id":"default_gender/1","deprecated":false,"title":"default_gender(locale_name)","anchor":"default_gender/1"},{"id":"default_style/0","deprecated":false,"title":"default_style()","anchor":"default_style/0"},{"id":"display_name/2","deprecated":false,"title":"display_name(unit, options \\\\ [])","anchor":"display_name/2"},{"id":"div/2","deprecated":false,"title":"div(unit_1, unit_2)","anchor":"div/2"},{"id":"div!/2","deprecated":false,"title":"div!(unit_1, unit_2)","anchor":"div!/2"},{"id":"grammatical_features/1","deprecated":false,"title":"grammatical_features(locale_name)","anchor":"grammatical_features/1"},{"id":"grammatical_gender/1","deprecated":false,"title":"grammatical_gender(locale_name)","anchor":"grammatical_gender/1"},{"id":"known_styles/0","deprecated":false,"title":"known_styles()","anchor":"known_styles/0"},{"id":"known_unit_categories/0","deprecated":false,"title":"known_unit_categories()","anchor":"known_unit_categories/0"},{"id":"known_units/0","deprecated":false,"title":"known_units()","anchor":"known_units/0"},{"id":"localize/1","deprecated":false,"title":"localize(unit)","anchor":"localize/1"},{"id":"localize/2","deprecated":false,"title":"localize(unit, options \\\\ [])","anchor":"localize/2"},{"id":"measurement_system?/2","deprecated":false,"title":"measurement_system?(unit, systems)","anchor":"measurement_system?/2"},{"id":"measurement_system_for/1","deprecated":true,"title":"measurement_system_for(territory)","anchor":"measurement_system_for/1"},{"id":"measurement_system_for/2","deprecated":true,"title":"measurement_system_for(territory, key)","anchor":"measurement_system_for/2"},{"id":"measurement_system_for_territory/1","deprecated":false,"title":"measurement_system_for_territory(territory)","anchor":"measurement_system_for_territory/1"},{"id":"measurement_system_for_territory/2","deprecated":false,"title":"measurement_system_for_territory(territory, key)","anchor":"measurement_system_for_territory/2"},{"id":"measurement_system_from_locale/1","deprecated":false,"title":"measurement_system_from_locale(locale)","anchor":"measurement_system_from_locale/1"},{"id":"measurement_system_from_locale/2","deprecated":false,"title":"measurement_system_from_locale(locale, category)","anchor":"measurement_system_from_locale/2"},{"id":"measurement_system_from_locale/3","deprecated":false,"title":"measurement_system_from_locale(locale, backend, category)","anchor":"measurement_system_from_locale/3"},{"id":"measurement_systems_for_unit/1","deprecated":false,"title":"measurement_systems_for_unit(unit)","anchor":"measurement_systems_for_unit/1"},{"id":"mult/2","deprecated":false,"title":"mult(unit_1, unit_2)","anchor":"mult/2"},{"id":"mult!/2","deprecated":false,"title":"mult!(unit_1, unit_2)","anchor":"mult!/2"},{"id":"new/2","deprecated":false,"title":"new(unit, value)","anchor":"new/2"},{"id":"new!/2","deprecated":false,"title":"new!(unit, value)","anchor":"new!/2"},{"id":"parse/2","deprecated":false,"title":"parse(unit_string, options \\\\ [])","anchor":"parse/2"},{"id":"parse!/2","deprecated":false,"title":"parse!(unit_string, options \\\\ [])","anchor":"parse!/2"},{"id":"parse_unit_name/2","deprecated":false,"title":"parse_unit_name(unit_name_string, options \\\\ [])","anchor":"parse_unit_name/2"},{"id":"parse_unit_name!/2","deprecated":false,"title":"parse_unit_name!(unit_name_string, options \\\\ [])","anchor":"parse_unit_name!/2"},{"id":"preferred_units/2","deprecated":false,"title":"preferred_units(unit, options \\\\ [])","anchor":"preferred_units/2"},{"id":"preferred_units!/2","deprecated":false,"title":"preferred_units!(unit, options \\\\ [])","anchor":"preferred_units!/2"},{"id":"round/1","deprecated":false,"title":"round(unit)","anchor":"round/1"},{"id":"round/2","deprecated":false,"title":"round(unit, places)","anchor":"round/2"},{"id":"round/3","deprecated":false,"title":"round(unit, places, mode)","anchor":"round/3"},{"id":"styles/0","deprecated":false,"title":"styles()","anchor":"styles/0"},{"id":"sub/2","deprecated":false,"title":"sub(unit_1, unit_2)","anchor":"sub/2"},{"id":"sub!/2","deprecated":false,"title":"sub!(unit_1, unit_2)","anchor":"sub!/2"},{"id":"to_iolist/2","deprecated":false,"title":"to_iolist(number, options \\\\ [])","anchor":"to_iolist/2"},{"id":"to_iolist!/2","deprecated":false,"title":"to_iolist!(number, options \\\\ [])","anchor":"to_iolist!/2"},{"id":"to_string/2","deprecated":false,"title":"to_string(number, options \\\\ [])","anchor":"to_string/2"},{"id":"to_string!/2","deprecated":false,"title":"to_string!(number, options \\\\ [])","anchor":"to_string!/2"},{"id":"unit_category/1","deprecated":false,"title":"unit_category(unit)","anchor":"unit_category/1"},{"id":"unit_strings_for/1","deprecated":false,"title":"unit_strings_for(locale)","anchor":"unit_strings_for/1"},{"id":"validate_style/1","deprecated":false,"title":"validate_style(unit)","anchor":"validate_style/1"},{"id":"validate_unit/1","deprecated":false,"title":"validate_unit(unit)","anchor":"validate_unit/1"},{"id":"value/1","deprecated":false,"title":"value(unit)","anchor":"value/1"},{"id":"zero/1","deprecated":false,"title":"zero(unit)","anchor":"zero/1"},{"id":"zero?/1","deprecated":false,"title":"zero?(unit)","anchor":"zero?/1"}],"key":"functions"}],"nested_title":".Common.Localise.Cldr.Unit","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Gettext","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Gettext","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"dgettext/3","deprecated":false,"title":"dgettext(domain, msgid, bindings \\\\ Macro.escape(%{}))","anchor":"dgettext/3"},{"id":"dgettext_noop/2","deprecated":false,"title":"dgettext_noop(domain, msgid)","anchor":"dgettext_noop/2"},{"id":"dngettext/5","deprecated":false,"title":"dngettext(domain, msgid, msgid_plural, n, bindings \\\\ Macro.escape(%{}))","anchor":"dngettext/5"},{"id":"dngettext_noop/3","deprecated":false,"title":"dngettext_noop(domain, msgid, msgid_plural)","anchor":"dngettext_noop/3"},{"id":"dpgettext/4","deprecated":false,"title":"dpgettext(domain, msgctxt, msgid, bindings \\\\ Macro.escape(%{}))","anchor":"dpgettext/4"},{"id":"dpgettext_noop/3","deprecated":false,"title":"dpgettext_noop(domain, msgctxt, msgid)","anchor":"dpgettext_noop/3"},{"id":"dpngettext/6","deprecated":false,"title":"dpngettext(domain, msgctxt, msgid, msgid_plural, n, bindings \\\\ Macro.escape(%{}))","anchor":"dpngettext/6"},{"id":"dpngettext_noop/4","deprecated":false,"title":"dpngettext_noop(domain, msgctxt, msgid, msgid_plural)","anchor":"dpngettext_noop/4"},{"id":"gettext/2","deprecated":false,"title":"gettext(msgid, bindings \\\\ Macro.escape(%{}))","anchor":"gettext/2"},{"id":"gettext_comment/1","deprecated":false,"title":"gettext_comment(comment)","anchor":"gettext_comment/1"},{"id":"gettext_noop/1","deprecated":false,"title":"gettext_noop(msgid)","anchor":"gettext_noop/1"},{"id":"handle_missing_bindings/2","deprecated":false,"title":"handle_missing_bindings(exception, incomplete)","anchor":"handle_missing_bindings/2"},{"id":"handle_missing_plural_translation/7","deprecated":false,"title":"handle_missing_plural_translation(locale, domain, msgctxt, msgid, msgid_plural, n, bindings)","anchor":"handle_missing_plural_translation/7"},{"id":"handle_missing_translation/5","deprecated":false,"title":"handle_missing_translation(locale, domain, msgctxt, msgid, bindings)","anchor":"handle_missing_translation/5"},{"id":"lgettext/5","deprecated":false,"title":"lgettext(locale, domain, msgctxt \\\\ nil, msgid, bindings)","anchor":"lgettext/5"},{"id":"lngettext/7","deprecated":false,"title":"lngettext(locale, domain, msgctxt \\\\ nil, msgid, msgid_plural, n, bindings)","anchor":"lngettext/7"},{"id":"ngettext/4","deprecated":false,"title":"ngettext(msgid, msgid_plural, n, bindings \\\\ Macro.escape(%{}))","anchor":"ngettext/4"},{"id":"ngettext_noop/2","deprecated":false,"title":"ngettext_noop(msgid, msgid_plural)","anchor":"ngettext_noop/2"},{"id":"pgettext/3","deprecated":false,"title":"pgettext(msgctxt, msgid, bindings \\\\ Macro.escape(%{}))","anchor":"pgettext/3"},{"id":"pgettext_noop/2","deprecated":false,"title":"pgettext_noop(msgid, context)","anchor":"pgettext_noop/2"},{"id":"pngettext/5","deprecated":false,"title":"pngettext(msgctxt, msgid, msgid_plural, n, bindings \\\\ Macro.escape(%{}))","anchor":"pngettext/5"},{"id":"pngettext_noop/3","deprecated":false,"title":"pngettext_noop(msgctxt, msgid, msgid_plural)","anchor":"pngettext_noop/3"}],"key":"functions"}],"nested_title":".Common.Localise.Gettext","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Gettext.Helpers","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Gettext.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"l/4","deprecated":false,"title":"l(original_text_or_id, bindings \\\\ [], context \\\\ nil, domain \\\\ nil)","anchor":"l/4"},{"id":"localise_dynamic/2","deprecated":false,"title":"localise_dynamic(msgid, caller_module \\\\ nil)","anchor":"localise_dynamic/2"},{"id":"localise_strings/2","deprecated":false,"title":"localise_strings(strings, caller_module \\\\ nil)","anchor":"localise_strings/2"},{"id":"lp/6","deprecated":false,"title":"lp(original_text_or_id, msgid_plural, n, bindings \\\\ [], context \\\\ nil, domain \\\\ nil)","anchor":"lp/6"}],"key":"functions"}],"nested_title":".Common.Localise.Gettext.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.Common.Localise.Gettext.Plural","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Localise.Gettext.Plural","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"nplurals/1","deprecated":false,"title":"nplurals(locale_name)","anchor":"nplurals/1"},{"id":"plural/2","deprecated":false,"title":"plural(locale, n)","anchor":"plural/2"}],"key":"functions"}],"nested_title":".Common.Localise.Gettext.Plural","nested_context":"Bonfire"},{"id":"Bonfire.Common.Media","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Media","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"avatar_fallback/1","deprecated":false,"title":"avatar_fallback(_ \\\\ nil)","anchor":"avatar_fallback/1"},{"id":"avatar_media/1","deprecated":false,"title":"avatar_media(maybe_media)","anchor":"avatar_media/1"},{"id":"avatar_url/1","deprecated":false,"title":"avatar_url(media)","anchor":"avatar_url/1"},{"id":"banner_fallback/0","deprecated":false,"title":"banner_fallback()","anchor":"banner_fallback/0"},{"id":"banner_url/1","deprecated":false,"title":"banner_url(media)","anchor":"banner_url/1"},{"id":"extract_tar/2","deprecated":false,"title":"extract_tar(archive, opts \\\\ [:compressed, :memory])","anchor":"extract_tar/2"},{"id":"image_url/1","deprecated":false,"title":"image_url(url)","anchor":"image_url/1"},{"id":"maybe_dominant_color/4","deprecated":false,"title":"maybe_dominant_color(user, avatar_url \\\\ nil, banner_url \\\\ nil, banner_fallback \\\\ nil)","anchor":"maybe_dominant_color/4"},{"id":"media_url/1","deprecated":false,"title":"media_url(media)","anchor":"media_url/1"},{"id":"read_tar_files/3","deprecated":false,"title":"read_tar_files(archive, file_or_files, opts \\\\ [:compressed, :verbose])","anchor":"read_tar_files/3"},{"id":"thumbnail_url/1","deprecated":false,"title":"thumbnail_url(media)","anchor":"thumbnail_url/1"}],"key":"functions"}],"nested_title":".Common.Media","nested_context":"Bonfire"},{"id":"Bonfire.Common.Modularity.DeclareHelpers","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Modularity.DeclareHelpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"app/1","deprecated":false,"title":"app(module)","anchor":"app/1"},{"id":"component_props/1","deprecated":false,"title":"component_props(module)","anchor":"component_props/1"},{"id":"component_type/1","deprecated":false,"title":"component_type(module)","anchor":"component_type/1"},{"id":"declare_extension/2","deprecated":false,"title":"declare_extension(name, opts \\\\ [])","anchor":"declare_extension/2"},{"id":"declare_nav_component/2","deprecated":false,"title":"declare_nav_component(name, opts \\\\ [])","anchor":"declare_nav_component/2"},{"id":"declare_nav_link/2","deprecated":false,"title":"declare_nav_link(name, opts \\\\ [])","anchor":"declare_nav_link/2"},{"id":"declare_settings_component/2","deprecated":false,"title":"declare_settings_component(name, opts \\\\ [])","anchor":"declare_settings_component/2"},{"id":"declare_settings_nav_component/2","deprecated":false,"title":"declare_settings_nav_component(name, opts \\\\ [])","anchor":"declare_settings_nav_component/2"},{"id":"declare_settings_nav_link/2","deprecated":false,"title":"declare_settings_nav_link(name, opts \\\\ [])","anchor":"declare_settings_nav_link/2"},{"id":"declare_widget/2","deprecated":false,"title":"declare_widget(name, opts \\\\ [])","anchor":"declare_widget/2"},{"id":"generate_link/3","deprecated":false,"title":"generate_link(name, module, opts)","anchor":"generate_link/3"}],"key":"functions"}],"nested_title":".Common.Modularity.DeclareHelpers","nested_context":"Bonfire"},{"id":"Bonfire.Common.Module.Override","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Module.Override","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"clone/2","deprecated":false,"title":"clone(old_module, new_module)","anchor":"clone/2"},{"id":"clone_original/2","deprecated":false,"title":"clone_original(old_module, prefix \\\\ nil)","anchor":"clone_original/2"},{"id":"module_name_atom/1","deprecated":false,"title":"module_name_atom(module)","anchor":"module_name_atom/1"},{"id":"module_name_string/1","deprecated":false,"title":"module_name_string(module)","anchor":"module_name_string/1"},{"id":"module_original_name_atom/2","deprecated":false,"title":"module_original_name_atom(module, prefix \\\\ nil)","anchor":"module_original_name_atom/2"},{"id":"module_original_name_str/2","deprecated":false,"title":"module_original_name_str(module, prefix \\\\ nil)","anchor":"module_original_name_str/2"}],"key":"functions"}],"nested_title":".Common.Module.Override","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"dataloader/1","deprecated":false,"title":"dataloader(context)","anchor":"dataloader/1"},{"id":"exists?/2","deprecated":false,"title":"exists?(filters, opts \\\\ [])","anchor":"exists?/2"},{"id":"filter_one/1","deprecated":false,"title":"filter_one(filters)","anchor":"filter_one/1"},{"id":"filters/3","deprecated":false,"title":"filters(schema, id_filters, opts \\\\ [])","anchor":"filters/3"},{"id":"follow!/2","deprecated":false,"title":"follow!(pointer_or_pointers, opts \\\\ [])","anchor":"follow!/2"},{"id":"follow_function_error/2","deprecated":false,"title":"follow_function_error(error, args)","anchor":"follow_function_error/2"},{"id":"forge!/1","deprecated":false,"title":"forge!(pointed)","anchor":"forge!/1"},{"id":"forge!/2","deprecated":false,"title":"forge!(table_id, id)","anchor":"forge!/2"},{"id":"get/2","deprecated":false,"title":"get(id, opts \\\\ [])","anchor":"get/2"},{"id":"get!/2","deprecated":false,"title":"get!(id, opts \\\\ [])","anchor":"get!/2"},{"id":"id_binary/1","deprecated":false,"title":"id_binary(id)","anchor":"id_binary/1"},{"id":"id_filter/2","deprecated":false,"title":"id_filter(query, id)","anchor":"id_filter/2"},{"id":"list!/2","deprecated":false,"title":"list!(pointers, opts \\\\ [])","anchor":"list!/2"},{"id":"list_by_type!/3","deprecated":false,"title":"list_by_type!(table_id_or_schema, filters \\\\ [], opts \\\\ [])","anchor":"list_by_type!/3"},{"id":"list_ids/0","deprecated":false,"title":"list_ids()","anchor":"list_ids/0"},{"id":"many/2","deprecated":false,"title":"many(filters \\\\ [], opts \\\\ [])","anchor":"many/2"},{"id":"many!/2","deprecated":false,"title":"many!(filters \\\\ [], opts \\\\ [])","anchor":"many!/2"},{"id":"maybe_forge/1","deprecated":false,"title":"maybe_forge(thing)","anchor":"maybe_forge/1"},{"id":"maybe_forge!/1","deprecated":false,"title":"maybe_forge!(thing)","anchor":"maybe_forge!/1"},{"id":"maybe_resolve/4","deprecated":false,"title":"maybe_resolve(parent, field, args, context)","anchor":"maybe_resolve/4"},{"id":"one/2","deprecated":false,"title":"one(id, opts \\\\ [])","anchor":"one/2"},{"id":"one!/2","deprecated":false,"title":"one!(filters, opts \\\\ [])","anchor":"one!/2"},{"id":"pointer_preloads/2","deprecated":false,"title":"pointer_preloads(query, preloads)","anchor":"pointer_preloads/2"},{"id":"pointer_query/2","deprecated":false,"title":"pointer_query(filters, opts)","anchor":"pointer_query/2"},{"id":"preload!/2","deprecated":false,"title":"preload!(pointer_or_pointers, opts \\\\ [])","anchor":"preload!/2"},{"id":"query/3","deprecated":false,"title":"query(schema, filters, opts \\\\ [])","anchor":"query/3"}],"key":"functions"}],"nested_title":".Common.Needles","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles.Pointers.Queries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles.Pointers.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(q, filter_or_filters)","anchor":"filter/2"},{"id":"query/1","deprecated":false,"title":"query(filters)","anchor":"query/1"},{"id":"query/2","deprecated":false,"title":"query(q, filters)","anchor":"query/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"}],"key":"functions"}],"nested_title":".Common.Needles.Pointers.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles.Preload","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles.Preload","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_preload_nested_pointers/3","deprecated":false,"title":"maybe_preload_nested_pointers(object, keys, opts \\\\ [])","anchor":"maybe_preload_nested_pointers/3"},{"id":"maybe_preload_pointer/2","deprecated":false,"title":"maybe_preload_pointer(pointer, opts \\\\ [])","anchor":"maybe_preload_pointer/2"},{"id":"maybe_preload_pointers/3","deprecated":false,"title":"maybe_preload_pointers(object, keys, opts \\\\ [])","anchor":"maybe_preload_pointers/3"}],"key":"functions"}],"nested_title":".Common.Needles.Preload","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles.Tables","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles.Tables","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"list_ids/0","deprecated":false,"title":"list_ids()","anchor":"list_ids/0"},{"id":"list_schemas/0","deprecated":false,"title":"list_schemas()","anchor":"list_schemas/0"},{"id":"list_tables/1","deprecated":false,"title":"list_tables(source \\\\ :code)","anchor":"list_tables/1"},{"id":"list_tables_debug/0","deprecated":false,"title":"list_tables_debug()","anchor":"list_tables_debug/0"},{"id":"many/1","deprecated":false,"title":"many(filters \\\\ [])","anchor":"many/1"},{"id":"one/1","deprecated":false,"title":"one(id)","anchor":"one/1"},{"id":"one!/1","deprecated":false,"title":"one!(filters)","anchor":"one!/1"},{"id":"schema_or_table!/1","deprecated":false,"title":"schema_or_table!(schema_or_tablename_or_id)","anchor":"schema_or_table!/1"},{"id":"table!/1","deprecated":false,"title":"table!(schema_or_tablename_or_id)","anchor":"table!/1"},{"id":"table_fields/1","deprecated":false,"title":"table_fields(schema)","anchor":"table_fields/1"},{"id":"table_fields_meta/1","deprecated":false,"title":"table_fields_meta(schema)","anchor":"table_fields_meta/1"}],"key":"functions"}],"nested_title":".Common.Needles.Tables","nested_context":"Bonfire"},{"id":"Bonfire.Common.Needles.Tables.Queries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Needles.Tables.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(q, filter_or_filters)","anchor":"filter/2"},{"id":"query/1","deprecated":false,"title":"query(filters)","anchor":"query/1"},{"id":"query/2","deprecated":false,"title":"query(q, filters)","anchor":"query/2"}],"key":"functions"}],"nested_title":".Common.Needles.Tables.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Common.PubSub","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.PubSub","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"broadcast/2","deprecated":false,"title":"broadcast(topics, payload)","anchor":"broadcast/2"},{"id":"broadcast_with_telemetry/2","deprecated":false,"title":"broadcast_with_telemetry(topic, message)","anchor":"broadcast_with_telemetry/2"},{"id":"broadcast_with_telemetry/3","deprecated":false,"title":"broadcast_with_telemetry(topic, message, source)","anchor":"broadcast_with_telemetry/3"},{"id":"current_function/1","deprecated":false,"title":"current_function(env)","anchor":"current_function/1"},{"id":"subscribe/2","deprecated":false,"title":"subscribe(topics, socket)","anchor":"subscribe/2"}],"key":"functions"}],"nested_title":".Common.PubSub","nested_context":"Bonfire"},{"id":"Bonfire.Common.PubSub.Event","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.PubSub.Event","sections":[],"nested_title":".Common.PubSub.Event","nested_context":"Bonfire"},{"id":"Bonfire.Common.QueryModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.QueryModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"context_module/0","deprecated":false,"title":"context_module()","anchor":"c:context_module/0"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"c:query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"c:schema_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"apply_error/2","deprecated":false,"title":"apply_error(error, args)","anchor":"apply_error/2"},{"id":"linked_context_modules/0","deprecated":false,"title":"linked_context_modules()","anchor":"linked_context_modules/0"},{"id":"linked_schema_modules/0","deprecated":false,"title":"linked_schema_modules()","anchor":"linked_schema_modules/0"},{"id":"maybe_query/3","deprecated":false,"title":"maybe_query(schema, filters \\\\ [], fallback_fun \\\\ &apply_error/2)","anchor":"maybe_query/3"},{"id":"maybe_query_module/1","deprecated":false,"title":"maybe_query_module(query)","anchor":"maybe_query_module/1"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"},{"id":"query_function_error/3","deprecated":false,"title":"query_function_error(error, args, level \\\\ :info)","anchor":"query_function_error/3"},{"id":"query_module/1","deprecated":false,"title":"query_module(query)","anchor":"query_module/1"},{"id":"query_module!/1","deprecated":false,"title":"query_module!(query)","anchor":"query_module!/1"},{"id":"query_modules/1","deprecated":false,"title":"query_modules(modules)","anchor":"query_modules/1"}],"key":"functions"}],"nested_title":".Common.QueryModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.Repo","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Repo","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"aggregate/3","deprecated":false,"title":"aggregate(queryable, aggregate, opts \\\\ [])","anchor":"aggregate/3"},{"id":"aggregate/4","deprecated":false,"title":"aggregate(queryable, aggregate, field, opts)","anchor":"aggregate/4"},{"id":"all/2","deprecated":false,"title":"all(queryable, opts \\\\ [])","anchor":"all/2"},{"id":"checked_out?/0","deprecated":false,"title":"checked_out?()","anchor":"checked_out?/0"},{"id":"checkout/2","deprecated":false,"title":"checkout(fun, opts \\\\ [])","anchor":"checkout/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"default_options/1","deprecated":false,"title":"default_options(operation)","anchor":"default_options/1"},{"id":"default_repo_opts/0","deprecated":false,"title":"default_repo_opts()","anchor":"default_repo_opts/0"},{"id":"delete/2","deprecated":false,"title":"delete(struct, opts \\\\ [])","anchor":"delete/2"},{"id":"delete!/2","deprecated":false,"title":"delete!(struct, opts \\\\ [])","anchor":"delete!/2"},{"id":"delete_all/2","deprecated":false,"title":"delete_all(queryable, opts \\\\ [])","anchor":"delete_all/2"},{"id":"delete_many/1","deprecated":false,"title":"delete_many(query)","anchor":"delete_many/1"},{"id":"disconnect_all/2","deprecated":false,"title":"disconnect_all(interval, opts \\\\ [])","anchor":"disconnect_all/2"},{"id":"exists?/2","deprecated":false,"title":"exists?(queryable, opts \\\\ [])","anchor":"exists?/2"},{"id":"explain/3","deprecated":false,"title":"explain(operation, queryable, opts \\\\ [])","anchor":"explain/3"},{"id":"fetch/2","deprecated":false,"title":"fetch(queryable, id)","anchor":"fetch/2"},{"id":"fetch_all/2","deprecated":false,"title":"fetch_all(queryable, id_or_ids)","anchor":"fetch_all/2"},{"id":"fetch_by/2","deprecated":false,"title":"fetch_by(queryable, term)","anchor":"fetch_by/2"},{"id":"find/3","deprecated":false,"title":"find(q, changeset, field \\\\ :form)","anchor":"find/3"},{"id":"get/3","deprecated":false,"title":"get(queryable, id, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(queryable, id, opts \\\\ [])","anchor":"get!/3"},{"id":"get_by/3","deprecated":false,"title":"get_by(queryable, clauses, opts \\\\ [])","anchor":"get_by/3"},{"id":"get_by!/3","deprecated":false,"title":"get_by!(queryable, clauses, opts \\\\ [])","anchor":"get_by!/3"},{"id":"get_dynamic_repo/0","deprecated":false,"title":"get_dynamic_repo()","anchor":"get_dynamic_repo/0"},{"id":"in_transaction?/0","deprecated":false,"title":"in_transaction?()","anchor":"in_transaction?/0"},{"id":"insert/2","deprecated":false,"title":"insert(struct, opts \\\\ [])","anchor":"insert/2"},{"id":"insert!/2","deprecated":false,"title":"insert!(struct, opts \\\\ [])","anchor":"insert!/2"},{"id":"insert_all/3","deprecated":false,"title":"insert_all(schema_or_source, entries, opts \\\\ [])","anchor":"insert_all/3"},{"id":"insert_all_or_ignore/2","deprecated":false,"title":"insert_all_or_ignore(schema, data)","anchor":"insert_all_or_ignore/2"},{"id":"insert_or_ignore/1","deprecated":false,"title":"insert_or_ignore(cs_or_struct)","anchor":"insert_or_ignore/1"},{"id":"insert_or_ignore/2","deprecated":false,"title":"insert_or_ignore(schema, object)","anchor":"insert_or_ignore/2"},{"id":"insert_or_update/2","deprecated":false,"title":"insert_or_update(changeset, opts \\\\ [])","anchor":"insert_or_update/2"},{"id":"insert_or_update!/2","deprecated":false,"title":"insert_or_update!(changeset, opts \\\\ [])","anchor":"insert_or_update!/2"},{"id":"load/2","deprecated":false,"title":"load(schema_or_types, data)","anchor":"load/2"},{"id":"make_subquery/1","deprecated":false,"title":"make_subquery(query)","anchor":"make_subquery/1"},{"id":"many/2","deprecated":false,"title":"many(query, opts \\\\ [])","anchor":"many/2"},{"id":"many_paginated/3","deprecated":false,"title":"many_paginated(queryable, opts \\\\ [], repo_opts \\\\ default_repo_opts())","anchor":"many_paginated/3"},{"id":"maybe_one/2","deprecated":false,"title":"maybe_one(q, fallback \\\\ nil)","anchor":"maybe_one/2"},{"id":"maybe_preload/3","deprecated":false,"title":"maybe_preload(obj, preloads, opts \\\\ [])","anchor":"maybe_preload/3"},{"id":"migrate/0","deprecated":false,"title":"migrate()","anchor":"migrate/0"},{"id":"one/2","deprecated":false,"title":"one(queryable, opts \\\\ [])","anchor":"one/2"},{"id":"one!/2","deprecated":false,"title":"one!(queryable, opts \\\\ [])","anchor":"one!/2"},{"id":"paginate/2","deprecated":false,"title":"paginate(pageable, options \\\\ [])","anchor":"paginate/2"},{"id":"preload/3","deprecated":false,"title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])","anchor":"preload/3"},{"id":"preload_all/2","deprecated":false,"title":"preload_all(obj, opts \\\\ [])","anchor":"preload_all/2"},{"id":"preload_mixins/2","deprecated":false,"title":"preload_mixins(obj, opts \\\\ [])","anchor":"preload_mixins/2"},{"id":"prepare_query/3","deprecated":false,"title":"prepare_query(operation, query, opts)","anchor":"prepare_query/3"},{"id":"put/1","deprecated":false,"title":"put(changeset)","anchor":"put/1"},{"id":"put_dynamic_repo/1","deprecated":false,"title":"put_dynamic_repo(dynamic)","anchor":"put_dynamic_repo/1"},{"id":"put_many/1","deprecated":false,"title":"put_many(things)","anchor":"put_many/1"},{"id":"query/3","deprecated":false,"title":"query(sql, params \\\\ [], opts \\\\ [])","anchor":"query/3"},{"id":"query!/3","deprecated":false,"title":"query!(sql, params \\\\ [], opts \\\\ [])","anchor":"query!/3"},{"id":"query_many/3","deprecated":false,"title":"query_many(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many/3"},{"id":"query_many!/3","deprecated":false,"title":"query_many!(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many!/3"},{"id":"reload/2","deprecated":false,"title":"reload(queryable, opts \\\\ [])","anchor":"reload/2"},{"id":"reload!/2","deprecated":false,"title":"reload!(queryable, opts \\\\ [])","anchor":"reload!/2"},{"id":"rollback/1","deprecated":false,"title":"rollback(value)","anchor":"rollback/1"},{"id":"single/1","deprecated":false,"title":"single(q)","anchor":"single/1"},{"id":"sql/3","deprecated":false,"title":"sql(raw_sql, data \\\\ [], opts \\\\ [])","anchor":"sql/3"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"stop/1","deprecated":false,"title":"stop(timeout \\\\ 5000)","anchor":"stop/1"},{"id":"stream/2","deprecated":false,"title":"stream(queryable, opts \\\\ [])","anchor":"stream/2"},{"id":"to_sql/2","deprecated":false,"title":"to_sql(operation, queryable)","anchor":"to_sql/2"},{"id":"trace/1","deprecated":false,"title":"trace(fun)","anchor":"trace/1"},{"id":"transact_many/1","deprecated":false,"title":"transact_many(queries)","anchor":"transact_many/1"},{"id":"transact_with/1","deprecated":false,"title":"transact_with(fun)","anchor":"transact_with/1"},{"id":"transaction/2","deprecated":false,"title":"transaction(fun_or_multi, opts \\\\ [])","anchor":"transaction/2"},{"id":"update/2","deprecated":false,"title":"update(struct, opts \\\\ [])","anchor":"update/2"},{"id":"update!/2","deprecated":false,"title":"update!(struct, opts \\\\ [])","anchor":"update!/2"},{"id":"update_all/3","deprecated":false,"title":"update_all(queryable, updates, opts \\\\ [])","anchor":"update_all/3"},{"id":"upsert/3","deprecated":false,"title":"upsert(cs, keys_or_attrs_to_update \\\\ nil, conflict_target \\\\ [:id])","anchor":"upsert/3"},{"id":"upsert_all/3","deprecated":false,"title":"upsert_all(schema, data, conflict_target \\\\ [:id])","anchor":"upsert_all/3"}],"key":"functions"}],"nested_title":".Common.Repo","nested_context":"Bonfire"},{"id":"Bonfire.Common.Repo.Delete","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Repo.Delete","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"deletion_result/1","deprecated":false,"title":"deletion_result(other)","anchor":"deletion_result/1"},{"id":"deletion_result!/1","deprecated":false,"title":"deletion_result!(arg)","anchor":"deletion_result!/1"},{"id":"hard_delete/1","deprecated":false,"title":"hard_delete(it)","anchor":"hard_delete/1"},{"id":"hard_delete!/1","deprecated":false,"title":"hard_delete!(it)","anchor":"hard_delete!/1"},{"id":"maybe_allow_delete?/2","deprecated":false,"title":"maybe_allow_delete?(user, context)","anchor":"maybe_allow_delete?/2"},{"id":"schema/1","deprecated":false,"title":"schema(it)","anchor":"schema/1"},{"id":"soft_delete/1","deprecated":false,"title":"soft_delete(it)","anchor":"soft_delete/1"},{"id":"soft_delete!/1","deprecated":false,"title":"soft_delete!(it)","anchor":"soft_delete!/1"},{"id":"soft_delete_changeset/4","deprecated":false,"title":"soft_delete_changeset(it, column \\\\ :deleted_at, value \\\\ DateTime.utc_now(), error \\\\ \"was already deleted\")","anchor":"soft_delete_changeset/4"},{"id":"undelete/1","deprecated":false,"title":"undelete(it)","anchor":"undelete/1"}],"key":"functions"}],"nested_title":".Common.Repo.Delete","nested_context":"Bonfire"},{"id":"Bonfire.Common.Repo.Preload","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Repo.Preload","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"aggregate/3","deprecated":false,"title":"aggregate(queryable, aggregate, opts \\\\ [])","anchor":"aggregate/3"},{"id":"aggregate/4","deprecated":false,"title":"aggregate(queryable, aggregate, field, opts)","anchor":"aggregate/4"},{"id":"all/2","deprecated":false,"title":"all(queryable, opts \\\\ [])","anchor":"all/2"},{"id":"checked_out?/0","deprecated":false,"title":"checked_out?()","anchor":"checked_out?/0"},{"id":"checkout/2","deprecated":false,"title":"checkout(fun, opts \\\\ [])","anchor":"checkout/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"default_options/1","deprecated":false,"title":"default_options(operation)","anchor":"default_options/1"},{"id":"delete/2","deprecated":false,"title":"delete(struct, opts \\\\ [])","anchor":"delete/2"},{"id":"delete!/2","deprecated":false,"title":"delete!(struct, opts \\\\ [])","anchor":"delete!/2"},{"id":"delete_all/2","deprecated":false,"title":"delete_all(queryable, opts \\\\ [])","anchor":"delete_all/2"},{"id":"disconnect_all/2","deprecated":false,"title":"disconnect_all(interval, opts \\\\ [])","anchor":"disconnect_all/2"},{"id":"exists?/2","deprecated":false,"title":"exists?(queryable, opts \\\\ [])","anchor":"exists?/2"},{"id":"explain/3","deprecated":false,"title":"explain(operation, queryable, opts \\\\ [])","anchor":"explain/3"},{"id":"get/3","deprecated":false,"title":"get(queryable, id, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(queryable, id, opts \\\\ [])","anchor":"get!/3"},{"id":"get_by/3","deprecated":false,"title":"get_by(queryable, clauses, opts \\\\ [])","anchor":"get_by/3"},{"id":"get_by!/3","deprecated":false,"title":"get_by!(queryable, clauses, opts \\\\ [])","anchor":"get_by!/3"},{"id":"get_dynamic_repo/0","deprecated":false,"title":"get_dynamic_repo()","anchor":"get_dynamic_repo/0"},{"id":"in_transaction?/0","deprecated":false,"title":"in_transaction?()","anchor":"in_transaction?/0"},{"id":"insert/2","deprecated":false,"title":"insert(struct, opts \\\\ [])","anchor":"insert/2"},{"id":"insert!/2","deprecated":false,"title":"insert!(struct, opts \\\\ [])","anchor":"insert!/2"},{"id":"insert_all/3","deprecated":false,"title":"insert_all(schema_or_source, entries, opts \\\\ [])","anchor":"insert_all/3"},{"id":"insert_or_update/2","deprecated":false,"title":"insert_or_update(changeset, opts \\\\ [])","anchor":"insert_or_update/2"},{"id":"insert_or_update!/2","deprecated":false,"title":"insert_or_update!(changeset, opts \\\\ [])","anchor":"insert_or_update!/2"},{"id":"load/2","deprecated":false,"title":"load(schema_or_types, data)","anchor":"load/2"},{"id":"maybe_preload/3","deprecated":false,"title":"maybe_preload(obj, preloads, opts \\\\ [])","anchor":"maybe_preload/3"},{"id":"maybe_preloads_per_nested_schema/4","deprecated":false,"title":"maybe_preloads_per_nested_schema(objects, path, preloads, opts \\\\ [])","anchor":"maybe_preloads_per_nested_schema/4"},{"id":"maybe_preloads_per_schema/3","deprecated":false,"title":"maybe_preloads_per_schema(object, schema_preloads, opts \\\\ [])","anchor":"maybe_preloads_per_schema/3"},{"id":"one/2","deprecated":false,"title":"one(queryable, opts \\\\ [])","anchor":"one/2"},{"id":"one!/2","deprecated":false,"title":"one!(queryable, opts \\\\ [])","anchor":"one!/2"},{"id":"preload/3","deprecated":false,"title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])","anchor":"preload/3"},{"id":"preload_all/2","deprecated":false,"title":"preload_all(structure, opts \\\\ [])","anchor":"preload_all/2"},{"id":"preload_mixins/2","deprecated":false,"title":"preload_mixins(structure, opts \\\\ [])","anchor":"preload_mixins/2"},{"id":"prepare_query/3","deprecated":false,"title":"prepare_query(operation, query, opts)","anchor":"prepare_query/3"},{"id":"put_dynamic_repo/1","deprecated":false,"title":"put_dynamic_repo(dynamic)","anchor":"put_dynamic_repo/1"},{"id":"query/3","deprecated":false,"title":"query(sql, params \\\\ [], opts \\\\ [])","anchor":"query/3"},{"id":"query!/3","deprecated":false,"title":"query!(sql, params \\\\ [], opts \\\\ [])","anchor":"query!/3"},{"id":"query_many/3","deprecated":false,"title":"query_many(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many/3"},{"id":"query_many!/3","deprecated":false,"title":"query_many!(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many!/3"},{"id":"reload/2","deprecated":false,"title":"reload(queryable, opts \\\\ [])","anchor":"reload/2"},{"id":"reload!/2","deprecated":false,"title":"reload!(queryable, opts \\\\ [])","anchor":"reload!/2"},{"id":"rollback/1","deprecated":false,"title":"rollback(value)","anchor":"rollback/1"},{"id":"schema_mixins/1","deprecated":false,"title":"schema_mixins(structure)","anchor":"schema_mixins/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"stop/1","deprecated":false,"title":"stop(timeout \\\\ 5000)","anchor":"stop/1"},{"id":"stream/2","deprecated":false,"title":"stream(queryable, opts \\\\ [])","anchor":"stream/2"},{"id":"to_sql/2","deprecated":false,"title":"to_sql(operation, queryable)","anchor":"to_sql/2"},{"id":"transaction/2","deprecated":false,"title":"transaction(fun_or_multi, opts \\\\ [])","anchor":"transaction/2"},{"id":"update/2","deprecated":false,"title":"update(struct, opts \\\\ [])","anchor":"update/2"},{"id":"update!/2","deprecated":false,"title":"update!(struct, opts \\\\ [])","anchor":"update!/2"},{"id":"update_all/3","deprecated":false,"title":"update_all(queryable, updates, opts \\\\ [])","anchor":"update_all/3"}],"key":"functions"}],"nested_title":".Common.Repo.Preload","nested_context":"Bonfire"},{"id":"Bonfire.Common.Repo.Utils","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Repo.Utils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"change_disabled/1","deprecated":false,"title":"change_disabled(changeset)","anchor":"change_disabled/1"},{"id":"change_muted/1","deprecated":false,"title":"change_muted(changeset)","anchor":"change_muted/1"},{"id":"change_public/1","deprecated":false,"title":"change_public(changeset)","anchor":"change_public/1"},{"id":"match_admin/0","deprecated":false,"title":"match_admin()","anchor":"match_admin/0"},{"id":"validate_email/2","deprecated":false,"title":"validate_email(changeset, field)","anchor":"validate_email/2"},{"id":"validate_email_domain/2","deprecated":false,"title":"validate_email_domain(changeset, field)","anchor":"validate_email_domain/2"}],"key":"functions"}],"nested_title":".Common.Repo.Utils","nested_context":"Bonfire"},{"id":"Bonfire.Common.RepoTemplate","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.RepoTemplate","sections":[],"nested_title":".Common.RepoTemplate","nested_context":"Bonfire"},{"id":"Bonfire.Common.RuntimeConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"},{"id":"skip_test_tags/1","deprecated":false,"title":"skip_test_tags(extras \\\\ [])","anchor":"skip_test_tags/1"}],"key":"functions"}],"nested_title":".Common.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Common.SchemaModule","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.SchemaModule","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"context_module/0","deprecated":false,"title":"context_module()","anchor":"c:context_module/0"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"c:query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"c:schema_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"linked_context_modules/0","deprecated":false,"title":"linked_context_modules()","anchor":"linked_context_modules/0"},{"id":"linked_query_modules/0","deprecated":false,"title":"linked_query_modules()","anchor":"linked_query_modules/0"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Common.SchemaModule","nested_context":"Bonfire"},{"id":"Bonfire.Common.Settings","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Settings","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"get/3","deprecated":false,"title":"get(key, default \\\\ nil, opts \\\\ [])","anchor":"get/3"},{"id":"get!/2","deprecated":false,"title":"get!(key, opts)","anchor":"get!/2"},{"id":"load_instance_settings/0","deprecated":false,"title":"load_instance_settings()","anchor":"load_instance_settings/0"},{"id":"map_put_in/3","deprecated":false,"title":"map_put_in(root \\\\ %{}, keys, value)","anchor":"map_put_in/3"},{"id":"put/3","deprecated":false,"title":"put(keys, value, opts)","anchor":"put/3"},{"id":"reset_all/0","deprecated":false,"title":"reset_all()","anchor":"reset_all/0"},{"id":"reset_instance/0","deprecated":false,"title":"reset_instance()","anchor":"reset_instance/0"},{"id":"set/2","deprecated":false,"title":"set(attrs, opts)","anchor":"set/2"}],"key":"functions"}],"nested_title":".Common.Settings","nested_context":"Bonfire"},{"id":"Bonfire.Common.Settings.LiveHandler","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Settings.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"input_name/1","deprecated":false,"title":"input_name(keys)","anchor":"input_name/1"},{"id":"maybe_assign_input_value_from_keys/1","deprecated":false,"title":"maybe_assign_input_value_from_keys(assigns)","anchor":"maybe_assign_input_value_from_keys/1"},{"id":"scoped/2","deprecated":false,"title":"scoped(scope, context)","anchor":"scoped/2"},{"id":"set_image_setting/5","deprecated":false,"title":"set_image_setting(atom, scope, uploaded_media, settings_key, socket)","anchor":"set_image_setting/5"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Common.Settings.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Common.Settings.LoadInstanceConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Settings.LoadInstanceConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"load_config/0","deprecated":false,"title":"load_config()","anchor":"load_config/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Common.Settings.LoadInstanceConfig","nested_context":"Bonfire"},{"id":"Bonfire.Common.Simulation","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Simulation","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_url_base/0","deprecated":false,"title":"ap_url_base()","anchor":"ap_url_base/0"},{"id":"base64/0","deprecated":false,"title":"base64()","anchor":"base64/0"},{"id":"bool/0","deprecated":false,"title":"bool()","anchor":"bool/0"},{"id":"canonical_url/0","deprecated":false,"title":"canonical_url()","anchor":"canonical_url/0"},{"id":"content_type/0","deprecated":false,"title":"content_type()","anchor":"content_type/0"},{"id":"content_url/0","deprecated":false,"title":"content_url()","anchor":"content_url/0"},{"id":"date_of_birth/0","deprecated":false,"title":"date_of_birth()","anchor":"date_of_birth/0"},{"id":"domain/0","deprecated":false,"title":"domain()","anchor":"domain/0"},{"id":"email/0","deprecated":false,"title":"email()","anchor":"email/0"},{"id":"email_user/0","deprecated":false,"title":"email_user()","anchor":"email_user/0"},{"id":"falsehood/0","deprecated":false,"title":"falsehood()","anchor":"falsehood/0"},{"id":"float/0","deprecated":false,"title":"float()","anchor":"float/0"},{"id":"future_date/0","deprecated":false,"title":"future_date()","anchor":"future_date/0"},{"id":"future_datetime/0","deprecated":false,"title":"future_datetime()","anchor":"future_datetime/0"},{"id":"future_datetime_iso/0","deprecated":false,"title":"future_datetime_iso()","anchor":"future_datetime_iso/0"},{"id":"icon/0","deprecated":false,"title":"icon()","anchor":"icon/0"},{"id":"image/0","deprecated":false,"title":"image()","anchor":"image/0"},{"id":"integer/0","deprecated":false,"title":"integer()","anchor":"integer/0"},{"id":"license/0","deprecated":false,"title":"license()","anchor":"license/0"},{"id":"location/0","deprecated":false,"title":"location()","anchor":"location/0"},{"id":"long_count/0","deprecated":false,"title":"long_count()","anchor":"long_count/0"},{"id":"long_list/1","deprecated":false,"title":"long_list(gen)","anchor":"long_list/1"},{"id":"markdown/0","deprecated":false,"title":"markdown()","anchor":"markdown/0"},{"id":"maybe_bool/0","deprecated":false,"title":"maybe_bool()","anchor":"maybe_bool/0"},{"id":"maybe_one_of/1","deprecated":false,"title":"maybe_one_of(list)","anchor":"maybe_one_of/1"},{"id":"med_count/0","deprecated":false,"title":"med_count()","anchor":"med_count/0"},{"id":"med_list/1","deprecated":false,"title":"med_list(gen)","anchor":"med_list/1"},{"id":"name/0","deprecated":false,"title":"name()","anchor":"name/0"},{"id":"neg_integer/0","deprecated":false,"title":"neg_integer()","anchor":"neg_integer/0"},{"id":"one_of/1","deprecated":false,"title":"one_of(gens)","anchor":"one_of/1"},{"id":"paragraph/0","deprecated":false,"title":"paragraph()","anchor":"paragraph/0"},{"id":"password/0","deprecated":false,"title":"password()","anchor":"password/0"},{"id":"past_date/0","deprecated":false,"title":"past_date()","anchor":"past_date/0"},{"id":"past_datetime/0","deprecated":false,"title":"past_datetime()","anchor":"past_datetime/0"},{"id":"past_datetime_iso/0","deprecated":false,"title":"past_datetime_iso()","anchor":"past_datetime_iso/0"},{"id":"path/0","deprecated":false,"title":"path()","anchor":"path/0"},{"id":"pos_integer/0","deprecated":false,"title":"pos_integer()","anchor":"pos_integer/0"},{"id":"preferred_username/0","deprecated":false,"title":"preferred_username()","anchor":"preferred_username/0"},{"id":"short_count/0","deprecated":false,"title":"short_count()","anchor":"short_count/0"},{"id":"short_list/1","deprecated":false,"title":"short_list(gen)","anchor":"short_list/1"},{"id":"signing_key/0","deprecated":false,"title":"signing_key()","anchor":"signing_key/0"},{"id":"some/2","deprecated":false,"title":"some(count_or_range \\\\ 1, fun)","anchor":"some/2"},{"id":"summary/0","deprecated":false,"title":"summary()","anchor":"summary/0"},{"id":"title/0","deprecated":false,"title":"title()","anchor":"title/0"},{"id":"truth/0","deprecated":false,"title":"truth()","anchor":"truth/0"},{"id":"ulid/0","deprecated":false,"title":"ulid()","anchor":"ulid/0"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"url/0"},{"id":"username/0","deprecated":false,"title":"username()","anchor":"username/0"},{"id":"uuid/0","deprecated":false,"title":"uuid()","anchor":"uuid/0"},{"id":"verb/0","deprecated":false,"title":"verb()","anchor":"verb/0"},{"id":"website/0","deprecated":false,"title":"website()","anchor":"website/0"}],"key":"functions"}],"nested_title":".Common.Simulation","nested_context":"Bonfire"},{"id":"Bonfire.Common.StartupTimer","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.StartupTimer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(application \\\\ :bonfire)","anchor":"run/1"}],"key":"functions"}],"nested_title":".Common.StartupTimer","nested_context":"Bonfire"},{"id":"Bonfire.Common.Test.Interactive","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Test.Interactive","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"run_all_tests/1","deprecated":false,"title":"run_all_tests(args)","anchor":"run_all_tests/1"},{"id":"run_failed_tests/1","deprecated":false,"title":"run_failed_tests(args)","anchor":"run_failed_tests/1"},{"id":"run_stale_tests/1","deprecated":false,"title":"run_stale_tests(args)","anchor":"run_stale_tests/1"},{"id":"setup_test_repo/1","deprecated":false,"title":"setup_test_repo(tags)","anchor":"setup_test_repo/1"},{"id":"start_link/0","deprecated":false,"title":"start_link()","anchor":"start_link/0"},{"id":"unlock/0","deprecated":false,"title":"unlock()","anchor":"unlock/0"},{"id":"unwatch_tests/0","deprecated":false,"title":"unwatch_tests()","anchor":"unwatch_tests/0"},{"id":"watch_tests/1","deprecated":false,"title":"watch_tests(args)","anchor":"watch_tests/1"}],"key":"functions"}],"nested_title":".Common.Test.Interactive","nested_context":"Bonfire"},{"id":"Bonfire.Common.Test.Interactive.Helpers","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Test.Interactive.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"f/1","deprecated":false,"title":"f(args \\\\ nil)","anchor":"f/1"},{"id":"ready/0","deprecated":false,"title":"ready()","anchor":"ready/0"},{"id":"s/1","deprecated":false,"title":"s(args \\\\ nil)","anchor":"s/1"},{"id":"ta/1","deprecated":false,"title":"ta(args \\\\ nil)","anchor":"ta/1"},{"id":"uw/0","deprecated":false,"title":"uw()","anchor":"uw/0"},{"id":"w/1","deprecated":false,"title":"w(args \\\\ nil)","anchor":"w/1"}],"key":"functions"}],"nested_title":".Common.Test.Interactive.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.Common.Test.Interactive.Observer","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Test.Interactive.Observer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"}],"key":"functions"}],"nested_title":".Common.Test.Interactive.Observer","nested_context":"Bonfire"},{"id":"Bonfire.Common.TestInstanceRepo","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.TestInstanceRepo","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"aggregate/3","deprecated":false,"title":"aggregate(queryable, aggregate, opts \\\\ [])","anchor":"aggregate/3"},{"id":"aggregate/4","deprecated":false,"title":"aggregate(queryable, aggregate, field, opts)","anchor":"aggregate/4"},{"id":"all/2","deprecated":false,"title":"all(queryable, opts \\\\ [])","anchor":"all/2"},{"id":"apply/1","deprecated":false,"title":"apply(fun)","anchor":"apply/1"},{"id":"checked_out?/0","deprecated":false,"title":"checked_out?()","anchor":"checked_out?/0"},{"id":"checkout/2","deprecated":false,"title":"checkout(fun, opts \\\\ [])","anchor":"checkout/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"default_endpoint/0","deprecated":false,"title":"default_endpoint()","anchor":"default_endpoint/0"},{"id":"default_options/1","deprecated":false,"title":"default_options(operation)","anchor":"default_options/1"},{"id":"default_repo/0","deprecated":false,"title":"default_repo()","anchor":"default_repo/0"},{"id":"default_repo_opts/0","deprecated":false,"title":"default_repo_opts()","anchor":"default_repo_opts/0"},{"id":"delete/2","deprecated":false,"title":"delete(struct, opts \\\\ [])","anchor":"delete/2"},{"id":"delete!/2","deprecated":false,"title":"delete!(struct, opts \\\\ [])","anchor":"delete!/2"},{"id":"delete_all/2","deprecated":false,"title":"delete_all(queryable, opts \\\\ [])","anchor":"delete_all/2"},{"id":"delete_many/1","deprecated":false,"title":"delete_many(query)","anchor":"delete_many/1"},{"id":"disconnect_all/2","deprecated":false,"title":"disconnect_all(interval, opts \\\\ [])","anchor":"disconnect_all/2"},{"id":"exists?/2","deprecated":false,"title":"exists?(queryable, opts \\\\ [])","anchor":"exists?/2"},{"id":"explain/3","deprecated":false,"title":"explain(operation, queryable, opts \\\\ [])","anchor":"explain/3"},{"id":"fetch/2","deprecated":false,"title":"fetch(queryable, id)","anchor":"fetch/2"},{"id":"fetch_all/2","deprecated":false,"title":"fetch_all(queryable, id_or_ids)","anchor":"fetch_all/2"},{"id":"fetch_by/2","deprecated":false,"title":"fetch_by(queryable, term)","anchor":"fetch_by/2"},{"id":"find/3","deprecated":false,"title":"find(q, changeset, field \\\\ :form)","anchor":"find/3"},{"id":"get/3","deprecated":false,"title":"get(queryable, id, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(queryable, id, opts \\\\ [])","anchor":"get!/3"},{"id":"get_by/3","deprecated":false,"title":"get_by(queryable, clauses, opts \\\\ [])","anchor":"get_by/3"},{"id":"get_by!/3","deprecated":false,"title":"get_by!(queryable, clauses, opts \\\\ [])","anchor":"get_by!/3"},{"id":"get_dynamic_repo/0","deprecated":false,"title":"get_dynamic_repo()","anchor":"get_dynamic_repo/0"},{"id":"in_transaction?/0","deprecated":false,"title":"in_transaction?()","anchor":"in_transaction?/0"},{"id":"insert/2","deprecated":false,"title":"insert(struct, opts \\\\ [])","anchor":"insert/2"},{"id":"insert!/2","deprecated":false,"title":"insert!(struct, opts \\\\ [])","anchor":"insert!/2"},{"id":"insert_all/3","deprecated":false,"title":"insert_all(schema_or_source, entries, opts \\\\ [])","anchor":"insert_all/3"},{"id":"insert_all_or_ignore/2","deprecated":false,"title":"insert_all_or_ignore(schema, data)","anchor":"insert_all_or_ignore/2"},{"id":"insert_or_ignore/1","deprecated":false,"title":"insert_or_ignore(cs_or_struct)","anchor":"insert_or_ignore/1"},{"id":"insert_or_ignore/2","deprecated":false,"title":"insert_or_ignore(schema, object)","anchor":"insert_or_ignore/2"},{"id":"insert_or_update/2","deprecated":false,"title":"insert_or_update(changeset, opts \\\\ [])","anchor":"insert_or_update/2"},{"id":"insert_or_update!/2","deprecated":false,"title":"insert_or_update!(changeset, opts \\\\ [])","anchor":"insert_or_update!/2"},{"id":"load/2","deprecated":false,"title":"load(schema_or_types, data)","anchor":"load/2"},{"id":"make_subquery/1","deprecated":false,"title":"make_subquery(query)","anchor":"make_subquery/1"},{"id":"many/2","deprecated":false,"title":"many(query, opts \\\\ [])","anchor":"many/2"},{"id":"many_paginated/3","deprecated":false,"title":"many_paginated(queryable, opts \\\\ [], repo_opts \\\\ default_repo_opts())","anchor":"many_paginated/3"},{"id":"maybe_declare_test_instance/1","deprecated":false,"title":"maybe_declare_test_instance(v)","anchor":"maybe_declare_test_instance/1"},{"id":"maybe_one/2","deprecated":false,"title":"maybe_one(q, fallback \\\\ nil)","anchor":"maybe_one/2"},{"id":"maybe_preload/3","deprecated":false,"title":"maybe_preload(obj, preloads, opts \\\\ [])","anchor":"maybe_preload/3"},{"id":"one/2","deprecated":false,"title":"one(queryable, opts \\\\ [])","anchor":"one/2"},{"id":"one!/2","deprecated":false,"title":"one!(queryable, opts \\\\ [])","anchor":"one!/2"},{"id":"paginate/2","deprecated":false,"title":"paginate(pageable, options \\\\ [])","anchor":"paginate/2"},{"id":"preload/3","deprecated":false,"title":"preload(struct_or_structs_or_nil, preloads, opts \\\\ [])","anchor":"preload/3"},{"id":"preload_all/2","deprecated":false,"title":"preload_all(obj, opts \\\\ [])","anchor":"preload_all/2"},{"id":"preload_mixins/2","deprecated":false,"title":"preload_mixins(obj, opts \\\\ [])","anchor":"preload_mixins/2"},{"id":"prepare_query/3","deprecated":false,"title":"prepare_query(operation, query, opts)","anchor":"prepare_query/3"},{"id":"process_put/1","deprecated":false,"title":"process_put(enum)","anchor":"process_put/1"},{"id":"put/1","deprecated":false,"title":"put(changeset)","anchor":"put/1"},{"id":"put_dynamic_repo/1","deprecated":false,"title":"put_dynamic_repo(dynamic)","anchor":"put_dynamic_repo/1"},{"id":"put_many/1","deprecated":false,"title":"put_many(things)","anchor":"put_many/1"},{"id":"query/3","deprecated":false,"title":"query(sql, params \\\\ [], opts \\\\ [])","anchor":"query/3"},{"id":"query!/3","deprecated":false,"title":"query!(sql, params \\\\ [], opts \\\\ [])","anchor":"query!/3"},{"id":"query_many/3","deprecated":false,"title":"query_many(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many/3"},{"id":"query_many!/3","deprecated":false,"title":"query_many!(sql, params \\\\ [], opts \\\\ [])","anchor":"query_many!/3"},{"id":"reload/2","deprecated":false,"title":"reload(queryable, opts \\\\ [])","anchor":"reload/2"},{"id":"reload!/2","deprecated":false,"title":"reload!(queryable, opts \\\\ [])","anchor":"reload!/2"},{"id":"rollback/1","deprecated":false,"title":"rollback(value)","anchor":"rollback/1"},{"id":"single/1","deprecated":false,"title":"single(q)","anchor":"single/1"},{"id":"sql/3","deprecated":false,"title":"sql(raw_sql, data \\\\ [], opts \\\\ [])","anchor":"sql/3"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"stop/1","deprecated":false,"title":"stop(timeout \\\\ 5000)","anchor":"stop/1"},{"id":"stream/2","deprecated":false,"title":"stream(queryable, opts \\\\ [])","anchor":"stream/2"},{"id":"to_sql/2","deprecated":false,"title":"to_sql(operation, queryable)","anchor":"to_sql/2"},{"id":"trace/1","deprecated":false,"title":"trace(fun)","anchor":"trace/1"},{"id":"transact_many/1","deprecated":false,"title":"transact_many(queries)","anchor":"transact_many/1"},{"id":"transact_with/1","deprecated":false,"title":"transact_with(fun)","anchor":"transact_with/1"},{"id":"transaction/2","deprecated":false,"title":"transaction(fun_or_multi, opts \\\\ [])","anchor":"transaction/2"},{"id":"update/2","deprecated":false,"title":"update(struct, opts \\\\ [])","anchor":"update/2"},{"id":"update!/2","deprecated":false,"title":"update!(struct, opts \\\\ [])","anchor":"update!/2"},{"id":"update_all/3","deprecated":false,"title":"update_all(queryable, updates, opts \\\\ [])","anchor":"update_all/3"},{"id":"upsert/3","deprecated":false,"title":"upsert(cs, keys_or_attrs_to_update \\\\ nil, conflict_target \\\\ [:id])","anchor":"upsert/3"},{"id":"upsert_all/3","deprecated":false,"title":"upsert_all(schema, data, conflict_target \\\\ [:id])","anchor":"upsert_all/3"}],"key":"functions"}],"nested_title":".Common.TestInstanceRepo","nested_context":"Bonfire"},{"id":"Bonfire.Common.Text","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Text","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"blank?/1","deprecated":false,"title":"blank?(str_or_nil)","anchor":"blank?/1"},{"id":"camelise/1","deprecated":false,"title":"camelise(str)","anchor":"camelise/1"},{"id":"code_syntax/2","deprecated":false,"title":"code_syntax(text, filename)","anchor":"code_syntax/2"},{"id":"contains?/2","deprecated":false,"title":"contains?(string, substring)","anchor":"contains?/2"},{"id":"contains_html?/1","deprecated":false,"title":"contains_html?(string)","anchor":"contains_html?/1"},{"id":"hash/2","deprecated":false,"title":"hash(seed, opts \\\\ [])","anchor":"hash/2"},{"id":"list_checkboxes/1","deprecated":false,"title":"list_checkboxes(text)","anchor":"list_checkboxes/1"},{"id":"list_checked_boxes/1","deprecated":false,"title":"list_checked_boxes(text)","anchor":"list_checked_boxes/1"},{"id":"list_unchecked_boxes/1","deprecated":false,"title":"list_unchecked_boxes(text)","anchor":"list_unchecked_boxes/1"},{"id":"make_local_links_live/1","deprecated":false,"title":"make_local_links_live(content)","anchor":"make_local_links_live/1"},{"id":"markdown_as_html_earmark/2","deprecated":false,"title":"markdown_as_html_earmark(content, opts)","anchor":"markdown_as_html_earmark/2"},{"id":"markdown_as_html_mdex/2","deprecated":false,"title":"markdown_as_html_mdex(content, opts)","anchor":"markdown_as_html_mdex/2"},{"id":"markdown_checkboxes/1","deprecated":false,"title":"markdown_checkboxes(text)","anchor":"markdown_checkboxes/1"},{"id":"maybe_emote/2","deprecated":false,"title":"maybe_emote(content, custom_emoji \\\\ [])","anchor":"maybe_emote/2"},{"id":"maybe_markdown_to_html/2","deprecated":false,"title":"maybe_markdown_to_html(nothing, opts \\\\ [])","anchor":"maybe_markdown_to_html/2"},{"id":"maybe_normalize_html/1","deprecated":false,"title":"maybe_normalize_html(html_string)","anchor":"maybe_normalize_html/1"},{"id":"maybe_render_templated/2","deprecated":false,"title":"maybe_render_templated(templated_content, data)","anchor":"maybe_render_templated/2"},{"id":"maybe_sane_html/1","deprecated":false,"title":"maybe_sane_html(content)","anchor":"maybe_sane_html/1"},{"id":"maybe_to_snake/1","deprecated":false,"title":"maybe_to_snake(string)","anchor":"maybe_to_snake/1"},{"id":"normalise_links/2","deprecated":false,"title":"normalise_links(content, format \\\\ :markdown)","anchor":"normalise_links/2"},{"id":"random_string/1","deprecated":false,"title":"random_string(length \\\\ 10)","anchor":"random_string/1"},{"id":"regex_list/2","deprecated":false,"title":"regex_list(regex, text)","anchor":"regex_list/2"},{"id":"sentence_truncate/3","deprecated":false,"title":"sentence_truncate(input, length \\\\ 250, add_to_end \\\\ \"\")","anchor":"sentence_truncate/3"},{"id":"slug/1","deprecated":false,"title":"slug(text)","anchor":"slug/1"},{"id":"strlen/1","deprecated":false,"title":"strlen(x)","anchor":"strlen/1"},{"id":"text_only/1","deprecated":false,"title":"text_only(content)","anchor":"text_only/1"},{"id":"truncate/3","deprecated":false,"title":"truncate(text, max_length \\\\ 250, add_to_end \\\\ nil)","anchor":"truncate/3"},{"id":"underscore_truncate/2","deprecated":false,"title":"underscore_truncate(input, length \\\\ 250)","anchor":"underscore_truncate/2"},{"id":"upcase_first/1","deprecated":false,"title":"upcase_first(arg)","anchor":"upcase_first/1"},{"id":"verb_infinitive/1","deprecated":false,"title":"verb_infinitive(verb_conjugated)","anchor":"verb_infinitive/1"}],"key":"functions"}],"nested_title":".Common.Text","nested_context":"Bonfire"},{"id":"Bonfire.Common.TextExtended","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.TextExtended","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"blank?/1","deprecated":false,"title":"blank?(xA)","anchor":"blank?/1"},{"id":"camelise/1","deprecated":false,"title":"camelise(xA)","anchor":"camelise/1"},{"id":"code_syntax/2","deprecated":false,"title":"code_syntax(xA, xB)","anchor":"code_syntax/2"},{"id":"contains?/2","deprecated":false,"title":"contains?(xA, xB)","anchor":"contains?/2"},{"id":"contains_html?/1","deprecated":false,"title":"contains_html?(xA)","anchor":"contains_html?/1"},{"id":"hash/1","deprecated":false,"title":"hash(xA)","anchor":"hash/1"},{"id":"hash/2","deprecated":false,"title":"hash(xA, xB)","anchor":"hash/2"},{"id":"list_checkboxes/1","deprecated":false,"title":"list_checkboxes(xA)","anchor":"list_checkboxes/1"},{"id":"list_checked_boxes/1","deprecated":false,"title":"list_checked_boxes(xA)","anchor":"list_checked_boxes/1"},{"id":"list_unchecked_boxes/1","deprecated":false,"title":"list_unchecked_boxes(xA)","anchor":"list_unchecked_boxes/1"},{"id":"make_local_links_live/1","deprecated":false,"title":"make_local_links_live(xA)","anchor":"make_local_links_live/1"},{"id":"markdown_as_html_earmark/2","deprecated":false,"title":"markdown_as_html_earmark(xA, xB)","anchor":"markdown_as_html_earmark/2"},{"id":"markdown_as_html_mdex/2","deprecated":false,"title":"markdown_as_html_mdex(xA, xB)","anchor":"markdown_as_html_mdex/2"},{"id":"markdown_checkboxes/1","deprecated":false,"title":"markdown_checkboxes(xA)","anchor":"markdown_checkboxes/1"},{"id":"maybe_emote/1","deprecated":false,"title":"maybe_emote(xA)","anchor":"maybe_emote/1"},{"id":"maybe_emote/2","deprecated":false,"title":"maybe_emote(xA, xB)","anchor":"maybe_emote/2"},{"id":"maybe_markdown_to_html/1","deprecated":false,"title":"maybe_markdown_to_html(xA)","anchor":"maybe_markdown_to_html/1"},{"id":"maybe_markdown_to_html/2","deprecated":false,"title":"maybe_markdown_to_html(xA, xB)","anchor":"maybe_markdown_to_html/2"},{"id":"maybe_normalize_html/1","deprecated":false,"title":"maybe_normalize_html(xA)","anchor":"maybe_normalize_html/1"},{"id":"maybe_render_templated/2","deprecated":false,"title":"maybe_render_templated(xA, xB)","anchor":"maybe_render_templated/2"},{"id":"maybe_sane_html/1","deprecated":false,"title":"maybe_sane_html(xA)","anchor":"maybe_sane_html/1"},{"id":"maybe_to_snake/1","deprecated":false,"title":"maybe_to_snake(xA)","anchor":"maybe_to_snake/1"},{"id":"normalise_links/1","deprecated":false,"title":"normalise_links(xA)","anchor":"normalise_links/1"},{"id":"normalise_links/2","deprecated":false,"title":"normalise_links(xA, xB)","anchor":"normalise_links/2"},{"id":"random_string/0","deprecated":false,"title":"random_string()","anchor":"random_string/0"},{"id":"random_string/1","deprecated":false,"title":"random_string(xA)","anchor":"random_string/1"},{"id":"regex_list/2","deprecated":false,"title":"regex_list(xA, xB)","anchor":"regex_list/2"},{"id":"sentence_truncate/1","deprecated":false,"title":"sentence_truncate(xA)","anchor":"sentence_truncate/1"},{"id":"sentence_truncate/2","deprecated":false,"title":"sentence_truncate(xA, xB)","anchor":"sentence_truncate/2"},{"id":"sentence_truncate/3","deprecated":false,"title":"sentence_truncate(xA, xB, xC)","anchor":"sentence_truncate/3"},{"id":"slug/1","deprecated":false,"title":"slug(xA)","anchor":"slug/1"},{"id":"strlen/1","deprecated":false,"title":"strlen(xA)","anchor":"strlen/1"},{"id":"text_only/1","deprecated":false,"title":"text_only(xA)","anchor":"text_only/1"},{"id":"truncate/1","deprecated":false,"title":"truncate(xA)","anchor":"truncate/1"},{"id":"truncate/2","deprecated":false,"title":"truncate(xA, xB)","anchor":"truncate/2"},{"id":"truncate/3","deprecated":false,"title":"truncate(xA, xB, xC)","anchor":"truncate/3"},{"id":"underscore_truncate/1","deprecated":false,"title":"underscore_truncate(xA)","anchor":"underscore_truncate/1"},{"id":"underscore_truncate/2","deprecated":false,"title":"underscore_truncate(xA, xB)","anchor":"underscore_truncate/2"},{"id":"upcase_first/1","deprecated":false,"title":"upcase_first(xA)","anchor":"upcase_first/1"},{"id":"verb_infinitive/1","deprecated":false,"title":"verb_infinitive(xA)","anchor":"verb_infinitive/1"}],"key":"functions"}],"nested_title":".Common.TextExtended","nested_context":"Bonfire"},{"id":"Bonfire.Common.Types","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Types","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_object_type_names/0","deprecated":false,"title":"all_object_type_names()","anchor":"all_object_type_names/0"},{"id":"defines_struct?/1","deprecated":false,"title":"defines_struct?(module)","anchor":"defines_struct?/1"},{"id":"is_numeric/1","deprecated":false,"title":"is_numeric(num)","anchor":"is_numeric/1"},{"id":"is_ulid?/1","deprecated":false,"title":"is_ulid?(str)","anchor":"is_ulid?/1"},{"id":"is_uuid?/1","deprecated":false,"title":"is_uuid?(str)","anchor":"is_uuid?/1"},{"id":"maybe_convert_ulids/1","deprecated":false,"title":"maybe_convert_ulids(list)","anchor":"maybe_convert_ulids/1"},{"id":"maybe_to_atom/1","deprecated":false,"title":"maybe_to_atom(str)","anchor":"maybe_to_atom/1"},{"id":"maybe_to_atom!/1","deprecated":false,"title":"maybe_to_atom!(str)","anchor":"maybe_to_atom!/1"},{"id":"maybe_to_atom_or_module/3","deprecated":false,"title":"maybe_to_atom_or_module(k, force, to_snake)","anchor":"maybe_to_atom_or_module/3"},{"id":"maybe_to_float/2","deprecated":false,"title":"maybe_to_float(val, fallback \\\\ 0)","anchor":"maybe_to_float/2"},{"id":"maybe_to_integer/2","deprecated":false,"title":"maybe_to_integer(val, fallback \\\\ 0)","anchor":"maybe_to_integer/2"},{"id":"maybe_to_module/2","deprecated":false,"title":"maybe_to_module(str, force \\\\ true)","anchor":"maybe_to_module/2"},{"id":"maybe_to_snake_atom/1","deprecated":false,"title":"maybe_to_snake_atom(string)","anchor":"maybe_to_snake_atom/1"},{"id":"maybe_to_string/1","deprecated":false,"title":"maybe_to_string(atom)","anchor":"maybe_to_string/1"},{"id":"module_to_human_readable/1","deprecated":false,"title":"module_to_human_readable(module)","anchor":"module_to_human_readable/1"},{"id":"module_to_str/1","deprecated":false,"title":"module_to_str(str)","anchor":"module_to_str/1"},{"id":"object_type/1","deprecated":false,"title":"object_type(object)","anchor":"object_type/1"},{"id":"object_type_display/1","deprecated":false,"title":"object_type_display(object_type)","anchor":"object_type_display/1"},{"id":"sanitise_name/1","deprecated":false,"title":"sanitise_name(type)","anchor":"sanitise_name/1"},{"id":"table_id/1","deprecated":false,"title":"table_id(schema)","anchor":"table_id/1"},{"id":"table_type/1","deprecated":false,"title":"table_type(type)","anchor":"table_type/1"},{"id":"table_types/1","deprecated":false,"title":"table_types(types)","anchor":"table_types/1"},{"id":"typeof/1","deprecated":false,"title":"typeof(exception)","anchor":"typeof/1"},{"id":"ulid/1","deprecated":false,"title":"ulid(input)","anchor":"ulid/1"},{"id":"ulid!/1","deprecated":false,"title":"ulid!(object)","anchor":"ulid!/1"},{"id":"ulids/1","deprecated":false,"title":"ulids(objects)","anchor":"ulids/1"},{"id":"ulids_or/2","deprecated":false,"title":"ulids_or(objects, fallback_or_fun)","anchor":"ulids_or/2"}],"key":"functions"}],"nested_title":".Common.Types","nested_context":"Bonfire"},{"id":"Bonfire.Common.URIs","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.URIs","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_domain/1","deprecated":false,"title":"base_domain(uri_or_endpoint_or_conn \\\\ nil)","anchor":"base_domain/1"},{"id":"base_uri/1","deprecated":false,"title":"base_uri(conn_or_socket \\\\ nil)","anchor":"base_uri/1"},{"id":"base_url/1","deprecated":false,"title":"base_url(conn_or_socket_or_uri \\\\ nil)","anchor":"base_url/1"},{"id":"canonical_url/1","deprecated":false,"title":"canonical_url(object)","anchor":"canonical_url/1"},{"id":"fallback/1","deprecated":false,"title":"fallback(args)","anchor":"fallback/1"},{"id":"fallback/2","deprecated":false,"title":"fallback(id, args)","anchor":"fallback/2"},{"id":"fallback/3","deprecated":false,"title":"fallback(id, type, args)","anchor":"fallback/3"},{"id":"is_uri?/1","deprecated":false,"title":"is_uri?(str)","anchor":"is_uri?/1"},{"id":"maybe_generate_canonical_url/1","deprecated":false,"title":"maybe_generate_canonical_url(thing)","anchor":"maybe_generate_canonical_url/1"},{"id":"path/3","deprecated":false,"title":"path(view_module_or_path_name_or_object, args \\\\ [], opts \\\\ [])","anchor":"path/3"},{"id":"path_by_id/4","deprecated":false,"title":"path_by_id(id, args, object, opts)","anchor":"path_by_id/4"},{"id":"remote_canonical_url/1","deprecated":false,"title":"remote_canonical_url(object)","anchor":"remote_canonical_url/1"},{"id":"url_path/2","deprecated":false,"title":"url_path(view_module_or_path_name_or_object, args \\\\ [])","anchor":"url_path/2"},{"id":"validate_uri/1","deprecated":false,"title":"validate_uri(str)","anchor":"validate_uri/1"}],"key":"functions"}],"nested_title":".Common.URIs","nested_context":"Bonfire"},{"id":"Bonfire.Common.Utils","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Common.Utils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"apply_error/3","deprecated":false,"title":"apply_error(error, args, opts)","anchor":"apply_error/3"},{"id":"apply_task/3","deprecated":false,"title":"apply_task(function \\\\ :async, fun, opts \\\\ [])","anchor":"apply_task/3"},{"id":"apply_task_supervised/3","deprecated":false,"title":"apply_task_supervised(function \\\\ :async, fun, opts \\\\ [])","anchor":"apply_task_supervised/3"},{"id":"current_account/2","deprecated":false,"title":"current_account(current_account_or_socket_or_opts, recursing \\\\ false)","anchor":"current_account/2"},{"id":"current_account_and_or_user_ids/1","deprecated":false,"title":"current_account_and_or_user_ids(assigns)","anchor":"current_account_and_or_user_ids/1"},{"id":"current_account_auth!/2","deprecated":false,"title":"current_account_auth!(context, password)","anchor":"current_account_auth!/2"},{"id":"current_account_id/2","deprecated":false,"title":"current_account_id(current_account_or_socket_or_opts, recursing \\\\ false)","anchor":"current_account_id/2"},{"id":"current_user/2","deprecated":false,"title":"current_user(current_user_or_socket_or_opts, recursing \\\\ false)","anchor":"current_user/2"},{"id":"current_user_auth!/2","deprecated":false,"title":"current_user_auth!(context, password)","anchor":"current_user_auth!/2"},{"id":"current_user_id/2","deprecated":false,"title":"current_user_id(current_user_or_socket_or_opts, recursing \\\\ false)","anchor":"current_user_id/2"},{"id":"current_user_required!/1","deprecated":false,"title":"current_user_required!(context)","anchor":"current_user_required!/1"},{"id":"e/2","deprecated":false,"title":"e(val, fallback)","anchor":"e/2"},{"id":"e/3","deprecated":false,"title":"e(object, key, fallback)","anchor":"e/3"},{"id":"e/4","deprecated":false,"title":"e(object, key1, key2, fallback)","anchor":"e/4"},{"id":"e/5","deprecated":false,"title":"e(object, key1, key2, key3, fallback)","anchor":"e/5"},{"id":"e/6","deprecated":false,"title":"e(object, key1, key2, key3, key4, fallback)","anchor":"e/6"},{"id":"e/7","deprecated":false,"title":"e(object, key1, key2, key3, key4, key5, fallback)","anchor":"e/7"},{"id":"e/8","deprecated":false,"title":"e(object, key1, key2, key3, key4, key5, key6, fallback)","anchor":"e/8"},{"id":"empty?/1","deprecated":false,"title":"empty?(v)","anchor":"empty?/1"},{"id":"maybe/2","deprecated":false,"title":"maybe(val, change_fn)","anchor":"maybe/2"},{"id":"maybe_apply/4","deprecated":false,"title":"maybe_apply(module, fun, args \\\\ [], opts \\\\ [])","anchor":"maybe_apply/4"},{"id":"maybe_from_opts/3","deprecated":false,"title":"maybe_from_opts(opts, key, fallback \\\\ nil)","anchor":"maybe_from_opts/3"},{"id":"ok_unwrap/2","deprecated":false,"title":"ok_unwrap(val, fallback \\\\ nil)","anchor":"ok_unwrap/2"},{"id":"round_nearest/1","deprecated":false,"title":"round_nearest(num)","anchor":"round_nearest/1"},{"id":"round_nearest/2","deprecated":false,"title":"round_nearest(num, target)","anchor":"round_nearest/2"},{"id":"socket_connected?/1","deprecated":false,"title":"socket_connected?(socket)","anchor":"socket_connected?/1"},{"id":"to_options/1","deprecated":false,"title":"to_options(user_or_socket_or_opts)","anchor":"to_options/1"}],"key":"functions"}],"nested_title":".Common.Utils","nested_context":"Bonfire"},{"id":"Bonfire.Ecto","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto","sections":[],"nested_title":".Ecto","nested_context":"Bonfire"},{"id":"Bonfire.Ecto.Acts.Begin","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto.Acts.Begin","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Ecto.Acts.Begin","nested_context":"Bonfire"},{"id":"Bonfire.Ecto.Acts.Commit","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto.Acts.Commit","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Ecto.Acts.Commit","nested_context":"Bonfire"},{"id":"Bonfire.Ecto.Acts.Delete","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto.Acts.Delete","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_delete/2","deprecated":false,"title":"maybe_delete(objects, repo)","anchor":"maybe_delete/2"},{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Ecto.Acts.Delete","nested_context":"Bonfire"},{"id":"Bonfire.Ecto.Acts.Work","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Ecto.Acts.Work","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add/2","deprecated":false,"title":"add(epic, key)","anchor":"add/2"}],"key":"functions"}],"nested_title":".Ecto.Acts.Work","nested_context":"Bonfire"},{"id":"Bonfire.Epics","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_debug/3","deprecated":false,"title":"maybe_debug(act_or_epic, thing, label \\\\ nil)","anchor":"maybe_debug/3"},{"id":"maybe_debug/4","deprecated":false,"title":"maybe_debug(epic, act, thing, label)","anchor":"maybe_debug/4"},{"id":"smart/4","deprecated":false,"title":"smart(epic, act, thing, label \\\\ \"\")","anchor":"smart/4"}],"key":"functions"}],"nested_title":".Epics","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Act","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Act","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"ret/0","deprecated":false,"title":"ret()","anchor":"t:ret/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Callbacks","nodes":[{"id":"run/2","deprecated":false,"title":"run(t, t)","anchor":"c:run/2"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"debug/3","deprecated":false,"title":"debug(act, thing, label \\\\ \"\")","anchor":"debug/3"},{"id":"new/1","deprecated":false,"title":"new(module)","anchor":"new/1"},{"id":"new/2","deprecated":false,"title":"new(module, options)","anchor":"new/2"},{"id":"new/3","deprecated":false,"title":"new(module, options, meta)","anchor":"new/3"}],"key":"functions"}],"nested_title":".Epics.Act","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Debug","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Debug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_maybe_debug/4","deprecated":false,"title":"do_maybe_debug(epic, act, thing, label)","anchor":"do_maybe_debug/4"},{"id":"opts/2","deprecated":false,"title":"opts(epic, act)","anchor":"opts/2"}],"key":"functions"}],"nested_title":".Epics.Debug","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Epic","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Epic","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"add_error/2","deprecated":false,"title":"add_error(epic, error)","anchor":"add_error/2"},{"id":"add_error/5","deprecated":false,"title":"add_error(epic, act, error, source \\\\ nil, stacktrace \\\\ nil)","anchor":"add_error/5"},{"id":"append/2","deprecated":false,"title":"append(self, acts)","anchor":"append/2"},{"id":"assign/2","deprecated":false,"title":"assign(self, name)","anchor":"assign/2"},{"id":"assign/3","deprecated":false,"title":"assign(self, name, value)","anchor":"assign/3"},{"id":"debug/3","deprecated":false,"title":"debug(epic, thing, label \\\\ \"\")","anchor":"debug/3"},{"id":"from_config!/2","deprecated":false,"title":"from_config!(module, name)","anchor":"from_config!/2"},{"id":"from_spec!/1","deprecated":false,"title":"from_spec!(acts)","anchor":"from_spec!/1"},{"id":"maybe_debug/3","deprecated":false,"title":"maybe_debug(epic, thing, label \\\\ \"\")","anchor":"maybe_debug/3"},{"id":"new/1","deprecated":false,"title":"new(next \\\\ [])","anchor":"new/1"},{"id":"prepend/2","deprecated":false,"title":"prepend(self, acts)","anchor":"prepend/2"},{"id":"render_errors/1","deprecated":false,"title":"render_errors(epic)","anchor":"render_errors/1"},{"id":"run/1","deprecated":false,"title":"run(epic)","anchor":"run/1"},{"id":"update/4","deprecated":false,"title":"update(self, name, default, fun)","anchor":"update/4"}],"key":"functions"}],"nested_title":".Epics.Epic","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Error","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Error","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"message/1","deprecated":false,"title":"message(self)","anchor":"message/1"}],"key":"functions"}],"nested_title":".Epics.Error","nested_context":"Bonfire"},{"id":"Bonfire.Epics.Test","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Epics.Test","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"assert_epic_ok/1","deprecated":false,"title":"assert_epic_ok(expr)","anchor":"assert_epic_ok/1"},{"id":"debug_error/1","deprecated":false,"title":"debug_error(epic)","anchor":"debug_error/1"}],"key":"functions"}],"nested_title":".Epics.Test","nested_context":"Bonfire"},{"id":"Bonfire.Files","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/1","deprecated":false,"title":"ap_publish_activity(medias)","anchor":"ap_publish_activity/1"},{"id":"ap_receive_attachments/2","deprecated":false,"title":"ap_receive_attachments(creator, attachments)","anchor":"ap_receive_attachments/2"},{"id":"data_url/2","deprecated":false,"title":"data_url(content, mime_type)","anchor":"data_url/2"},{"id":"extract_metadata/1","deprecated":false,"title":"extract_metadata(path)","anchor":"extract_metadata/1"},{"id":"file_extension/1","deprecated":false,"title":"file_extension(path)","anchor":"file_extension/1"},{"id":"file_extension_only/1","deprecated":false,"title":"file_extension_only(path)","anchor":"file_extension_only/1"},{"id":"full_url/2","deprecated":false,"title":"full_url(module, media)","anchor":"full_url/2"},{"id":"normalise_size/2","deprecated":false,"title":"normalise_size(size, default \\\\ 8)","anchor":"normalise_size/2"},{"id":"remote_url/3","deprecated":false,"title":"remote_url(module \\\\ nil, media, version \\\\ :default)","anchor":"remote_url/3"},{"id":"upload/5","deprecated":false,"title":"upload(module, context, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/5"},{"id":"validate/3","deprecated":false,"title":"validate(other, allowed_media_types, max_file_size)","anchor":"validate/3"}],"key":"functions"}],"nested_title":".Files","nested_context":"Bonfire"},{"id":"Bonfire.Files.Acts.AttachMedia","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Acts.AttachMedia","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cast/2","deprecated":false,"title":"cast(changeset, uploaded_media)","anchor":"cast/2"},{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Files.Acts.AttachMedia","nested_context":"Bonfire"},{"id":"Bonfire.Files.Acts.URLPreviews","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Acts.URLPreviews","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_fetch_and_save/2","deprecated":false,"title":"maybe_fetch_and_save(current_user, url)","anchor":"maybe_fetch_and_save/2"},{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Files.Acts.URLPreviews","nested_context":"Bonfire"},{"id":"Bonfire.Files.BannerUploader","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.BannerUploader","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(arg1, arg2)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.BannerUploader","nested_context":"Bonfire"},{"id":"Bonfire.Files.Blurred","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Blurred","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"blurhash/2","deprecated":false,"title":"blurhash(media, opts \\\\ [])","anchor":"blurhash/2"},{"id":"blurred/2","deprecated":false,"title":"blurred(media_or_path, opts \\\\ [])","anchor":"blurred/2"}],"key":"functions"}],"nested_title":".Files.Blurred","nested_context":"Bonfire"},{"id":"Bonfire.Files.CapsuleIntegration.Attacher","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.CapsuleIntegration.Attacher","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"attach/3","deprecated":false,"title":"attach(upload, changeset, module \\\\ nil)","anchor":"attach/3"},{"id":"storages/2","deprecated":false,"title":"storages(upload, module)","anchor":"storages/2"},{"id":"store/3","deprecated":false,"title":"store(module, upload, changeset)","anchor":"store/3"},{"id":"upload/3","deprecated":false,"title":"upload(changeset, field, attrs)","anchor":"upload/3"}],"key":"functions"}],"nested_title":".Files.CapsuleIntegration.Attacher","nested_context":"Bonfire"},{"id":"Bonfire.Files.Definition","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Definition","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"c:allowed_media_types/0"}],"key":"callbacks"}],"nested_title":".Files.Definition","nested_context":"Bonfire"},{"id":"Bonfire.Files.DocumentUploader","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.DocumentUploader","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(arg1, arg2)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.DocumentUploader","nested_context":"Bonfire"},{"id":"Bonfire.Files.FaviconStore","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.FaviconStore","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"cached_or_async_fetch_url/2","deprecated":false,"title":"cached_or_async_fetch_url(url, opts \\\\ [])","anchor":"cached_or_async_fetch_url/2"},{"id":"cached_or_fetch/2","deprecated":false,"title":"cached_or_fetch(url, opts \\\\ [])","anchor":"cached_or_fetch/2"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"favicon_url/2","deprecated":false,"title":"favicon_url(url, opts \\\\ [])","anchor":"favicon_url/2"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(_, _)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.FaviconStore","nested_context":"Bonfire"},{"id":"Bonfire.Files.FileDenied","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.FileDenied","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"new/1","deprecated":false,"title":"new(size)","anchor":"new/1"}],"key":"functions"}],"nested_title":".Files.FileDenied","nested_context":"Bonfire"},{"id":"Bonfire.Files.IconUploader","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.IconUploader","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(arg1, arg2)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.IconUploader","nested_context":"Bonfire"},{"id":"Bonfire.Files.Image.Edit","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Image.Edit","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"banner/3","deprecated":false,"title":"banner(filename, max_width, max_height)","anchor":"banner/3"},{"id":"blur/2","deprecated":false,"title":"blur(path, final_path)","anchor":"blur/2"},{"id":"dominant_color/3","deprecated":false,"title":"dominant_color(file_path_or_binary_or_stream, bins \\\\ 15, fallback \\\\ \"#FFF8E7\")","anchor":"dominant_color/3"},{"id":"image/3","deprecated":false,"title":"image(filename, max_width, max_height)","anchor":"image/3"},{"id":"thumbnail/1","deprecated":false,"title":"thumbnail(filename)","anchor":"thumbnail/1"},{"id":"thumbnail_image/2","deprecated":false,"title":"thumbnail_image(version, original_file)","anchor":"thumbnail_image/2"},{"id":"thumbnail_pdf/1","deprecated":false,"title":"thumbnail_pdf(filename)","anchor":"thumbnail_pdf/1"}],"key":"functions"}],"nested_title":".Files.Image.Edit","nested_context":"Bonfire"},{"id":"Bonfire.Files.ImageUploader","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.ImageUploader","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"acl/2","deprecated":false,"title":"acl(_, _)","anchor":"acl/2"},{"id":"allowed_media_types/0","deprecated":false,"title":"allowed_media_types()","anchor":"allowed_media_types/0"},{"id":"asset_host/0","deprecated":false,"title":"asset_host()","anchor":"asset_host/0"},{"id":"async/0","deprecated":false,"title":"async()","anchor":"async/0"},{"id":"attach/2","deprecated":false,"title":"attach(tuple, changeset)","anchor":"attach/2"},{"id":"blurhash/1","deprecated":false,"title":"blurhash(media)","anchor":"blurhash/1"},{"id":"blurred/1","deprecated":false,"title":"blurred(media)","anchor":"blurred/1"},{"id":"bucket/0","deprecated":false,"title":"bucket()","anchor":"bucket/0"},{"id":"bucket/1","deprecated":false,"title":"bucket(arg)","anchor":"bucket/1"},{"id":"default_url/1","deprecated":false,"title":"default_url(_)","anchor":"default_url/1"},{"id":"default_url/2","deprecated":false,"title":"default_url(version, _)","anchor":"default_url/2"},{"id":"delete/1","deprecated":false,"title":"delete(args)","anchor":"delete/1"},{"id":"filename/2","deprecated":false,"title":"filename(_, arg)","anchor":"filename/2"},{"id":"max_file_size/0","deprecated":false,"title":"max_file_size()","anchor":"max_file_size/0"},{"id":"prefix_dir/0","deprecated":false,"title":"prefix_dir()","anchor":"prefix_dir/0"},{"id":"prepare/1","deprecated":false,"title":"prepare(args)","anchor":"prepare/1"},{"id":"remote_file_headers/1","deprecated":false,"title":"remote_file_headers(_)","anchor":"remote_file_headers/1"},{"id":"remote_url/2","deprecated":false,"title":"remote_url(media, version \\\\ nil)","anchor":"remote_url/2"},{"id":"s3_object_headers/2","deprecated":false,"title":"s3_object_headers(_, _)","anchor":"s3_object_headers/2"},{"id":"storage_dir/2","deprecated":false,"title":"storage_dir(_, arg2)","anchor":"storage_dir/2"},{"id":"storage_dir_prefix/0","deprecated":false,"title":"storage_dir_prefix()","anchor":"storage_dir_prefix/0"},{"id":"store/1","deprecated":false,"title":"store(args)","anchor":"store/1"},{"id":"transform/2","deprecated":false,"title":"transform(arg1, arg2)","anchor":"transform/2"},{"id":"upload/4","deprecated":false,"title":"upload(user, file, attrs \\\\ %{}, opts \\\\ [])","anchor":"upload/4"},{"id":"url/1","deprecated":false,"title":"url(file)","anchor":"url/1"},{"id":"url/2","deprecated":false,"title":"url(file, options)","anchor":"url/2"},{"id":"url/3","deprecated":false,"title":"url(file, version, options)","anchor":"url/3"},{"id":"urls/2","deprecated":false,"title":"urls(file, options \\\\ [])","anchor":"urls/2"},{"id":"validate/1","deprecated":false,"title":"validate(media)","anchor":"validate/1"}],"key":"functions"}],"nested_title":".Files.ImageUploader","nested_context":"Bonfire"},{"id":"Bonfire.Files.LiveHandler","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"handle_progress/3","deprecated":false,"title":"handle_progress(type, entry, socket)","anchor":"handle_progress/3"},{"id":"set_fallback/5","deprecated":false,"title":"set_fallback(_, _, _, _, socket)","anchor":"set_fallback/5"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Files.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Files.Media","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Media","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"hard_delete/2","deprecated":false,"title":"hard_delete(module, media)","anchor":"hard_delete/2"},{"id":"insert/4","deprecated":false,"title":"insert(user, file, file_info, attrs)","anchor":"insert/4"},{"id":"many/1","deprecated":false,"title":"many(filters \\\\ [])","anchor":"many/1"},{"id":"one/1","deprecated":false,"title":"one(filters)","anchor":"one/1"},{"id":"soft_delete/1","deprecated":false,"title":"soft_delete(media)","anchor":"soft_delete/1"},{"id":"update_by/2","deprecated":false,"title":"update_by(filters, updates)","anchor":"update_by/2"}],"key":"functions"}],"nested_title":".Files.Media","nested_context":"Bonfire"},{"id":"Bonfire.Files.Media.Queries","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Media.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(query, filter_or_filters)","anchor":"filter/2"},{"id":"query/1","deprecated":false,"title":"query(filters)","anchor":"query/1"},{"id":"query/2","deprecated":false,"title":"query(q, filters)","anchor":"query/2"}],"key":"functions"}],"nested_title":".Files.Media.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Files.Prepare","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Prepare","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"prepare/2","deprecated":false,"title":"prepare(definition, filepath)","anchor":"prepare/2"}],"key":"functions"}],"nested_title":".Files.Prepare","nested_context":"Bonfire"},{"id":"Bonfire.Files.ResponsiveImage","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.ResponsiveImage","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"compile_src/2","deprecated":false,"title":"compile_src(path, width)","anchor":"compile_src/2"},{"id":"compile_srcset/2","deprecated":false,"title":"compile_srcset(path, widths)","anchor":"compile_srcset/2"},{"id":"resize/1","deprecated":false,"title":"resize(attr)","anchor":"resize/1"},{"id":"resize/2","deprecated":false,"title":"resize(path, width)","anchor":"resize/2"},{"id":"resize_timed/1","deprecated":false,"title":"resize_timed(images)","anchor":"resize_timed/1"},{"id":"src/2","deprecated":false,"title":"src(path, width)","anchor":"src/2"},{"id":"srcset/2","deprecated":false,"title":"srcset(path, widths)","anchor":"srcset/2"}],"key":"functions"}],"nested_title":".Files.ResponsiveImage","nested_context":"Bonfire"},{"id":"Bonfire.Files.Routes","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Routes","sections":[],"nested_title":".Files.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Files.RuntimeConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Files.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Files.Simulation","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Simulation","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cleanup/1","deprecated":false,"title":"cleanup(path)","anchor":"cleanup/1"},{"id":"fake_upload/2","deprecated":false,"title":"fake_upload(file, upload_def \\\\ nil)","anchor":"fake_upload/2"},{"id":"geometry/1","deprecated":false,"title":"geometry(path)","anchor":"geometry/1"},{"id":"icon_file/0","deprecated":false,"title":"icon_file()","anchor":"icon_file/0"},{"id":"image_file/0","deprecated":false,"title":"image_file()","anchor":"image_file/0"},{"id":"pdf_file/0","deprecated":false,"title":"pdf_file()","anchor":"pdf_file/0"},{"id":"text_file/0","deprecated":false,"title":"text_file()","anchor":"text_file/0"}],"key":"functions"}],"nested_title":".Files.Simulation","nested_context":"Bonfire"},{"id":"Bonfire.Files.Versions","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Files.Versions","sections":[],"nested_title":".Files.Versions","nested_context":"Bonfire"},{"id":"Bonfire.Mailer","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Mailer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"deliver/1","deprecated":false,"title":"deliver(email)","anchor":"deliver/1"},{"id":"deliver_later/2","deprecated":false,"title":"deliver_later(email, opts \\\\ [])","anchor":"deliver_later/2"},{"id":"deliver_later!/2","deprecated":false,"title":"deliver_later!(email, opts \\\\ [])","anchor":"deliver_later!/2"},{"id":"deliver_now/2","deprecated":false,"title":"deliver_now(email, opts \\\\ [])","anchor":"deliver_now/2"},{"id":"deliver_now!/2","deprecated":false,"title":"deliver_now!(email, opts \\\\ [])","anchor":"deliver_now!/2"},{"id":"do_send/2","deprecated":false,"title":"do_send(arg1, mail)","anchor":"do_send/2"},{"id":"handle_error/2","deprecated":false,"title":"handle_error(error, stacktrace \\\\ nil)","anchor":"handle_error/2"},{"id":"send/4","deprecated":false,"title":"send(email, to, mode, opts \\\\ [])","anchor":"send/4"},{"id":"send_app_feedback/3","deprecated":false,"title":"send_app_feedback(type \\\\ \"feedback\", subject, body)","anchor":"send_app_feedback/3"},{"id":"send_async/3","deprecated":false,"title":"send_async(email, to, opts \\\\ [])","anchor":"send_async/3"},{"id":"send_now/3","deprecated":false,"title":"send_now(email, to, opts \\\\ [])","anchor":"send_now/3"}],"key":"functions"}],"nested_title":".Mailer","nested_context":"Bonfire"},{"id":"Bonfire.Mailer.Checker","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Mailer.Checker","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"error_reason/0","deprecated":false,"title":"error_reason()","anchor":"t:error_reason/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"validate_domain/1","deprecated":false,"title":"validate_domain(domain)","anchor":"validate_domain/1"},{"id":"validate_email/1","deprecated":false,"title":"validate_email(email)","anchor":"validate_email/1"}],"key":"functions"}],"nested_title":".Mailer.Checker","nested_context":"Bonfire"},{"id":"Bonfire.Mailer.RuntimeConfig","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Mailer.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"},{"id":"mail_blackhole/1","deprecated":false,"title":"mail_blackhole(var)","anchor":"mail_blackhole/1"},{"id":"mail_service/2","deprecated":false,"title":"mail_service(adapter, extra \\\\ [])","anchor":"mail_service/2"}],"key":"functions"}],"nested_title":".Mailer.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Web.Endpoint","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Endpoint","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"broadcast/3","deprecated":false,"title":"broadcast(topic, event, msg)","anchor":"broadcast/3"},{"id":"broadcast!/3","deprecated":false,"title":"broadcast!(topic, event, msg)","anchor":"broadcast!/3"},{"id":"broadcast_from/4","deprecated":false,"title":"broadcast_from(from, topic, event, msg)","anchor":"broadcast_from/4"},{"id":"broadcast_from!/4","deprecated":false,"title":"broadcast_from!(from, topic, event, msg)","anchor":"broadcast_from!/4"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/2","deprecated":false,"title":"config(key, default \\\\ nil)","anchor":"config/2"},{"id":"config_change/2","deprecated":false,"title":"config_change(changed, removed)","anchor":"config_change/2"},{"id":"generate_reverse_router!/1","deprecated":false,"title":"generate_reverse_router!(app \\\\ :bonfire)","anchor":"generate_reverse_router!/1"},{"id":"host/0","deprecated":false,"title":"host()","anchor":"host/0"},{"id":"include_assets/1","deprecated":false,"title":"include_assets(conn)","anchor":"include_assets/1"},{"id":"include_assets/2","deprecated":false,"title":"include_assets(conn, atom)","anchor":"include_assets/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"local_broadcast/3","deprecated":false,"title":"local_broadcast(topic, event, msg)","anchor":"local_broadcast/3"},{"id":"local_broadcast_from/4","deprecated":false,"title":"local_broadcast_from(from, topic, event, msg)","anchor":"local_broadcast_from/4"},{"id":"path/1","deprecated":false,"title":"path(path)","anchor":"path/1"},{"id":"reload!/1","deprecated":false,"title":"reload!(opts \\\\ [\"--no-all-warnings\"])","anchor":"reload!/1"},{"id":"script_name/0","deprecated":false,"title":"script_name()","anchor":"script_name/0"},{"id":"server_info/1","deprecated":false,"title":"server_info(scheme)","anchor":"server_info/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"static_integrity/1","deprecated":false,"title":"static_integrity(path)","anchor":"static_integrity/1"},{"id":"static_lookup/1","deprecated":false,"title":"static_lookup(path)","anchor":"static_lookup/1"},{"id":"static_path/1","deprecated":false,"title":"static_path(path)","anchor":"static_path/1"},{"id":"static_url/0","deprecated":false,"title":"static_url()","anchor":"static_url/0"},{"id":"struct_url/0","deprecated":false,"title":"struct_url()","anchor":"struct_url/0"},{"id":"subscribe/2","deprecated":false,"title":"subscribe(topic, opts \\\\ [])","anchor":"subscribe/2"},{"id":"unsubscribe/1","deprecated":false,"title":"unsubscribe(topic)","anchor":"unsubscribe/1"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"url/0"}],"key":"functions"}],"nested_title":".Web.Endpoint","nested_context":"Bonfire"},{"id":"Bonfire.Web.FakeRemoteEndpoint","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.FakeRemoteEndpoint","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"broadcast/3","deprecated":false,"title":"broadcast(topic, event, msg)","anchor":"broadcast/3"},{"id":"broadcast!/3","deprecated":false,"title":"broadcast!(topic, event, msg)","anchor":"broadcast!/3"},{"id":"broadcast_from/4","deprecated":false,"title":"broadcast_from(from, topic, event, msg)","anchor":"broadcast_from/4"},{"id":"broadcast_from!/4","deprecated":false,"title":"broadcast_from!(from, topic, event, msg)","anchor":"broadcast_from!/4"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/2","deprecated":false,"title":"config(key, default \\\\ nil)","anchor":"config/2"},{"id":"config_change/2","deprecated":false,"title":"config_change(changed, removed)","anchor":"config_change/2"},{"id":"host/0","deprecated":false,"title":"host()","anchor":"host/0"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"local_broadcast/3","deprecated":false,"title":"local_broadcast(topic, event, msg)","anchor":"local_broadcast/3"},{"id":"local_broadcast_from/4","deprecated":false,"title":"local_broadcast_from(from, topic, event, msg)","anchor":"local_broadcast_from/4"},{"id":"path/1","deprecated":false,"title":"path(path)","anchor":"path/1"},{"id":"script_name/0","deprecated":false,"title":"script_name()","anchor":"script_name/0"},{"id":"server_info/1","deprecated":false,"title":"server_info(scheme)","anchor":"server_info/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"static_integrity/1","deprecated":false,"title":"static_integrity(path)","anchor":"static_integrity/1"},{"id":"static_lookup/1","deprecated":false,"title":"static_lookup(path)","anchor":"static_lookup/1"},{"id":"static_path/1","deprecated":false,"title":"static_path(path)","anchor":"static_path/1"},{"id":"static_url/0","deprecated":false,"title":"static_url()","anchor":"static_url/0"},{"id":"struct_url/0","deprecated":false,"title":"struct_url()","anchor":"struct_url/0"},{"id":"subscribe/2","deprecated":false,"title":"subscribe(topic, opts \\\\ [])","anchor":"subscribe/2"},{"id":"unsubscribe/1","deprecated":false,"title":"unsubscribe(topic)","anchor":"unsubscribe/1"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"url/0"}],"key":"functions"}],"nested_title":".Web.FakeRemoteEndpoint","nested_context":"Bonfire"},{"id":"Bonfire.Web.Router","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Router","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"account_required/2","deprecated":false,"title":"account_required(conn, _)","anchor":"account_required/2"},{"id":"activity_json/2","deprecated":false,"title":"activity_json(conn, _)","anchor":"activity_json/2"},{"id":"activity_json_or_html/2","deprecated":false,"title":"activity_json_or_html(conn, _)","anchor":"activity_json_or_html/2"},{"id":"admin_required/2","deprecated":false,"title":"admin_required(conn, _)","anchor":"admin_required/2"},{"id":"basic/2","deprecated":false,"title":"basic(conn, _)","anchor":"basic/2"},{"id":"basic_html/2","deprecated":false,"title":"basic_html(conn, _)","anchor":"basic_html/2"},{"id":"browser/2","deprecated":false,"title":"browser(conn, _)","anchor":"browser/2"},{"id":"browser_unsafe/2","deprecated":false,"title":"browser_unsafe(conn, _)","anchor":"browser_unsafe/2"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"guest_only/2","deprecated":false,"title":"guest_only(conn, _)","anchor":"guest_only/2"},{"id":"html_only/2","deprecated":false,"title":"html_only(conn, _)","anchor":"html_only/2"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"load_current_auth/2","deprecated":false,"title":"load_current_auth(conn, _)","anchor":"load_current_auth/2"},{"id":"require_authenticated_user/2","deprecated":false,"title":"require_authenticated_user(conn, _)","anchor":"require_authenticated_user/2"},{"id":"signed_activity_pub/2","deprecated":false,"title":"signed_activity_pub(conn, _)","anchor":"signed_activity_pub/2"},{"id":"static/2","deprecated":false,"title":"static(conn, _)","anchor":"static/2"},{"id":"throttle_plug_attacks/2","deprecated":false,"title":"throttle_plug_attacks(conn, _)","anchor":"throttle_plug_attacks/2"},{"id":"user_required/2","deprecated":false,"title":"user_required(conn, _)","anchor":"user_required/2"},{"id":"webfinger/2","deprecated":false,"title":"webfinger(conn, _)","anchor":"webfinger/2"},{"id":"well_known_nodeinfo/2","deprecated":false,"title":"well_known_nodeinfo(conn, _)","anchor":"well_known_nodeinfo/2"}],"key":"functions"}],"nested_title":".Web.Router","nested_context":"Bonfire"},{"id":"Bonfire.Web.Router.Reverse","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Router.Reverse","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"path/2","deprecated":false,"title":"path(conn_or_socket_or_endpoint, atom)","anchor":"path/2"},{"id":"path/3","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, qs)","anchor":"path/3"},{"id":"path/4","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, arg1, arg1)","anchor":"path/4"},{"id":"path/5","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, arg1, arg1, qs)","anchor":"path/5"},{"id":"path/6","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, arg1, arg1, arg2, qs)","anchor":"path/6"},{"id":"path/7","deprecated":false,"title":"path(conn_or_socket_or_endpoint, arg2, arg1, arg1, arg2, arg3, qs)","anchor":"path/7"}],"key":"functions"}],"nested_title":".Web.Router.Reverse","nested_context":"Bonfire"},{"id":"Bonfire.Web.Routes","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Routes","sections":[],"nested_title":".Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Web.Telemetry","deprecated":false,"group":"Bonfire utilities","title":"Bonfire.Web.Telemetry","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"metrics/0","deprecated":false,"title":"metrics()","anchor":"metrics/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Web.Telemetry","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"disable/1","deprecated":false,"title":"disable(scope \\\\ :instance)","anchor":"disable/1"},{"id":"federating?/1","deprecated":false,"title":"federating?(subject \\\\ nil)","anchor":"federating?/1"},{"id":"federating_default?/0","deprecated":false,"title":"federating_default?()","anchor":"federating_default?/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"},{"id":"set_federating/2","deprecated":false,"title":"set_federating(subject, set)","anchor":"set_federating/2"}],"key":"functions"}],"nested_title":".Federate.ActivityPub","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Adapter","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Adapter","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"base_url/0"},{"id":"external_followers_for_activity/2","deprecated":false,"title":"external_followers_for_activity(actor, activity_data)","anchor":"external_followers_for_activity/2"},{"id":"federate_actor?/3","deprecated":false,"title":"federate_actor?(actor, direction \\\\ nil, by_actor \\\\ nil)","anchor":"federate_actor?/3"},{"id":"get_actor_by_ap_id/1","deprecated":false,"title":"get_actor_by_ap_id(ap_id)","anchor":"get_actor_by_ap_id/1"},{"id":"get_actor_by_id/1","deprecated":false,"title":"get_actor_by_id(id)","anchor":"get_actor_by_id/1"},{"id":"get_actor_by_username/1","deprecated":false,"title":"get_actor_by_username(username)","anchor":"get_actor_by_username/1"},{"id":"get_follower_local_ids/1","deprecated":false,"title":"get_follower_local_ids(actor)","anchor":"get_follower_local_ids/1"},{"id":"get_following_local_ids/1","deprecated":false,"title":"get_following_local_ids(actor)","anchor":"get_following_local_ids/1"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"get_locale/0"},{"id":"get_or_create_service_actor/0","deprecated":false,"title":"get_or_create_service_actor()","anchor":"get_or_create_service_actor/0"},{"id":"get_redirect_url/1","deprecated":false,"title":"get_redirect_url(id_or_username_or_object)","anchor":"get_redirect_url/1"},{"id":"handle_activity/1","deprecated":false,"title":"handle_activity(activity)","anchor":"handle_activity/1"},{"id":"maybe_create_remote_actor/1","deprecated":false,"title":"maybe_create_remote_actor(actor)","anchor":"maybe_create_remote_actor/1"},{"id":"maybe_publish_object/2","deprecated":false,"title":"maybe_publish_object(pointer_id, manually_fetching?)","anchor":"maybe_publish_object/2"},{"id":"redirect_to_actor/1","deprecated":false,"title":"redirect_to_actor(username)","anchor":"redirect_to_actor/1"},{"id":"update_local_actor/2","deprecated":false,"title":"update_local_actor(actor, params)","anchor":"update_local_actor/2"},{"id":"update_local_actor_cache/1","deprecated":false,"title":"update_local_actor_cache(character)","anchor":"update_local_actor_cache/1"},{"id":"update_remote_actor/1","deprecated":false,"title":"update_remote_actor(actor)","anchor":"update_remote_actor/1"},{"id":"update_remote_actor/2","deprecated":false,"title":"update_remote_actor(character, data)","anchor":"update_remote_actor/2"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Adapter","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.AdapterUtils","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.AdapterUtils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_actors/1","deprecated":false,"title":"all_actors(activity)","anchor":"all_actors/1"},{"id":"all_recipients/2","deprecated":false,"title":"all_recipients(activity, fields \\\\ [:to, :bto, :cc, :bcc, :audience])","anchor":"all_recipients/2"},{"id":"ap_base_url/0","deprecated":false,"title":"ap_base_url()","anchor":"ap_base_url/0"},{"id":"character_module/1","deprecated":false,"title":"character_module(struct)","anchor":"character_module/1"},{"id":"character_to_actor/1","deprecated":false,"title":"character_to_actor(character)","anchor":"character_to_actor/1"},{"id":"create_author_object/1","deprecated":false,"title":"create_author_object(map)","anchor":"create_author_object/1"},{"id":"create_remote_actor/1","deprecated":false,"title":"create_remote_actor(actor)","anchor":"create_remote_actor/1"},{"id":"create_service_character/0","deprecated":false,"title":"create_service_character()","anchor":"create_service_character/0"},{"id":"determine_recipients/2","deprecated":false,"title":"determine_recipients(actor, comment)","anchor":"determine_recipients/2"},{"id":"determine_recipients/3","deprecated":false,"title":"determine_recipients(actor, comment, parent)","anchor":"determine_recipients/3"},{"id":"determine_recipients/4","deprecated":false,"title":"determine_recipients(actor, comment, to, cc)","anchor":"determine_recipients/4"},{"id":"format_actor/2","deprecated":false,"title":"format_actor(user_etc, type \\\\ \"Person\")","anchor":"format_actor/2"},{"id":"get_actor_by_ap_id/2","deprecated":false,"title":"get_actor_by_ap_id(ap_id, local_instance \\\\ nil)","anchor":"get_actor_by_ap_id/2"},{"id":"get_actor_username/1","deprecated":false,"title":"get_actor_username(obj)","anchor":"get_actor_username/1"},{"id":"get_author/1","deprecated":false,"title":"get_author(author)","anchor":"get_author/1"},{"id":"get_by_url_ap_id_or_username/2","deprecated":false,"title":"get_by_url_ap_id_or_username(q, opts \\\\ [])","anchor":"get_by_url_ap_id_or_username/2"},{"id":"get_character/1","deprecated":false,"title":"get_character(q)","anchor":"get_character/1"},{"id":"get_character_by_ap_id/1","deprecated":false,"title":"get_character_by_ap_id(ap_id)","anchor":"get_character_by_ap_id/1"},{"id":"get_character_by_ap_id!/1","deprecated":false,"title":"get_character_by_ap_id!(ap_id)","anchor":"get_character_by_ap_id!/1"},{"id":"get_character_by_id/2","deprecated":false,"title":"get_character_by_id(id, opts \\\\ [skip_boundary_check: true])","anchor":"get_character_by_id/2"},{"id":"get_character_by_username/1","deprecated":false,"title":"get_character_by_username(character)","anchor":"get_character_by_username/1"},{"id":"get_context_ap_id/1","deprecated":false,"title":"get_context_ap_id(arg1)","anchor":"get_context_ap_id/1"},{"id":"get_creator_ap_id/1","deprecated":false,"title":"get_creator_ap_id(arg1)","anchor":"get_creator_ap_id/1"},{"id":"get_different_creator_ap_id/1","deprecated":false,"title":"get_different_creator_ap_id(character)","anchor":"get_different_creator_ap_id/1"},{"id":"get_in_reply_to/1","deprecated":false,"title":"get_in_reply_to(comment)","anchor":"get_in_reply_to/1"},{"id":"get_local_actor_by_ap_id/1","deprecated":false,"title":"get_local_actor_by_ap_id(ap_id)","anchor":"get_local_actor_by_ap_id/1"},{"id":"get_local_character_by_ap_id/2","deprecated":false,"title":"get_local_character_by_ap_id(ap_id, local_instance \\\\ nil)","anchor":"get_local_character_by_ap_id/2"},{"id":"get_object_ap_id/1","deprecated":false,"title":"get_object_ap_id(arg1)","anchor":"get_object_ap_id/1"},{"id":"get_object_ap_id!/1","deprecated":false,"title":"get_object_ap_id!(object)","anchor":"get_object_ap_id!/1"},{"id":"get_object_or_actor_by_ap_id!/1","deprecated":false,"title":"get_object_or_actor_by_ap_id!(ap_id)","anchor":"get_object_or_actor_by_ap_id!/1"},{"id":"get_or_create_service_character/0","deprecated":false,"title":"get_or_create_service_character()","anchor":"get_or_create_service_character/0"},{"id":"get_or_fetch_and_create_by_uri/2","deprecated":false,"title":"get_or_fetch_and_create_by_uri(q, opts \\\\ [])","anchor":"get_or_fetch_and_create_by_uri/2"},{"id":"get_or_fetch_and_create_by_username/2","deprecated":false,"title":"get_or_fetch_and_create_by_username(q, opts \\\\ [])","anchor":"get_or_fetch_and_create_by_username/2"},{"id":"get_or_fetch_character_by_ap_id/1","deprecated":false,"title":"get_or_fetch_character_by_ap_id(actor_or_ap_id)","anchor":"get_or_fetch_character_by_ap_id/1"},{"id":"get_pointer_id_by_ap_id/1","deprecated":false,"title":"get_pointer_id_by_ap_id(ap_id)","anchor":"get_pointer_id_by_ap_id/1"},{"id":"id_or_object_id/1","deprecated":false,"title":"id_or_object_id(id)","anchor":"id_or_object_id/1"},{"id":"is_follow?/1","deprecated":false,"title":"is_follow?(arg1)","anchor":"is_follow?/1"},{"id":"is_local?/2","deprecated":false,"title":"is_local?(thing, preload_if_needed \\\\ true)","anchor":"is_local?/2"},{"id":"is_local_collection?/1","deprecated":false,"title":"is_local_collection?(ap_id)","anchor":"is_local_collection?/1"},{"id":"is_local_collection_or_built_in?/1","deprecated":false,"title":"is_local_collection_or_built_in?(ap_id)","anchor":"is_local_collection_or_built_in?/1"},{"id":"local_actor_ids/1","deprecated":false,"title":"local_actor_ids(actors)","anchor":"local_actor_ids/1"},{"id":"log/1","deprecated":false,"title":"log(l)","anchor":"log/1"},{"id":"maybe_add_aliases/2","deprecated":false,"title":"maybe_add_aliases(user_etc, aliases)","anchor":"maybe_add_aliases/2"},{"id":"maybe_apply_or/4","deprecated":false,"title":"maybe_apply_or(module, fun, args, fallback_fn \\\\ nil)","anchor":"maybe_apply_or/4"},{"id":"maybe_attach_property_value/2","deprecated":false,"title":"maybe_attach_property_value(key, url)","anchor":"maybe_attach_property_value/2"},{"id":"maybe_create_banner_object/2","deprecated":false,"title":"maybe_create_banner_object(url, actor)","anchor":"maybe_create_banner_object/2"},{"id":"maybe_create_icon_object/2","deprecated":false,"title":"maybe_create_icon_object(url, actor)","anchor":"maybe_create_icon_object/2"},{"id":"maybe_create_image_object/2","deprecated":false,"title":"maybe_create_image_object(url, actor)","anchor":"maybe_create_image_object/2"},{"id":"maybe_fix_image_object/1","deprecated":false,"title":"maybe_fix_image_object(url)","anchor":"maybe_fix_image_object/1"},{"id":"maybe_format_image_object_from_path/1","deprecated":false,"title":"maybe_format_image_object_from_path(url)","anchor":"maybe_format_image_object_from_path/1"},{"id":"maybe_pointer_id_for_ap_id/1","deprecated":false,"title":"maybe_pointer_id_for_ap_id(ap_id)","anchor":"maybe_pointer_id_for_ap_id/1"},{"id":"preload_peered/1","deprecated":false,"title":"preload_peered(object)","anchor":"preload_peered/1"},{"id":"public_uri/0","deprecated":false,"title":"public_uri()","anchor":"public_uri/0"},{"id":"return_pointable/2","deprecated":false,"title":"return_pointable(f, opts \\\\ [skip_boundary_check: true])","anchor":"return_pointable/2"},{"id":"return_pointer/2","deprecated":false,"title":"return_pointer(id, opts)","anchor":"return_pointer/2"},{"id":"the_ap_id/1","deprecated":false,"title":"the_ap_id(ap_id)","anchor":"the_ap_id/1"},{"id":"validate_url/1","deprecated":false,"title":"validate_url(str)","anchor":"validate_url/1"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.AdapterUtils","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.BoundariesMRF","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.BoundariesMRF","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor_blocked?/3","deprecated":false,"title":"actor_blocked?(actor, direction \\\\ nil, by_user \\\\ nil)","anchor":"actor_blocked?/3"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.BoundariesMRF","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.FederationModules","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.FederationModules","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"c:federation_module/0"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"app_modules/0","deprecated":false,"title":"app_modules()","anchor":"app_modules/0"},{"id":"federation_module/2","deprecated":false,"title":"federation_module(query, modules \\\\ federation_modules_data_types())","anchor":"federation_module/2"},{"id":"federation_module!/2","deprecated":false,"title":"federation_module!(query, modules \\\\ federation_modules_data_types())","anchor":"federation_module!/2"},{"id":"federation_modules/1","deprecated":false,"title":"federation_modules(queries)","anchor":"federation_modules/1"},{"id":"federation_modules_data_types/0","deprecated":false,"title":"federation_modules_data_types()","anchor":"federation_modules_data_types/0"},{"id":"maybe_federation_module/2","deprecated":false,"title":"maybe_federation_module(query, fallback \\\\ nil)","anchor":"maybe_federation_module/2"},{"id":"modules/0","deprecated":false,"title":"modules()","anchor":"modules/0"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.FederationModules","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Incoming","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Incoming","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"no_federation_module_match/2","deprecated":false,"title":"no_federation_module_match(error, attrs \\\\ nil)","anchor":"no_federation_module_match/2"},{"id":"receive_activity/1","deprecated":false,"title":"receive_activity(activity_id)","anchor":"receive_activity/1"},{"id":"receive_activity/2","deprecated":false,"title":"receive_activity(activity, object)","anchor":"receive_activity/2"},{"id":"receive_object/2","deprecated":false,"title":"receive_object(creator, object_uri)","anchor":"receive_object/2"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Incoming","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Instances","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Instances","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"get/1","deprecated":false,"title":"get(canonical_uri)","anchor":"get/1"},{"id":"get_or_create/1","deprecated":false,"title":"get_or_create(canonical_uri)","anchor":"get_or_create/1"},{"id":"get_or_create_instance_circle/1","deprecated":false,"title":"get_or_create_instance_circle(host)","anchor":"get_or_create_instance_circle/1"},{"id":"is_blocked?/3","deprecated":false,"title":"is_blocked?(peered, block_type \\\\ :any, opts \\\\ [])","anchor":"is_blocked?/3"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Instances","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.NodeinfoAdapter","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.NodeinfoAdapter","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"base_url/0"},{"id":"gather_nodeinfo_data/0","deprecated":false,"title":"gather_nodeinfo_data()","anchor":"gather_nodeinfo_data/0"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.NodeinfoAdapter","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Outgoing","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Outgoing","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_activity!/1","deprecated":false,"title":"ap_activity!(activity)","anchor":"ap_activity!/1"},{"id":"federate_outgoing?/1","deprecated":false,"title":"federate_outgoing?(subject \\\\ nil)","anchor":"federate_outgoing?/1"},{"id":"maybe_federate/4","deprecated":false,"title":"maybe_federate(subject, verb, thing, opts \\\\ [])","anchor":"maybe_federate/4"},{"id":"preparation_error/2","deprecated":false,"title":"preparation_error(error, object)","anchor":"preparation_error/2"},{"id":"push_now!/1","deprecated":false,"title":"push_now!(activity)","anchor":"push_now!/1"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Outgoing","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Peered","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Peered","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create/3","deprecated":false,"title":"create(id, peer, canonical_uri)","anchor":"create/3"},{"id":"get/1","deprecated":false,"title":"get(id)","anchor":"get/1"},{"id":"get_canonical_uri/1","deprecated":false,"title":"get_canonical_uri(obj_or_id)","anchor":"get_canonical_uri/1"},{"id":"is_blocked?/3","deprecated":false,"title":"is_blocked?(peered, block_type \\\\ :any, opts \\\\ [])","anchor":"is_blocked?/3"},{"id":"save_canonical_uri/2","deprecated":false,"title":"save_canonical_uri(id, canonical_uri)","anchor":"save_canonical_uri/2"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Peered","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.RuntimeConfig","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Federate.ActivityPub.Simulate","deprecated":false,"group":"Feature extensions","title":"Bonfire.Federate.ActivityPub.Simulate","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor_json/1","deprecated":false,"title":"actor_json(binary)","anchor":"actor_json/1"},{"id":"fake_remote_user/1","deprecated":false,"title":"fake_remote_user(actor_id \\\\ \"https://mocked.local/users/karen\")","anchor":"fake_remote_user/1"},{"id":"webfingered/0","deprecated":false,"title":"webfingered()","anchor":"webfingered/0"}],"key":"functions"}],"nested_title":".Federate.ActivityPub.Simulate","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create/2","deprecated":false,"title":"create(user, attrs)","anchor":"create/2"},{"id":"date_expires/1","deprecated":false,"title":"date_expires(invite)","anchor":"date_expires/1"},{"id":"expired?/1","deprecated":false,"title":"expired?(invite)","anchor":"expired?/1"},{"id":"get/2","deprecated":false,"title":"get(id, opts \\\\ [])","anchor":"get/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts \\\\ [])","anchor":"list_paginated/2"},{"id":"one/2","deprecated":false,"title":"one(filters, opts \\\\ [])","anchor":"one/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts \\\\ [])","anchor":"query/2"},{"id":"redeem/1","deprecated":false,"title":"redeem(invite)","anchor":"redeem/1"},{"id":"redeemable?/1","deprecated":false,"title":"redeemable?(invite)","anchor":"redeemable?/1"}],"key":"functions"}],"nested_title":".Invite.Links","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links.Fake","sections":[],"nested_title":".Invite.Links.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Invite.Links.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Invite.Links.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Invite.Links.Web.Routes","deprecated":false,"group":"Feature extensions","title":"Bonfire.Invite.Links.Web.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".Invite.Links.Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.InviteLink","deprecated":false,"group":"Feature extensions","title":"Bonfire.InviteLink","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(obj \\\\ %InviteLink{}, params)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".InviteLink","nested_context":"Bonfire"},{"id":"Bonfire.Localise","deprecated":false,"group":"Feature extensions","title":"Bonfire.Localise","sections":[],"nested_title":".Localise","nested_context":"Bonfire"},{"id":"Bonfire.Logging","deprecated":false,"group":"Feature extensions","title":"Bonfire.Logging","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/4","deprecated":false,"title":"handle_event(list, measure, meta, _)","anchor":"handle_event/4"},{"id":"setup/2","deprecated":false,"title":"setup(env, repo_module)","anchor":"setup/2"},{"id":"setup_oban/0","deprecated":false,"title":"setup_oban()","anchor":"setup_oban/0"},{"id":"setup_opentelemetry/2","deprecated":false,"title":"setup_opentelemetry(env, repo_module)","anchor":"setup_opentelemetry/2"}],"key":"functions"}],"nested_title":".Logging","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"changeset_name/0","deprecated":false,"title":"changeset_name()","anchor":"t:changeset_name/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"allow_signup?/1","deprecated":false,"title":"allow_signup?(opts)","anchor":"allow_signup?/1"},{"id":"change_email/3","deprecated":false,"title":"change_email(current_account, params_or_changeset, opts \\\\ [])","anchor":"change_email/3"},{"id":"change_password/3","deprecated":false,"title":"change_password(current_account, params_or_changeset, opts \\\\ [])","anchor":"change_password/3"},{"id":"change_password/4","deprecated":false,"title":"change_password(current_account, cs, params, opts)","anchor":"change_password/4"},{"id":"changeset/3","deprecated":false,"title":"changeset(changeset_name, params, opts \\\\ [])","anchor":"changeset/3"},{"id":"confirm_email/2","deprecated":false,"title":"confirm_email(account_or_token, opts \\\\ [])","anchor":"confirm_email/2"},{"id":"count/0","deprecated":false,"title":"count()","anchor":"count/0"},{"id":"delete/2","deprecated":false,"title":"delete(account, opts \\\\ [])","anchor":"delete/2"},{"id":"do_signup/2","deprecated":false,"title":"do_signup(cs_or_params, opts)","anchor":"do_signup/2"},{"id":"enqueue_delete/1","deprecated":false,"title":"enqueue_delete(account)","anchor":"enqueue_delete/1"},{"id":"fetch_current/1","deprecated":false,"title":"fetch_current(id)","anchor":"fetch_current/1"},{"id":"get_by_email/1","deprecated":false,"title":"get_by_email(email)","anchor":"get_by_email/1"},{"id":"get_current/1","deprecated":false,"title":"get_current(id)","anchor":"get_current/1"},{"id":"instance_is_invite_only?/0","deprecated":false,"title":"instance_is_invite_only?()","anchor":"instance_is_invite_only?/0"},{"id":"is_admin?/1","deprecated":false,"title":"is_admin?(assigns)","anchor":"is_admin?/1"},{"id":"is_first_account?/0","deprecated":false,"title":"is_first_account?()","anchor":"is_first_account?/0"},{"id":"login/2","deprecated":false,"title":"login(params_or_changeset, opts \\\\ [])","anchor":"login/2"},{"id":"login_valid?/2","deprecated":false,"title":"login_valid?(user, password)","anchor":"login_valid?/2"},{"id":"maybe_redeem_invite/2","deprecated":false,"title":"maybe_redeem_invite(data, opts)","anchor":"maybe_redeem_invite/2"},{"id":"redeemable_invite?/1","deprecated":false,"title":"redeemable_invite?(invite)","anchor":"redeemable_invite?/1"},{"id":"request_confirm_email/2","deprecated":false,"title":"request_confirm_email(params_or_changeset_or_form_or_account, opts \\\\ [])","anchor":"request_confirm_email/2"},{"id":"request_forgot_password/1","deprecated":false,"title":"request_forgot_password(params)","anchor":"request_forgot_password/1"},{"id":"signup/2","deprecated":false,"title":"signup(params_or_changeset, opts \\\\ [])","anchor":"signup/2"},{"id":"update_is_admin/3","deprecated":false,"title":"update_is_admin(user_or_account, make_admin_or_revoke, user \\\\ nil)","anchor":"update_is_admin/3"}],"key":"functions"}],"nested_title":".Me.Accounts","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.ChangeEmailFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.ChangeEmailFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(form \\\\ %ChangeEmailFields{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Me.Accounts.ChangeEmailFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.ChangePasswordFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.ChangePasswordFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(form \\\\ %ChangePasswordFields{}, attrs, resetting_password? \\\\ false)","anchor":"changeset/3"}],"key":"functions"}],"nested_title":".Me.Accounts.ChangePasswordFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.ConfirmEmailFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.ConfirmEmailFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(form \\\\ %ConfirmEmailFields{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Me.Accounts.ConfirmEmailFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.ForgotPasswordFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.ForgotPasswordFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(form \\\\ %ForgotPasswordFields{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Me.Accounts.ForgotPasswordFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.LoginFields","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.LoginFields","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(form \\\\ %LoginFields{}, attrs)","anchor":"changeset/2"}],"key":"functions"}],"nested_title":".Me.Accounts.LoginFields","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.Queries","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"by_email/1","deprecated":false,"title":"by_email(email)","anchor":"by_email/1"},{"id":"confirm_email/1","deprecated":false,"title":"confirm_email(token)","anchor":"confirm_email/1"},{"id":"count/1","deprecated":false,"title":"count(q \\\\ Account)","anchor":"count/1"},{"id":"current/1","deprecated":false,"title":"current(id)","anchor":"current/1"},{"id":"login_by_account_id/1","deprecated":false,"title":"login_by_account_id(id)","anchor":"login_by_account_id/1"},{"id":"login_by_email/1","deprecated":false,"title":"login_by_email(email)","anchor":"login_by_email/1"},{"id":"login_by_username/1","deprecated":false,"title":"login_by_username(username)","anchor":"login_by_username/1"},{"id":"request_confirm_email/1","deprecated":false,"title":"request_confirm_email(email)","anchor":"request_confirm_email/1"}],"key":"functions"}],"nested_title":".Me.Accounts.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Me.Accounts.SecondFactors","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Accounts.SecondFactors","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/3","deprecated":false,"title":"changeset(totp \\\\ %AuthSecondFactor{}, attrs, opts \\\\ [])","anchor":"changeset/3"},{"id":"delete_account_totp/1","deprecated":false,"title":"delete_account_totp(account_totp)","anchor":"delete_account_totp/1"},{"id":"enabled?/0","deprecated":false,"title":"enabled?()","anchor":"enabled?/0"},{"id":"format_secret/1","deprecated":false,"title":"format_secret(secret)","anchor":"format_secret/1"},{"id":"get_account_totp/1","deprecated":false,"title":"get_account_totp(account)","anchor":"get_account_totp/1"},{"id":"maybe_authenticate/2","deprecated":false,"title":"maybe_authenticate(account, params)","anchor":"maybe_authenticate/2"},{"id":"maybe_cast_totp_changeset/3","deprecated":false,"title":"maybe_cast_totp_changeset(changeset, params, opts)","anchor":"maybe_cast_totp_changeset/3"},{"id":"new/0","deprecated":false,"title":"new()","anchor":"new/0"},{"id":"new_qrcode/1","deprecated":false,"title":"new_qrcode(opts \\\\ [])","anchor":"new_qrcode/1"},{"id":"new_struct/1","deprecated":false,"title":"new_struct(secret \\\\ nil)","anchor":"new_struct/1"},{"id":"new_uri/1","deprecated":false,"title":"new_uri(secret \\\\ nil)","anchor":"new_uri/1"},{"id":"validate_account_totp/2","deprecated":false,"title":"validate_account_totp(totp, code)","anchor":"validate_account_totp/2"}],"key":"functions"}],"nested_title":".Me.Accounts.SecondFactors","nested_context":"Bonfire"},{"id":"Bonfire.Me.Acts.Caretaker","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Acts.Caretaker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Me.Acts.Caretaker","nested_context":"Bonfire"},{"id":"Bonfire.Me.Acts.Creator","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Acts.Creator","sections":[],"nested_title":".Me.Acts.Creator","nested_context":"Bonfire"},{"id":"Bonfire.Me.Characters","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Characters","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"by_username/1","deprecated":false,"title":"by_username(username)","anchor":"by_username/1"},{"id":"by_username!/1","deprecated":false,"title":"by_username!(username)","anchor":"by_username!/1"},{"id":"by_username_q/1","deprecated":false,"title":"by_username_q(username)","anchor":"by_username_q/1"},{"id":"changeset/3","deprecated":false,"title":"changeset(char \\\\ %Character{}, params, profile \\\\ :local)","anchor":"changeset/3"},{"id":"character_mention_prefix/1","deprecated":false,"title":"character_mention_prefix(object)","anchor":"character_mention_prefix/1"},{"id":"character_url/1","deprecated":false,"title":"character_url(character)","anchor":"character_url/1"},{"id":"clean_username/1","deprecated":false,"title":"clean_username(username)","anchor":"clean_username/1"},{"id":"display_username/4","deprecated":false,"title":"display_username(user, always_include_domain \\\\ false, is_local? \\\\ nil, prefix \\\\ nil)","anchor":"display_username/4"},{"id":"get/1","deprecated":false,"title":"get(ids)","anchor":"get/1"},{"id":"hash_available?/1","deprecated":false,"title":"hash_available?(hash)","anchor":"hash_available?/1"},{"id":"hash_delete/1","deprecated":false,"title":"hash_delete(hash)","anchor":"hash_delete/1"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(obj)","anchor":"indexing_object_format/1"},{"id":"q_by_id/1","deprecated":false,"title":"q_by_id(ids)","anchor":"q_by_id/1"},{"id":"remote_changeset/2","deprecated":false,"title":"remote_changeset(changeset, params)","anchor":"remote_changeset/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"update/2","deprecated":false,"title":"update(character, attrs)","anchor":"update/2"},{"id":"username_available?/1","deprecated":false,"title":"username_available?(username)","anchor":"username_available?/1"}],"key":"functions"}],"nested_title":".Me.Characters","nested_context":"Bonfire"},{"id":"Bonfire.Me.DeleteWorker","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.DeleteWorker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"care_taken/1","deprecated":false,"title":"care_taken(ids)","anchor":"care_taken/1"},{"id":"closures/1","deprecated":false,"title":"closures(ids)","anchor":"closures/1"},{"id":"delete/2","deprecated":false,"title":"delete(ids, opts)","anchor":"delete/2"},{"id":"delete_now/1","deprecated":false,"title":"delete_now(ids)","anchor":"delete_now/1"},{"id":"enqueue_delete/1","deprecated":false,"title":"enqueue_delete(ids)","anchor":"enqueue_delete/1"},{"id":"perform/1","deprecated":false,"title":"perform(map)","anchor":"perform/1"}],"key":"functions"}],"nested_title":".Me.DeleteWorker","nested_context":"Bonfire"},{"id":"Bonfire.Me.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_account!/2","deprecated":false,"title":"fake_account!(attrs \\\\ %{}, opts \\\\ [])","anchor":"fake_account!/2"},{"id":"fake_user!/3","deprecated":false,"title":"fake_user!(account \\\\ %{}, attrs \\\\ %{}, opts_or_extra \\\\ [])","anchor":"fake_user!/3"}],"key":"functions"}],"nested_title":".Me.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Me.Fake.Helpers","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Fake.Helpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"atusername/0","deprecated":false,"title":"atusername()","anchor":"atusername/0"},{"id":"avatar_url/0","deprecated":false,"title":"avatar_url()","anchor":"avatar_url/0"},{"id":"avatar_url/1","deprecated":false,"title":"avatar_url(slug)","anchor":"avatar_url/1"},{"id":"character_subform/1","deprecated":false,"title":"character_subform(base \\\\ %{})","anchor":"character_subform/1"},{"id":"confirm_token/0","deprecated":false,"title":"confirm_token()","anchor":"confirm_token/0"},{"id":"create_user_form/1","deprecated":false,"title":"create_user_form(base \\\\ %{})","anchor":"create_user_form/1"},{"id":"credential_subform/1","deprecated":false,"title":"credential_subform(base \\\\ %{})","anchor":"credential_subform/1"},{"id":"email_subform/1","deprecated":false,"title":"email_subform(base \\\\ %{})","anchor":"email_subform/1"},{"id":"icon_url/1","deprecated":false,"title":"icon_url(slug \\\\ nil)","anchor":"icon_url/1"},{"id":"image/1","deprecated":false,"title":"image(arg1)","anchor":"image/1"},{"id":"image_url/1","deprecated":false,"title":"image_url(slug \\\\ nil)","anchor":"image_url/1"},{"id":"profile_subform/1","deprecated":false,"title":"profile_subform(base \\\\ %{})","anchor":"profile_subform/1"},{"id":"signup_form/1","deprecated":false,"title":"signup_form(base \\\\ %{})","anchor":"signup_form/1"},{"id":"user_live/1","deprecated":false,"title":"user_live(base \\\\ %{})","anchor":"user_live/1"}],"key":"functions"}],"nested_title":".Me.Fake.Helpers","nested_context":"Bonfire"},{"id":"Bonfire.Me.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"indexing_format_created/2","deprecated":false,"title":"indexing_format_created(profile, character)","anchor":"indexing_format_created/2"},{"id":"indexing_format_creator/2","deprecated":false,"title":"indexing_format_creator(profile, character)","anchor":"indexing_format_creator/2"},{"id":"is_local?/1","deprecated":false,"title":"is_local?(thing)","anchor":"is_local?/1"},{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"maybe_index/1","deprecated":false,"title":"maybe_index(object)","anchor":"maybe_index/1"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Me.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Me.Mails","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Mails","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"confirm_email/2","deprecated":false,"title":"confirm_email(account, opts \\\\ [])","anchor":"confirm_email/2"},{"id":"forgot_password/1","deprecated":false,"title":"forgot_password(account)","anchor":"forgot_password/1"},{"id":"render/3","deprecated":false,"title":"render(email, template, assigns \\\\ [])","anchor":"render/3"},{"id":"signup_confirm_email/1","deprecated":false,"title":"signup_confirm_email(account)","anchor":"signup_confirm_email/1"}],"key":"functions"}],"nested_title":".Me.Mails","nested_context":"Bonfire"},{"id":"Bonfire.Me.Mails.EmailView","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Mails.EmailView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"render_template/2","deprecated":false,"title":"render_template(template, assigns)","anchor":"render_template/2"}],"key":"functions"}],"nested_title":".Me.Mails.EmailView","nested_context":"Bonfire"},{"id":"Bonfire.Me.Profiles","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Profiles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(profile \\\\ %Profile{}, params)","anchor":"changeset/2"},{"id":"changeset_simple/2","deprecated":false,"title":"changeset_simple(profile \\\\ %Profile{}, params)","anchor":"changeset_simple/2"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(obj)","anchor":"indexing_object_format/1"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"}],"key":"functions"}],"nested_title":".Me.Profiles","nested_context":"Bonfire"},{"id":"Bonfire.Me.Profiles.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Profiles.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"set_profile_image/5","deprecated":false,"title":"set_profile_image(atom, user, uploaded_media, assign_field, socket)","anchor":"set_profile_image/5"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Me.Profiles.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Me.RuntimeConfig","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Me.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Me.SharedUsers","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.SharedUsers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_account/3","deprecated":false,"title":"add_account(shared_user_or_username, email_or_username, params \\\\ %{})","anchor":"add_account/3"},{"id":"add_accounts/3","deprecated":false,"title":"add_accounts(shared_user_or_username, emails_or_usernames, params \\\\ %{})","anchor":"add_accounts/3"},{"id":"by_account/1","deprecated":false,"title":"by_account(account)","anchor":"by_account/1"},{"id":"by_username_and_account_query/2","deprecated":false,"title":"by_username_and_account_query(username, account)","anchor":"by_username_and_account_query/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"init_shared_user/2","deprecated":false,"title":"init_shared_user(user, params \\\\ %{})","anchor":"init_shared_user/2"}],"key":"functions"}],"nested_title":".Me.SharedUsers","nested_context":"Bonfire"},{"id":"Bonfire.Me.Users","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Users","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"changeset_extra/0","deprecated":false,"title":"changeset_extra()","anchor":"t:changeset_extra/0"},{"id":"changeset_name/0","deprecated":false,"title":"changeset_name()","anchor":"t:changeset_name/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"by_account/1","deprecated":false,"title":"by_account(account)","anchor":"by_account/1"},{"id":"by_ap_id/1","deprecated":false,"title":"by_ap_id(ap_id)","anchor":"by_ap_id/1"},{"id":"by_ap_id!/1","deprecated":false,"title":"by_ap_id!(ap_id)","anchor":"by_ap_id!/1"},{"id":"by_canonical_uri/1","deprecated":false,"title":"by_canonical_uri(uri)","anchor":"by_canonical_uri/1"},{"id":"by_id/2","deprecated":false,"title":"by_id(id, opts \\\\ [])","anchor":"by_id/2"},{"id":"by_username/2","deprecated":false,"title":"by_username(username, opts \\\\ [])","anchor":"by_username/2"},{"id":"by_username!/1","deprecated":false,"title":"by_username!(username)","anchor":"by_username!/1"},{"id":"by_username_and_account/2","deprecated":false,"title":"by_username_and_account(username, account_id)","anchor":"by_username_and_account/2"},{"id":"changeset/4","deprecated":false,"title":"changeset(name, user \\\\ %User{}, params, extra)","anchor":"changeset/4"},{"id":"check_active/1","deprecated":false,"title":"check_active(users)","anchor":"check_active/1"},{"id":"check_active!/1","deprecated":false,"title":"check_active!(users)","anchor":"check_active!/1"},{"id":"count/1","deprecated":false,"title":"count(show \\\\ :local)","anchor":"count/1"},{"id":"create/2","deprecated":false,"title":"create(params_or_changeset, extra \\\\ nil)","anchor":"create/2"},{"id":"create_remote/1","deprecated":false,"title":"create_remote(params)","anchor":"create_remote/1"},{"id":"delete/2","deprecated":false,"title":"delete(user, arg2 \\\\ [])","anchor":"delete/2"},{"id":"enqueue_delete/1","deprecated":false,"title":"enqueue_delete(user)","anchor":"enqueue_delete/1"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"fetch_current/1","deprecated":false,"title":"fetch_current(id)","anchor":"fetch_current/1"},{"id":"flatten/1","deprecated":false,"title":"flatten(user)","anchor":"flatten/1"},{"id":"format_actor/1","deprecated":false,"title":"format_actor(user)","anchor":"format_actor/1"},{"id":"get_current/1","deprecated":false,"title":"get_current(id)","anchor":"get_current/1"},{"id":"get_current/2","deprecated":false,"title":"get_current(id, account_id)","anchor":"get_current/2"},{"id":"get_only_in_account/1","deprecated":false,"title":"get_only_in_account(account)","anchor":"get_only_in_account/1"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(u)","anchor":"indexing_object_format/1"},{"id":"is_active?/1","deprecated":false,"title":"is_active?(user)","anchor":"is_active?/1"},{"id":"is_first_user?/0","deprecated":false,"title":"is_first_user?()","anchor":"is_first_user?/0"},{"id":"list/1","deprecated":false,"title":"list(opts)","anchor":"list/1"},{"id":"list_admins/0","deprecated":false,"title":"list_admins()","anchor":"list_admins/0"},{"id":"list_all/1","deprecated":false,"title":"list_all(show \\\\ :local)","anchor":"list_all/1"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts \\\\ [])","anchor":"list_paginated/2"},{"id":"make_admin/1","deprecated":false,"title":"make_admin(username)","anchor":"make_admin/1"},{"id":"maybe_count/1","deprecated":false,"title":"maybe_count(show \\\\ :local)","anchor":"maybe_count/1"},{"id":"maybe_index_user/1","deprecated":false,"title":"maybe_index_user(object)","anchor":"maybe_index_user/1"},{"id":"query/2","deprecated":false,"title":"query(list, opts \\\\ [])","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"remote_fetcher/0","deprecated":false,"title":"remote_fetcher()","anchor":"remote_fetcher/0"},{"id":"revoke_admin/1","deprecated":false,"title":"revoke_admin(username)","anchor":"revoke_admin/1"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"search/1","deprecated":false,"title":"search(search)","anchor":"search/1"},{"id":"search_db/1","deprecated":false,"title":"search_db(search)","anchor":"search_db/1"},{"id":"update/3","deprecated":false,"title":"update(user, params, extra \\\\ nil)","anchor":"update/3"},{"id":"update_local_actor/2","deprecated":false,"title":"update_local_actor(user, params)","anchor":"update_local_actor/2"},{"id":"update_remote_actor/2","deprecated":false,"title":"update_remote_actor(user, params)","anchor":"update_remote_actor/2"}],"key":"functions"}],"nested_title":".Me.Users","nested_context":"Bonfire"},{"id":"Bonfire.Me.Users.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Users.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, search, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"to_tuple/1","deprecated":false,"title":"to_tuple(u)","anchor":"to_tuple/1"}],"key":"functions"}],"nested_title":".Me.Users.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Me.Users.Queries","deprecated":false,"group":"Feature extensions","title":"Bonfire.Me.Users.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"admins/1","deprecated":false,"title":"admins(opts \\\\ [])","anchor":"admins/1"},{"id":"base_by_id/1","deprecated":false,"title":"base_by_id(id)","anchor":"base_by_id/1"},{"id":"by_account/1","deprecated":false,"title":"by_account(account_id)","anchor":"by_account/1"},{"id":"by_canonical_uri/2","deprecated":false,"title":"by_canonical_uri(canonical_uri, opts \\\\ [])","anchor":"by_canonical_uri/2"},{"id":"by_id/2","deprecated":false,"title":"by_id(id, opts \\\\ [])","anchor":"by_id/2"},{"id":"by_username_and_account/2","deprecated":false,"title":"by_username_and_account(username, account_id)","anchor":"by_username_and_account/2"},{"id":"by_username_or_id/2","deprecated":false,"title":"by_username_or_id(username_or_id, opts \\\\ [])","anchor":"by_username_or_id/2"},{"id":"by_username_query/2","deprecated":false,"title":"by_username_query(username, opts \\\\ [])","anchor":"by_username_query/2"},{"id":"count/1","deprecated":false,"title":"count(arg1)","anchor":"count/1"},{"id":"current/1","deprecated":false,"title":"current(user_id)","anchor":"current/1"},{"id":"current/2","deprecated":false,"title":"current(user_id, account_id)","anchor":"current/2"},{"id":"join_peered/1","deprecated":false,"title":"join_peered(q)","anchor":"join_peered/1"},{"id":"list/1","deprecated":false,"title":"list(arg1)","anchor":"list/1"},{"id":"query/2","deprecated":false,"title":"query(filters, opts \\\\ [])","anchor":"query/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"search/1","deprecated":false,"title":"search(text)","anchor":"search/1"}],"key":"functions"}],"nested_title":".Me.Users.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Messages","deprecated":false,"group":"Feature extensions","title":"Bonfire.Messages","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, message)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"changeset/4","deprecated":false,"title":"changeset(atom, attrs, creator, opts \\\\ [])","anchor":"changeset/4"},{"id":"draft/2","deprecated":false,"title":"draft(creator, attrs)","anchor":"draft/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"filter/3","deprecated":false,"title":"filter(atom, arg2, query)","anchor":"filter/3"},{"id":"list/3","deprecated":false,"title":"list(current_user, with_user \\\\ nil, opts \\\\ [])","anchor":"list/3"},{"id":"list/4","deprecated":false,"title":"list(current_user, with_user, cursor_before, preloads)","anchor":"list/4"},{"id":"read/2","deprecated":false,"title":"read(message_id, opts)","anchor":"read/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"send/3","deprecated":false,"title":"send(creator_id, attrs, to \\\\ nil)","anchor":"send/3"}],"key":"functions"}],"nested_title":".Messages","nested_context":"Bonfire"},{"id":"Bonfire.Messages.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Messages.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_comment!/4","deprecated":false,"title":"fake_comment!(user, reply_to, boundary \\\\ nil, attrs \\\\ nil)","anchor":"fake_comment!/4"},{"id":"fake_post!/4","deprecated":false,"title":"fake_post!(user, boundary \\\\ nil, attrs \\\\ nil, opts \\\\ [])","anchor":"fake_post!/4"},{"id":"fake_remote_user!/0","deprecated":false,"title":"fake_remote_user!()","anchor":"fake_remote_user!/0"}],"key":"functions"}],"nested_title":".Messages.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Messages.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Messages.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Messages.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Messages.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Messages.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_params/3","deprecated":false,"title":"handle_params(attrs, _, socket)","anchor":"handle_params/3"},{"id":"list_threads/3","deprecated":false,"title":"list_threads(current_user, user \\\\ nil, opts \\\\ [])","anchor":"list_threads/3"},{"id":"live_more/3","deprecated":false,"title":"live_more(context, opts, socket)","anchor":"live_more/3"},{"id":"send_message/2","deprecated":false,"title":"send_message(params, socket)","anchor":"send_message/2"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"thread_meta/4","deprecated":false,"title":"thread_meta(thread_id, activity, object, opts)","anchor":"thread_meta/4"},{"id":"thread_meta/5","deprecated":false,"title":"thread_meta(key, thread_id, activity, object, opts)","anchor":"thread_meta/5"},{"id":"thread_participants/4","deprecated":false,"title":"thread_participants(thread_id, activity, object, opts)","anchor":"thread_participants/4"},{"id":"threads_widget/3","deprecated":false,"title":"threads_widget(current_user, user \\\\ nil, opts \\\\ [])","anchor":"threads_widget/3"}],"key":"functions"}],"nested_title":".Messages.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Posts","deprecated":false,"group":"Feature extensions","title":"Bonfire.Posts","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, post)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/4","deprecated":false,"title":"ap_receive_activity(creator, activity, object, circles \\\\ [])","anchor":"ap_receive_activity/4"},{"id":"changeset/4","deprecated":false,"title":"changeset(action, attrs, creator \\\\ nil, preset \\\\ nil)","anchor":"changeset/4"},{"id":"count_total/0","deprecated":false,"title":"count_total()","anchor":"count_total/0"},{"id":"delete/2","deprecated":false,"title":"delete(object, opts \\\\ [])","anchor":"delete/2"},{"id":"draft/2","deprecated":false,"title":"draft(creator, attrs)","anchor":"draft/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"filter/3","deprecated":false,"title":"filter(atom, user, query)","anchor":"filter/3"},{"id":"indexing_object_format/2","deprecated":false,"title":"indexing_object_format(post, opts \\\\ [])","anchor":"indexing_object_format/2"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts \\\\ [])","anchor":"list_paginated/2"},{"id":"prepare_post_attrs/1","deprecated":false,"title":"prepare_post_attrs(attrs)","anchor":"prepare_post_attrs/1"},{"id":"publish/1","deprecated":false,"title":"publish(opts \\\\ [])","anchor":"publish/1"},{"id":"query/2","deprecated":false,"title":"query(filters \\\\ [], opts \\\\ nil)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"query_paginated/2","deprecated":false,"title":"query_paginated(filters, opts \\\\ [])","anchor":"query_paginated/2"},{"id":"read/2","deprecated":false,"title":"read(post_id, opts_or_socket_or_current_user \\\\ [])","anchor":"read/2"},{"id":"run_epic/3","deprecated":false,"title":"run_epic(type, options \\\\ [], on \\\\ :post)","anchor":"run_epic/3"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"}],"key":"functions"}],"nested_title":".Posts","nested_context":"Bonfire"},{"id":"Bonfire.Posts.Acts.Posts.Publish","deprecated":false,"group":"Feature extensions","title":"Bonfire.Posts.Acts.Posts.Publish","sections":[],"nested_title":".Posts.Acts.Posts.Publish","nested_context":"Bonfire"},{"id":"Bonfire.Posts.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Posts.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_comment!/4","deprecated":false,"title":"fake_comment!(user, reply_to, boundary \\\\ nil, attrs \\\\ nil)","anchor":"fake_comment!/4"},{"id":"fake_post!/4","deprecated":false,"title":"fake_post!(user, boundary \\\\ nil, attrs \\\\ nil, opts \\\\ [])","anchor":"fake_post!/4"},{"id":"fake_remote_user!/0","deprecated":false,"title":"fake_remote_user!()","anchor":"fake_remote_user!/0"}],"key":"functions"}],"nested_title":".Posts.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Posts.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Posts.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Posts.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Posts.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Posts.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"post_changeset/2","deprecated":false,"title":"post_changeset(attrs \\\\ %{}, creator)","anchor":"post_changeset/2"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"write_feedback/2","deprecated":false,"title":"write_feedback(text, socket)","anchor":"write_feedback/2"}],"key":"functions"}],"nested_title":".Posts.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.RuntimeConfig","deprecated":false,"group":"Feature extensions","title":"Bonfire.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Search","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"adapter/0","deprecated":false,"title":"adapter()","anchor":"adapter/0"},{"id":"facet_from_map/1","deprecated":false,"title":"facet_from_map(arg)","anchor":"facet_from_map/1"},{"id":"public_index/0","deprecated":false,"title":"public_index()","anchor":"public_index/0"},{"id":"search/2","deprecated":false,"title":"search(string, opts_or_index \\\\ nil)","anchor":"search/2"},{"id":"search/4","deprecated":false,"title":"search(string, opts \\\\ %{}, calculate_facets, filter_facets)","anchor":"search/4"},{"id":"search_by_type/2","deprecated":false,"title":"search_by_type(tag_search, facets \\\\ nil)","anchor":"search_by_type/2"}],"key":"functions"}],"nested_title":".Search","nested_context":"Bonfire"},{"id":"Bonfire.Search.Acts.Queue","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Acts.Queue","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"maybe_indexable_object/2","deprecated":false,"title":"maybe_indexable_object(object, current_user)","anchor":"maybe_indexable_object/2"},{"id":"maybe_unindex/1","deprecated":false,"title":"maybe_unindex(object)","anchor":"maybe_unindex/1"},{"id":"prepare_object/1","deprecated":false,"title":"prepare_object(thing)","anchor":"prepare_object/1"}],"key":"functions"}],"nested_title":".Search.Acts.Queue","nested_context":"Bonfire"},{"id":"Bonfire.Search.Fuzzy","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Fuzzy","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_search/4","deprecated":false,"title":"do_search(q, opts, calculate_facets, facet_filters)","anchor":"do_search/4"},{"id":"search/4","deprecated":false,"title":"search(q, opts \\\\ %{limit: 20}, calculate_facets \\\\ [\"index_type\"], facet_filters \\\\ nil)","anchor":"search/4"},{"id":"search_filtered/2","deprecated":false,"title":"search_filtered(q, facet_filters)","anchor":"search_filtered/2"}],"key":"functions"}],"nested_title":".Search.Fuzzy","nested_context":"Bonfire"},{"id":"Bonfire.Search.HTTP","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.HTTP","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"http_adapter/0","deprecated":false,"title":"http_adapter()","anchor":"http_adapter/0"},{"id":"http_error/5","deprecated":false,"title":"http_error(arg1, http_method, message, object, url)","anchor":"http_error/5"},{"id":"http_request/4","deprecated":false,"title":"http_request(http_method, url, headers, object \\\\ nil)","anchor":"http_request/4"}],"key":"functions"}],"nested_title":".Search.HTTP","nested_context":"Bonfire"},{"id":"Bonfire.Search.Indexer","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Indexer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"host/1","deprecated":false,"title":"host(url)","anchor":"host/1"},{"id":"index_public_object/1","deprecated":false,"title":"index_public_object(object)","anchor":"index_public_object/1"},{"id":"init_index/2","deprecated":false,"title":"init_index(index_name \\\\ \"public\", fail_silently \\\\ false)","anchor":"init_index/2"},{"id":"maybe_delete_object/2","deprecated":false,"title":"maybe_delete_object(object, index_name \\\\ \"public\")","anchor":"maybe_delete_object/2"},{"id":"maybe_index_object/1","deprecated":false,"title":"maybe_index_object(object)","anchor":"maybe_index_object/1"},{"id":"maybe_indexable_and_discoverable/2","deprecated":false,"title":"maybe_indexable_and_discoverable(creator, object)","anchor":"maybe_indexable_and_discoverable/2"},{"id":"maybe_indexable_object/1","deprecated":false,"title":"maybe_indexable_object(object)","anchor":"maybe_indexable_object/1"}],"key":"functions"}],"nested_title":".Search.Indexer","nested_context":"Bonfire"},{"id":"Bonfire.Search.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"live_search/4","deprecated":false,"title":"live_search(q, search_limit \\\\ 20, facet_filters \\\\ nil, socket)","anchor":"live_search/4"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Search.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Search.Meili","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Meili","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"api/4","deprecated":false,"title":"api(http_method, object, index_path, fail_silently \\\\ false)","anchor":"api/4"},{"id":"create_index/2","deprecated":false,"title":"create_index(index_name, fail_silently \\\\ false)","anchor":"create_index/2"},{"id":"delete/3","deprecated":false,"title":"delete(object, index_path \\\\ \"\", fail_silently \\\\ false)","anchor":"delete/3"},{"id":"get/1","deprecated":false,"title":"get(object)","anchor":"get/1"},{"id":"get/3","deprecated":false,"title":"get(object, index_path, fail_silently \\\\ false)","anchor":"get/3"},{"id":"index_exists/1","deprecated":false,"title":"index_exists(index_name)","anchor":"index_exists/1"},{"id":"list_facets/1","deprecated":false,"title":"list_facets(index_name \\\\ \"public\")","anchor":"list_facets/1"},{"id":"patch/3","deprecated":false,"title":"patch(object, index_path \\\\ \"\", fail_silently \\\\ false)","anchor":"patch/3"},{"id":"post/3","deprecated":false,"title":"post(object, index_path \\\\ \"\", fail_silently \\\\ false)","anchor":"post/3"},{"id":"put/3","deprecated":false,"title":"put(object, index_path \\\\ \"\", fail_silently \\\\ false)","anchor":"put/3"},{"id":"search/2","deprecated":false,"title":"search(params, index)","anchor":"search/2"},{"id":"set_facets/2","deprecated":false,"title":"set_facets(index_name, facets)","anchor":"set_facets/2"},{"id":"set_searchable_fields/2","deprecated":false,"title":"set_searchable_fields(index_name, fields)","anchor":"set_searchable_fields/2"},{"id":"settings/2","deprecated":false,"title":"settings(object, index)","anchor":"settings/2"}],"key":"functions"}],"nested_title":".Search.Meili","nested_context":"Bonfire"},{"id":"Bonfire.Search.RuntimeConfig","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.RuntimeConfig","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"config/0","deprecated":false,"title":"config()","anchor":"config/0"},{"id":"config_module/0","deprecated":false,"title":"config_module()","anchor":"config_module/0"}],"key":"functions"}],"nested_title":".Search.RuntimeConfig","nested_context":"Bonfire"},{"id":"Bonfire.Search.Stopwords","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Stopwords","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(text, language \\\\ nil)","anchor":"filter/2"},{"id":"split_sentences/1","deprecated":false,"title":"split_sentences(text)","anchor":"split_sentences/1"},{"id":"split_words/1","deprecated":false,"title":"split_words(text)","anchor":"split_words/1"},{"id":"stop_words/1","deprecated":false,"title":"stop_words(language \\\\ \"english\")","anchor":"stop_words/1"}],"key":"functions"}],"nested_title":".Search.Stopwords","nested_context":"Bonfire"},{"id":"Bonfire.Search.Web.Routes","deprecated":false,"group":"Feature extensions","title":"Bonfire.Search.Web.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".Search.Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Seeder","deprecated":false,"group":"Feature extensions","title":"Bonfire.Seeder","sections":[],"nested_title":".Seeder","nested_context":"Bonfire"},{"id":"Bonfire.Social.APActivities","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.APActivities","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"create/4","deprecated":false,"title":"create(character, activity, object, public \\\\ nil)","anchor":"create/4"},{"id":"insert/3","deprecated":false,"title":"insert(character, json, opts)","anchor":"insert/3"},{"id":"maybe_attach_video_oembed/3","deprecated":false,"title":"maybe_attach_video_oembed(changeset, arg2, current_user)","anchor":"maybe_attach_video_oembed/3"}],"key":"functions"}],"nested_title":".Social.APActivities","nested_context":"Bonfire"},{"id":"Bonfire.Social.Activities","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Activities","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"activity_preloads/2","deprecated":false,"title":"activity_preloads(query, opts)","anchor":"activity_preloads/2"},{"id":"activity_preloads/3","deprecated":false,"title":"activity_preloads(query, preloads, opts)","anchor":"activity_preloads/3"},{"id":"activity_under_object/1","deprecated":false,"title":"activity_under_object(top_object)","anchor":"activity_under_object/1"},{"id":"activity_under_object/2","deprecated":false,"title":"activity_under_object(activity, object)","anchor":"activity_under_object/2"},{"id":"activity_with_object_from_assigns/1","deprecated":false,"title":"activity_with_object_from_assigns(assigns)","anchor":"activity_with_object_from_assigns/1"},{"id":"all_verb_names/0","deprecated":false,"title":"all_verb_names()","anchor":"all_verb_names/0"},{"id":"all_verb_names_extra/0","deprecated":false,"title":"all_verb_names_extra()","anchor":"all_verb_names_extra/0"},{"id":"as_permitted_for/3","deprecated":false,"title":"as_permitted_for(q, opts \\\\ [], verbs \\\\ [:see, :read])","anchor":"as_permitted_for/3"},{"id":"build_assoc/3","deprecated":false,"title":"build_assoc(thing, verb, subject)","anchor":"build_assoc/3"},{"id":"build_assoc/4","deprecated":false,"title":"build_assoc(thing, verb, subject, object)","anchor":"build_assoc/4"},{"id":"by_subject_verb_object_q/3","deprecated":false,"title":"by_subject_verb_object_q(subject, verb, object)","anchor":"by_subject_verb_object_q/3"},{"id":"cast/4","deprecated":false,"title":"cast(changeset, verb, creator, opts)","anchor":"cast/4"},{"id":"count_total/0","deprecated":false,"title":"count_total()","anchor":"count_total/0"},{"id":"create/4","deprecated":false,"title":"create(subject, verb, object, activity_id \\\\ nil)","anchor":"create/4"},{"id":"delete/1","deprecated":false,"title":"delete(id)","anchor":"delete/1"},{"id":"delete_by_subject_verb_object/3","deprecated":false,"title":"delete_by_subject_verb_object(subject, verb, object)","anchor":"delete_by_subject_verb_object/3"},{"id":"delete_object/1","deprecated":false,"title":"delete_object(id)","anchor":"delete_object/1"},{"id":"fetch_cursor_value_fun/2","deprecated":false,"title":"fetch_cursor_value_fun(replied, list)","anchor":"fetch_cursor_value_fun/2"},{"id":"get/2","deprecated":false,"title":"get(id, opts)","anchor":"get/2"},{"id":"load_object/2","deprecated":false,"title":"load_object(id_or_pointer, opts \\\\ [])","anchor":"load_object/2"},{"id":"maybe_join_creator/2","deprecated":false,"title":"maybe_join_creator(query, exclude_user_ids)","anchor":"maybe_join_creator/2"},{"id":"maybe_join_subject/2","deprecated":false,"title":"maybe_join_subject(query, exclude_user_ids)","anchor":"maybe_join_subject/2"},{"id":"maybe_remove_for_deleters_feeds/1","deprecated":false,"title":"maybe_remove_for_deleters_feeds(id)","anchor":"maybe_remove_for_deleters_feeds/1"},{"id":"object_from_activity/1","deprecated":false,"title":"object_from_activity(activity)","anchor":"object_from_activity/1"},{"id":"object_preload_activity/2","deprecated":false,"title":"object_preload_activity(object, verb \\\\ :create)","anchor":"object_preload_activity/2"},{"id":"object_preload_create_activity/1","deprecated":false,"title":"object_preload_create_activity(object)","anchor":"object_preload_create_activity/1"},{"id":"object_under_activity/2","deprecated":false,"title":"object_under_activity(activity, object)","anchor":"object_under_activity/2"},{"id":"order_cursor_fields/2","deprecated":false,"title":"order_cursor_fields(arg1, sort_order)","anchor":"order_cursor_fields/2"},{"id":"order_pagination_opts/2","deprecated":false,"title":"order_pagination_opts(sort_by, sort_order)","anchor":"order_pagination_opts/2"},{"id":"put_assoc/3","deprecated":false,"title":"put_assoc(changeset, verb, subject)","anchor":"put_assoc/3"},{"id":"put_assoc/4","deprecated":false,"title":"put_assoc(changeset, verb, subject, object)","anchor":"put_assoc/4"},{"id":"query/2","deprecated":false,"title":"query(filters \\\\ [], opts_or_current_user \\\\ [])","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"query_object_preload_activity/4","deprecated":false,"title":"query_object_preload_activity(q, verb \\\\ :create, object_id_field \\\\ :id, opts \\\\ [])","anchor":"query_object_preload_activity/4"},{"id":"query_object_preload_create_activity/2","deprecated":false,"title":"query_object_preload_create_activity(q, opts \\\\ [])","anchor":"query_object_preload_create_activity/2"},{"id":"query_order/3","deprecated":false,"title":"query_order(query, arg2, sort_order)","anchor":"query_order/3"},{"id":"read/2","deprecated":false,"title":"read(query, opts \\\\ [])","anchor":"read/2"},{"id":"read_query/2","deprecated":false,"title":"read_query(query, opts \\\\ [])","anchor":"read_query/2"},{"id":"reply_to_as_permitted_for/3","deprecated":false,"title":"reply_to_as_permitted_for(q, opts \\\\ [], verbs \\\\ [:see, :read])","anchor":"reply_to_as_permitted_for/3"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"verb_congugate/1","deprecated":false,"title":"verb_congugate(verb)","anchor":"verb_congugate/1"},{"id":"verb_display/1","deprecated":false,"title":"verb_display(verb)","anchor":"verb_display/1"},{"id":"verb_id/1","deprecated":false,"title":"verb_id(verb)","anchor":"verb_id/1"},{"id":"verb_maybe_modify/2","deprecated":false,"title":"verb_maybe_modify(verb, activity)","anchor":"verb_maybe_modify/2"},{"id":"verb_name/1","deprecated":false,"title":"verb_name(slug)","anchor":"verb_name/1"}],"key":"functions"}],"nested_title":".Social.Activities","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Activity","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Activity","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Activity","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Activity.UnderObject","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Activity.UnderObject","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Activity.UnderObject","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Federate","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Federate","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Federate","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Feeds","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Feeds","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"},{"id":"thread_id/1","deprecated":false,"title":"thread_id(epic)","anchor":"thread_id/1"}],"key":"functions"}],"nested_title":".Social.Acts.Feeds","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.LivePush","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.LivePush","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.LivePush","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Objects.Delete","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Objects.Delete","sections":[],"nested_title":".Social.Acts.Objects.Delete","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.PostContents","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.PostContents","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.PostContents","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Sensitivity","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Sensitivity","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Sensitivity","nested_context":"Bonfire"},{"id":"Bonfire.Social.Acts.Threaded","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Acts.Threaded","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Social.Acts.Threaded","nested_context":"Bonfire"},{"id":"Bonfire.Social.Bookmarks","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Bookmarks","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bookmark/3","deprecated":false,"title":"bookmark(bookmarker, bookmarked, opts \\\\ [])","anchor":"bookmark/3"},{"id":"bookmarked?/2","deprecated":false,"title":"bookmarked?(user, object)","anchor":"bookmarked?/2"},{"id":"by_bookmarked/2","deprecated":false,"title":"by_bookmarked(object, opts \\\\ [])","anchor":"by_bookmarked/2"},{"id":"by_bookmarker/2","deprecated":false,"title":"by_bookmarker(subject, opts \\\\ [])","anchor":"by_bookmarker/2"},{"id":"count/2","deprecated":false,"title":"count(filters \\\\ [], opts \\\\ [])","anchor":"count/2"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"insert/3","deprecated":false,"title":"insert(subject, object, options)","anchor":"insert/3"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(object, opts \\\\ [])","anchor":"list_of/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unbookmark/3","deprecated":false,"title":"unbookmark(bookmarker, object, opts \\\\ [])","anchor":"unbookmark/3"}],"key":"functions"}],"nested_title":".Social.Bookmarks","nested_context":"Bonfire"},{"id":"Bonfire.Social.Bookmarks.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Bookmarks.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bookmarker_count/1","deprecated":false,"title":"bookmarker_count(arg1)","anchor":"bookmarker_count/1"},{"id":"do_bookmark/3","deprecated":false,"title":"do_bookmark(object, params, socket)","anchor":"do_bookmark/3"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"update_many/2","deprecated":false,"title":"update_many(assigns_sockets, opts \\\\ [])","anchor":"update_many/2"},{"id":"update_many_opts/1","deprecated":false,"title":"update_many_opts(opts \\\\ [])","anchor":"update_many_opts/1"}],"key":"functions"}],"nested_title":".Social.Bookmarks.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.Boosts","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Boosts","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, arg2, boost)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"boost/3","deprecated":false,"title":"boost(booster, boosted, opts \\\\ [])","anchor":"boost/3"},{"id":"boosted?/2","deprecated":false,"title":"boosted?(user, object)","anchor":"boosted?/2"},{"id":"count/2","deprecated":false,"title":"count(filters \\\\ [], opts \\\\ [])","anchor":"count/2"},{"id":"date_last_boosted/2","deprecated":false,"title":"date_last_boosted(user, object)","anchor":"date_last_boosted/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(id, opts \\\\ [])","anchor":"list_of/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts \\\\ [])","anchor":"list_paginated/2"},{"id":"maybe_boost/3","deprecated":false,"title":"maybe_boost(booster, boosted, opts \\\\ [])","anchor":"maybe_boost/3"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unboost/3","deprecated":false,"title":"unboost(booster, boosted, opts \\\\ [])","anchor":"unboost/3"}],"key":"functions"}],"nested_title":".Social.Boosts","nested_context":"Bonfire"},{"id":"Bonfire.Social.Boosts.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Boosts.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_boost/3","deprecated":false,"title":"do_boost(object, params, socket)","anchor":"do_boost/3"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"update_many/2","deprecated":false,"title":"update_many(assigns_sockets, opts \\\\ [])","anchor":"update_many/2"},{"id":"update_many_opts/1","deprecated":false,"title":"update_many_opts(opts \\\\ [])","anchor":"update_many_opts/1"}],"key":"functions"}],"nested_title":".Social.Boosts.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.Edges","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Edges","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/5","deprecated":false,"title":"changeset(schema, subject, verb, object, options)","anchor":"changeset/5"},{"id":"changeset_base/4","deprecated":false,"title":"changeset_base(schema, subject, object, options)","anchor":"changeset_base/4"},{"id":"count/3","deprecated":false,"title":"count(type, filters_or_object, opts \\\\ [])","anchor":"count/3"},{"id":"count_for_subject/4","deprecated":false,"title":"count_for_subject(type, subject, object, opts)","anchor":"count_for_subject/4"},{"id":"delete_by_both/3","deprecated":false,"title":"delete_by_both(me, schema, object)","anchor":"delete_by_both/3"},{"id":"delete_by_object/1","deprecated":false,"title":"delete_by_object(user)","anchor":"delete_by_object/1"},{"id":"delete_by_subject/1","deprecated":false,"title":"delete_by_subject(user)","anchor":"delete_by_subject/1"},{"id":"edge_module_query/2","deprecated":false,"title":"edge_module_query(schema_or_context, args)","anchor":"edge_module_query/2"},{"id":"exists?/4","deprecated":false,"title":"exists?(schema_or_context, subject, object, opts)","anchor":"exists?/4"},{"id":"filters_from_opts/1","deprecated":false,"title":"filters_from_opts(assigns)","anchor":"filters_from_opts/1"},{"id":"get/4","deprecated":false,"title":"get(schema_or_context, subject, object, opts \\\\ [])","anchor":"get/4"},{"id":"get!/4","deprecated":false,"title":"get!(schema_or_context, subject, objects, opts \\\\ [])","anchor":"get!/4"},{"id":"insert/3","deprecated":false,"title":"insert(changeset, subject \\\\ nil, object \\\\ nil)","anchor":"insert/3"},{"id":"insert/5","deprecated":false,"title":"insert(schema, subject, verb, object, options)","anchor":"insert/5"},{"id":"last/4","deprecated":false,"title":"last(schema_or_context, subject, object, opts)","anchor":"last/4"},{"id":"last_date/4","deprecated":false,"title":"last_date(type, subject, object, opts)","anchor":"last_date/4"},{"id":"put_edge_assoc/3","deprecated":false,"title":"put_edge_assoc(changeset, subject, object)","anchor":"put_edge_assoc/3"},{"id":"put_edge_assoc/4","deprecated":false,"title":"put_edge_assoc(changeset, schema, subject, object)","anchor":"put_edge_assoc/4"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_parent/3","deprecated":false,"title":"query_parent(query_schema, filters, opts)","anchor":"query_parent/3"}],"key":"functions"}],"nested_title":".Social.Edges","nested_context":"Bonfire"},{"id":"Bonfire.Social.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_remote_user!/0","deprecated":false,"title":"fake_remote_user!()","anchor":"fake_remote_user!/0"}],"key":"functions"}],"nested_title":".Social.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Social.FeedActivities","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.FeedActivities","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cast/2","deprecated":false,"title":"cast(changeset, feed_ids)","anchor":"cast/2"},{"id":"cast/3","deprecated":false,"title":"cast(changeset, creator, opts)","anchor":"cast/3"},{"id":"count/2","deprecated":false,"title":"count(filters \\\\ [], opts \\\\ [])","anchor":"count/2"},{"id":"count_subjects/2","deprecated":false,"title":"count_subjects(filters \\\\ [], opts \\\\ [])","anchor":"count_subjects/2"},{"id":"count_total/0","deprecated":false,"title":"count_total()","anchor":"count_total/0"},{"id":"delete/1","deprecated":false,"title":"delete(filters)","anchor":"delete/1"},{"id":"delete/2","deprecated":false,"title":"delete(objects, by_field)","anchor":"delete/2"},{"id":"feed/2","deprecated":false,"title":"feed(feed, opts \\\\ [])","anchor":"feed/2"},{"id":"feed_contains?/3","deprecated":false,"title":"feed_contains?(feed_name, object, opts \\\\ [])","anchor":"feed_contains?/3"},{"id":"feed_ids_and_opts/2","deprecated":false,"title":"feed_ids_and_opts(feed_name, opts)","anchor":"feed_ids_and_opts/2"},{"id":"feed_many_paginated/2","deprecated":false,"title":"feed_many_paginated(query, opts)","anchor":"feed_many_paginated/2"},{"id":"feed_name/2","deprecated":false,"title":"feed_name(name, current_user_or_socket)","anchor":"feed_name/2"},{"id":"feed_paginated/2","deprecated":false,"title":"feed_paginated(filters \\\\ [], opts \\\\ [])","anchor":"feed_paginated/2"},{"id":"feed_paginated/3","deprecated":false,"title":"feed_paginated(filters, opts, query)","anchor":"feed_paginated/3"},{"id":"feed_with_object/3","deprecated":false,"title":"feed_with_object(feed_name, object, opts \\\\ [])","anchor":"feed_with_object/3"},{"id":"feeds_for_activity/1","deprecated":false,"title":"feeds_for_activity(id)","anchor":"feeds_for_activity/1"},{"id":"filters_from_opts/1","deprecated":false,"title":"filters_from_opts(opts)","anchor":"filters_from_opts/1"},{"id":"get_feed_ids/1","deprecated":false,"title":"get_feed_ids(options)","anchor":"get_feed_ids/1"},{"id":"get_feed_publishes/1","deprecated":false,"title":"get_feed_publishes(options)","anchor":"get_feed_publishes/1"},{"id":"mark_all_seen/2","deprecated":false,"title":"mark_all_seen(feed_id, opts)","anchor":"mark_all_seen/2"},{"id":"maybe_feed_publish/5","deprecated":false,"title":"maybe_feed_publish(subject, verb_or_activity, object, feeds, opts)","anchor":"maybe_feed_publish/5"},{"id":"my_feed/2","deprecated":false,"title":"my_feed(opts, home_feed_ids \\\\ nil)","anchor":"my_feed/2"},{"id":"publish/4","deprecated":false,"title":"publish(subject, verb_or_activity, object, opts \\\\ [])","anchor":"publish/4"},{"id":"put_feed_publishes/2","deprecated":false,"title":"put_feed_publishes(changeset, options)","anchor":"put_feed_publishes/2"},{"id":"query/3","deprecated":false,"title":"query(filters \\\\ [], opts \\\\ [], query \\\\ default_query())","anchor":"query/3"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"skip_verbs_default/0","deprecated":false,"title":"skip_verbs_default()","anchor":"skip_verbs_default/0"},{"id":"the_object/1","deprecated":false,"title":"the_object(object)","anchor":"the_object/1"},{"id":"to_feed_options/1","deprecated":false,"title":"to_feed_options(socket_or_opts)","anchor":"to_feed_options/1"},{"id":"unseen_count/2","deprecated":false,"title":"unseen_count(feed_id, opts)","anchor":"unseen_count/2"}],"key":"functions"}],"nested_title":".Social.FeedActivities","nested_context":"Bonfire"},{"id":"Bonfire.Social.Feeds","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Feeds","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"feed_name/0","deprecated":false,"title":"feed_name()","anchor":"t:feed_name/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"admin_notifications/1","deprecated":false,"title":"admin_notifications(admin)","anchor":"admin_notifications/1"},{"id":"admins_notifications/0","deprecated":false,"title":"admins_notifications()","anchor":"admins_notifications/0"},{"id":"admins_notifications/1","deprecated":false,"title":"admins_notifications(admins)","anchor":"admins_notifications/1"},{"id":"do_target_feeds/5","deprecated":false,"title":"do_target_feeds(creator, opts, mentions \\\\ [], reply_to_creator \\\\ nil, thread_id \\\\ nil)","anchor":"do_target_feeds/5"},{"id":"feed_id/2","deprecated":false,"title":"feed_id(type, object)","anchor":"feed_id/2"},{"id":"feed_id!/2","deprecated":false,"title":"feed_id!(feed_name, for_subject)","anchor":"feed_id!/2"},{"id":"feed_ids/2","deprecated":false,"title":"feed_ids(feed_name, for_subjects)","anchor":"feed_ids/2"},{"id":"feed_ids_to_publish/3","deprecated":false,"title":"feed_ids_to_publish(me, binary, _)","anchor":"feed_ids_to_publish/3"},{"id":"feed_ids_to_publish/4","deprecated":false,"title":"feed_ids_to_publish(me, boundary, assigns, reply_and_or_mentions_notifications_feeds \\\\ nil)","anchor":"feed_ids_to_publish/4"},{"id":"inbox_of_obj_creator/1","deprecated":false,"title":"inbox_of_obj_creator(object)","anchor":"inbox_of_obj_creator/1"},{"id":"maybe_create_feed/2","deprecated":false,"title":"maybe_create_feed(type, for_subject)","anchor":"maybe_create_feed/2"},{"id":"maybe_creator_notification/3","deprecated":false,"title":"maybe_creator_notification(subject, object_creator, opts \\\\ [])","anchor":"maybe_creator_notification/3"},{"id":"maybe_custom_feeds/1","deprecated":false,"title":"maybe_custom_feeds(preset_and_custom_boundary)","anchor":"maybe_custom_feeds/1"},{"id":"maybe_my_outbox_feed_id/2","deprecated":false,"title":"maybe_my_outbox_feed_id(me, boundary)","anchor":"maybe_my_outbox_feed_id/2"},{"id":"my_feed_id/2","deprecated":false,"title":"my_feed_id(type, other)","anchor":"my_feed_id/2"},{"id":"my_home_feed_ids/2","deprecated":false,"title":"my_home_feed_ids(socket_or_opts, extra_feeds \\\\ [])","anchor":"my_home_feed_ids/2"},{"id":"named_feed_id/2","deprecated":false,"title":"named_feed_id(name, opts \\\\ [])","anchor":"named_feed_id/2"},{"id":"reply_and_or_mentions_notifications_feeds/5","deprecated":false,"title":"reply_and_or_mentions_notifications_feeds(me, boundary, mentions, reply_to_creator, to_circles \\\\ [])","anchor":"reply_and_or_mentions_notifications_feeds/5"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"target_feeds/3","deprecated":false,"title":"target_feeds(changeset, creator, opts)","anchor":"target_feeds/3"}],"key":"functions"}],"nested_title":".Social.Feeds","nested_context":"Bonfire"},{"id":"Bonfire.Social.Feeds.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Feeds.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actions_update_many/2","deprecated":false,"title":"actions_update_many(assigns_sockets, opts)","anchor":"actions_update_many/2"},{"id":"activity_update_many/2","deprecated":false,"title":"activity_update_many(assigns_sockets, opts)","anchor":"activity_update_many/2"},{"id":"assign_feed/3","deprecated":false,"title":"assign_feed(socket, assigns, opts \\\\ [])","anchor":"assign_feed/3"},{"id":"feed_assigns_maybe_async/4","deprecated":false,"title":"feed_assigns_maybe_async(other, socket, show_loader \\\\ true, reset_stream \\\\ false)","anchor":"feed_assigns_maybe_async/4"},{"id":"feed_default_assigns/2","deprecated":false,"title":"feed_default_assigns(feed_name, socket)","anchor":"feed_default_assigns/2"},{"id":"feed_extra_preloads_list/2","deprecated":false,"title":"feed_extra_preloads_list(showing_within, thread_mode \\\\ nil)","anchor":"feed_extra_preloads_list/2"},{"id":"feed_live_update_many_preloads?/0","deprecated":false,"title":"feed_live_update_many_preloads?()","anchor":"feed_live_update_many_preloads?/0"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(arg, socket)","anchor":"handle_info/2"},{"id":"handle_params/3","deprecated":false,"title":"handle_params(attrs, _, socket)","anchor":"handle_params/3"},{"id":"insert_feed/3","deprecated":false,"title":"insert_feed(socket, feed_edges, opts \\\\ [])","anchor":"insert_feed/3"},{"id":"load_user_feed_assigns/3","deprecated":false,"title":"load_user_feed_assigns(selected_tab_and_user_id, params, socket)","anchor":"load_user_feed_assigns/3"},{"id":"load_user_feed_assigns/4","deprecated":false,"title":"load_user_feed_assigns(tab, feed_id, attrs, socket)","anchor":"load_user_feed_assigns/4"},{"id":"object_preloads/0","deprecated":false,"title":"object_preloads()","anchor":"object_preloads/0"},{"id":"paginate_feed/4","deprecated":false,"title":"paginate_feed(feed_id, attrs, socket, opts \\\\ [])","anchor":"paginate_feed/4"},{"id":"paginate_fetch_assign_default/2","deprecated":false,"title":"paginate_fetch_assign_default(opts, socket)","anchor":"paginate_fetch_assign_default/2"},{"id":"paginate_opts/3","deprecated":false,"title":"paginate_opts(attrs, socket, opts)","anchor":"paginate_opts/3"},{"id":"preload_activity_and_object_assocs/3","deprecated":false,"title":"preload_activity_and_object_assocs(feed, under, opts)","anchor":"preload_activity_and_object_assocs/3"},{"id":"remove_activity/1","deprecated":false,"title":"remove_activity(activity)","anchor":"remove_activity/1"},{"id":"reply_to_activity/2","deprecated":false,"title":"reply_to_activity(js \\\\ %JS{}, target)","anchor":"reply_to_activity/2"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"user_feed_assign_or_load_async/4","deprecated":false,"title":"user_feed_assign_or_load_async(tab, user_or_feed, params, socket)","anchor":"user_feed_assign_or_load_async/4"}],"key":"functions"}],"nested_title":".Social.Feeds.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.Flags","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Flags","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, flag)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, objects)","anchor":"ap_receive_activity/3"},{"id":"by_flagged/1","deprecated":false,"title":"by_flagged(object)","anchor":"by_flagged/1"},{"id":"by_flagger/1","deprecated":false,"title":"by_flagger(subject)","anchor":"by_flagger/1"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"flag/3","deprecated":false,"title":"flag(flagger, flagged, opts \\\\ [])","anchor":"flag/3"},{"id":"flagged?/2","deprecated":false,"title":"flagged?(user, object)","anchor":"flagged?/2"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"instance_moderators/0","deprecated":false,"title":"instance_moderators()","anchor":"instance_moderators/0"},{"id":"list/1","deprecated":false,"title":"list(opts)","anchor":"list/1"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(object, opts \\\\ [])","anchor":"list_of/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts)","anchor":"list_paginated/2"},{"id":"list_preloaded/1","deprecated":false,"title":"list_preloaded(opts)","anchor":"list_preloaded/1"},{"id":"moderators/1","deprecated":false,"title":"moderators(object)","anchor":"moderators/1"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unflag/2","deprecated":false,"title":"unflag(flagger, flagged)","anchor":"unflag/2"}],"key":"functions"}],"nested_title":".Social.Flags","nested_context":"Bonfire"},{"id":"Bonfire.Social.Flags.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Flags.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Social.Flags.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"graph_add/3","deprecated":false,"title":"graph_add(subject, object, type)","anchor":"graph_add/3"},{"id":"graph_clear/0","deprecated":false,"title":"graph_clear()","anchor":"graph_clear/0"},{"id":"graph_conn/0","deprecated":false,"title":"graph_conn()","anchor":"graph_conn/0"},{"id":"graph_distance/2","deprecated":false,"title":"graph_distance(subject, object)","anchor":"graph_distance/2"},{"id":"graph_distances/1","deprecated":false,"title":"graph_distances(subject)","anchor":"graph_distances/1"},{"id":"graph_meta/1","deprecated":false,"title":"graph_meta(subject \\\\ nil)","anchor":"graph_meta/1"},{"id":"graph_query/2","deprecated":false,"title":"graph_query(graph_conn \\\\ graph_conn(), query)","anchor":"graph_query/2"},{"id":"graph_remove/3","deprecated":false,"title":"graph_remove(subject, object, type)","anchor":"graph_remove/3"},{"id":"init/1","deprecated":false,"title":"init(_)","anchor":"init/1"},{"id":"init_and_load/0","deprecated":false,"title":"init_and_load()","anchor":"init_and_load/0"},{"id":"load_from_db/0","deprecated":false,"title":"load_from_db()","anchor":"load_from_db/0"},{"id":"maybe_applications/0","deprecated":false,"title":"maybe_applications()","anchor":"maybe_applications/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Social.Graph","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Aliases","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Aliases","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add/3","deprecated":false,"title":"add(user, target, opts \\\\ [])","anchor":"add/3"},{"id":"all_by_object/2","deprecated":false,"title":"all_by_object(user, opts \\\\ [])","anchor":"all_by_object/2"},{"id":"all_by_subject/2","deprecated":false,"title":"all_by_subject(user, opts \\\\ [])","anchor":"all_by_subject/2"},{"id":"all_objects_by_subject/2","deprecated":false,"title":"all_objects_by_subject(user, opts \\\\ [])","anchor":"all_objects_by_subject/2"},{"id":"all_subjects_by_object/2","deprecated":false,"title":"all_subjects_by_object(user, opts \\\\ [])","anchor":"all_subjects_by_object/2"},{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, arg2, target)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(subject, activity, origin_object)","anchor":"ap_receive_activity/3"},{"id":"exists?/2","deprecated":false,"title":"exists?(subject, target)","anchor":"exists?/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"insert/3","deprecated":false,"title":"insert(subject, object, options)","anchor":"insert/3"},{"id":"list_aliased/2","deprecated":false,"title":"list_aliased(user, opts \\\\ [])","anchor":"list_aliased/2"},{"id":"list_aliases/2","deprecated":false,"title":"list_aliases(user, opts \\\\ [])","anchor":"list_aliases/2"},{"id":"list_my_aliased/2","deprecated":false,"title":"list_my_aliased(current_user, opts \\\\ [])","anchor":"list_my_aliased/2"},{"id":"list_my_aliases/2","deprecated":false,"title":"list_my_aliases(current_user, opts \\\\ [])","anchor":"list_my_aliases/2"},{"id":"move/2","deprecated":false,"title":"move(subject, target)","anchor":"move/2"},{"id":"move_following/2","deprecated":false,"title":"move_following(origin, target)","anchor":"move_following/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"remove/2","deprecated":false,"title":"remove(user, target)","anchor":"remove/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"}],"key":"functions"}],"nested_title":".Social.Graph.Aliases","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Aliases.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Aliases.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Social.Graph.Aliases.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Fake","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Fake","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fake_follow!/0","deprecated":false,"title":"fake_follow!()","anchor":"fake_follow!/0"},{"id":"fake_incoming_follow!/0","deprecated":false,"title":"fake_incoming_follow!()","anchor":"fake_incoming_follow!/0"},{"id":"fake_outgoing_follow!/0","deprecated":false,"title":"fake_outgoing_follow!()","anchor":"fake_outgoing_follow!/0"},{"id":"fake_remote_user!/0","deprecated":false,"title":"fake_remote_user!()","anchor":"fake_remote_user!/0"}],"key":"functions"}],"nested_title":".Social.Graph.Fake","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Follows","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Follows","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"accept/2","deprecated":false,"title":"accept(request, opts)","anchor":"accept/2"},{"id":"accept_from/2","deprecated":false,"title":"accept_from(subject, opts)","anchor":"accept_from/2"},{"id":"all_by_object/2","deprecated":false,"title":"all_by_object(user, opts \\\\ [])","anchor":"all_by_object/2"},{"id":"all_by_subject/2","deprecated":false,"title":"all_by_subject(user, opts \\\\ [])","anchor":"all_by_subject/2"},{"id":"all_followed_outboxes/2","deprecated":false,"title":"all_followed_outboxes(user, opts \\\\ [])","anchor":"all_followed_outboxes/2"},{"id":"all_objects_by_subject/2","deprecated":false,"title":"all_objects_by_subject(user, opts \\\\ [])","anchor":"all_objects_by_subject/2"},{"id":"all_subjects_by_object/2","deprecated":false,"title":"all_subjects_by_object(user, opts \\\\ [])","anchor":"all_subjects_by_object/2"},{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, object)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(follower, activity, object)","anchor":"ap_receive_activity/3"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"follow/3","deprecated":false,"title":"follow(user, object, opts \\\\ [])","anchor":"follow/3"},{"id":"following?/2","deprecated":false,"title":"following?(subject, object)","anchor":"following?/2"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"ignore/2","deprecated":false,"title":"ignore(request, opts)","anchor":"ignore/2"},{"id":"invalidate_followed_outboxes_cache/1","deprecated":false,"title":"invalidate_followed_outboxes_cache(user)","anchor":"invalidate_followed_outboxes_cache/1"},{"id":"list_followed/2","deprecated":false,"title":"list_followed(user, opts \\\\ [])","anchor":"list_followed/2"},{"id":"list_followers/2","deprecated":false,"title":"list_followers(user, opts \\\\ [])","anchor":"list_followers/2"},{"id":"list_my_followed/2","deprecated":false,"title":"list_my_followed(current_user, opts \\\\ [])","anchor":"list_my_followed/2"},{"id":"list_my_followers/2","deprecated":false,"title":"list_my_followers(current_user, opts \\\\ [])","anchor":"list_my_followers/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"requested?/2","deprecated":false,"title":"requested?(subject, object)","anchor":"requested?/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unfollow/3","deprecated":false,"title":"unfollow(user, object, opts \\\\ [])","anchor":"unfollow/3"}],"key":"functions"}],"nested_title":".Social.Graph.Follows","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Follows.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Follows.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"update_many/2","deprecated":false,"title":"update_many(assigns_sockets, opts \\\\ [])","anchor":"update_many/2"},{"id":"update_many_opts/1","deprecated":false,"title":"update_many_opts(opts \\\\ [])","anchor":"update_many_opts/1"}],"key":"functions"}],"nested_title":".Social.Graph.Follows.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Import","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Import","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"blocks_from_csv/2","deprecated":false,"title":"blocks_from_csv(user, csv)","anchor":"blocks_from_csv/2"},{"id":"blocks_from_csv_file/2","deprecated":false,"title":"blocks_from_csv_file(user, path)","anchor":"blocks_from_csv_file/2"},{"id":"follows_from_csv/2","deprecated":false,"title":"follows_from_csv(user, csv)","anchor":"follows_from_csv/2"},{"id":"follows_from_csv_file/2","deprecated":false,"title":"follows_from_csv_file(user, path)","anchor":"follows_from_csv_file/2"},{"id":"ghosts_from_csv/2","deprecated":false,"title":"ghosts_from_csv(user, csv)","anchor":"ghosts_from_csv/2"},{"id":"ghosts_from_csv_file/2","deprecated":false,"title":"ghosts_from_csv_file(user, path)","anchor":"ghosts_from_csv_file/2"},{"id":"import_from_csv_file/3","deprecated":false,"title":"import_from_csv_file(other, user, path)","anchor":"import_from_csv_file/3"},{"id":"perform/1","deprecated":false,"title":"perform(map)","anchor":"perform/1"},{"id":"perform/3","deprecated":false,"title":"perform(op, user, identifier)","anchor":"perform/3"},{"id":"silences_from_csv/2","deprecated":false,"title":"silences_from_csv(user, csv)","anchor":"silences_from_csv/2"},{"id":"silences_from_csv_file/2","deprecated":false,"title":"silences_from_csv_file(user, path)","anchor":"silences_from_csv_file/2"}],"key":"functions"}],"nested_title":".Social.Graph.Import","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Social.Graph.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Social.Graph.Requests","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Graph.Requests","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"accept/2","deprecated":false,"title":"accept(request, opts)","anchor":"accept/2"},{"id":"all_by_object/3","deprecated":false,"title":"all_by_object(user, type, opts \\\\ [])","anchor":"all_by_object/3"},{"id":"all_by_subject/3","deprecated":false,"title":"all_by_subject(user, type, opts \\\\ [])","anchor":"all_by_subject/3"},{"id":"all_objects_by_subject/3","deprecated":false,"title":"all_objects_by_subject(user, type, opts \\\\ [])","anchor":"all_objects_by_subject/3"},{"id":"all_requested_outboxes/3","deprecated":false,"title":"all_requested_outboxes(user, type, opts \\\\ [])","anchor":"all_requested_outboxes/3"},{"id":"all_subjects_by_object/3","deprecated":false,"title":"all_subjects_by_object(user, type, opts \\\\ [])","anchor":"all_subjects_by_object/3"},{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, follow)","anchor":"ap_publish_activity/3"},{"id":"exists?/4","deprecated":false,"title":"exists?(subject, type, object, opts \\\\ [])","anchor":"exists?/4"},{"id":"get/2","deprecated":false,"title":"get(filters, opts \\\\ [])","anchor":"get/2"},{"id":"get/4","deprecated":false,"title":"get(subject, type, object, opts \\\\ [])","anchor":"get/4"},{"id":"get!/4","deprecated":false,"title":"get!(subject, type, object, opts \\\\ [])","anchor":"get!/4"},{"id":"ignore/2","deprecated":false,"title":"ignore(request, opts)","anchor":"ignore/2"},{"id":"list_my_requested/1","deprecated":false,"title":"list_my_requested(opts)","anchor":"list_my_requested/1"},{"id":"list_my_requesters/1","deprecated":false,"title":"list_my_requesters(opts)","anchor":"list_my_requesters/1"},{"id":"list_requested/2","deprecated":false,"title":"list_requested(user, opts \\\\ [])","anchor":"list_requested/2"},{"id":"list_requesters/2","deprecated":false,"title":"list_requesters(user, opts \\\\ [])","anchor":"list_requesters/2"},{"id":"many/2","deprecated":false,"title":"many(query, opts)","anchor":"many/2"},{"id":"query/3","deprecated":false,"title":"query(filters, type \\\\ nil, opts)","anchor":"query/3"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"request/4","deprecated":false,"title":"request(user, type, object, opts \\\\ [])","anchor":"request/4"},{"id":"requested/2","deprecated":false,"title":"requested(request, opts \\\\ [])","anchor":"requested/2"},{"id":"requested?/3","deprecated":false,"title":"requested?(subject, type, object)","anchor":"requested?/3"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unrequest/3","deprecated":false,"title":"unrequest(requester, type, object)","anchor":"unrequest/3"}],"key":"functions"}],"nested_title":".Social.Graph.Requests","nested_context":"Bonfire"},{"id":"Bonfire.Social.Integration","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Integration","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"federate_outgoing?/1","deprecated":false,"title":"federate_outgoing?(subject \\\\ nil)","anchor":"federate_outgoing?/1"},{"id":"federating?/1","deprecated":false,"title":"federating?(subject \\\\ nil)","anchor":"federating?/1"},{"id":"is_local?/1","deprecated":false,"title":"is_local?(thing)","anchor":"is_local?/1"},{"id":"mailer/0","deprecated":false,"title":"mailer()","anchor":"mailer/0"},{"id":"many/3","deprecated":false,"title":"many(query, paginate?, opts \\\\ [])","anchor":"many/3"},{"id":"maybe_federate/5","deprecated":false,"title":"maybe_federate(subject, verb, object, activity \\\\ nil, opts \\\\ [])","anchor":"maybe_federate/5"},{"id":"maybe_federate_and_gift_wrap_activity/4","deprecated":false,"title":"maybe_federate_and_gift_wrap_activity(subject, object, verb_override \\\\ nil, object_override \\\\ nil)","anchor":"maybe_federate_and_gift_wrap_activity/4"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"}],"key":"functions"}],"nested_title":".Social.Integration","nested_context":"Bonfire"},{"id":"Bonfire.Social.Likes","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Likes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, arg2, like)","anchor":"ap_publish_activity/3"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(liker, activity, object)","anchor":"ap_receive_activity/3"},{"id":"by_liked/2","deprecated":false,"title":"by_liked(object, opts \\\\ [])","anchor":"by_liked/2"},{"id":"by_liker/2","deprecated":false,"title":"by_liker(subject, opts \\\\ [])","anchor":"by_liker/2"},{"id":"count/2","deprecated":false,"title":"count(filters \\\\ [], opts \\\\ [])","anchor":"count/2"},{"id":"do_like/3","deprecated":false,"title":"do_like(liker, liked, opts \\\\ [])","anchor":"do_like/3"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"like/3","deprecated":false,"title":"like(liker, object, opts \\\\ [])","anchor":"like/3"},{"id":"liked?/2","deprecated":false,"title":"liked?(user, object)","anchor":"liked?/2"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(object, opts \\\\ [])","anchor":"list_of/2"},{"id":"list_paginated/2","deprecated":false,"title":"list_paginated(filters, opts)","anchor":"list_paginated/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unlike/3","deprecated":false,"title":"unlike(liker, object, opts \\\\ [])","anchor":"unlike/3"}],"key":"functions"}],"nested_title":".Social.Likes","nested_context":"Bonfire"},{"id":"Bonfire.Social.Likes.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Likes.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_like/3","deprecated":false,"title":"do_like(object, params, socket)","anchor":"do_like/3"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"liker_count/1","deprecated":false,"title":"liker_count(arg1)","anchor":"liker_count/1"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"update_many/2","deprecated":false,"title":"update_many(assigns_sockets, opts \\\\ [])","anchor":"update_many/2"},{"id":"update_many_opts/1","deprecated":false,"title":"update_many_opts(opts \\\\ [])","anchor":"update_many_opts/1"}],"key":"functions"}],"nested_title":".Social.Likes.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.LivePush","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.LivePush","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"hide_activity/2","deprecated":false,"title":"hide_activity(feed_id, activity_id)","anchor":"hide_activity/2"},{"id":"notify/2","deprecated":false,"title":"notify(activity, feed_ids)","anchor":"notify/2"},{"id":"notify/4","deprecated":false,"title":"notify(subject, verb, object, feed_ids)","anchor":"notify/4"},{"id":"notify_of_message/4","deprecated":false,"title":"notify_of_message(subject, verb, object, users)","anchor":"notify_of_message/4"},{"id":"notify_users/4","deprecated":false,"title":"notify_users(subject, verb, object, users)","anchor":"notify_users/4"},{"id":"prepare_activity/2","deprecated":false,"title":"prepare_activity(activity, opts \\\\ [])","anchor":"prepare_activity/2"},{"id":"push_activity/3","deprecated":false,"title":"push_activity(feed_ids, activity, opts \\\\ [])","anchor":"push_activity/3"},{"id":"push_activity_object/4","deprecated":false,"title":"push_activity_object(feed_ids, parent_object, object, opts)","anchor":"push_activity_object/4"}],"key":"functions"}],"nested_title":".Social.LivePush","nested_context":"Bonfire"},{"id":"Bonfire.Social.Objects","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Objects","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_maybe_delete/2","deprecated":false,"title":"ap_maybe_delete(creator, object)","anchor":"ap_maybe_delete/2"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity, object)","anchor":"ap_receive_activity/3"},{"id":"as_permitted_for/3","deprecated":false,"title":"as_permitted_for(q, opts \\\\ [], verbs \\\\ [:see, :read])","anchor":"as_permitted_for/3"},{"id":"cast/4","deprecated":false,"title":"cast(changeset, attrs, creator, opts)","anchor":"cast/4"},{"id":"cast_acl/3","deprecated":false,"title":"cast_acl(changeset, creator, opts)","anchor":"cast_acl/3"},{"id":"cast_basic/4","deprecated":false,"title":"cast_basic(changeset, attrs, creator, opts)","anchor":"cast_basic/4"},{"id":"cast_caretaker/2","deprecated":false,"title":"cast_caretaker(changeset, caretaker)","anchor":"cast_caretaker/2"},{"id":"cast_creator/2","deprecated":false,"title":"cast_creator(changeset, creator)","anchor":"cast_creator/2"},{"id":"cast_creator_caretaker/2","deprecated":false,"title":"cast_creator_caretaker(changeset, user)","anchor":"cast_creator_caretaker/2"},{"id":"cast_mini/4","deprecated":false,"title":"cast_mini(changeset, attrs, creator, opts)","anchor":"cast_mini/4"},{"id":"cast_publish/4","deprecated":false,"title":"cast_publish(changeset, attrs, creator, opts)","anchor":"cast_publish/4"},{"id":"cast_sensitivity/2","deprecated":false,"title":"cast_sensitivity(changeset, sensitive?)","anchor":"cast_sensitivity/2"},{"id":"changeset_named/2","deprecated":false,"title":"changeset_named(object \\\\ %{}, attrs)","anchor":"changeset_named/2"},{"id":"delete/2","deprecated":false,"title":"delete(object, opts)","anchor":"delete/2"},{"id":"delete_apply_error/2","deprecated":false,"title":"delete_apply_error(error, args)","anchor":"delete_apply_error/2"},{"id":"do_delete/2","deprecated":false,"title":"do_delete(objects, opts)","anchor":"do_delete/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"list_query/2","deprecated":false,"title":"list_query(type_or_query \\\\ nil, opts)","anchor":"list_query/2"},{"id":"maybe_generic_delete/3","deprecated":false,"title":"maybe_generic_delete(type, object, options \\\\ [])","anchor":"maybe_generic_delete/3"},{"id":"maybe_preload_activity_object/2","deprecated":false,"title":"maybe_preload_activity_object(pointer, current_user)","anchor":"maybe_preload_activity_object/2"},{"id":"object_creator/1","deprecated":false,"title":"object_creator(object)","anchor":"object_creator/1"},{"id":"preload_creator/1","deprecated":false,"title":"preload_creator(object)","anchor":"preload_creator/1"},{"id":"preload_reply_creator/1","deprecated":false,"title":"preload_reply_creator(object)","anchor":"preload_reply_creator/1"},{"id":"publish/5","deprecated":false,"title":"publish(creator, verb, thing, opts_or_attrs \\\\ nil, for_module \\\\ __MODULE__)","anchor":"publish/5"},{"id":"query_base/1","deprecated":false,"title":"query_base(type \\\\ nil)","anchor":"query_base/1"},{"id":"read/2","deprecated":false,"title":"read(object_id, socket_or_current_user)","anchor":"read/2"},{"id":"reset_preset_boundary/5","deprecated":false,"title":"reset_preset_boundary(creator, thing, previous_preset, opts_or_attrs \\\\ [], for_module \\\\ nil)","anchor":"reset_preset_boundary/5"},{"id":"run_epic/3","deprecated":false,"title":"run_epic(type, options \\\\ [], on \\\\ :object)","anchor":"run_epic/3"},{"id":"set_boundaries/4","deprecated":false,"title":"set_boundaries(creator, thing, opts_or_attrs \\\\ [], for_module \\\\ __MODULE__)","anchor":"set_boundaries/4"},{"id":"set_name/3","deprecated":false,"title":"set_name(id, name, opts)","anchor":"set_name/3"},{"id":"set_sensitivity/2","deprecated":false,"title":"set_sensitivity(pointer, arg2)","anchor":"set_sensitivity/2"}],"key":"functions"}],"nested_title":".Social.Objects","nested_context":"Bonfire"},{"id":"Bonfire.Social.Objects.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Objects.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"load_object_assigns/1","deprecated":false,"title":"load_object_assigns(socket)","anchor":"load_object_assigns/1"},{"id":"load_object_assigns/2","deprecated":false,"title":"load_object_assigns(assigns, socket)","anchor":"load_object_assigns/2"},{"id":"not_found_fallback/3","deprecated":false,"title":"not_found_fallback(id, params, socket)","anchor":"not_found_fallback/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Social.Objects.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.Pins","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Pins","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_publish_activity/3","deprecated":false,"title":"ap_publish_activity(subject, verb, pin)","anchor":"ap_publish_activity/3"},{"id":"by_pinned/2","deprecated":false,"title":"by_pinned(object, opts \\\\ [])","anchor":"by_pinned/2"},{"id":"by_pinner/2","deprecated":false,"title":"by_pinner(subject, opts \\\\ [])","anchor":"by_pinner/2"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"list_by/2","deprecated":false,"title":"list_by(by_user, opts \\\\ [])","anchor":"list_by/2"},{"id":"list_instance_pins/1","deprecated":false,"title":"list_instance_pins(opts)","anchor":"list_instance_pins/1"},{"id":"list_my/1","deprecated":false,"title":"list_my(opts)","anchor":"list_my/1"},{"id":"list_of/2","deprecated":false,"title":"list_of(object, opts \\\\ [])","anchor":"list_of/2"},{"id":"pin/4","deprecated":false,"title":"pin(pinner, object, scope \\\\ nil, opts \\\\ [])","anchor":"pin/4"},{"id":"pinned?/2","deprecated":false,"title":"pinned?(scope, object)","anchor":"pinned?/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"rank_pin/3","deprecated":false,"title":"rank_pin(pin, scope, position)","anchor":"rank_pin/3"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unpin/3","deprecated":false,"title":"unpin(user, object, scope \\\\ nil)","anchor":"unpin/3"}],"key":"functions"}],"nested_title":".Social.Pins","nested_context":"Bonfire"},{"id":"Bonfire.Social.Pins.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Pins.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"do_pin/3","deprecated":false,"title":"do_pin(object, params, socket)","anchor":"do_pin/3"},{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, params, socket)","anchor":"handle_event/3"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"}],"key":"functions"}],"nested_title":".Social.Pins.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.Social.PostContents","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.PostContents","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all_text_content/1","deprecated":false,"title":"all_text_content(attrs)","anchor":"all_text_content/1"},{"id":"ap_receive_activity/3","deprecated":false,"title":"ap_receive_activity(creator, activity_data, object)","anchor":"ap_receive_activity/3"},{"id":"ap_receive_attrs_prepare/4","deprecated":false,"title":"ap_receive_attrs_prepare(creator, activity_data, post_data, direct_recipients \\\\ [])","anchor":"ap_receive_attrs_prepare/4"},{"id":"cast/5","deprecated":false,"title":"cast(changeset, attrs, creator, boundary, opts)","anchor":"cast/5"},{"id":"changeset/2","deprecated":false,"title":"changeset(cs \\\\ %PostContent{}, attrs)","anchor":"changeset/2"},{"id":"diff/2","deprecated":false,"title":"diff(previous_version, current_version)","anchor":"diff/2"},{"id":"edit/3","deprecated":false,"title":"edit(current_user, id, attrs)","anchor":"edit/3"},{"id":"editor_output_content_type/1","deprecated":false,"title":"editor_output_content_type(user)","anchor":"editor_output_content_type/1"},{"id":"federation_module/0","deprecated":false,"title":"federation_module()","anchor":"federation_module/0"},{"id":"get/2","deprecated":false,"title":"get(id, opts \\\\ [])","anchor":"get/2"},{"id":"get_versions/1","deprecated":false,"title":"get_versions(post_content)","anchor":"get_versions/1"},{"id":"get_versions_diffed/1","deprecated":false,"title":"get_versions_diffed(post_content)","anchor":"get_versions_diffed/1"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(obj)","anchor":"indexing_object_format/1"},{"id":"maybe_detect_languages/2","deprecated":false,"title":"maybe_detect_languages(attrs, fields \\\\ [:name, :summary, :html_body])","anchor":"maybe_detect_languages/2"},{"id":"maybe_prepare_contents/4","deprecated":false,"title":"maybe_prepare_contents(attrs, creator, boundary, opts)","anchor":"maybe_prepare_contents/4"},{"id":"merge_with_body_or_nil/2","deprecated":false,"title":"merge_with_body_or_nil(attrs, map)","anchor":"merge_with_body_or_nil/2"},{"id":"no_known_output/2","deprecated":false,"title":"no_known_output(error, args)","anchor":"no_known_output/2"},{"id":"one/2","deprecated":false,"title":"one(filters, opts \\\\ [])","anchor":"one/2"},{"id":"prepare_text/3","deprecated":false,"title":"prepare_text(text, arg2, opts)","anchor":"prepare_text/3"},{"id":"query/2","deprecated":false,"title":"query(filters, opts \\\\ [])","anchor":"query/2"},{"id":"query_base/0","deprecated":false,"title":"query_base()","anchor":"query_base/0"}],"key":"functions"}],"nested_title":".Social.PostContents","nested_context":"Bonfire"},{"id":"Bonfire.Social.Seen","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Seen","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"get/3","deprecated":false,"title":"get(subject, object, opts \\\\ [])","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(subject, object, opts \\\\ [])","anchor":"get!/3"},{"id":"mark_seen/2","deprecated":false,"title":"mark_seen(subject, object)","anchor":"mark_seen/2"},{"id":"mark_unseen/2","deprecated":false,"title":"mark_unseen(subject, object)","anchor":"mark_unseen/2"},{"id":"query/2","deprecated":false,"title":"query(filters, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"seen?/2","deprecated":false,"title":"seen?(user, object)","anchor":"seen?/2"}],"key":"functions"}],"nested_title":".Social.Seen","nested_context":"Bonfire"},{"id":"Bonfire.Social.Tags","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Tags","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"auto_boost/2","deprecated":false,"title":"auto_boost(categories_auto_boost, object)","anchor":"auto_boost/2"},{"id":"cast/4","deprecated":false,"title":"cast(changeset, attrs, creator, opts)","anchor":"cast/4"},{"id":"indexing_format_tags/1","deprecated":false,"title":"indexing_format_tags(tags)","anchor":"indexing_format_tags/1"},{"id":"maybe_auto_boost/3","deprecated":false,"title":"maybe_auto_boost(creator, category_or_categories, object)","anchor":"maybe_auto_boost/3"},{"id":"maybe_boostable_categories/2","deprecated":false,"title":"maybe_boostable_categories(creator, categories)","anchor":"maybe_boostable_categories/2"},{"id":"maybe_process/3","deprecated":false,"title":"maybe_process(creator, text, opts)","anchor":"maybe_process/3"},{"id":"maybe_tag/4","deprecated":false,"title":"maybe_tag(creator, object, tags, mentions_are_private? \\\\ false)","anchor":"maybe_tag/4"}],"key":"functions"}],"nested_title":".Social.Tags","nested_context":"Bonfire"},{"id":"Bonfire.Social.Threads","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Threads","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"ap_prepare/2","deprecated":false,"title":"ap_prepare(object_or_thread_or_reply_to_id, key \\\\ :thread_id)","anchor":"ap_prepare/2"},{"id":"arrange_replies/2","deprecated":false,"title":"arrange_replies(replies, opts \\\\ [])","anchor":"arrange_replies/2"},{"id":"arrange_replies_tree/2","deprecated":false,"title":"arrange_replies_tree(replies, opts \\\\ [])","anchor":"arrange_replies_tree/2"},{"id":"base_query/0","deprecated":false,"title":"base_query()","anchor":"base_query/0"},{"id":"cast/4","deprecated":false,"title":"cast(changeset, attrs, user, preset_or_custom_boundary)","anchor":"cast/4"},{"id":"changeset/2","deprecated":false,"title":"changeset(replied \\\\ %Replied{}, attrs)","anchor":"changeset/2"},{"id":"count_participants/2","deprecated":false,"title":"count_participants(thread_id, opts \\\\ [])","anchor":"count_participants/2"},{"id":"fetch_participants/2","deprecated":false,"title":"fetch_participants(thread_id, opts \\\\ [])","anchor":"fetch_participants/2"},{"id":"filter/3","deprecated":false,"title":"filter(arg1, thread_id, query)","anchor":"filter/3"},{"id":"find_reply_to/2","deprecated":false,"title":"find_reply_to(attrs, user)","anchor":"find_reply_to/2"},{"id":"find_thread/2","deprecated":false,"title":"find_thread(attrs, user)","anchor":"find_thread/2"},{"id":"list_participants/3","deprecated":false,"title":"list_participants(activity_or_object, thread_or_object_id \\\\ nil, opts \\\\ [])","anchor":"list_participants/3"},{"id":"list_replies/2","deprecated":false,"title":"list_replies(thread, opts \\\\ [])","anchor":"list_replies/2"},{"id":"mark_all_seen/2","deprecated":false,"title":"mark_all_seen(filters, opts)","anchor":"mark_all_seen/2"},{"id":"maybe_re_order_result/2","deprecated":false,"title":"maybe_re_order_result(result, opts)","anchor":"maybe_re_order_result/2"},{"id":"query/2","deprecated":false,"title":"query(filter, opts)","anchor":"query/2"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"re_order_using_subquery/2","deprecated":false,"title":"re_order_using_subquery(query, opts)","anchor":"re_order_using_subquery/2"},{"id":"read/2","deprecated":false,"title":"read(object_id, socket_or_current_user)","anchor":"read/2"},{"id":"schema_module/0","deprecated":false,"title":"schema_module()","anchor":"schema_module/0"},{"id":"unseen_count/2","deprecated":false,"title":"unseen_count(filters, opts)","anchor":"unseen_count/2"},{"id":"unseen_query/2","deprecated":false,"title":"unseen_query(filters, opts)","anchor":"unseen_query/2"}],"key":"functions"}],"nested_title":".Social.Threads","nested_context":"Bonfire"},{"id":"Bonfire.Social.Threads.LiveHandler","deprecated":false,"group":"Feature extensions","title":"Bonfire.Social.Threads.LiveHandler","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"handle_event/3","deprecated":false,"title":"handle_event(binary, attrs, socket)","anchor":"handle_event/3"},{"id":"handle_info/2","deprecated":false,"title":"handle_info(arg1, socket)","anchor":"handle_info/2"},{"id":"handle_params/3","deprecated":false,"title":"handle_params(attrs, uri, socket)","anchor":"handle_params/3"},{"id":"insert_comments/3","deprecated":false,"title":"insert_comments(socket, replies, opts \\\\ [])","anchor":"insert_comments/3"},{"id":"live_more/3","deprecated":false,"title":"live_more(thread_id, paginate, socket)","anchor":"live_more/3"},{"id":"load_thread/1","deprecated":false,"title":"load_thread(socket)","anchor":"load_thread/1"},{"id":"load_thread_assigns/1","deprecated":false,"title":"load_thread_assigns(socket)","anchor":"load_thread_assigns/1"},{"id":"load_thread_maybe_async/3","deprecated":false,"title":"load_thread_maybe_async(socket_or_opts, show_loader \\\\ true, reset_stream \\\\ false)","anchor":"load_thread_maybe_async/3"},{"id":"max_depth/1","deprecated":false,"title":"max_depth(ui_compact \\\\ nil)","anchor":"max_depth/1"},{"id":"maybe_subscribe/2","deprecated":false,"title":"maybe_subscribe(socket, thread_id)","anchor":"maybe_subscribe/2"},{"id":"reply/3","deprecated":false,"title":"reply(reply_to, activity, socket)","anchor":"reply/3"},{"id":"send_thread_updates/4","deprecated":false,"title":"send_thread_updates(pid \\\\ self(), thread_id, assigns, component \\\\ Bonfire.UI.Social.ThreadLive)","anchor":"send_thread_updates/4"},{"id":"sigil_p/2","deprecated":false,"title":"sigil_p(route, extra)","anchor":"sigil_p/2"},{"id":"thread_init/1","deprecated":false,"title":"thread_init(socket)","anchor":"thread_init/1"}],"key":"functions"}],"nested_title":".Social.Threads.LiveHandler","nested_context":"Bonfire"},{"id":"Bonfire.System.OS.Monitor","deprecated":false,"group":"Feature extensions","title":"Bonfire.System.OS.Monitor","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"format_bytes/1","deprecated":false,"title":"format_bytes(bytes)","anchor":"format_bytes/1"},{"id":"format_percent/1","deprecated":false,"title":"format_percent(percent)","anchor":"format_percent/1"},{"id":"handle_alarm/2","deprecated":false,"title":"handle_alarm(alarm_name, alarm_description)","anchor":"handle_alarm/2"},{"id":"handle_event/2","deprecated":false,"title":"handle_event(arg, state)","anchor":"handle_event/2"},{"id":"init/1","deprecated":false,"title":"init(arg)","anchor":"init/1"}],"key":"functions"}],"nested_title":".System.OS.Monitor","nested_context":"Bonfire"},{"id":"Bonfire.Tag","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"context_module/0","deprecated":false,"title":"context_module()","anchor":"context_module/0"},{"id":"query_module/0","deprecated":false,"title":"query_module()","anchor":"query_module/0"},{"id":"tag_things_changeset/2","deprecated":false,"title":"tag_things_changeset(tag, things)","anchor":"tag_things_changeset/2"},{"id":"thing_tags_changeset/2","deprecated":false,"title":"thing_tags_changeset(thing, tags)","anchor":"thing_tags_changeset/2"},{"id":"thing_tags_insert/2","deprecated":false,"title":"thing_tags_insert(thing, tags)","anchor":"thing_tags_insert/2"}],"key":"functions"}],"nested_title":".Tag","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Autocomplete","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Autocomplete","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"api_tag_lookup/3","deprecated":false,"title":"api_tag_lookup(tag_search, prefix, consumer)","anchor":"api_tag_lookup/3"},{"id":"api_tag_lookup_public/4","deprecated":false,"title":"api_tag_lookup_public(tag_search, prefix, consumer, index_type)","anchor":"api_tag_lookup_public/4"},{"id":"filter_results/1","deprecated":false,"title":"filter_results(res)","anchor":"filter_results/1"},{"id":"find_all_tags/1","deprecated":false,"title":"find_all_tags(content)","anchor":"find_all_tags/1"},{"id":"maybe_find_tags/2","deprecated":false,"title":"maybe_find_tags(tag_search, index_type)","anchor":"maybe_find_tags/2"},{"id":"maybe_search/4","deprecated":false,"title":"maybe_search(tag_search, facets \\\\ nil, prefix \\\\ nil, consumer \\\\ nil)","anchor":"maybe_search/4"},{"id":"prefix_index/1","deprecated":false,"title":"prefix_index(prefix)","anchor":"prefix_index/1"},{"id":"search_or_lookup/3","deprecated":false,"title":"search_or_lookup(tag_search, index, facets \\\\ nil)","anchor":"search_or_lookup/3"},{"id":"search_prefix/2","deprecated":false,"title":"search_prefix(tag_search, prefix)","anchor":"search_prefix/2"},{"id":"search_type/2","deprecated":false,"title":"search_type(tag_search, type)","anchor":"search_type/2"},{"id":"tag_add_field/4","deprecated":false,"title":"tag_add_field(hit, consumer, prefix, username)","anchor":"tag_add_field/4"},{"id":"tag_hit_prepare/4","deprecated":false,"title":"tag_hit_prepare(hit, tag_search, prefix, consumer)","anchor":"tag_hit_prepare/4"},{"id":"tag_lookup_public/4","deprecated":false,"title":"tag_lookup_public(tag_search, index_type, prefix \\\\ nil, consumer \\\\ nil)","anchor":"tag_lookup_public/4"},{"id":"tag_search/2","deprecated":false,"title":"tag_search(tag_search, tag_prefix)","anchor":"tag_search/2"},{"id":"tag_search_from_tags/1","deprecated":false,"title":"tag_search_from_tags(text)","anchor":"tag_search_from_tags/1"},{"id":"tag_search_from_text/2","deprecated":false,"title":"tag_search_from_text(text, prefix)","anchor":"tag_search_from_text/2"},{"id":"tags_split/1","deprecated":false,"title":"tags_split(text)","anchor":"tags_split/1"},{"id":"try_all_prefixes/1","deprecated":false,"title":"try_all_prefixes(content)","anchor":"try_all_prefixes/1"},{"id":"try_prefixes/1","deprecated":false,"title":"try_prefixes(content)","anchor":"try_prefixes/1"},{"id":"try_tag_search/1","deprecated":false,"title":"try_tag_search(content)","anchor":"try_tag_search/1"},{"id":"try_tag_search/2","deprecated":false,"title":"try_tag_search(tag_prefix, words)","anchor":"try_tag_search/2"}],"key":"functions"}],"nested_title":".Tag.Autocomplete","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Hashtag","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Hashtag","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(hashtag \\\\ %Hashtag{}, params)","anchor":"changeset/2"},{"id":"get_or_create_by_name/1","deprecated":false,"title":"get_or_create_by_name(name)","anchor":"get_or_create_by_name/1"},{"id":"normalize_name/1","deprecated":false,"title":"normalize_name(name)","anchor":"normalize_name/1"}],"key":"functions"}],"nested_title":".Tag.Hashtag","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Queries","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Queries","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(q, filter_or_filters)","anchor":"filter/2"},{"id":"join_to/3","deprecated":false,"title":"join_to(q, table_or_tables, jq \\\\ :left)","anchor":"join_to/3"},{"id":"list_trending/3","deprecated":false,"title":"list_trending(since_date, exclude_table_ids \\\\ [], limit \\\\ 10)","anchor":"list_trending/3"},{"id":"queries/4","deprecated":false,"title":"queries(query, base_filters, data_filters, count_filters)","anchor":"queries/4"},{"id":"query/1","deprecated":false,"title":"query(pointable)","anchor":"query/1"},{"id":"query/2","deprecated":false,"title":"query(q, filters)","anchor":"query/2"}],"key":"functions"}],"nested_title":".Tag.Queries","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Simulate","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Simulate","sections":[],"nested_title":".Tag.Simulate","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Tagged","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Tagged","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"all/0","deprecated":false,"title":"all()","anchor":"all/0"},{"id":"changeset/2","deprecated":false,"title":"changeset(struct, params \\\\ %{})","anchor":"changeset/2"},{"id":"latest/1","deprecated":false,"title":"latest(thing_id)","anchor":"latest/1"},{"id":"q_with_tag/1","deprecated":false,"title":"q_with_tag(tag_id)","anchor":"q_with_tag/1"},{"id":"q_with_thing/1","deprecated":false,"title":"q_with_thing(thing_id)","anchor":"q_with_thing/1"},{"id":"q_with_type/1","deprecated":false,"title":"q_with_type(types)","anchor":"q_with_type/1"},{"id":"with_tag/1","deprecated":false,"title":"with_tag(tag_id)","anchor":"with_tag/1"},{"id":"with_thing/1","deprecated":false,"title":"with_thing(thing_id)","anchor":"with_thing/1"},{"id":"with_type/1","deprecated":false,"title":"with_type(types)","anchor":"with_type/1"}],"key":"functions"}],"nested_title":".Tag.Tagged","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Tags","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Tags","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"find/2","deprecated":false,"title":"find(id, types \\\\ nil)","anchor":"find/2"},{"id":"get/2","deprecated":false,"title":"get(id, opts \\\\ [])","anchor":"get/2"},{"id":"indexing_object_format/1","deprecated":false,"title":"indexing_object_format(object)","anchor":"indexing_object_format/1"},{"id":"indexing_object_format_name/1","deprecated":false,"title":"indexing_object_format_name(object)","anchor":"indexing_object_format_name/1"},{"id":"list_trending/2","deprecated":false,"title":"list_trending(in_last_x_days \\\\ 30, limit \\\\ 10)","anchor":"list_trending/2"},{"id":"list_trending_reset/2","deprecated":false,"title":"list_trending_reset(in_last_x_days \\\\ 30, limit \\\\ 10)","anchor":"list_trending_reset/2"},{"id":"many/2","deprecated":false,"title":"many(filters \\\\ [], opts \\\\ [])","anchor":"many/2"},{"id":"maybe_find_tag/3","deprecated":false,"title":"maybe_find_tag(current_user, id_or_username_or_url, types \\\\ nil)","anchor":"maybe_find_tag/3"},{"id":"maybe_find_tags/3","deprecated":false,"title":"maybe_find_tags(current_user, id_or_username_or_url, types \\\\ nil)","anchor":"maybe_find_tags/3"},{"id":"maybe_lookup_tag/2","deprecated":false,"title":"maybe_lookup_tag(id_or_username_or_url, prefix \\\\ \"@\")","anchor":"maybe_lookup_tag/2"},{"id":"maybe_tag/4","deprecated":false,"title":"maybe_tag(user, thing, tags \\\\ nil, boost_category_mentions? \\\\ true)","anchor":"maybe_tag/4"},{"id":"maybe_taxonomy_tag/2","deprecated":false,"title":"maybe_taxonomy_tag(user, id)","anchor":"maybe_taxonomy_tag/2"},{"id":"one/2","deprecated":false,"title":"one(filters, opts \\\\ [])","anchor":"one/2"},{"id":"tag_ids/1","deprecated":false,"title":"tag_ids(tags)","anchor":"tag_ids/1"},{"id":"tag_something/4","deprecated":false,"title":"tag_something(user, thing, tags, boost_category_mentions? \\\\ true)","anchor":"tag_something/4"}],"key":"functions"}],"nested_title":".Tag.Tags","nested_context":"Bonfire"},{"id":"Bonfire.Tag.TextContent.Formatter","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.TextContent.Formatter","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"escape_mention_handler/4","deprecated":false,"title":"escape_mention_handler(mention, buffer, _, _)","anchor":"escape_mention_handler/4"},{"id":"linkify/2","deprecated":false,"title":"linkify(text, options \\\\ [])","anchor":"linkify/2"},{"id":"nothing_handler/3","deprecated":false,"title":"nothing_handler(text, opts, acc)","anchor":"nothing_handler/3"},{"id":"tag_handler/4","deprecated":false,"title":"tag_handler(tag_text, buffer, opts, acc)","anchor":"tag_handler/4"},{"id":"url_handler/3","deprecated":false,"title":"url_handler(url, opts, acc)","anchor":"url_handler/3"}],"key":"functions"}],"nested_title":".Tag.TextContent.Formatter","nested_context":"Bonfire"},{"id":"Bonfire.Tag.TextContent.Process","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.TextContent.Process","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"html_escape/2","deprecated":false,"title":"html_escape(text, type)","anchor":"html_escape/2"},{"id":"process/3","deprecated":false,"title":"process(user \\\\ nil, text, content_type \\\\ nil)","anchor":"process/3"}],"key":"functions"}],"nested_title":".Tag.TextContent.Process","nested_context":"Bonfire"},{"id":"Bonfire.Tag.Web.Routes","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tag.Web.Routes","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"declare_routes/0","deprecated":false,"title":"declare_routes()","anchor":"declare_routes/0"}],"key":"functions"}],"nested_title":".Tag.Web.Routes","nested_context":"Bonfire"},{"id":"Bonfire.Tags.Acts.AutoBoost","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tags.Acts.AutoBoost","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Tags.Acts.AutoBoost","nested_context":"Bonfire"},{"id":"Bonfire.Tags.Acts.Tag","deprecated":false,"group":"Feature extensions","title":"Bonfire.Tags.Acts.Tag","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/2","deprecated":false,"title":"run(epic, act)","anchor":"run/2"}],"key":"functions"}],"nested_title":".Tags.Acts.Tag","nested_context":"Bonfire"},{"id":"Bonfire.Telemetry.Storage","deprecated":false,"group":"Feature extensions","title":"Bonfire.Telemetry.Storage","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"handle_event/4","deprecated":false,"title":"handle_event(event_name, data, metadata, metric)","anchor":"handle_event/4"},{"id":"metrics_history/1","deprecated":false,"title":"metrics_history(metric)","anchor":"metrics_history/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(args)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Telemetry.Storage","nested_context":"Bonfire"},{"id":"ActivityPub","deprecated":false,"group":"Federation","title":"ActivityPub","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"accept/1","deprecated":false,"title":"accept(params)","anchor":"accept/1"},{"id":"accept_activity/1","deprecated":false,"title":"accept_activity(params)","anchor":"accept_activity/1"},{"id":"announce/1","deprecated":false,"title":"announce(params)","anchor":"announce/1"},{"id":"block/1","deprecated":false,"title":"block(params)","anchor":"block/1"},{"id":"create/1","deprecated":false,"title":"create(params)","anchor":"create/1"},{"id":"delete/3","deprecated":false,"title":"delete(object, local \\\\ true, delete_actor \\\\ nil)","anchor":"delete/3"},{"id":"flag/1","deprecated":false,"title":"flag(params)","anchor":"flag/1"},{"id":"follow/1","deprecated":false,"title":"follow(params)","anchor":"follow/1"},{"id":"like/1","deprecated":false,"title":"like(params)","anchor":"like/1"},{"id":"move/4","deprecated":false,"title":"move(origin, target, local \\\\ true, not_in_also_known_as \\\\ false)","anchor":"move/4"},{"id":"reject/1","deprecated":false,"title":"reject(params)","anchor":"reject/1"},{"id":"unannounce/1","deprecated":false,"title":"unannounce(params)","anchor":"unannounce/1"},{"id":"unblock/1","deprecated":false,"title":"unblock(params)","anchor":"unblock/1"},{"id":"unfollow/1","deprecated":false,"title":"unfollow(params)","anchor":"unfollow/1"},{"id":"unlike/1","deprecated":false,"title":"unlike(params)","anchor":"unlike/1"},{"id":"update/1","deprecated":false,"title":"update(params)","anchor":"update/1"}],"key":"functions"}]},{"id":"ActivityPub.Actor","deprecated":false,"group":"Federation","title":"ActivityPub.Actor","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"actor?/1","deprecated":false,"title":"actor?(arg1)","anchor":"actor?/1"},{"id":"actor_url/1","deprecated":false,"title":"actor_url(username)","anchor":"actor_url/1"},{"id":"check_actor_is_active/1","deprecated":false,"title":"check_actor_is_active(actor)","anchor":"check_actor_is_active/1"},{"id":"deactivate/1","deprecated":false,"title":"deactivate(actor)","anchor":"deactivate/1"},{"id":"delete/1","deprecated":false,"title":"delete(actor)","anchor":"delete/1"},{"id":"fetch_by_username/2","deprecated":false,"title":"fetch_by_username(username, opts \\\\ [])","anchor":"fetch_by_username/2"},{"id":"format_remote_actor/1","deprecated":false,"title":"format_remote_actor(object)","anchor":"format_remote_actor/1"},{"id":"format_username/1","deprecated":false,"title":"format_username(ap_id)","anchor":"format_username/1"},{"id":"format_username/2","deprecated":false,"title":"format_username(ap_id, nick)","anchor":"format_username/2"},{"id":"get_cached/1","deprecated":false,"title":"get_cached(id)","anchor":"get_cached/1"},{"id":"get_cached!/1","deprecated":false,"title":"get_cached!(opts)","anchor":"get_cached!/1"},{"id":"get_cached_or_fetch/1","deprecated":false,"title":"get_cached_or_fetch(username_or_uri)","anchor":"get_cached_or_fetch/1"},{"id":"get_external_followers/1","deprecated":false,"title":"get_external_followers(actor)","anchor":"get_external_followers/1"},{"id":"get_followers/1","deprecated":false,"title":"get_followers(actor)","anchor":"get_followers/1"},{"id":"get_followings/1","deprecated":false,"title":"get_followings(actor)","anchor":"get_followings/1"},{"id":"invalidate_cache/1","deprecated":false,"title":"invalidate_cache(actor)","anchor":"invalidate_cache/1"},{"id":"maybe_create_actor_from_object/1","deprecated":false,"title":"maybe_create_actor_from_object(actor)","anchor":"maybe_create_actor_from_object/1"},{"id":"reactivate/1","deprecated":false,"title":"reactivate(actor)","anchor":"reactivate/1"},{"id":"save_actor_tombstone/2","deprecated":false,"title":"save_actor_tombstone(actor, tombstone)","anchor":"save_actor_tombstone/2"},{"id":"set_cache/1","deprecated":false,"title":"set_cache(actor)","anchor":"set_cache/1"},{"id":"swap_or_create_actor_tombstone/1","deprecated":false,"title":"swap_or_create_actor_tombstone(actor)","anchor":"swap_or_create_actor_tombstone/1"},{"id":"update_actor/1","deprecated":false,"title":"update_actor(actor_id)","anchor":"update_actor/1"},{"id":"update_actor/2","deprecated":false,"title":"update_actor(actor_id, data)","anchor":"update_actor/2"}],"key":"functions"}],"nested_title":".Actor","nested_context":"ActivityPub"},{"id":"ActivityPub.Config","deprecated":false,"group":"Federation","title":"ActivityPub.Config","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actors_and_collections/0","deprecated":false,"title":"actors_and_collections()","anchor":"actors_and_collections/0"},{"id":"collection_types/0","deprecated":false,"title":"collection_types()","anchor":"collection_types/0"},{"id":"delete/1","deprecated":false,"title":"delete(key)","anchor":"delete/1"},{"id":"env/0","deprecated":false,"title":"env()","anchor":"env/0"},{"id":"federating?/0","deprecated":false,"title":"federating?()","anchor":"federating?/0"},{"id":"get/1","deprecated":false,"title":"get(key)","anchor":"get/1"},{"id":"get/2","deprecated":false,"title":"get(key, default)","anchor":"get/2"},{"id":"get!/1","deprecated":false,"title":"get!(key)","anchor":"get!/1"},{"id":"is_in/2","deprecated":false,"title":"is_in(type, fun)","anchor":"is_in/2"},{"id":"public_uri/0","deprecated":false,"title":"public_uri()","anchor":"public_uri/0"},{"id":"public_uris/0","deprecated":false,"title":"public_uris()","anchor":"public_uris/0"},{"id":"put/2","deprecated":false,"title":"put(key, value)","anchor":"put/2"},{"id":"supported_activity_types/0","deprecated":false,"title":"supported_activity_types()","anchor":"supported_activity_types/0"},{"id":"supported_actor_types/0","deprecated":false,"title":"supported_actor_types()","anchor":"supported_actor_types/0"}],"key":"functions"}],"nested_title":".Config","nested_context":"ActivityPub"},{"id":"ActivityPub.Config.Error","deprecated":false,"group":"Federation","title":"ActivityPub.Config.Error","sections":[],"nested_title":".Config.Error","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator","deprecated":false,"group":"Federation","title":"ActivityPub.Federator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enqueue_incoming_ap_doc/1","deprecated":false,"title":"enqueue_incoming_ap_doc(params)","anchor":"enqueue_incoming_ap_doc/1"},{"id":"perform/2","deprecated":false,"title":"perform(type, activity)","anchor":"perform/2"},{"id":"perform/3","deprecated":false,"title":"perform(atom, module, params)","anchor":"perform/3"},{"id":"publish/1","deprecated":false,"title":"publish(activity)","anchor":"publish/1"}],"key":"functions"}],"nested_title":".Federator","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.APPublisher","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.APPublisher","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"determine_inbox/4","deprecated":false,"title":"determine_inbox(user, is_public, type, num_recipients)","anchor":"determine_inbox/4"},{"id":"gather_webfinger_links/1","deprecated":false,"title":"gather_webfinger_links(actor)","anchor":"gather_webfinger_links/1"},{"id":"is_representable?/1","deprecated":false,"title":"is_representable?(activity)","anchor":"is_representable?/1"},{"id":"maybe_federate_to_search_index/2","deprecated":false,"title":"maybe_federate_to_search_index(recipients, activity)","anchor":"maybe_federate_to_search_index/2"},{"id":"publish/2","deprecated":false,"title":"publish(actor, activity)","anchor":"publish/2"},{"id":"publish_one/1","deprecated":false,"title":"publish_one(params)","anchor":"publish_one/1"}],"key":"functions"}],"nested_title":".Federator.APPublisher","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Adapter","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Adapter","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"c:base_url/0"},{"id":"external_followers_for_activity/2","deprecated":false,"title":"external_followers_for_activity(t, t)","anchor":"c:external_followers_for_activity/2"},{"id":"get_actor_by_ap_id/1","deprecated":false,"title":"get_actor_by_ap_id(t)","anchor":"c:get_actor_by_ap_id/1"},{"id":"get_actor_by_id/1","deprecated":false,"title":"get_actor_by_id(t)","anchor":"c:get_actor_by_id/1"},{"id":"get_actor_by_username/1","deprecated":false,"title":"get_actor_by_username(t)","anchor":"c:get_actor_by_username/1"},{"id":"get_follower_local_ids/1","deprecated":false,"title":"get_follower_local_ids(t)","anchor":"c:get_follower_local_ids/1"},{"id":"get_following_local_ids/1","deprecated":false,"title":"get_following_local_ids(t)","anchor":"c:get_following_local_ids/1"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"c:get_locale/0"},{"id":"get_or_create_service_actor/0","deprecated":false,"title":"get_or_create_service_actor()","anchor":"c:get_or_create_service_actor/0"},{"id":"get_redirect_url/1","deprecated":false,"title":"get_redirect_url(arg1)","anchor":"c:get_redirect_url/1"},{"id":"handle_activity/1","deprecated":false,"title":"handle_activity(t)","anchor":"c:handle_activity/1"},{"id":"maybe_create_remote_actor/1","deprecated":false,"title":"maybe_create_remote_actor(t)","anchor":"c:maybe_create_remote_actor/1"},{"id":"maybe_publish_object/2","deprecated":false,"title":"maybe_publish_object(t, t)","anchor":"c:maybe_publish_object/2"},{"id":"update_local_actor/2","deprecated":false,"title":"update_local_actor(t, t)","anchor":"c:update_local_actor/2"},{"id":"update_remote_actor/1","deprecated":false,"title":"update_remote_actor(t)","anchor":"c:update_remote_actor/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"adapter/0","deprecated":false,"title":"adapter()","anchor":"adapter/0"},{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"base_url/0"},{"id":"call_or/3","deprecated":false,"title":"call_or(fun, args \\\\ [], fallback \\\\ nil)","anchor":"call_or/3"},{"id":"external_followers_for_activity/2","deprecated":false,"title":"external_followers_for_activity(actor, activity)","anchor":"external_followers_for_activity/2"},{"id":"federate_actor?/3","deprecated":false,"title":"federate_actor?(actor, direction \\\\ nil, by_actor \\\\ nil)","anchor":"federate_actor?/3"},{"id":"get_actor_by_ap_id/1","deprecated":false,"title":"get_actor_by_ap_id(id)","anchor":"get_actor_by_ap_id/1"},{"id":"get_actor_by_id/1","deprecated":false,"title":"get_actor_by_id(id)","anchor":"get_actor_by_id/1"},{"id":"get_actor_by_username/1","deprecated":false,"title":"get_actor_by_username(username)","anchor":"get_actor_by_username/1"},{"id":"get_follower_local_ids/1","deprecated":false,"title":"get_follower_local_ids(actor)","anchor":"get_follower_local_ids/1"},{"id":"get_following_local_ids/1","deprecated":false,"title":"get_following_local_ids(actor)","anchor":"get_following_local_ids/1"},{"id":"get_locale/0","deprecated":false,"title":"get_locale()","anchor":"get_locale/0"},{"id":"get_or_create_service_actor/0","deprecated":false,"title":"get_or_create_service_actor()","anchor":"get_or_create_service_actor/0"},{"id":"get_redirect_url/1","deprecated":false,"title":"get_redirect_url(id_or_username_or_object)","anchor":"get_redirect_url/1"},{"id":"handle_activity/1","deprecated":false,"title":"handle_activity(activity)","anchor":"handle_activity/1"},{"id":"maybe_create_remote_actor/1","deprecated":false,"title":"maybe_create_remote_actor(actor)","anchor":"maybe_create_remote_actor/1"},{"id":"maybe_handle_activity/1","deprecated":false,"title":"maybe_handle_activity(activity)","anchor":"maybe_handle_activity/1"},{"id":"maybe_publish_object/2","deprecated":false,"title":"maybe_publish_object(object, manually_fetching? \\\\ false)","anchor":"maybe_publish_object/2"},{"id":"update_local_actor/2","deprecated":false,"title":"update_local_actor(actor, params)","anchor":"update_local_actor/2"},{"id":"update_remote_actor/1","deprecated":false,"title":"update_remote_actor(actor)","anchor":"update_remote_actor/1"},{"id":"update_remote_actor/2","deprecated":false,"title":"update_remote_actor(actor, data)","anchor":"update_remote_actor/2"}],"key":"functions"}],"nested_title":".Federator.Adapter","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Fetcher","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Fetcher","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"allowed_recursion?/2","deprecated":false,"title":"allowed_recursion?(distance, max_recursion \\\\ nil)","anchor":"allowed_recursion?/2"},{"id":"enqueue_fetch/2","deprecated":false,"title":"enqueue_fetch(id, worker_attrs \\\\ %{})","anchor":"enqueue_fetch/2"},{"id":"fetch_collection/2","deprecated":false,"title":"fetch_collection(ap_id, opts \\\\ [])","anchor":"fetch_collection/2"},{"id":"fetch_fresh_object_from_id/2","deprecated":false,"title":"fetch_fresh_object_from_id(id, opts \\\\ [])","anchor":"fetch_fresh_object_from_id/2"},{"id":"fetch_object_from_id/2","deprecated":false,"title":"fetch_object_from_id(id, opts \\\\ [])","anchor":"fetch_object_from_id/2"},{"id":"fetch_objects_from_id/2","deprecated":false,"title":"fetch_objects_from_id(ids, opts \\\\ [])","anchor":"fetch_objects_from_id/2"},{"id":"fetch_outbox/2","deprecated":false,"title":"fetch_outbox(actor, opts \\\\ [fetch_collection: :async])","anchor":"fetch_outbox/2"},{"id":"fetch_remote_object_from_id/2","deprecated":false,"title":"fetch_remote_object_from_id(id, options \\\\ [])","anchor":"fetch_remote_object_from_id/2"},{"id":"fetch_replies/2","deprecated":false,"title":"fetch_replies(actor, opts \\\\ [fetch_collection: :async])","anchor":"fetch_replies/2"},{"id":"get_cached_object_or_fetch_ap_id/2","deprecated":false,"title":"get_cached_object_or_fetch_ap_id(id, opts \\\\ [])","anchor":"get_cached_object_or_fetch_ap_id/2"},{"id":"get_cached_object_or_fetch_pointer_id/2","deprecated":false,"title":"get_cached_object_or_fetch_pointer_id(pointer, opts \\\\ [])","anchor":"get_cached_object_or_fetch_pointer_id/2"},{"id":"maybe_fetch/2","deprecated":false,"title":"maybe_fetch(entries, opts \\\\ [])","anchor":"maybe_fetch/2"}],"key":"functions"}],"nested_title":".Federator.Fetcher","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"delete/4","deprecated":false,"title":"delete(url, body \\\\ \"\", headers \\\\ [], options \\\\ [])","anchor":"delete/4"},{"id":"get/3","deprecated":false,"title":"get(url, headers \\\\ [], options \\\\ [])","anchor":"get/3"},{"id":"http_request/5","deprecated":false,"title":"http_request(method, url, body \\\\ \"\", headers \\\\ [], options \\\\ [])","anchor":"http_request/5"},{"id":"post/4","deprecated":false,"title":"post(url, body, headers \\\\ [], options \\\\ [])","anchor":"post/4"},{"id":"put/4","deprecated":false,"title":"put(url, body, headers \\\\ [], options \\\\ [])","anchor":"put/4"}],"key":"functions"}],"nested_title":".Federator.HTTP","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.Connection","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.Connection","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"adapter_options/2","deprecated":false,"title":"adapter_options(adapter \\\\ Tesla.Adapter.Hackney, opts)","anchor":"adapter_options/2"},{"id":"new/1","deprecated":false,"title":"new(opts \\\\ [])","anchor":"new/1"}],"key":"functions"}],"nested_title":".Federator.HTTP.Connection","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.RateLimit","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.RateLimit","sections":[],"nested_title":".Federator.HTTP.RateLimit","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.RequestBuilder","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.RequestBuilder","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_param/4","deprecated":false,"title":"add_param(request, atom1, atom2, values)","anchor":"add_param/4"},{"id":"headers/2","deprecated":false,"title":"headers(request, header_list)","anchor":"headers/2"},{"id":"method/2","deprecated":false,"title":"method(request, m)","anchor":"method/2"},{"id":"opts/2","deprecated":false,"title":"opts(request, options)","anchor":"opts/2"},{"id":"url/2","deprecated":false,"title":"url(request, u)","anchor":"url/2"}],"key":"functions"}],"nested_title":".Federator.HTTP.RequestBuilder","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.RetryAfter","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.RetryAfter","sections":[],"nested_title":".Federator.HTTP.RetryAfter","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.HTTP.Tesla","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.HTTP.Tesla","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"option/0","deprecated":false,"title":"option()","anchor":"t:option/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"delete/3","deprecated":false,"title":"delete(client, url, opts)","anchor":"delete/3"},{"id":"delete!/3","deprecated":false,"title":"delete!(client, url, opts)","anchor":"delete!/3"},{"id":"get/3","deprecated":false,"title":"get(client, url, opts)","anchor":"get/3"},{"id":"get!/3","deprecated":false,"title":"get!(client, url, opts)","anchor":"get!/3"},{"id":"head/3","deprecated":false,"title":"head(client, url, opts)","anchor":"head/3"},{"id":"head!/3","deprecated":false,"title":"head!(client, url, opts)","anchor":"head!/3"},{"id":"options/3","deprecated":false,"title":"options(client, url, opts)","anchor":"options/3"},{"id":"options!/3","deprecated":false,"title":"options!(client, url, opts)","anchor":"options!/3"},{"id":"patch/4","deprecated":false,"title":"patch(client, url, body, opts)","anchor":"patch/4"},{"id":"patch!/4","deprecated":false,"title":"patch!(client, url, body, opts)","anchor":"patch!/4"},{"id":"post/4","deprecated":false,"title":"post(client, url, body, opts)","anchor":"post/4"},{"id":"post!/4","deprecated":false,"title":"post!(client, url, body, opts)","anchor":"post!/4"},{"id":"put/4","deprecated":false,"title":"put(client, url, body, opts)","anchor":"put/4"},{"id":"put!/4","deprecated":false,"title":"put!(client, url, body, opts)","anchor":"put!/4"},{"id":"request/2","deprecated":false,"title":"request(client \\\\ %Tesla.Client{}, options)","anchor":"request/2"},{"id":"request!/2","deprecated":false,"title":"request!(client \\\\ %Tesla.Client{}, options)","anchor":"request!/2"},{"id":"trace/3","deprecated":false,"title":"trace(client, url, opts)","anchor":"trace/3"},{"id":"trace!/3","deprecated":false,"title":"trace!(client, url, opts)","anchor":"trace!/3"}],"key":"functions"}],"nested_title":".Federator.HTTP.Tesla","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Publisher","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Publisher","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"gather_webfinger_links/1","deprecated":false,"title":"gather_webfinger_links(t)","anchor":"c:gather_webfinger_links/1"},{"id":"is_representable?/1","deprecated":false,"title":"is_representable?(t)","anchor":"c:is_representable?/1"},{"id":"publish/2","deprecated":false,"title":"publish(t, t)","anchor":"c:publish/2"},{"id":"publish_one/1","deprecated":false,"title":"publish_one(t)","anchor":"c:publish_one/1"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"enqueue_one/2","deprecated":false,"title":"enqueue_one(module, params)","anchor":"enqueue_one/2"},{"id":"gather_webfinger_links/1","deprecated":false,"title":"gather_webfinger_links(user)","anchor":"gather_webfinger_links/1"},{"id":"publish/2","deprecated":false,"title":"publish(user, activity)","anchor":"publish/2"}],"key":"functions"}],"nested_title":".Federator.Publisher","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Transformer","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Transformer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_emoji_tags/1","deprecated":false,"title":"add_emoji_tags(object)","anchor":"add_emoji_tags/1"},{"id":"determine_explicit_mentions/1","deprecated":false,"title":"determine_explicit_mentions(object)","anchor":"determine_explicit_mentions/1"},{"id":"fix_actor/1","deprecated":false,"title":"fix_actor(data)","anchor":"fix_actor/1"},{"id":"fix_addressing/1","deprecated":false,"title":"fix_addressing(object)","anchor":"fix_addressing/1"},{"id":"fix_addressing_list/2","deprecated":false,"title":"fix_addressing_list(map, field)","anchor":"fix_addressing_list/2"},{"id":"fix_attachments/1","deprecated":false,"title":"fix_attachments(object)","anchor":"fix_attachments/1"},{"id":"fix_content_map/1","deprecated":false,"title":"fix_content_map(object)","anchor":"fix_content_map/1"},{"id":"fix_context/1","deprecated":false,"title":"fix_context(object)","anchor":"fix_context/1"},{"id":"fix_emoji/1","deprecated":false,"title":"fix_emoji(object)","anchor":"fix_emoji/1"},{"id":"fix_explicit_addressing/2","deprecated":false,"title":"fix_explicit_addressing(object, follower_collection)","anchor":"fix_explicit_addressing/2"},{"id":"fix_in_reply_to/2","deprecated":false,"title":"fix_in_reply_to(object, options \\\\ [])","anchor":"fix_in_reply_to/2"},{"id":"fix_object/2","deprecated":false,"title":"fix_object(object, options \\\\ [])","anchor":"fix_object/2"},{"id":"fix_quote_url/2","deprecated":false,"title":"fix_quote_url(object, options \\\\ [])","anchor":"fix_quote_url/2"},{"id":"fix_replies/2","deprecated":false,"title":"fix_replies(data, options)","anchor":"fix_replies/2"},{"id":"fix_summary/1","deprecated":false,"title":"fix_summary(object)","anchor":"fix_summary/1"},{"id":"fix_tag/1","deprecated":false,"title":"fix_tag(object)","anchor":"fix_tag/1"},{"id":"fix_url/1","deprecated":false,"title":"fix_url(object)","anchor":"fix_url/1"},{"id":"format_input/3","deprecated":false,"title":"format_input(text, binary, options \\\\ [])","anchor":"format_input/3"},{"id":"handle_incoming/1","deprecated":false,"title":"handle_incoming(data)","anchor":"handle_incoming/1"},{"id":"maybe_handle_other_activity/1","deprecated":false,"title":"maybe_handle_other_activity(data)","anchor":"maybe_handle_other_activity/1"},{"id":"maybe_handle_other_object/1","deprecated":false,"title":"maybe_handle_other_object(data)","anchor":"maybe_handle_other_object/1"},{"id":"prepare_outgoing/1","deprecated":false,"title":"prepare_outgoing(data)","anchor":"prepare_outgoing/1"},{"id":"preserve_privacy_of_outgoing/2","deprecated":false,"title":"preserve_privacy_of_outgoing(other, target_instance_uri \\\\ nil)","anchor":"preserve_privacy_of_outgoing/2"},{"id":"replies/1","deprecated":false,"title":"replies(arg1)","anchor":"replies/1"},{"id":"set_replies/1","deprecated":false,"title":"set_replies(object)","anchor":"set_replies/1"},{"id":"take_emoji_tags/1","deprecated":false,"title":"take_emoji_tags(arg1)","anchor":"take_emoji_tags/1"}],"key":"functions"}],"nested_title":".Federator.Transformer","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.WebFinger","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.WebFinger","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"base_url/1","deprecated":false,"title":"base_url(account)","anchor":"base_url/1"},{"id":"finger/1","deprecated":false,"title":"finger(account)","anchor":"finger/1"},{"id":"output/1","deprecated":false,"title":"output(resource)","anchor":"output/1"},{"id":"represent_user/1","deprecated":false,"title":"represent_user(actor)","anchor":"represent_user/1"},{"id":"webfinger_from_json/1","deprecated":false,"title":"webfinger_from_json(doc)","anchor":"webfinger_from_json/1"}],"key":"functions"}],"nested_title":".Federator.WebFinger","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Worker","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Worker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"worker_args/1","deprecated":false,"title":"worker_args(queue)","anchor":"worker_args/1"}],"key":"functions"}],"nested_title":".Federator.Worker","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Workers.PublisherWorker","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Workers.PublisherWorker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enqueue/3","deprecated":false,"title":"enqueue(op, params, worker_args \\\\ [])","anchor":"enqueue/3"},{"id":"enqueueable/3","deprecated":false,"title":"enqueueable(op, params, worker_args \\\\ [])","anchor":"enqueueable/3"}],"key":"functions"}],"nested_title":".Federator.Workers.PublisherWorker","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Workers.ReceiverWorker","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Workers.ReceiverWorker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enqueue/3","deprecated":false,"title":"enqueue(op, params, worker_args \\\\ [])","anchor":"enqueue/3"},{"id":"enqueueable/3","deprecated":false,"title":"enqueueable(op, params, worker_args \\\\ [])","anchor":"enqueueable/3"}],"key":"functions"}],"nested_title":".Federator.Workers.ReceiverWorker","nested_context":"ActivityPub"},{"id":"ActivityPub.Federator.Workers.RemoteFetcherWorker","deprecated":false,"group":"Federation","title":"ActivityPub.Federator.Workers.RemoteFetcherWorker","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"enqueue/3","deprecated":false,"title":"enqueue(op, params, worker_args \\\\ [])","anchor":"enqueue/3"},{"id":"enqueueable/3","deprecated":false,"title":"enqueueable(op, params, worker_args \\\\ [])","anchor":"enqueueable/3"}],"key":"functions"}],"nested_title":".Federator.Workers.RemoteFetcherWorker","nested_context":"ActivityPub"},{"id":"ActivityPub.Fixtures","deprecated":false,"group":"Federation","title":"ActivityPub.Fixtures","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"file/1","deprecated":false,"title":"file(path)","anchor":"file/1"},{"id":"fixtures/0","deprecated":false,"title":"fixtures()","anchor":"fixtures/0"},{"id":"fixtures_generic/0","deprecated":false,"title":"fixtures_generic()","anchor":"fixtures_generic/0"},{"id":"fixtures_get/0","deprecated":false,"title":"fixtures_get()","anchor":"fixtures_get/0"},{"id":"get/4","deprecated":false,"title":"get(url, query \\\\ [], body \\\\ [], headers \\\\ [])","anchor":"get/4"},{"id":"head/4","deprecated":false,"title":"head(url, query, body, headers)","anchor":"head/4"},{"id":"insert/1","deprecated":false,"title":"insert(url)","anchor":"insert/1"},{"id":"insert_all/0","deprecated":false,"title":"insert_all()","anchor":"insert_all/0"},{"id":"maybe_get_local/4","deprecated":false,"title":"maybe_get_local(url, query, body, headers)","anchor":"maybe_get_local/4"},{"id":"mock_global/1","deprecated":false,"title":"mock_global(fun)","anchor":"mock_global/1"},{"id":"none/4","deprecated":false,"title":"none(url, query, body, headers)","anchor":"none/4"},{"id":"post/4","deprecated":false,"title":"post(url, query \\\\ [], body \\\\ [], headers \\\\ [])","anchor":"post/4"},{"id":"request/1","deprecated":false,"title":"request(env)","anchor":"request/1"}],"key":"functions"}],"nested_title":".Fixtures","nested_context":"ActivityPub"},{"id":"ActivityPub.Instances","deprecated":false,"group":"Federation","title":"ActivityPub.Instances","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"filter_reachable/1","deprecated":false,"title":"filter_reachable(urls_or_hosts)","anchor":"filter_reachable/1"},{"id":"host/1","deprecated":false,"title":"host(url_or_host)","anchor":"host/1"},{"id":"reachability_datetime_threshold/0","deprecated":false,"title":"reachability_datetime_threshold()","anchor":"reachability_datetime_threshold/0"},{"id":"reachable?/1","deprecated":false,"title":"reachable?(url_or_host)","anchor":"reachable?/1"},{"id":"set_consistently_unreachable/1","deprecated":false,"title":"set_consistently_unreachable(url_or_host)","anchor":"set_consistently_unreachable/1"},{"id":"set_reachable/1","deprecated":false,"title":"set_reachable(url_or_host)","anchor":"set_reachable/1"},{"id":"set_unreachable/2","deprecated":false,"title":"set_unreachable(url_or_host, unreachable_since \\\\ nil)","anchor":"set_unreachable/2"}],"key":"functions"}],"nested_title":".Instances","nested_context":"ActivityPub"},{"id":"ActivityPub.Instances.Instance","deprecated":false,"group":"Federation","title":"ActivityPub.Instances.Instance","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset/2","deprecated":false,"title":"changeset(struct, params \\\\ %{})","anchor":"changeset/2"},{"id":"do_set_reachable/1","deprecated":false,"title":"do_set_reachable(host)","anchor":"do_set_reachable/1"},{"id":"filter_reachable/1","deprecated":false,"title":"filter_reachable(urls_or_hosts)","anchor":"filter_reachable/1"},{"id":"host/1","deprecated":false,"title":"host(url_or_host)","anchor":"host/1"},{"id":"reachable?/1","deprecated":false,"title":"reachable?(uri_or_host)","anchor":"reachable?/1"},{"id":"set_reachable/1","deprecated":false,"title":"set_reachable(uri_or_host)","anchor":"set_reachable/1"},{"id":"set_unreachable/2","deprecated":false,"title":"set_unreachable(uri_or_host, unreachable_since \\\\ nil)","anchor":"set_unreachable/2"}],"key":"functions"}],"nested_title":".Instances.Instance","nested_context":"ActivityPub"},{"id":"ActivityPub.MRF","deprecated":false,"group":"Federation","title":"ActivityPub.MRF","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(t, boolean)","anchor":"c:filter/2"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"filter/2","deprecated":false,"title":"filter(object, is_local?)","anchor":"filter/2"},{"id":"filter/3","deprecated":false,"title":"filter(policies, object, is_local?)","anchor":"filter/3"},{"id":"get_policies/0","deprecated":false,"title":"get_policies()","anchor":"get_policies/0"},{"id":"subdomain_match?/2","deprecated":false,"title":"subdomain_match?(domains, host)","anchor":"subdomain_match?/2"},{"id":"subdomains_regex/1","deprecated":false,"title":"subdomains_regex(domains)","anchor":"subdomains_regex/1"}],"key":"functions"}],"nested_title":".MRF","nested_context":"ActivityPub"},{"id":"ActivityPub.MRF.SimplePolicy","deprecated":false,"group":"Federation","title":"ActivityPub.MRF.SimplePolicy","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check_reject/2","deprecated":false,"title":"check_reject(actor_info, object \\\\ nil)","anchor":"check_reject/2"}],"key":"functions"}],"nested_title":".MRF.SimplePolicy","nested_context":"ActivityPub"},{"id":"ActivityPub.Object","deprecated":false,"group":"Federation","title":"ActivityPub.Object","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"actor_from_data/1","deprecated":false,"title":"actor_from_data(actor)","anchor":"actor_from_data/1"},{"id":"actor_id_from_data/1","deprecated":false,"title":"actor_id_from_data(id)","anchor":"actor_id_from_data/1"},{"id":"changeset/1","deprecated":false,"title":"changeset(attrs)","anchor":"changeset/1"},{"id":"changeset/2","deprecated":false,"title":"changeset(object, attrs)","anchor":"changeset/2"},{"id":"common_changeset/1","deprecated":false,"title":"common_changeset(object)","anchor":"common_changeset/1"},{"id":"delete/1","deprecated":false,"title":"delete(object)","anchor":"delete/1"},{"id":"do_insert/1","deprecated":false,"title":"do_insert(attrs)","anchor":"do_insert/1"},{"id":"do_update_existing/2","deprecated":false,"title":"do_update_existing(object, attrs)","anchor":"do_update_existing/2"},{"id":"fetch_latest_block/2","deprecated":false,"title":"fetch_latest_block(map1, map2)","anchor":"fetch_latest_block/2"},{"id":"fetch_latest_follow/2","deprecated":false,"title":"fetch_latest_follow(follower_id, followed_id)","anchor":"fetch_latest_follow/2"},{"id":"get_activity_for_object_ap_id/2","deprecated":false,"title":"get_activity_for_object_ap_id(ap_id, verb \\\\ \"Create\")","anchor":"get_activity_for_object_ap_id/2"},{"id":"get_ap_id/1","deprecated":false,"title":"get_ap_id(_)","anchor":"get_ap_id/1"},{"id":"get_cached/1","deprecated":false,"title":"get_cached(id)","anchor":"get_cached/1"},{"id":"get_cached!/1","deprecated":false,"title":"get_cached!(opts)","anchor":"get_cached!/1"},{"id":"get_existing_announce/2","deprecated":false,"title":"get_existing_announce(actor, map)","anchor":"get_existing_announce/2"},{"id":"get_existing_like/2","deprecated":false,"title":"get_existing_like(actor, object_id)","anchor":"get_existing_like/2"},{"id":"get_follow_activity/2","deprecated":false,"title":"get_follow_activity(follow_object, followed)","anchor":"get_follow_activity/2"},{"id":"get_outbox_for_actor/2","deprecated":false,"title":"get_outbox_for_actor(ap_id, page \\\\ 1)","anchor":"get_outbox_for_actor/2"},{"id":"get_outbox_for_instance/0","deprecated":false,"title":"get_outbox_for_instance()","anchor":"get_outbox_for_instance/0"},{"id":"get_uncached/1","deprecated":false,"title":"get_uncached(opts)","anchor":"get_uncached/1"},{"id":"hard_delete/1","deprecated":false,"title":"hard_delete(object)","anchor":"hard_delete/1"},{"id":"hashtags/1","deprecated":false,"title":"hashtags(arg1)","anchor":"hashtags/1"},{"id":"invalidate_cache/1","deprecated":false,"title":"invalidate_cache(object)","anchor":"invalidate_cache/1"},{"id":"make_tombstone/2","deprecated":false,"title":"make_tombstone(map, deleted \\\\ DateTime.utc_now())","anchor":"make_tombstone/2"},{"id":"maybe_fetch/2","deprecated":false,"title":"maybe_fetch(ap_id, arg2)","anchor":"maybe_fetch/2"},{"id":"maybe_upsert/3","deprecated":false,"title":"maybe_upsert(arg1, existing_object, attrs)","anchor":"maybe_upsert/3"},{"id":"normalize/3","deprecated":false,"title":"normalize(object, fetch_remote? \\\\ true, pointer \\\\ nil)","anchor":"normalize/3"},{"id":"normalize_actors/1","deprecated":false,"title":"normalize_actors(params)","anchor":"normalize_actors/1"},{"id":"normalize_params/3","deprecated":false,"title":"normalize_params(params, activity_id \\\\ nil, pointer \\\\ nil)","anchor":"normalize_params/3"},{"id":"object_url/1","deprecated":false,"title":"object_url(id)","anchor":"object_url/1"},{"id":"prepare_data/4","deprecated":false,"title":"prepare_data(data, local \\\\ false, pointer \\\\ nil, associated_activity \\\\ nil)","anchor":"prepare_data/4"},{"id":"self_replies_ids/2","deprecated":false,"title":"self_replies_ids(object, limit)","anchor":"self_replies_ids/2"},{"id":"set_cache/1","deprecated":false,"title":"set_cache(object)","anchor":"set_cache/1"},{"id":"swap_object_with_tombstone/1","deprecated":false,"title":"swap_object_with_tombstone(object)","anchor":"swap_object_with_tombstone/1"},{"id":"update_and_set_cache/1","deprecated":false,"title":"update_and_set_cache(changeset)","anchor":"update_and_set_cache/1"},{"id":"update_changeset/2","deprecated":false,"title":"update_changeset(object, attrs)","anchor":"update_changeset/2"},{"id":"update_existing/2","deprecated":false,"title":"update_existing(object_id, attrs)","anchor":"update_existing/2"},{"id":"update_state/3","deprecated":false,"title":"update_state(activity, type, state)","anchor":"update_state/3"}],"key":"functions"}],"nested_title":".Object","nested_context":"ActivityPub"},{"id":"ActivityPub.Pruner","deprecated":false,"group":"Federation","title":"ActivityPub.Pruner","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"prune_all/1","deprecated":false,"title":"prune_all(cutoff_days \\\\ nil)","anchor":"prune_all/1"},{"id":"prune_deletes/1","deprecated":false,"title":"prune_deletes(cutoff_days)","anchor":"prune_deletes/1"},{"id":"prune_objects/1","deprecated":false,"title":"prune_objects(options \\\\ [prune_orphaned_activities: true, keep_threads: false, keep_non_public: false])","anchor":"prune_objects/1"},{"id":"prune_orphaned_activities/0","deprecated":false,"title":"prune_orphaned_activities()","anchor":"prune_orphaned_activities/0"},{"id":"prune_removes/1","deprecated":false,"title":"prune_removes(cutoff_days)","anchor":"prune_removes/1"},{"id":"prune_stale_follow_requests/1","deprecated":false,"title":"prune_stale_follow_requests(cutoff_days)","anchor":"prune_stale_follow_requests/1"},{"id":"prune_tombstones/1","deprecated":false,"title":"prune_tombstones(cutoff_days)","anchor":"prune_tombstones/1"},{"id":"prune_undos/1","deprecated":false,"title":"prune_undos(cutoff_days)","anchor":"prune_undos/1"},{"id":"remove_embedded_objects/0","deprecated":false,"title":"remove_embedded_objects()","anchor":"remove_embedded_objects/0"}],"key":"functions"}],"nested_title":".Pruner","nested_context":"ActivityPub"},{"id":"ActivityPub.Pruner.PruneDatabaseWorker","deprecated":false,"group":"Federation","title":"ActivityPub.Pruner.PruneDatabaseWorker","sections":[],"nested_title":".Pruner.PruneDatabaseWorker","nested_context":"ActivityPub"},{"id":"ActivityPub.Queries","deprecated":false,"group":"Federation","title":"ActivityPub.Queries","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"query/0","deprecated":false,"title":"query()","anchor":"t:query/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"activity_by_object_ap_id/2","deprecated":false,"title":"activity_by_object_ap_id(ap_id, verb \\\\ \"Create\")","anchor":"activity_by_object_ap_id/2"},{"id":"by_actor/2","deprecated":false,"title":"by_actor(query \\\\ Object, ap_id)","anchor":"by_actor/2"},{"id":"by_ap_id/2","deprecated":false,"title":"by_ap_id(query \\\\ Object, ap_id)","anchor":"by_ap_id/2"},{"id":"by_id/2","deprecated":false,"title":"by_id(query \\\\ Object, id)","anchor":"by_id/2"},{"id":"by_object_id/2","deprecated":false,"title":"by_object_id(query \\\\ Object, object_id)","anchor":"by_object_id/2"},{"id":"by_object_in_reply_to_id/3","deprecated":false,"title":"by_object_in_reply_to_id(query, in_reply_to_id, opts \\\\ [])","anchor":"by_object_in_reply_to_id/3"},{"id":"by_type/2","deprecated":false,"title":"by_type(query \\\\ Object, activity_type)","anchor":"by_type/2"},{"id":"exclude_type/2","deprecated":false,"title":"exclude_type(query \\\\ Object, type)","anchor":"exclude_type/2"},{"id":"find_by_object_ap_id/2","deprecated":false,"title":"find_by_object_ap_id(activities, object_ap_id)","anchor":"find_by_object_ap_id/2"},{"id":"last_follow/2","deprecated":false,"title":"last_follow(query, followed_id)","anchor":"last_follow/2"},{"id":"replies/2","deprecated":false,"title":"replies(object, opts \\\\ [])","anchor":"replies/2"},{"id":"self_replies/1","deprecated":false,"title":"self_replies(object)","anchor":"self_replies/1"},{"id":"with_joined_activity/3","deprecated":false,"title":"with_joined_activity(query, activity_type \\\\ \"Create\", join_type \\\\ :left)","anchor":"with_joined_activity/3"},{"id":"with_joined_object/2","deprecated":false,"title":"with_joined_object(query, join_type \\\\ :inner)","anchor":"with_joined_object/2"},{"id":"with_preloaded_object/2","deprecated":false,"title":"with_preloaded_object(query, join_type \\\\ :left)","anchor":"with_preloaded_object/2"}],"key":"functions"}],"nested_title":".Queries","nested_context":"ActivityPub"},{"id":"ActivityPub.Safety.Containment","deprecated":false,"group":"Federation","title":"ActivityPub.Safety.Containment","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"contain_child/1","deprecated":false,"title":"contain_child(arg1)","anchor":"contain_child/1"},{"id":"contain_origin/2","deprecated":false,"title":"contain_origin(id, params)","anchor":"contain_origin/2"},{"id":"contain_origin_from_id/2","deprecated":false,"title":"contain_origin_from_id(id, params)","anchor":"contain_origin_from_id/2"},{"id":"contain_uri/2","deprecated":false,"title":"contain_uri(id, data)","anchor":"contain_uri/2"},{"id":"get_object/1","deprecated":false,"title":"get_object(arg1)","anchor":"get_object/1"},{"id":"is_public?/1","deprecated":false,"title":"is_public?(data)","anchor":"is_public?/1"},{"id":"restrict_unauthenticated_access?/1","deprecated":false,"title":"restrict_unauthenticated_access?(object)","anchor":"restrict_unauthenticated_access?/1"},{"id":"restrict_unauthenticated_access?/2","deprecated":false,"title":"restrict_unauthenticated_access?(resource, kind)","anchor":"restrict_unauthenticated_access?/2"},{"id":"visible_for_user?/2","deprecated":false,"title":"visible_for_user?(object, actor)","anchor":"visible_for_user?/2"}],"key":"functions"}],"nested_title":".Safety.Containment","nested_context":"ActivityPub"},{"id":"ActivityPub.Safety.Keys","deprecated":false,"group":"Federation","title":"ActivityPub.Safety.Keys","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_public_key/2","deprecated":false,"title":"add_public_key(actor, generate_if_missing \\\\ true)","anchor":"add_public_key/2"},{"id":"cast_uri/1","deprecated":false,"title":"cast_uri(object)","anchor":"cast_uri/1"},{"id":"ensure_keys_present/1","deprecated":false,"title":"ensure_keys_present(actor)","anchor":"ensure_keys_present/1"},{"id":"generate_rsa_pem/0","deprecated":false,"title":"generate_rsa_pem()","anchor":"generate_rsa_pem/0"},{"id":"get_public_key_for_ap_id/1","deprecated":false,"title":"get_public_key_for_ap_id(ap_id)","anchor":"get_public_key_for_ap_id/1"},{"id":"http_host/1","deprecated":false,"title":"http_host(map)","anchor":"http_host/1"},{"id":"key_id_to_actor_id/1","deprecated":false,"title":"key_id_to_actor_id(key_id)","anchor":"key_id_to_actor_id/1"},{"id":"keypair_from_pem/1","deprecated":false,"title":"keypair_from_pem(pem)","anchor":"keypair_from_pem/1"},{"id":"maybe_add_fetch_signature_headers/3","deprecated":false,"title":"maybe_add_fetch_signature_headers(headers, id, date \\\\ nil)","anchor":"maybe_add_fetch_signature_headers/3"},{"id":"public_key_decode/1","deprecated":false,"title":"public_key_decode(public_key_pem)","anchor":"public_key_decode/1"},{"id":"public_key_from_data/1","deprecated":false,"title":"public_key_from_data(actor)","anchor":"public_key_from_data/1"},{"id":"sign/2","deprecated":false,"title":"sign(actor, headers)","anchor":"sign/2"}],"key":"functions"}],"nested_title":".Safety.Keys","nested_context":"ActivityPub"},{"id":"ActivityPub.Safety.Signatures","deprecated":false,"group":"Federation","title":"ActivityPub.Safety.Signatures","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"fetch_public_key/1","deprecated":false,"title":"fetch_public_key(conn)","anchor":"fetch_public_key/1"},{"id":"refetch_public_key/1","deprecated":false,"title":"refetch_public_key(conn)","anchor":"refetch_public_key/1"}],"key":"functions"}],"nested_title":".Safety.Signatures","nested_context":"ActivityPub"},{"id":"ActivityPub.Utils","deprecated":false,"group":"Federation","title":"ActivityPub.Utils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"activitypub_object_headers/0","deprecated":false,"title":"activitypub_object_headers()","anchor":"activitypub_object_headers/0"},{"id":"adapter_fallback/0","deprecated":false,"title":"adapter_fallback()","anchor":"adapter_fallback/0"},{"id":"ap_base_url/0","deprecated":false,"title":"ap_base_url()","anchor":"ap_base_url/0"},{"id":"ap_id/1","deprecated":false,"title":"ap_id(map)","anchor":"ap_id/1"},{"id":"as_local_public/0","deprecated":false,"title":"as_local_public()","anchor":"as_local_public/0"},{"id":"cache_clear/0","deprecated":false,"title":"cache_clear()","anchor":"cache_clear/0"},{"id":"cachex_fetch/4","deprecated":false,"title":"cachex_fetch(cache, key, fallback, options \\\\ [])","anchor":"cachex_fetch/4"},{"id":"error_json/3","deprecated":false,"title":"error_json(conn, error, status \\\\ 500)","anchor":"error_json/3"},{"id":"format_date/1","deprecated":false,"title":"format_date(date \\\\ NaiveDateTime.utc_now(Calendar.ISO))","anchor":"format_date/1"},{"id":"generate_id/1","deprecated":false,"title":"generate_id(type)","anchor":"generate_id/1"},{"id":"generate_object_id/0","deprecated":false,"title":"generate_object_id()","anchor":"generate_object_id/0"},{"id":"get_with_cache/4","deprecated":false,"title":"get_with_cache(get_fun, cache_bucket, key, identifier)","anchor":"get_with_cache/4"},{"id":"is_ulid?/1","deprecated":false,"title":"is_ulid?(str)","anchor":"is_ulid?/1"},{"id":"is_uuid?/1","deprecated":false,"title":"is_uuid?(str)","anchor":"is_uuid?/1"},{"id":"json_with_cache/6","deprecated":false,"title":"json_with_cache(conn \\\\ nil, get_fun, cache_bucket, id, ret_fn \\\\ &return_json/4, opts \\\\ [])","anchor":"json_with_cache/6"},{"id":"label_in_message?/2","deprecated":false,"title":"label_in_message?(label, params)","anchor":"label_in_message?/2"},{"id":"make_date/0","deprecated":false,"title":"make_date()","anchor":"make_date/0"},{"id":"make_json_ld_header/1","deprecated":false,"title":"make_json_ld_header(type \\\\ :object)","anchor":"make_json_ld_header/1"},{"id":"maybe_put/3","deprecated":false,"title":"maybe_put(map, key, value)","anchor":"maybe_put/3"},{"id":"maybe_to_atom/1","deprecated":false,"title":"maybe_to_atom(str)","anchor":"maybe_to_atom/1"},{"id":"maybe_to_string/1","deprecated":false,"title":"maybe_to_string(atom)","anchor":"maybe_to_string/1"},{"id":"ok_unwrap/2","deprecated":false,"title":"ok_unwrap(val, fallback \\\\ nil)","anchor":"ok_unwrap/2"},{"id":"public?/1","deprecated":false,"title":"public?(data)","anchor":"public?/1"},{"id":"public?/2","deprecated":false,"title":"public?(activity_data, object_data)","anchor":"public?/2"},{"id":"put_if_present/4","deprecated":false,"title":"put_if_present(map, key, value, value_function \\\\ &{:ok, &1})","anchor":"put_if_present/4"},{"id":"repo/0","deprecated":false,"title":"repo()","anchor":"repo/0"},{"id":"request_ip/1","deprecated":false,"title":"request_ip(conn)","anchor":"request_ip/1"},{"id":"return_json/4","deprecated":false,"title":"return_json(conn, meta, json, opts \\\\ [])","anchor":"return_json/4"},{"id":"safe_put_in/3","deprecated":false,"title":"safe_put_in(data, keys, value)","anchor":"safe_put_in/3"},{"id":"service_actor/0","deprecated":false,"title":"service_actor()","anchor":"service_actor/0"},{"id":"set_repo/1","deprecated":false,"title":"set_repo(repo)","anchor":"set_repo/1"},{"id":"single_ap_id/1","deprecated":false,"title":"single_ap_id(ap_id)","anchor":"single_ap_id/1"},{"id":"single_ap_id_or_object/1","deprecated":false,"title":"single_ap_id_or_object(ap_id)","anchor":"single_ap_id_or_object/1"},{"id":"stringify_keys/2","deprecated":false,"title":"stringify_keys(map, recursive \\\\ false)","anchor":"stringify_keys/2"},{"id":"ulid/1","deprecated":false,"title":"ulid(input)","anchor":"ulid/1"}],"key":"functions"}],"nested_title":".Utils","nested_context":"ActivityPub"},{"id":"ActivityPub.Web","deprecated":false,"group":"Federation","title":"ActivityPub.Web","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"__using__/1","deprecated":false,"title":"__using__(which)","anchor":"__using__/1"},{"id":"base_url/0","deprecated":false,"title":"base_url()","anchor":"base_url/0"},{"id":"channel/0","deprecated":false,"title":"channel()","anchor":"channel/0"},{"id":"controller/0","deprecated":false,"title":"controller()","anchor":"controller/0"},{"id":"rate_limit_reached/2","deprecated":false,"title":"rate_limit_reached(conn, opts)","anchor":"rate_limit_reached/2"},{"id":"router/0","deprecated":false,"title":"router()","anchor":"router/0"},{"id":"view/0","deprecated":false,"title":"view()","anchor":"view/0"}],"key":"functions"}],"nested_title":".Web","nested_context":"ActivityPub"},{"id":"ActivityPub.Web.ActivityPubController","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ActivityPubController","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor/2","deprecated":false,"title":"actor(conn, map)","anchor":"actor/2"},{"id":"ap_route_helper/1","deprecated":false,"title":"ap_route_helper(uuid)","anchor":"ap_route_helper/1"},{"id":"followers/2","deprecated":false,"title":"followers(conn, map)","anchor":"followers/2"},{"id":"following/2","deprecated":false,"title":"following(conn, map)","anchor":"following/2"},{"id":"inbox/2","deprecated":false,"title":"inbox(conn, params)","anchor":"inbox/2"},{"id":"inbox_info/2","deprecated":false,"title":"inbox_info(conn, params)","anchor":"inbox_info/2"},{"id":"json_object_with_cache/3","deprecated":false,"title":"json_object_with_cache(conn \\\\ nil, id, opts \\\\ [])","anchor":"json_object_with_cache/3"},{"id":"noop/2","deprecated":false,"title":"noop(conn, params)","anchor":"noop/2"},{"id":"object/2","deprecated":false,"title":"object(conn, map)","anchor":"object/2"},{"id":"outbox/2","deprecated":false,"title":"outbox(conn, map)","anchor":"outbox/2"}],"key":"functions"}],"nested_title":".ActivityPubController","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.ActorView","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ActorView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor_json/1","deprecated":false,"title":"actor_json(username)","anchor":"actor_json/1"},{"id":"collection/4","deprecated":false,"title":"collection(collection, iri, page, total \\\\ nil)","anchor":"collection/4"},{"id":"render/2","deprecated":false,"title":"render(binary, map)","anchor":"render/2"}],"key":"functions"}],"nested_title":".ActorView","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Endpoint","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Endpoint","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"broadcast/3","deprecated":false,"title":"broadcast(topic, event, msg)","anchor":"broadcast/3"},{"id":"broadcast!/3","deprecated":false,"title":"broadcast!(topic, event, msg)","anchor":"broadcast!/3"},{"id":"broadcast_from/4","deprecated":false,"title":"broadcast_from(from, topic, event, msg)","anchor":"broadcast_from/4"},{"id":"broadcast_from!/4","deprecated":false,"title":"broadcast_from!(from, topic, event, msg)","anchor":"broadcast_from!/4"},{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"child_spec/1","deprecated":false,"title":"child_spec(opts)","anchor":"child_spec/1"},{"id":"config/2","deprecated":false,"title":"config(key, default \\\\ nil)","anchor":"config/2"},{"id":"config_change/2","deprecated":false,"title":"config_change(changed, removed)","anchor":"config_change/2"},{"id":"host/0","deprecated":false,"title":"host()","anchor":"host/0"},{"id":"init/1","deprecated":false,"title":"init(opts)","anchor":"init/1"},{"id":"local_broadcast/3","deprecated":false,"title":"local_broadcast(topic, event, msg)","anchor":"local_broadcast/3"},{"id":"local_broadcast_from/4","deprecated":false,"title":"local_broadcast_from(from, topic, event, msg)","anchor":"local_broadcast_from/4"},{"id":"path/1","deprecated":false,"title":"path(path)","anchor":"path/1"},{"id":"script_name/0","deprecated":false,"title":"script_name()","anchor":"script_name/0"},{"id":"server_info/1","deprecated":false,"title":"server_info(scheme)","anchor":"server_info/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(opts \\\\ [])","anchor":"start_link/1"},{"id":"static_integrity/1","deprecated":false,"title":"static_integrity(path)","anchor":"static_integrity/1"},{"id":"static_lookup/1","deprecated":false,"title":"static_lookup(path)","anchor":"static_lookup/1"},{"id":"static_path/1","deprecated":false,"title":"static_path(path)","anchor":"static_path/1"},{"id":"static_url/0","deprecated":false,"title":"static_url()","anchor":"static_url/0"},{"id":"struct_url/0","deprecated":false,"title":"struct_url()","anchor":"struct_url/0"},{"id":"subscribe/2","deprecated":false,"title":"subscribe(topic, opts \\\\ [])","anchor":"subscribe/2"},{"id":"unsubscribe/1","deprecated":false,"title":"unsubscribe(topic)","anchor":"unsubscribe/1"},{"id":"url/0","deprecated":false,"title":"url()","anchor":"url/0"}],"key":"functions"}],"nested_title":".Endpoint","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.ErrorHelpers","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ErrorHelpers","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"error_tag/2","deprecated":false,"title":"error_tag(form, field)","anchor":"error_tag/2"}],"key":"functions"}],"nested_title":".ErrorHelpers","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.ErrorView","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ErrorView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"render/2","deprecated":false,"title":"render(binary, assigns)","anchor":"render/2"},{"id":"template_not_found/2","deprecated":false,"title":"template_not_found(template, assigns)","anchor":"template_not_found/2"}],"key":"functions"}],"nested_title":".ErrorView","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.LayoutView","deprecated":false,"group":"Federation","title":"ActivityPub.Web.LayoutView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"render/2","deprecated":false,"title":"render(binary, assigns)","anchor":"render/2"}],"key":"functions"}],"nested_title":".LayoutView","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.ObjectView","deprecated":false,"group":"Federation","title":"ActivityPub.Web.ObjectView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"collection/4","deprecated":false,"title":"collection(collection, iri, page, total \\\\ nil)","anchor":"collection/4"},{"id":"render/2","deprecated":false,"title":"render(binary, params)","anchor":"render/2"}],"key":"functions"}],"nested_title":".ObjectView","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Plugs.DigestPlug","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Plugs.DigestPlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"read_body/2","deprecated":false,"title":"read_body(conn, opts)","anchor":"read_body/2"}],"key":"functions"}],"nested_title":".Plugs.DigestPlug","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Plugs.EnsureHTTPSignaturePlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, _)","anchor":"call/2"},{"id":"ignore/1","deprecated":false,"title":"ignore(conn)","anchor":"ignore/1"},{"id":"init/1","deprecated":false,"title":"init(options)","anchor":"init/1"},{"id":"maybe_reject!/2","deprecated":false,"title":"maybe_reject!(conn, arg2)","anchor":"maybe_reject!/2"},{"id":"unauthorized/1","deprecated":false,"title":"unauthorized(conn)","anchor":"unauthorized/1"}],"key":"functions"}],"nested_title":".Plugs.EnsureHTTPSignaturePlug","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Plugs.HTTPSignaturePlug","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Plugs.HTTPSignaturePlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(options)","anchor":"init/1"}],"key":"functions"}],"nested_title":".Plugs.HTTPSignaturePlug","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Plugs.MappedSignatureToIdentityPlug","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"call/2","deprecated":false,"title":"call(conn, opts)","anchor":"call/2"},{"id":"init/1","deprecated":false,"title":"init(options)","anchor":"init/1"}],"key":"functions"}],"nested_title":".Plugs.MappedSignatureToIdentityPlug","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.RedirectController","deprecated":false,"group":"Federation","title":"ActivityPub.Web.RedirectController","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"actor/2","deprecated":false,"title":"actor(conn, map)","anchor":"actor/2"},{"id":"object/2","deprecated":false,"title":"object(conn, map)","anchor":"object/2"},{"id":"remote_interaction/2","deprecated":false,"title":"remote_interaction(conn, params)","anchor":"remote_interaction/2"}],"key":"functions"}],"nested_title":".RedirectController","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Router","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Router","sections":[],"nested_title":".Router","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.Telemetry","deprecated":false,"group":"Federation","title":"ActivityPub.Web.Telemetry","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"metrics/0","deprecated":false,"title":"metrics()","anchor":"metrics/0"},{"id":"start_link/1","deprecated":false,"title":"start_link(arg)","anchor":"start_link/1"}],"key":"functions"}],"nested_title":".Telemetry","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.UserSocket","deprecated":false,"group":"Federation","title":"ActivityPub.Web.UserSocket","sections":[],"nested_title":".UserSocket","nested_context":"ActivityPub.Web"},{"id":"ActivityPub.Web.WebFingerController","deprecated":false,"group":"Federation","title":"ActivityPub.Web.WebFingerController","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"webfinger/2","deprecated":false,"title":"webfinger(conn, map)","anchor":"webfinger/2"}],"key":"functions"}],"nested_title":".WebFingerController","nested_context":"ActivityPub.Web"},{"id":"AnimalAvatarGenerator","deprecated":false,"group":"Utilities","title":"AnimalAvatarGenerator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"avatar/2","deprecated":false,"title":"avatar(seed, opts \\\\ [])","anchor":"avatar/2"},{"id":"avatar_face/2","deprecated":false,"title":"avatar_face(seed, opts \\\\ [])","anchor":"avatar_face/2"},{"id":"brows/0","deprecated":false,"title":"brows()","anchor":"brows/0"},{"id":"clamp/3","deprecated":false,"title":"clamp(value, min, max)","anchor":"clamp/3"},{"id":"create_background/3","deprecated":false,"title":"create_background(round, color, class)","anchor":"create_background/3"},{"id":"create_blackout/1","deprecated":false,"title":"create_blackout(round)","anchor":"create_blackout/1"},{"id":"create_svg/2","deprecated":false,"title":"create_svg(size, children)","anchor":"create_svg/2"},{"id":"darken/2","deprecated":false,"title":"darken(hex, amount)","anchor":"darken/2"},{"id":"ears/0","deprecated":false,"title":"ears()","anchor":"ears/0"},{"id":"empty_shape/0","deprecated":false,"title":"empty_shape()","anchor":"empty_shape/0"},{"id":"eyes/0","deprecated":false,"title":"eyes()","anchor":"eyes/0"},{"id":"faces/0","deprecated":false,"title":"faces()","anchor":"faces/0"},{"id":"hairs/0","deprecated":false,"title":"hairs()","anchor":"hairs/0"},{"id":"muzzles/0","deprecated":false,"title":"muzzles()","anchor":"muzzles/0"},{"id":"patterns/0","deprecated":false,"title":"patterns()","anchor":"patterns/0"}],"key":"functions"}]},{"id":"Arrows","deprecated":false,"group":"Utilities","title":"Arrows","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"<|>/2","deprecated":false,"title":"l <|> r","anchor":"%3C%7C%3E/2"},{"id":"<~>/2","deprecated":false,"title":"l <~> r","anchor":"%3C~%3E/2"},{"id":"from_ok/1","deprecated":false,"title":"from_ok(x)","anchor":"from_ok/1"},{"id":"ok/1","deprecated":false,"title":"ok(x)","anchor":"ok/1"},{"id":"ok_or/2","deprecated":false,"title":"ok_or(x, err)","anchor":"ok_or/2"},{"id":"to_ok/1","deprecated":false,"title":"to_ok(x)","anchor":"to_ok/1"},{"id":"|>/2","deprecated":false,"title":"l |> r","anchor":"%7C%3E/2"},{"id":"~>/2","deprecated":false,"title":"l ~> r","anchor":"~%3E/2"}],"key":"functions"}]},{"id":"ConsoleHelpers","deprecated":false,"group":"Utilities","title":"ConsoleHelpers","sections":[]},{"id":"DaisyTheme","deprecated":false,"group":"Utilities","title":"DaisyTheme","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"adjust/5","deprecated":false,"title":"adjust(theme, name, variable, field, percent \\\\ 0.8)","anchor":"adjust/5"},{"id":"clamp/3","deprecated":false,"title":"clamp(value, min, max)","anchor":"clamp/3"},{"id":"darken/2","deprecated":false,"title":"darken(hex, amount)","anchor":"darken/2"},{"id":"darker/5","deprecated":false,"title":"darker(theme, name, variable, field, percent \\\\ 0.2)","anchor":"darker/5"},{"id":"default_theme/0","deprecated":false,"title":"default_theme()","anchor":"default_theme/0"},{"id":"generate/1","deprecated":false,"title":"generate(config \\\\ %{})","anchor":"generate/1"},{"id":"is_dark?/1","deprecated":false,"title":"is_dark?(value)","anchor":"is_dark?/1"},{"id":"keys/0","deprecated":false,"title":"keys()","anchor":"keys/0"},{"id":"lighten/2","deprecated":false,"title":"lighten(hex, amount)","anchor":"lighten/2"},{"id":"style_attr/1","deprecated":false,"title":"style_attr(config \\\\ %{})","anchor":"style_attr/1"},{"id":"theme/1","deprecated":false,"title":"theme(config)","anchor":"theme/1"}],"key":"functions"}]},{"id":"DummyAdapter","deprecated":false,"group":"Utilities","title":"DummyAdapter","sections":[]},{"id":"EctoSparkles","deprecated":false,"group":"Utilities","title":"EctoSparkles","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"join_preload/2","deprecated":false,"title":"join_preload(query, associations)","anchor":"join_preload/2"},{"id":"proload/3","deprecated":false,"title":"proload(query, qual \\\\ :left, associations)","anchor":"proload/3"},{"id":"query_filter/4","deprecated":false,"title":"query_filter(module_or_query, filters, order_by_prop \\\\ :id, order_direction \\\\ :desc)","anchor":"query_filter/4"},{"id":"reusable_join/5","deprecated":false,"title":"reusable_join(query, qual \\\\ :left, bindings, expr, opts)","anchor":"reusable_join/5"}],"key":"functions"}]},{"id":"EctoSparkles.AutoMigrator","deprecated":false,"group":"Utilities","title":"EctoSparkles.AutoMigrator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(init_arg)","anchor":"child_spec/1"},{"id":"init/1","deprecated":false,"title":"init(_)","anchor":"init/1"},{"id":"start_link/1","deprecated":false,"title":"start_link(_)","anchor":"start_link/1"},{"id":"startup_migrations/0","deprecated":false,"title":"startup_migrations()","anchor":"startup_migrations/0"}],"key":"functions"}]},{"id":"EctoSparkles.Changesets","deprecated":false,"group":"Utilities","title":"EctoSparkles.Changesets","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"change_synced_timestamp/3","deprecated":false,"title":"change_synced_timestamp(changeset, bool_field, timestamp_field)","anchor":"change_synced_timestamp/3"},{"id":"change_synced_timestamps/5","deprecated":false,"title":"change_synced_timestamps(changeset, bool_field, on_field, off_field, default \\\\ true)","anchor":"change_synced_timestamps/5"},{"id":"validate_exactly_one/3","deprecated":false,"title":"validate_exactly_one(changeset, columns, message)","anchor":"validate_exactly_one/3"},{"id":"validate_http_url/2","deprecated":false,"title":"validate_http_url(changeset, field)","anchor":"validate_http_url/2"},{"id":"validate_not_expired/4","deprecated":false,"title":"validate_not_expired(cs, now \\\\ DateTime.utc_now(), column \\\\ :expires_at, message \\\\ \"expired\")","anchor":"validate_not_expired/4"}],"key":"functions"}]},{"id":"EctoSparkles.Changesets.Errors","deprecated":false,"group":"Utilities","title":"EctoSparkles.Changesets.Errors","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"changeset_errors_string/2","deprecated":false,"title":"changeset_errors_string(changeset, include_schema_tree \\\\ true)","anchor":"changeset_errors_string/2"},{"id":"error/2","deprecated":false,"title":"error(changeset, list)","anchor":"error/2"}],"key":"functions"}]},{"id":"EctoSparkles.DataMigration","deprecated":false,"group":"Utilities","title":"EctoSparkles.DataMigration","sections":[],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"base_query/0","deprecated":false,"title":"base_query()","anchor":"c:base_query/0"},{"id":"config/0","deprecated":false,"title":"config()","anchor":"c:config/0"},{"id":"migrate/1","deprecated":false,"title":"migrate(list)","anchor":"c:migrate/1"}],"key":"callbacks"}]},{"id":"EctoSparkles.DataMigration.Config","deprecated":false,"group":"Utilities","title":"EctoSparkles.DataMigration.Config","sections":[]},{"id":"EctoSparkles.DataMigration.Runner","deprecated":false,"group":"Utilities","title":"EctoSparkles.DataMigration.Runner","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(migration_module)","anchor":"run/1"}],"key":"functions"}]},{"id":"EctoSparkles.ErlangTermBinary","deprecated":false,"group":"Utilities","title":"EctoSparkles.ErlangTermBinary","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"cast/1","deprecated":false,"title":"cast(term)","anchor":"cast/1"},{"id":"cast/2","deprecated":false,"title":"cast(atom, term)","anchor":"cast/2"},{"id":"dump/1","deprecated":false,"title":"dump(term)","anchor":"dump/1"},{"id":"embed_as/1","deprecated":false,"title":"embed_as(_)","anchor":"embed_as/1"},{"id":"equal?/2","deprecated":false,"title":"equal?(term1, term2)","anchor":"equal?/2"},{"id":"load/1","deprecated":false,"title":"load(raw_binary)","anchor":"load/1"},{"id":"type/0","deprecated":false,"title":"type()","anchor":"type/0"}],"key":"functions"}]},{"id":"EctoSparkles.Log","deprecated":false,"group":"Utilities","title":"EctoSparkles.Log","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check_if_n_plus_1/1","deprecated":false,"title":"check_if_n_plus_1(query)","anchor":"check_if_n_plus_1/1"},{"id":"format_log/4","deprecated":false,"title":"format_log(result_key, duration_in_ms, measurements, metadata)","anchor":"format_log/4"},{"id":"format_stacktrace_sliced/3","deprecated":false,"title":"format_stacktrace_sliced(stacktrace, starts \\\\ 2, ends \\\\ 5)","anchor":"format_stacktrace_sliced/3"},{"id":"handle_event/4","deprecated":false,"title":"handle_event(_, measurements, metadata, config)","anchor":"handle_event/4"},{"id":"inline_params/3","deprecated":false,"title":"inline_params(query, params, repo_adapter \\\\ Ecto.Adapters.SQL)","anchor":"inline_params/3"},{"id":"log_query/4","deprecated":false,"title":"log_query(result_key, duration_in_ms, measurements, metadata)","anchor":"log_query/4"},{"id":"setup/1","deprecated":false,"title":"setup(repo_module)","anchor":"setup/1"}],"key":"functions"}]},{"id":"EctoSparkles.Migrator","deprecated":false,"group":"Utilities","title":"EctoSparkles.Migrator","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"create/0","deprecated":false,"title":"create()","anchor":"create/0"},{"id":"create/2","deprecated":false,"title":"create(repo, attempt \\\\ 0)","anchor":"create/2"},{"id":"migrate/0","deprecated":false,"title":"migrate()","anchor":"migrate/0"},{"id":"migrate/1","deprecated":false,"title":"migrate(repo)","anchor":"migrate/1"},{"id":"rollback/2","deprecated":false,"title":"rollback(repo \\\\ nil, step \\\\ 1)","anchor":"rollback/2"},{"id":"rollback_all/0","deprecated":false,"title":"rollback_all()","anchor":"rollback_all/0"},{"id":"rollback_all/1","deprecated":false,"title":"rollback_all(repo)","anchor":"rollback_all/1"},{"id":"rollback_to/1","deprecated":false,"title":"rollback_to(version)","anchor":"rollback_to/1"},{"id":"rollback_to/2","deprecated":false,"title":"rollback_to(repo, version)","anchor":"rollback_to/2"},{"id":"status/0","deprecated":false,"title":"status()","anchor":"status/0"}],"key":"functions"}]},{"id":"EctoSparkles.NPlus1Detector","deprecated":false,"group":"Utilities","title":"EctoSparkles.NPlus1Detector","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"check/1","deprecated":false,"title":"check(query)","anchor":"check/1"},{"id":"do_check/2","deprecated":false,"title":"do_check(query, counter)","anchor":"do_check/2"}],"key":"functions"}]},{"id":"EctoSparkles.SanitiseStrings","deprecated":false,"group":"Utilities","title":"EctoSparkles.SanitiseStrings","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"clean_html/2","deprecated":false,"title":"clean_html(changeset, opts \\\\ [])","anchor":"clean_html/2"},{"id":"sanitise_strings/2","deprecated":false,"title":"sanitise_strings(changeset, opts \\\\ [])","anchor":"sanitise_strings/2"},{"id":"strip_all_tags/2","deprecated":false,"title":"strip_all_tags(changeset, opts \\\\ [])","anchor":"strip_all_tags/2"}],"key":"functions"}]},{"id":"Exto","deprecated":false,"group":"Utilities","title":"Exto","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"flex_schema/1","deprecated":false,"title":"flex_schema(otp_app)","anchor":"flex_schema/1"}],"key":"functions"}]},{"id":"Import2Alias","deprecated":false,"group":"Utilities","title":"Import2Alias","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"import2alias/2","deprecated":false,"title":"import2alias(alias, entries)","anchor":"import2alias/2"}],"key":"functions"}]},{"id":"Import2Alias.CallerTracer","deprecated":false,"group":"Utilities","title":"Import2Alias.CallerTracer","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"trace/2","deprecated":false,"title":"trace(arg1, env)","anchor":"trace/2"}],"key":"functions"}]},{"id":"Import2Alias.Server","deprecated":false,"group":"Utilities","title":"Import2Alias.Server","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"child_spec/1","deprecated":false,"title":"child_spec(arg)","anchor":"child_spec/1"},{"id":"entries/0","deprecated":false,"title":"entries()","anchor":"entries/0"},{"id":"record/6","deprecated":false,"title":"record(file, line, column, module, name, arity)","anchor":"record/6"},{"id":"start_link/1","deprecated":false,"title":"start_link(module)","anchor":"start_link/1"}],"key":"functions"}]},{"id":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive","deprecated":false,"group":"Utilities","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutLive","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"class_tree/1","deprecated":false,"title":"class_tree(stylesheet_key)","anchor":"class_tree/1"}],"key":"functions"}]},{"id":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView","deprecated":false,"group":"Utilities","title":"LiveViewNative.Internal.ClassTree.Bonfire.UI.Common.LayoutView","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"class_tree/1","deprecated":false,"title":"class_tree(stylesheet_key)","anchor":"class_tree/1"}],"key":"functions"}]},{"id":"Paginator","deprecated":false,"group":"Utilities","title":"Paginator","sections":[{"id":"Usage","anchor":"module-usage"},{"id":"Options","anchor":"module-options"}],"nodeGroups":[{"name":"Callbacks","nodes":[{"id":"paginate/3","deprecated":false,"title":"paginate(queryable, opts, repo_opts)","anchor":"c:paginate/3"}],"key":"callbacks"},{"name":"Functions","nodes":[{"id":"cursor_for_record/3","deprecated":false,"title":"cursor_for_record(record, cursor_fields, fetch_cursor_value_fun \\\\ &Paginator.default_fetch_cursor_value/2)","anchor":"cursor_for_record/3"},{"id":"default_fetch_cursor_value/2","deprecated":false,"title":"default_fetch_cursor_value(schema, field)","anchor":"default_fetch_cursor_value/2"},{"id":"paginated_query/2","deprecated":false,"title":"paginated_query(queryable, opts)","anchor":"paginated_query/2"}],"key":"functions"}]},{"id":"Paginator.Page","deprecated":false,"group":"Utilities","title":"Paginator.Page","sections":[{"id":"Fields","anchor":"module-fields"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}]},{"id":"Paginator.PageInfo","deprecated":false,"group":"Utilities","title":"Paginator.PageInfo","sections":[{"id":"Fields","anchor":"module-fields"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"opaque_cursor/0","deprecated":false,"title":"opaque_cursor()","anchor":"t:opaque_cursor/0"},{"id":"t/0","deprecated":false,"title":"t()","anchor":"t:t/0"}],"key":"types"}]},{"id":"Releaser.Git","deprecated":false,"group":"Utilities","title":"Releaser.Git","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"add_commit_and_tag/1","deprecated":false,"title":"add_commit_and_tag(version)","anchor":"add_commit_and_tag/1"}],"key":"functions"}]},{"id":"Releaser.Publish","deprecated":false,"group":"Utilities","title":"Releaser.Publish","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"publish!/0","deprecated":false,"title":"publish!()","anchor":"publish!/0"}],"key":"functions"}]},{"id":"Releaser.Tests","deprecated":false,"group":"Utilities","title":"Releaser.Tests","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run_tests!/0","deprecated":false,"title":"run_tests!()","anchor":"run_tests!/0"}],"key":"functions"}]},{"id":"Releaser.VersionUtils","deprecated":false,"group":"Utilities","title":"Releaser.VersionUtils","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"bump_major/1","deprecated":false,"title":"bump_major(version)","anchor":"bump_major/1"},{"id":"bump_minor/1","deprecated":false,"title":"bump_minor(version)","anchor":"bump_minor/1"},{"id":"bump_patch/1","deprecated":false,"title":"bump_patch(version)","anchor":"bump_patch/1"},{"id":"bump_pre/2","deprecated":false,"title":"bump_pre(version, pre_label)","anchor":"bump_pre/2"},{"id":"get_version/1","deprecated":false,"title":"get_version(mix_path \\\\ \".\")","anchor":"get_version/1"},{"id":"set_version/2","deprecated":false,"title":"set_version(version, mix_path \\\\ \".\")","anchor":"set_version/2"},{"id":"update_version/2","deprecated":false,"title":"update_version(version, pre_label)","anchor":"update_version/2"},{"id":"version_to_string/1","deprecated":false,"title":"version_to_string(version)","anchor":"version_to_string/1"}],"key":"functions"}]},{"id":"UserAuthLiveMount","deprecated":false,"group":"Utilities","title":"UserAuthLiveMount","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"on_mount/4","deprecated":false,"title":"on_mount(type, params, session, socket)","anchor":"on_mount/4"}],"key":"functions"}]},{"id":"Voodoo","deprecated":false,"group":"Utilities","title":"Voodoo","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"def_reverse_router/2","deprecated":false,"title":"def_reverse_router(name, opts)","anchor":"def_reverse_router/2"},{"id":"router/1","deprecated":false,"title":"router(map)","anchor":"router/1"}],"key":"functions"}]},{"id":"Zest","deprecated":false,"group":"Utilities","title":"Zest","sections":[],"nodeGroups":[{"name":"Types","nodes":[{"id":"intercept_type/0","deprecated":false,"title":"intercept_type()","anchor":"t:intercept_type/0"},{"id":"interceptor/0","deprecated":false,"title":"interceptor()","anchor":"t:interceptor/0"}],"key":"types"},{"name":"Functions","nodes":[{"id":"each/2","deprecated":false,"title":"each(arg1, fun)","anchor":"each/2"},{"id":"each/3","deprecated":false,"title":"each(a, b, fun)","anchor":"each/3"},{"id":"hijack/2","deprecated":false,"title":"hijack(fun, jack)","anchor":"hijack/2"},{"id":"in_scope/2","deprecated":false,"title":"in_scope(scopes, fun)","anchor":"in_scope/2"},{"id":"intercept/2","deprecated":false,"title":"intercept(fun, interceptor)","anchor":"intercept/2"},{"id":"rethrow/3","deprecated":false,"title":"rethrow(atom, e, stacktrace)","anchor":"rethrow/3"},{"id":"rethrowing/1","deprecated":false,"title":"rethrowing(fun)","anchor":"rethrowing/1"},{"id":"scope/2","deprecated":false,"title":"scope(list, expr)","anchor":"scope/2"},{"id":"scoped/2","deprecated":false,"title":"scoped(scopes, fun)","anchor":"scoped/2"}],"key":"functions"}]},{"id":"Zest.Faking","deprecated":false,"group":"Utilities","title":"Zest.Faking","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"forbid/2","deprecated":false,"title":"forbid(name, values)","anchor":"forbid/2"},{"id":"sequential/2","deprecated":false,"title":"sequential(name, start)","anchor":"sequential/2"},{"id":"such_that/4","deprecated":false,"title":"such_that(faker, name, test, limit \\\\ 10)","anchor":"such_that/4"},{"id":"unused/3","deprecated":false,"title":"unused(faker, name, limit \\\\ 10)","anchor":"unused/3"}],"key":"functions"}]}],"extras":[{"id":"api-reference","group":"","title":"API Reference","headers":[{"id":"Modules","anchor":"modules"},{"id":"Mix Tasks","anchor":"mix-tasks"}]},{"id":"readme","group":"","title":"README","headers":[{"id":"📖 Documentation","anchor":"documentation"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire","group":"","title":"Bonfire Spark","headers":[]},{"id":"extension-bonfire_common","group":"","title":"Bonfire.Common","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_mailer","group":"","title":"Bonfire.Mailer","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_epics","group":"","title":"Bonfire.Epics","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ecto","group":"","title":"Bonfire.Ecto","headers":[]},{"id":"extension-bonfire_search","group":"","title":"Bonfire.Search","headers":[{"id":"Development & Deployment Documentation","anchor":"development-deployment-documentation"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_assort","group":"","title":"Bonfire.Data.Assort","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_files","group":"","title":"Bonfire.Files","headers":[{"id":"Configuration","anchor":"configuration"},{"id":"TODO's","anchor":"todo-s"}]},{"id":"extension-bonfire_boundaries","group":"","title":"Bonfire.Boundaries","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_federate_activitypub","group":"","title":"Bonfire.Federate.ActivityPub","headers":[{"id":"Testing","anchor":"testing"},{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_invite_links","group":"","title":"Bonfire.Invite.Links","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_access_control","group":"","title":"Bonfire.Data.AccessControl","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_activity_pub","group":"","title":"Bonfire.Data.ActivityPub","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_identity","group":"","title":"Bonfire.Data.Identity","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_social","group":"","title":"Bonfire.Data.Social","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_me","group":"","title":"Bonfire.Me","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_social","group":"","title":"Bonfire.Social","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_social_graph","group":"","title":"Bonfire.Social.Graph","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_posts","group":"","title":"Bonfire.Posts","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_messages","group":"","title":"Bonfire.Messages","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_common","group":"","title":"Bonfire.UI.Common","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_social","group":"","title":"Bonfire.UI.Social","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_social_graph","group":"","title":"Bonfire.UI.Social.Graph","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_posts","group":"","title":"Bonfire.UI.Posts","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_messages","group":"","title":"Bonfire.UI.Messages","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_reactions","group":"","title":"Bonfire.UI.Reactions","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_moderation","group":"","title":"Bonfire.UI.Moderation","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_ui_me","group":"","title":"Bonfire.UI.Me","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_data_shared_user","group":"","title":"Bonfire.Data.SharedUser","headers":[{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-bonfire_tag","group":"","title":"Bonfire.Tag","headers":[{"id":"Handy commands","anchor":"handy-commands"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-activity_pub","group":"","title":"ActivityPub","headers":[{"id":"Installation","anchor":"installation"}]},{"id":"extension-paginator","group":"","title":"Paginator","headers":[{"id":"Why?","anchor":"why"},{"id":"Getting started","anchor":"getting-started"},{"id":"Install","anchor":"install"},{"id":"Usage","anchor":"usage"},{"id":"Security Considerations","anchor":"security-considerations"},{"id":"Indexes","anchor":"indexes"},{"id":"Caveats","anchor":"caveats"},{"id":"Documentation","anchor":"documentation"},{"id":"Contributing","anchor":"contributing"},{"id":"LICENSE","anchor":"license"}]},{"id":"extension-voodoo","group":"","title":"Voodoo","headers":[]},{"id":"extension-ecto_sparkles","group":"","title":"EctoSparkles","headers":[{"id":"join_preload Documentation","anchor":"join_preload-documentation"},{"id":"Example using join_preload","anchor":"example-using-join_preload"},{"id":"reusable_join Documentation","anchor":"reusable_join-documentation"},{"id":"Copyright","anchor":"copyright"}]},{"id":"extension-bonfire_editor_milkdown","group":"","title":"Bonfire.Editor.Milkdown","headers":[{"id":"ROADMAP","anchor":"roadmap"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-arrows","group":"","title":"Arrows","headers":[{"id":"Installation","anchor":"installation"},{"id":"Documentation","anchor":"documentation"}]},{"id":"extension-needle_ulid","group":"","title":"Needle.ULID","headers":[{"id":"Installation","anchor":"installation"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-needle","group":"","title":"Needle","headers":[{"id":"Background","anchor":"background"},{"id":"Installation","anchor":"installation"},{"id":"Defining a Pointable Type","anchor":"defining-a-pointable-type"},{"id":"Referencing Needle","anchor":"referencing-needle"},{"id":"Dereferencing Needle","anchor":"dereferencing-needle"},{"id":"Querying Needle","anchor":"querying-needle"},{"id":"Virtual pointables ("virtuals")","anchor":"virtual-pointables-virtuals"},{"id":"Elixir-based logic","anchor":"elixir-based-logic"},{"id":"Configuration and overrides","anchor":"configuration-and-overrides"},{"id":"Tradeoffs","anchor":"tradeoffs"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-exto","group":"","title":"Exto","headers":[{"id":"Usage","anchor":"usage"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-zest","group":"","title":"Zest","headers":[{"id":"Usage","anchor":"usage"},{"id":"Contributing","anchor":"contributing"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"extension-grumble","group":"","title":"Grumble","headers":[{"id":"Status: beta","anchor":"status-beta"},{"id":"Usage","anchor":"usage"},{"id":"Guide","anchor":"guide"},{"id":"Contributing","anchor":"contributing"},{"id":"Copyright and License","anchor":"copyright-and-license"}]},{"id":"hacking","group":"Guides","title":"Development guide","headers":[{"id":"Status: beta - have fun and provide feedback 🙏","anchor":"status-beta-have-fun-and-provide-feedback"},{"id":"Download","anchor":"download"},{"id":"Configure","anchor":"configure"},{"id":"Hello world!","anchor":"hello-world"},{"id":"Onboarding","anchor":"onboarding"},{"id":"The Bonfire Environment","anchor":"the-bonfire-environment"},{"id":"Documentation","anchor":"documentation"},{"id":"Additional information","anchor":"additional-information"},{"id":"just commands","anchor":"just-commands"},{"id":"Troubleshooting","anchor":"troubleshooting"}]},{"id":"deploy","group":"Guides","title":"Deployment guide","headers":[{"id":"Security Warning","anchor":"security-warning"},{"id":"Step - 0 - Decide how you want to deploy and manage the app","anchor":"step-0-decide-how-you-want-to-deploy-and-manage-the-app"},{"id":"Step 1 - Download and configure the app","anchor":"step-1-download-and-configure-the-app"},{"id":"Step 2- Prepare the config","anchor":"step-2-prepare-the-config"},{"id":"Step 3 - Install","anchor":"step-3-install"},{"id":"Step 4 - Run","anchor":"step-4-run"},{"id":"Admin tools","anchor":"admin-tools"},{"id":"Troubleshooting","anchor":"troubleshooting"}]},{"id":"architecture","group":"Guides","title":"Bonfire Architecture","headers":[{"id":"Hacking","anchor":"hacking"},{"id":"Design Decisions","anchor":"design-decisions"},{"id":"Stack","anchor":"stack"},{"id":"The Bonfire Environment","anchor":"the-bonfire-environment"},{"id":"Code Structure","anchor":"code-structure"},{"id":"Naming","anchor":"naming"},{"id":"Federation libraries","anchor":"federation-libraries"}]},{"id":"bonfire-flavoured-elixir","group":"Guides","title":"Bonfire-flavoured Elixir","headers":[{"id":"Arrows","anchor":"arrows"},{"id":"Untangle","anchor":"untangle"},{"id":"Error handling","anchor":"error-handling"}]},{"id":"database","group":"Guides","title":"Bonfire's Database - an intro","headers":[{"id":"Identifying objects - the ULID type","anchor":"identifying-objects-the-ulid-type"},{"id":"It's just a table","anchor":"it-s-just-a-table"},{"id":"Mixins - storing data about objects","anchor":"mixins-storing-data-about-objects"},{"id":"Multimixins","anchor":"multimixins"},{"id":"Declaring Object Types","anchor":"declaring-object-types"},{"id":"Writing Migrations","anchor":"writing-migrations"},{"id":"More examples","anchor":"more-examples"}]},{"id":"boundaries","group":"Guides","title":"Boundaries & Access Control","headers":[{"id":"Users and Circles","anchor":"users-and-circles"},{"id":"Verbs","anchor":"verbs"},{"id":"Permissions","anchor":"permissions"},{"id":"ACLs and Grants","anchor":"acls-and-grants"},{"id":"Controlled - Applying boundaries to an object","anchor":"controlled-applying-boundaries-to-an-object"}]},{"id":"graphql","group":"Guides","title":"GraphQL API","headers":[{"id":"GraphQL Introduction","anchor":"graphql-introduction"},{"id":"Absinthe Introduction","anchor":"absinthe-introduction"},{"id":"Patterns","anchor":"patterns"}]},{"id":"mrf","group":"Guides","title":"Message Rewrite Facility","headers":[{"id":"Using SimplePolicy","anchor":"using-simplepolicy"},{"id":"Writing your own MRF Policy","anchor":"writing-your-own-mrf-policy"}]},{"id":"changelog","group":"Guides","title":"Bonfire Changelog","headers":[{"id":"[0.3.5-beta (2022-09-23)]","anchor":"0-3-5-beta-2022-09-23"},{"id":"[0.3.4-beta.8 (2022-08-26)]","anchor":"0-3-4-beta-8-2022-08-26"},{"id":"[0.3.4-beta.6 (2022-08-19)]","anchor":"0-3-4-beta-6-2022-08-19"},{"id":"[0.3.4 (2022-08-09)]","anchor":"0-3-4-2022-08-09"},{"id":"[0.3.3 (2022-08-02)]","anchor":"0-3-3-2022-08-02"},{"id":"[0.3.2 (2022-07-30)]","anchor":"0-3-2-2022-07-30"},{"id":"0.3.1-beta.9 (2022-07-22)","anchor":"0-3-1-beta-9-2022-07-22"},{"id":"0.3.1-beta (2022-07-19)","anchor":"0-3-1-beta-2022-07-19"}]},{"id":"changelog-autogenerated","group":"Guides","title":"Changelog","headers":[{"id":"[Unreleased (2022-11-19)]","anchor":"unreleased-2022-11-19"}]},{"id":"classic","group":"Flavours of Bonfire","title":"Bonfire Classic","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"community","group":"Flavours of Bonfire","title":"Bonfire Community","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"cooperation","group":"Flavours of Bonfire","title":"Bonfire Cooperation","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"haha","group":"Flavours of Bonfire","title":"Haha Academy","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"reflow","group":"Flavours of Bonfire","title":"Reflow","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"upcycle","group":"Flavours of Bonfire","title":"Upcycle","headers":[{"id":"More information","anchor":"more-information"}]},{"id":"deps-classic","group":"Dependencies","title":"Classic","headers":[]},{"id":"deps-cooperation","group":"Dependencies","title":"Cooperation","headers":[]}],"tasks":[{"id":"Mix.Tasks.Bonfire.Account.New","deprecated":false,"group":"Utilities","title":"mix bonfire.account.new","sections":[{"id":"Usage","anchor":"module-usage"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.Deps.Compile","deprecated":false,"group":"Utilities","title":"mix bonfire.deps.compile","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"force_compile/2","deprecated":false,"title":"force_compile(dep_or_deps, compile_args \\\\ [])","anchor":"force_compile/2"},{"id":"loaded_by_name/3","deprecated":false,"title":"loaded_by_name(given, all_deps \\\\ nil, opts)","anchor":"loaded_by_name/3"},{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"},{"id":"touch_manifests/0","deprecated":false,"title":"touch_manifests()","anchor":"touch_manifests/0"},{"id":"try_compile/2","deprecated":false,"title":"try_compile(dep_or_deps, compile_args \\\\ [])","anchor":"try_compile/2"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.Localise.Extract","deprecated":false,"group":"Utilities","title":"mix bonfire.localise.extract","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.Release","deprecated":false,"group":"Utilities","title":"mix bonfire.release","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"main/1","deprecated":false,"title":"main(args)","anchor":"main/1"},{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.Secrets","deprecated":false,"group":"Utilities","title":"mix bonfire.secrets","sections":[],"nodeGroups":[{"name":"Functions","nodes":[{"id":"main/1","deprecated":false,"title":"main(args)","anchor":"main/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Bonfire.User.Admin.Promote","deprecated":false,"group":"Utilities","title":"mix bonfire.user.admin.promote","sections":[{"id":"Usage","anchor":"module-usage"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Docs.Deps","deprecated":false,"group":"Utilities","title":"mix docs.deps","sections":[{"id":"Command line options","anchor":"module-command-line-options"}]},{"id":"Mix.Tasks.Import2alias","deprecated":false,"group":"Utilities","title":"mix import2alias","sections":[]}]} \ No newline at end of file diff --git a/extension-activity_pub.html b/extension-activity_pub.html index 9d63c4c2cac..d2c73186f63 100644 --- a/extension-activity_pub.html +++ b/extension-activity_pub.html @@ -13,7 +13,7 @@ - + @@ -140,49 +140,49 @@

    Installation

    -
    1. Add this library to your dependencies in mix.exs
    defp deps do
    -  [...]
    -  {:activity_pub, git: "https://github.com/bonfire-networks/activity_pub.git", branch: "stable"} # branch can "stable", or "develop" for the bleeding edge
    -end
    1. Create an adapter module. To start, one created at -lib/my_app/adapter.ex might look like
    defmodule MyApp.Adapter do
    +
    1. Add this library to your dependencies in mix.exs
    defp deps do
    +  [...]
    +  {:activity_pub, git: "https://github.com/bonfire-networks/activity_pub.git", branch: "stable"} # branch can "stable", or "develop" for the bleeding edge
    +end
    1. Create an adapter module. To start, one created at +lib/my_app/adapter.ex might look like
    defmodule MyApp.Adapter do
       @moduledoc """
       Adapter functions delegated from the `ActivityPub` Library
       """
     
       @behaviour ActivityPub.Federator.Adapter
    -end

    Note that, due to the defined @behavior, Elixir will warn you that +end

    Note that, due to the defined @behavior, Elixir will warn you that the required functions

    • base_url/0
    • get_actor_by_id/1
    • get_actor_by_username/1
    • get_follower_local_ids/1
    • get_following_local_ids/1
    • get_redirect_url/1
    • handle_activity/1
    • maybe_create_remote_actor/1
    • maybe_publish_object/2
    • update_local_actor/2
    • update_remote_actor/1

    have not yet been implemented though you will be able to start your app. Defining these allows ActivityPub to handle ActivityPub HTTP and database calls and operations. An example of an implemented adaptor can be found here.

    Then set it in config

    config :activity_pub, :adapter, MyApp.Adapter
    1. Set your application repo in config
    config :activity_pub, :repo, MyApp.Repo
    1. Create a new ecto migration and call ActivityPub.Migration.up/0 from it

    2. Inject AP routes to your router by adding use ActivityPub.Web.Router to your app's router module

    3. Copy the default AP config to your app's confix.exs

    config :activity_pub, :mrf_simple,
    -  media_removal: [],
    -  media_nsfw: [],
    -  report_removal: [],
    -  accept: [],
    -  avatar_removal: [],
    -  banner_removal: []
    +  media_removal: [],
    +  media_nsfw: [],
    +  report_removal: [],
    +  accept: [],
    +  avatar_removal: [],
    +  banner_removal: []
     
     config :activity_pub, :instance,
       hostname: "example.com",
    -  federation_publisher_modules: [ActivityPub.Federator.APPublisher],
    +  federation_publisher_modules: [ActivityPub.Federator.APPublisher],
       federation_reachability_timeout_days: 7,
       federating: true,
    -  rewrite_policy: []
    +  rewrite_policy: []
     
     config :activity_pub, :http,
       proxy_url: nil,
       user_agent: "Your app name",
       send_user_agent: true,
    -  adapter: [
    -    ssl_options: [
    +  adapter: [
    +    ssl_options: [
           # Workaround for remote server certificate chain issues
           partial_chain: &:hackney_connect.partial_chain/1,
           # We don't support TLS v1.3 yet
    -      versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"]
    -    ]
    -  ]
    1. Change the hostname value in the instance config block to your instance's hostname

    2. If you don't already have Oban set up, follow the Oban installation intructions and add the AP queues:

    config :my_app, Oban, queues: [federator_incoming: 50, federator_outgoing: 50, remote_fetcher: 20]

    Now you should be able to compile and run your app and move over to integration.

    + versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"] + ] + ]
    1. Change the hostname value in the instance config block to your instance's hostname

    2. If you don't already have Oban set up, follow the Oban installation intructions and add the AP queues:

    config :my_app, Oban, queues: [federator_incoming: 50, federator_outgoing: 50, remote_fetcher: 20]

    Now you should be able to compile and run your app and move over to integration.

    diff --git a/extension-arrows.html b/extension-arrows.html index 6e4d4ab7028..eb8bc445260 100644 --- a/extension-arrows.html +++ b/extension-arrows.html @@ -13,7 +13,7 @@ - + @@ -140,48 +140,48 @@

    Installation

    -

    The package can be installed by adding arrows to your list of dependencies in mix.exs: -->

    def deps do
    -  [
    -    {:arrows, "~> 0.1.0"}
    -  ]
    -end

    Or via git:

    def deps do
    -  [
    -    {:arrows, git: "https://github.com/bonfire-networks/arrows", branch: "main"}
    -  ]
    -end

    +

    The package can be installed by adding arrows to your list of dependencies in mix.exs: -->

    def deps do
    +  [
    +    {:arrows, "~> 0.1.0"}
    +  ]
    +end

    Or via git:

    def deps do
    +  [
    +    {:arrows, git: "https://github.com/bonfire-networks/arrows", branch: "main"}
    +  ]
    +end

    Documentation

    The Elixir |> ("pipe") operator is one of the things that seems to get people excited about elixir. Probably in part because you then don't have to keep coming up with function names. Unfortunately it's kind of limiting. -The moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.

    Not any more! By simply inserting ... where you would like the value to be inserted, Arrows will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. Arrows was inspired by an existing library. Here is part of the test suite in lieu of examples:

    defmodule ArrowsTest do
    +The moment you need to pipe a parameter into a position that isn't the first one, it breaks down and you have to drop out of the pipeline format or write a secondary function to handle it.

    Not any more! By simply inserting ... where you would like the value to be inserted, Arrows will override where it is placed. This allows you to keep on piping while accommodating that function with the annoying argument order. Arrows was inspired by an existing library. Here is part of the test suite in lieu of examples:

    defmodule ArrowsTest do
       use ExUnit.Case
       use Arrows
     
    -  def double(x), do: x * 2
    -  def double_fst(x, _), do: x * 2
    -  def double_snd(_, x), do: x * 2
    -  def add_snd_thd(_, x, y), do: x + y
    -
    -  test "|>" do
    -    assert 4 == (2 |> double)
    -    assert 4 == (2 |> double())
    -    assert 4 == (2 |> double(...))
    -    assert 8 == (2 |> double(double(...)))
    -    assert 4 == (2 |> double_fst(1))
    -    assert 4 == (2 |> double_fst(..., 1))
    -    assert 8 == (2 |> double_fst(double(...), 1))
    -    assert 4 == (2 |> double_snd(1, ...))
    -    assert 8 == (2 |> double_snd(1, double(...)))
    -    assert 3 == (2 |> add_snd_thd(1, ..., 1))
    -    assert 4 == (2 |> add_snd_thd(1, ..., ...))
    -    assert 6 == (2 |> add_snd_thd(1, ..., double(...)))
    -    for x <- [:yes, 2, nil, false] do
    -      assert {:ok, x} == (x |> {:ok, ...})
    -    end
    -  end
    -end

    A few little extra features you might notice here:

    • You can move the parameter into a subexpression, as in 2 |> double_fst(double(...), 1) where + def double(x), do: x * 2 + def double_fst(x, _), do: x * 2 + def double_snd(_, x), do: x * 2 + def add_snd_thd(_, x, y), do: x + y + + test "|>" do + assert 4 == (2 |> double) + assert 4 == (2 |> double()) + assert 4 == (2 |> double(...)) + assert 8 == (2 |> double(double(...))) + assert 4 == (2 |> double_fst(1)) + assert 4 == (2 |> double_fst(..., 1)) + assert 8 == (2 |> double_fst(double(...), 1)) + assert 4 == (2 |> double_snd(1, ...)) + assert 8 == (2 |> double_snd(1, double(...))) + assert 3 == (2 |> add_snd_thd(1, ..., 1)) + assert 4 == (2 |> add_snd_thd(1, ..., ...)) + assert 6 == (2 |> add_snd_thd(1, ..., double(...))) + for x <- [:yes, 2, nil, false] do + assert {:ok, x} == (x |> {:ok, ...}) + end + end +end

    A few little extra features you might notice here:

    • You can move the parameter into a subexpression, as in 2 |> double_fst(double(...), 1) where double will be called before the parameter is passed to double_fst.
    • You can use ... multiple times, substituting it in multiple places.
    • The right hand side need not even be a function call, you can use any expression with ....

    diff --git a/extension-bonfire.html b/extension-bonfire.html index 28276b7950d..2ef3a3488c8 100644 --- a/extension-bonfire.html +++ b/extension-bonfire.html @@ -13,7 +13,7 @@ - + diff --git a/extension-bonfire_boundaries.html b/extension-bonfire_boundaries.html index feedf01b081..e715012910c 100644 --- a/extension-bonfire_boundaries.html +++ b/extension-bonfire_boundaries.html @@ -13,7 +13,7 @@ - + diff --git a/extension-bonfire_common.html b/extension-bonfire_common.html index 5fe6e85d448..b2cb906a77f 100644 --- a/extension-bonfire_common.html +++ b/extension-bonfire_common.html @@ -13,7 +13,7 @@ - + diff --git a/extension-bonfire_data_access_control.html b/extension-bonfire_data_access_control.html index 551e7e7de96..76530ec795e 100644 --- a/extension-bonfire_data_access_control.html +++ b/extension-bonfire_data_access_control.html @@ -13,7 +13,7 @@ - + diff --git a/extension-bonfire_data_activity_pub.html b/extension-bonfire_data_activity_pub.html index e5eeb0bcb1e..132dc88b464 100644 --- a/extension-bonfire_data_activity_pub.html +++ b/extension-bonfire_data_activity_pub.html @@ -13,7 +13,7 @@ - + @@ -140,7 +140,7 @@

    Copyright and License

    -
    Copyright (c) 2020 James Laver, bonfire_data_activity_pub Contributors
    +
    Copyright (c) 2020 James Laver, bonfire_data_activity_pub Contributors
     
     This Source Code Form is subject to the terms of the Mozilla Public
     License, v. 2.0. If a copy of the MPL was not distributed with this
    diff --git a/extension-bonfire_data_assort.html b/extension-bonfire_data_assort.html
    index 7d95ea926d2..4359b659acf 100644
    --- a/extension-bonfire_data_assort.html
    +++ b/extension-bonfire_data_assort.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    @@ -140,7 +140,7 @@ 

    Copyright and License

    -
    Copyright (c) 2020 Bonfire Contributors
    +
    Copyright (c) 2020 Bonfire Contributors
     
     This Source Code Form is subject to the terms of the Mozilla Public
     License, v. 2.0. If a copy of the MPL was not distributed with this
    diff --git a/extension-bonfire_data_identity.html b/extension-bonfire_data_identity.html
    index d57721b1b5d..d6405d06b8e 100644
    --- a/extension-bonfire_data_identity.html
    +++ b/extension-bonfire_data_identity.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    @@ -140,7 +140,7 @@ 

    Copyright and License

    -
    Copyright (c) 2020 James Laver, bonfire_data_identity Contributors
    +
    Copyright (c) 2020 James Laver, bonfire_data_identity Contributors
     
     This Source Code Form is subject to the terms of the Mozilla Public
     License, v. 2.0. If a copy of the MPL was not distributed with this
    diff --git a/extension-bonfire_data_shared_user.html b/extension-bonfire_data_shared_user.html
    index 738db0c591f..916a7740353 100644
    --- a/extension-bonfire_data_shared_user.html
    +++ b/extension-bonfire_data_shared_user.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    @@ -140,7 +140,7 @@ 
    -
    Copyright (c) 2020 Bonfire Contributors
    +
    Copyright (c) 2020 Bonfire Contributors
     
     This Source Code Form is subject to the terms of the Mozilla Public
     License, v. 2.0. If a copy of the MPL was not distributed with this
    diff --git a/extension-bonfire_data_social.html b/extension-bonfire_data_social.html
    index b2718d1f2bb..91916c65588 100644
    --- a/extension-bonfire_data_social.html
    +++ b/extension-bonfire_data_social.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    @@ -140,7 +140,7 @@ 

    Copyright and License

    -
    Copyright (c) 2020 James Laver, bonfire_data_social Contributors
    +
    Copyright (c) 2020 James Laver, bonfire_data_social Contributors
     
     This Source Code Form is subject to the terms of the Mozilla Public
     License, v. 2.0. If a copy of the MPL was not distributed with this
    diff --git a/extension-bonfire_ecto.html b/extension-bonfire_ecto.html
    index 423c2b04d71..613da0c3d93 100644
    --- a/extension-bonfire_ecto.html
    +++ b/extension-bonfire_ecto.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_editor_milkdown.html b/extension-bonfire_editor_milkdown.html
    index 51af5251f2d..34ab72513cd 100644
    --- a/extension-bonfire_editor_milkdown.html
    +++ b/extension-bonfire_editor_milkdown.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_epics.html b/extension-bonfire_epics.html
    index 6f0a1d1b9fc..6aa5fc037a0 100644
    --- a/extension-bonfire_epics.html
    +++ b/extension-bonfire_epics.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_federate_activitypub.html b/extension-bonfire_federate_activitypub.html
    index d08bc5ed7ee..aa1bf73b59a 100644
    --- a/extension-bonfire_federate_activitypub.html
    +++ b/extension-bonfire_federate_activitypub.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_files.html b/extension-bonfire_files.html
    index 37f05c52599..0d0646fa119 100644
    --- a/extension-bonfire_files.html
    +++ b/extension-bonfire_files.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_invite_links.html b/extension-bonfire_invite_links.html
    index 13cbf9d3478..db5acbf8b91 100644
    --- a/extension-bonfire_invite_links.html
    +++ b/extension-bonfire_invite_links.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_mailer.html b/extension-bonfire_mailer.html
    index ecb0eb6fbb0..50b513221aa 100644
    --- a/extension-bonfire_mailer.html
    +++ b/extension-bonfire_mailer.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_me.html b/extension-bonfire_me.html
    index ced400b7092..cc184b62f03 100644
    --- a/extension-bonfire_me.html
    +++ b/extension-bonfire_me.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_messages.html b/extension-bonfire_messages.html
    index 9406eb49b0d..8d66d8954e2 100644
    --- a/extension-bonfire_messages.html
    +++ b/extension-bonfire_messages.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_posts.html b/extension-bonfire_posts.html
    index 5c33ae0eb35..26dedd1f478 100644
    --- a/extension-bonfire_posts.html
    +++ b/extension-bonfire_posts.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_search.html b/extension-bonfire_search.html
    index 8ac420e63c0..11b0d3b5786 100644
    --- a/extension-bonfire_search.html
    +++ b/extension-bonfire_search.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_social.html b/extension-bonfire_social.html
    index 28cbb2bbd99..63143589278 100644
    --- a/extension-bonfire_social.html
    +++ b/extension-bonfire_social.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_social_graph.html b/extension-bonfire_social_graph.html
    index b08dd4ffcdd..a391e705038 100644
    --- a/extension-bonfire_social_graph.html
    +++ b/extension-bonfire_social_graph.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_tag.html b/extension-bonfire_tag.html
    index a76d948b1dc..3c349df0c50 100644
    --- a/extension-bonfire_tag.html
    +++ b/extension-bonfire_tag.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_ui_common.html b/extension-bonfire_ui_common.html
    index 50798f8f0f6..a8d5a4444c8 100644
    --- a/extension-bonfire_ui_common.html
    +++ b/extension-bonfire_ui_common.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    diff --git a/extension-bonfire_ui_me.html b/extension-bonfire_ui_me.html
    index d1f9f099ee0..d32800bf176 100644
    --- a/extension-bonfire_ui_me.html
    +++ b/extension-bonfire_ui_me.html
    @@ -13,7 +13,7 @@
     
         
         
    -    
    +    
     
           
     
    @@ -169,12 +169,12 @@ 

    - diff --git a/extension-bonfire_ui_messages.html b/extension-bonfire_ui_messages.html new file mode 100644 index 00000000000..9611e134fa6 --- /dev/null +++ b/extension-bonfire_ui_messages.html @@ -0,0 +1,225 @@ + + + + + + + + + + Bonfire.UI.Messages — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + + Bonfire.UI.Messages +

    + +

    Bonfire.UI.Messages is an extension that includes some User Interfaces (routes, pages and components) for messaging in Bonfire.

    You can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment Bonfire.UI.Messages.Routes from your top-level Router to use your custom routes and views instead).

    + + + + Stack +

    +

    So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:

    Surface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.

    + + + + Scaffolding +

    +

    The relevant folders are:

    • Components: Surface stateless and stateful components.
    • Views: The main pages that are rendered when navigating to a specific route
    • Test: All the unit tests for the specific module.

    + + + + Other resources +

    + +

    Copyright (c) 2020 Bonfire, and CommonsPub Contributors

    This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public +License along with this program. If not, see https://www.gnu.org/licenses/.

    + + +
    +
    +
    +
    + + + + diff --git a/extension-bonfire_ui_moderation.html b/extension-bonfire_ui_moderation.html new file mode 100644 index 00000000000..022dfe96138 --- /dev/null +++ b/extension-bonfire_ui_moderation.html @@ -0,0 +1,225 @@ + + + + + + + + + + Bonfire.UI.Moderation — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + + Bonfire.UI.Moderation +

    + +

    Bonfire.UI.Moderation is an extension that includes some User Interfaces (routes, pages and components) for flagging content and moderation in Bonfire.

    You can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment Bonfire.UI.Social.Routes from your top-level Router to use your custom routes and views instead).

    + + + + Stack +

    +

    So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:

    Surface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.

    + + + + Scaffolding +

    +

    The relevant folders are:

    • Components: Surface stateless and stateful components.
    • Views: The main pages that are rendered when navigating to a specific route
    • Test: All the unit tests for the specific module.

    + + + + Other resources +

    + +

    Copyright (c) 2020 Bonfire, and CommonsPub Contributors

    This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public +License along with this program. If not, see https://www.gnu.org/licenses/.

    + + +
    +
    +
    +
    + + + + diff --git a/extension-bonfire_ui_posts.html b/extension-bonfire_ui_posts.html new file mode 100644 index 00000000000..8d79658e76c --- /dev/null +++ b/extension-bonfire_ui_posts.html @@ -0,0 +1,225 @@ + + + + + + + + + + Bonfire.UI.Posts — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + + Bonfire.UI.Posts +

    + +

    Bonfire.UI.Posts is an extension that includes some User Interfaces (routes, pages and components) for writing and reading posts in Bonfire.

    You can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment Bonfire.UI.Posts.Routes from your top-level Router to use your custom routes and views instead).

    + + + + Stack +

    +

    So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:

    Surface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.

    + + + + Scaffolding +

    +

    The relevant folders are:

    • Components: Surface stateless and stateful components.
    • Views: The main pages that are rendered when navigating to a specific route
    • Test: All the unit tests for the specific module.

    + + + + Other resources +

    + +

    Copyright (c) 2020 Bonfire, and CommonsPub Contributors

    This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public +License along with this program. If not, see https://www.gnu.org/licenses/.

    + + +
    +
    +
    +
    + + + + diff --git a/extension-bonfire_ui_reactions.html b/extension-bonfire_ui_reactions.html new file mode 100644 index 00000000000..819a66d5419 --- /dev/null +++ b/extension-bonfire_ui_reactions.html @@ -0,0 +1,225 @@ + + + + + + + + + + Bonfire.UI.Reactions — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + + Bonfire.UI.Reactions +

    + +

    Bonfire.UI.Reactions is an extension that includes some User Interfaces (routes, pages and components) for liking, boosting, pinning, bookmarking, etc, in Bonfire.

    You can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment Bonfire.UI.Reactions.Routes from your top-level Router to use your custom routes and views instead).

    + + + + Stack +

    +

    So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:

    Surface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.

    + + + + Scaffolding +

    +

    The relevant folders are:

    • Components: Surface stateless and stateful components.
    • Views: The main pages that are rendered when navigating to a specific route
    • Test: All the unit tests for the specific module.

    + + + + Other resources +

    + +

    Copyright (c) 2020 Bonfire, and CommonsPub Contributors

    This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public +License along with this program. If not, see https://www.gnu.org/licenses/.

    + + +
    +
    +
    +
    + + + + diff --git a/extension-bonfire_ui_social.html b/extension-bonfire_ui_social.html index 0319f61b04b..0e496f8e972 100644 --- a/extension-bonfire_ui_social.html +++ b/extension-bonfire_ui_social.html @@ -13,7 +13,7 @@ - + @@ -181,12 +181,12 @@

    - diff --git a/extension-bonfire_ui_social_graph.html b/extension-bonfire_ui_social_graph.html new file mode 100644 index 00000000000..a36afc7fac6 --- /dev/null +++ b/extension-bonfire_ui_social_graph.html @@ -0,0 +1,225 @@ + + + + + + + + + + Bonfire.UI.Social.Graph — bonfire_umbrella v0.9.8-cooperation-beta.24 + + + + + + + + + + + + + + + + +
    + + + + + +
    + +
    +
    + +

    + + + + + + View Source + + + + Bonfire.UI.Social.Graph +

    + +

    Bonfire.UI.Social.Graph is an extension that includes some User Interfaces (routes, pages and components) for following and otherwise managing one's network in Bonfire.

    You can customise it by forking, but we recommend creating an extension which uses this one as a dependency, and defines your custom components, views, and/or routes (you can then comment Bonfire.UI.Social.Routes from your top-level Router to use your custom routes and views instead).

    + + + + Stack +

    +

    So far, Bonfire UI extensions are built with the PETALS stack (note that is not a requirement), which means:

    Surface is a server-side rendering component library (built on top of Phoenix and LiveView) that inherits a lot of design patterns from popular JS framework like Vue.js and React, while being almost JavaScript-free compared to common SPAs.

    + + + + Scaffolding +

    +

    The relevant folders are:

    • Components: Surface stateless and stateful components.
    • Views: The main pages that are rendered when navigating to a specific route
    • Test: All the unit tests for the specific module.

    + + + + Other resources +

    + +

    Copyright (c) 2020 Bonfire, and CommonsPub Contributors

    This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public +License along with this program. If not, see https://www.gnu.org/licenses/.

    + + +
    +
    +
    +
    + + + + diff --git a/extension-ecto_sparkles.html b/extension-ecto_sparkles.html index 57335c333dd..2fd29c9f27b 100644 --- a/extension-ecto_sparkles.html +++ b/extension-ecto_sparkles.html @@ -13,7 +13,7 @@ - + @@ -147,22 +147,22 @@

    Examples using just Ecto

      query
    -  |> join(:left, [o, activity: activity], assoc(:object), as: :object)
    -  |> preload([l, activity: activity, object: object], activity: {activity, [object: object]})

    Ecto requires calling Query.join/4, Query.assoc/3 and Query.preload/2. Here's another example:

      Invoice
    -  |> join(:left, [i], assoc(i, :customer), as: :customer)
    -  |> join(:left, [i], assoc(i, :lines), as: :lines)
    -  |> preload([lines: v, customers: c], lines: v, customer: c)
    -  |> Repo.all()

    + |> join(:left, [o, activity: activity], assoc(:object), as: :object) + |> preload([l, activity: activity, object: object], activity: {activity, [object: object]})

    Ecto requires calling Query.join/4, Query.assoc/3 and Query.preload/2. Here's another example:

      Invoice
    +  |> join(:left, [i], assoc(i, :customer), as: :customer)
    +  |> join(:left, [i], assoc(i, :lines), as: :lines)
    +  |> preload([lines: v, customers: c], lines: v, customer: c)
    +  |> Repo.all()

    Example using join_preload

    With join_preload, you can accomplish this with just one line of code.

      query
    -  |> join_preload([:activity, :object])
      Invoice
    -  |> join_preload(:customer)
    -  |> join_preload(:lines)
    -  |> Repo.all()

    As a bonus, join_preload automatically makes use of reusable_join + |> join_preload([:activity, :object])

      Invoice
    +  |> join_preload(:customer)
    +  |> join_preload(:lines)
    +  |> Repo.all()

    As a bonus, join_preload automatically makes use of reusable_join so calling it multiple times for the same association has no ill effects.

    @@ -184,8 +184,8 @@

    Creating reusable joins

    query
    -|> reusable_join(:left, [t1], t2 in "other_table", on: t1.id == t2.id, as: :other_a)
    -|> reusable_join(:left, [t1], t2 in "other_table", on: t1.id == t2.id, as: :other_b)

    Usage

    -

    Example Schema:

    defmodule My.Schema do
    +

    Example Schema:

    defmodule My.Schema do
       use Ecto.Schema
    -  import Exto, only: [flex_schema: 1]
    +  import Exto, only: [flex_schema: 1]
     
    -  schema "my_table" do
    +  schema "my_table" do
         field :name, :string # just normal schema things
    -    flex_schema(:my_app) # boom! give me the stuff
    -  end
    -end

    Example configuration

    config :my_app, My.Schema,
    -  belongs_to: [
    +    flex_schema(:my_app) # boom! give me the stuff
    +  end
    +end

    Example configuration

    config :my_app, My.Schema,
    +  belongs_to: [
         foo: Foo,                   # belongs_to :foo, Foo
    -    bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer
    -  ],
    -  field: [
    +    bar: {Bar, type: :integer}, # belongs_to :bar, Bar, type: :integer
    +  ],
    +  field: [
         foo: :string,                # field :foo, :string
    -    bar: {:integer, default: 4}, # field :foo, :integer, default: 4
    -  ],
    -  has_one: [
    +    bar: {:integer, default: 4}, # field :foo, :integer, default: 4
    +  ],
    +  has_one: [
         foo: Foo,                             # has_one :foo, Foo
    -    bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id
    -  ]
    -  has_many: [
    +    bar: {Bar, foreign_key: :the_bar_id}, # has_one :bar, Bar, foreign_key: :the_bar_id
    +  ]
    +  has_many: [
         foo: Foo,                             # has_many :foo, Foo
    -    bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id
    -  ]
    -  many_to_many: [
    +    bar: {Bar, foreign_key: :the_bar_id}, # has_many :bar, Bar, foreign_key: :the_bar_id
    +  ]
    +  many_to_many: [
         foo: Foo,                         # many_to_many :foo, Foo
    -    bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar
    -  ]

    This one won't work very well because we define foo and bar 5 + bar: {Bar, join_through: FooBar}, # many_to_many :bar, Bar, :join_through: FooBar + ]

    This one won't work very well because we define foo and bar 5 times each, but I think you get the point.

    Reading of configuration is done during compile time. The relations will be baked in during compilation, thus:

    • Do not expect this to work in runtime config.
    • You will need to rebuild all dependencies which use this macro when you change their configuration.

    Usage

    -

    Add to your deps:

    {:grumble, "~> 0.1.0"}

    Simple example:

    import Grumble
    +

    Add to your deps:

    {:grumble, "~> 0.1.0"}

    Simple example:

    import Grumble
     alias Grumble.PP
     
    -IO.puts(PP.to_string(
    -  query(
    -    params: [community_id: type!(:string)],
    -    fields: [
    -      field(
    +IO.puts(PP.to_string(
    +  query(
    +    params: [community_id: type!(:string)],
    +    fields: [
    +      field(
             :community,
    -        args: [community_id: var(:community_id)],
    -        fields: [:id, :name]
    -      )
    -    ]
    -  )
    -))

    Output:

    query($communityId: String!) {
    -  community(communityId: $communityId) {
    +        args: [community_id: var(:community_id)],
    +        fields: [:id, :name]
    +      )
    +    ]
    +  )
    +))

    Output:

    query($communityId: String!) {
    +  community(communityId: $communityId) {
         name
         id
    -  }
    -}

    + } +}

    diff --git a/extension-needle.html b/extension-needle.html index d48ecf1e464..628c02b0b24 100644 --- a/extension-needle.html +++ b/extension-needle.html @@ -13,7 +13,7 @@ - + @@ -159,19 +159,19 @@

    Aside from the hex dependency, you will also need to write a simple migration to set up the database before you can start writing your -regular migrations:

    defmodule MyApp.Repo.Migrations.InitPointers  do
    +regular migrations:

    defmodule MyApp.Repo.Migrations.InitPointers  do
       @moduledoc false
       use Ecto.Migration
       import Needle.Migration
     
    -  def up(), do: inits(:up)
    -  def down(), do: inits(:down)
    +  def up(), do: inits(:up)
    +  def down(), do: inits(:down)
     
    -  defp inits(dir) do
    -    init_pointers_ulid_extra(dir) # this one is optional but recommended
    -    init_pointers(dir) # this one is not optional
    -  end
    -end

    + defp inits(dir) do + init_pointers_ulid_extra(dir) # this one is optional but recommended + init_pointers(dir) # this one is not optional + end +end

    @@ -182,37 +182,37 @@

    Crockford's Base32. They should be easy to identify in a printout and might be silly.

    There is a helper function, synthesise!/1 in Needle.ULID to assist with this process - give it a 26-character long binary of ascii -alphanumerics and it will give you the closest ULID that matches back.

    Let's look at a simple schema:

    defmodule MyApp.Greeting do
    +alphanumerics and it will give you the closest ULID that matches back.

    Let's look at a simple schema:

    defmodule MyApp.Greeting do
       use Needle.Pointable,
         otp_app: :my_app,
         source: "myapp_greeting",
         table_id: "GREET1NGSFR0MD0CEXAMP1E000"
     
    -  pointable_schema do
    +  pointable_schema do
         field :greeting, :string
    -  end
    -end

    To declare a pointable schema, we start by using Needle.Pointable, + end +end

    To declare a pointable schema, we start by using Needle.Pointable, providing the name of our otp application, the source table's name in the database and our chosen sentinel ULID.

    We then call pointable_schema and define any fields we wish to put directly in the table. For the most part, pointable_schema is like Ecto's schema macro, except you do not provide the table name and let it handle the primary key.

    If for some reason you wished to turn autogeneration off, you could pass autogenerate: false to the options provided when using -Needle.Pointable.

    Now let's define the migration for our schema:

    defmodule MyApp.Repo.Migrations.Greeting  do
    +Needle.Pointable.

    Now let's define the migration for our schema:

    defmodule MyApp.Repo.Migrations.Greeting  do
       @moduledoc false
       use Ecto.Migration
       import Needle.Migration
     
    -  def up() do
    -    create_pointable_table(:greeting, "GREET1NGSFR0MD0CEXAMP1E000") do
    +  def up() do
    +    create_pointable_table(:greeting, "GREET1NGSFR0MD0CEXAMP1E000") do
           add :greeting, :text, null: false
    -    end
    -  end
    +    end
    +  end
     
    -  def down() do
    -    drop_pointable_table(:greeting, "GREET1NGSFR0MD0CEXAMP1E000")
    -  end
    -end

    As you can see, it's pretty similar to defining a regular migration, + def down() do + drop_pointable_table(:greeting, "GREET1NGSFR0MD0CEXAMP1E000") + end +end

    As you can see, it's pretty similar to defining a regular migration, except you use create_pointable_table and drop_pointable_table. Notice that our sentinel ULID makes an appearance again here. It's very important that these match what we @@ -225,16 +225,16 @@

    Ecto does not know anything about our scheme, so unless we specifically want something to reference one of the pointed tables, we typically belongs_to with Needle.Pointer. The table in which we -do this does not itself need to be pointable.

    defmodule MyApp.Foo do
    +do this does not itself need to be pointable.

    defmodule MyApp.Foo do
     
       use Ecto.Schema
       alias Needle.Pointer
     
       # regular ecto table, not pointable!
    -  schema "hello" do
    +  schema "hello" do
         belongs_to :pointer, Pointer # who knows what it points to?
    -  end
    -end

    You may choose to reference a specific schema rather than Pointer if it + end +end

    You may choose to reference a specific schema rather than Pointer if it will only point to a single table. If you do this, you must ensure that the referenced record exists in that table in the normal way. There may be some performance benefit, we didn't benchmark it.

    The migration is slightly more complex, we have to decide what type of @@ -242,18 +242,18 @@

    points to is deleted.
  • A weak pointer is nullable and is nilified when the object it points to is deleted.
  • An unbreakable pointer will raise when you attempt to delete the object it points to.
  • TypeNullable?On Delete
    StrongNoCascade
    WeakYesSet Null
    UnbreakableNoRaise

    In this case we will use a strong pointer, because we want it to be -deleted if the pointed object is deleted.

    defmodule MyApp.Repo.Migrations.Hello  do
    +deleted if the pointed object is deleted.

    defmodule MyApp.Repo.Migrations.Hello  do
       @moduledoc false
       use Ecto.Migration
       import Needle.Migration
     
    -  def change() do
    -    create_if_not_exists table(:hello) do
    -      add :pointer, strong_pointer(), null: false
    +  def change() do
    +    create_if_not_exists table(:hello) do
    +      add :pointer, strong_pointer(), null: false
           add :greeting, :text, null: false
    -    end
    -  end
    -end

    If you are pointing to a specific table instead of pointer, + end + end +end

    If you are pointing to a specific table instead of pointer, strong_pointer/1 allows you to pass the name of that module (strong_pointer/0 calls this with Needle.Pointer).

    @@ -281,38 +281,38 @@

    know which table they are to work with them! The solution to this is what we are calling 'mixin tables' for convenience.

    A mixin table has a Pointer primary key along with any other fields you wish to store in this mixin. By moving fields out to mixin tables, -you gain knowledge of the table name to which you need to join.

    An example mixin schema:

    defmodule My.Creator  do
    +you gain knowledge of the table name to which you need to join.

    An example mixin schema:

    defmodule My.Creator  do
       use Needle.Mixin,
         otp_app: :my_app,
         source: "creator"
     
    -  mixin_schema do
    +  mixin_schema do
         belongs_to :creator, My.User
    -  end
    -end

    Mixin tables are not themselves pointable, so there is no need to -specify a table id as when defining a pointable schema.

    The migration for this is slightly more complicated:

    defmodule My.Creator.Migration do
    +  end
    +end

    Mixin tables are not themselves pointable, so there is no need to +specify a table id as when defining a pointable schema.

    The migration for this is slightly more complicated:

    defmodule My.Creator.Migration do
     
       import Ecto.Migration
       import Needle.Migration
     
    -  defp creator_table(), do: My.Creator.__schema__(:source)
    -  defp user_table(), do: My.User.__schema__(:source)
    +  defp creator_table(), do: My.Creator.__schema__(:source)
    +  defp user_table(), do: My.User.__schema__(:source)
     
    -  def migrate_creator(index_opts \\ []),
    -    do: migrate_creator(index_opts, direction())
    +  def migrate_creator(index_opts \\ []),
    +    do: migrate_creator(index_opts, direction())
     
    -  defp migrate_creator(index_opts, :up) do
    -    create_mixin_table(creator_table()) do
    -      add :creator_id, strong_pointer(user_table()), null: false 
    -    end
    -    create_if_not_exists(unique_index(creator_table(), [:creator_id], index_opts))
    -  end
    +  defp migrate_creator(index_opts, :up) do
    +    create_mixin_table(creator_table()) do
    +      add :creator_id, strong_pointer(user_table()), null: false 
    +    end
    +    create_if_not_exists(unique_index(creator_table(), [:creator_id], index_opts))
    +  end
     
    -  defp migrate_creator(index_opts, :down) do
    -    drop_if_exists(unique_index(creator_table(), [:creator_id], index_opts))
    -    drop_mixin_table(creator_table())
    -  end
    -end

    + defp migrate_creator(index_opts, :down) do + drop_if_exists(unique_index(creator_table(), [:creator_id], index_opts)) + drop_mixin_table(creator_table()) + end +end

    diff --git a/extension-needle_ulid.html b/extension-needle_ulid.html index 4f64a261ff1..ebcfee657c1 100644 --- a/extension-needle_ulid.html +++ b/extension-needle_ulid.html @@ -13,7 +13,7 @@ - + @@ -143,7 +143,7 @@

    Installation

    -
    {:needle_ulid, git: "https://github.com/bonfire-networks/needle_ulid", branch: "main"}

    Getting started

    -
    defmodule MyApp.Repo do
    +
    defmodule MyApp.Repo do
       use Ecto.Repo,
         otp_app: :my_app,
         adapter: Ecto.Adapters.Postgres
     
       use Paginator
    -end
    +end
     
    -query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id])
    +query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id])
     
    -page = MyApp.Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)
    +page = MyApp.Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)
     
     # `page.edges` contains all the entries for this page.
     # `page.page_info` contains the meta-data associated with this page (cursors, limit, total count)

    @@ -190,42 +190,42 @@

    Install

    -

    Add paginator to your list of dependencies in mix.exs:

    def deps do
    -  [{:paginator, "~> 1.0.4"}]
    -end

    +

    Add paginator to your list of dependencies in mix.exs:

    def deps do
    +  [{:paginator, "~> 1.0.4"}]
    +end

    Usage

    -
    1. Add Paginator to your repo.

       defmodule MyApp.Repo do
      +
      1. Add Paginator to your repo.

         defmodule MyApp.Repo do
            use Ecto.Repo,
              otp_app: :my_app,
              adapter: Ecto.Adapters.Postgres
         
            use Paginator
        - end
      2. Use the paginate function to paginate your queries.

         query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id])
        + end
      3. Use the paginate function to paginate your queries.

         query = from(p in Post, order_by: [asc: p.inserted_at, asc: p.id])
         
          # return the first 50 posts
        - %{edges: edges, page_info: page_info} = Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)
        + %{edges: edges, page_info: page_info} = Repo.paginate(query, cursor_fields: [:inserted_at, :id], limit: 50)
         
          # assign the `after` cursor to a variable
          cursor_after = page_info.end_cursor
         
          # return the next 50 posts
        - %{edges: edges, page_info: page_info} = Repo.paginate(query, after: cursor_after, cursor_fields: [{:inserted_at, :asc}, {:id, :asc}], limit: 50)
        + %{edges: edges, page_info: page_info} = Repo.paginate(query, after: cursor_after, cursor_fields: [{:inserted_at, :asc}, {:id, :asc}], limit: 50)
         
          # assign the `before` cursor to a variable
          cursor_before = page_info.start_cursor
         
          # return the previous 50 posts (if no post was created in between it should be the same list as in our first call to `paginate`)
        - %{edges: edges, page_info: page_info} = Repo.paginate(query, before: cursor_before, cursor_fields: [:inserted_at, :id], limit: 50)
        + %{edges: edges, page_info: page_info} = Repo.paginate(query, before: cursor_before, cursor_fields: [:inserted_at, :id], limit: 50)
         
          # return total count
          # NOTE: this will issue a separate `SELECT COUNT(*) FROM table` query to the database.
        - %{edges: edges, page_info: page_info} = Repo.paginate(query, include_total_count: true, cursor_fields: [:inserted_at, :id], limit: 50)
        + %{edges: edges, page_info: page_info} = Repo.paginate(query, include_total_count: true, cursor_fields: [:inserted_at, :id], limit: 50)
         
        - IO.puts "total count: #{page_info.total_count}"

      + IO.puts "total count: #{page_info.total_count}"

    @@ -248,7 +248,7 @@

    # If your cursor fields are: [:inserted_at, :id]
     # Add the following in a migration
     
    -create index("posts", [:inserted_at, :id])

    +create index("posts", [:inserted_at, :id])

    diff --git a/extension-voodoo.html b/extension-voodoo.html index 983dc218ac4..c45c845f35c 100644 --- a/extension-voodoo.html +++ b/extension-voodoo.html @@ -13,7 +13,7 @@ - + diff --git a/extension-zest.html b/extension-zest.html index 67a9a72db1c..6d92a1068c2 100644 --- a/extension-zest.html +++ b/extension-zest.html @@ -13,7 +13,7 @@ - + @@ -140,39 +140,39 @@

    Usage

    -

    Installation:

    {:zest, "~> 0.1.2"}

    Example (taken from our test suite):

    defmodule MyTest do
    +

    Installation:

    {:zest, "~> 0.1.2"}

    Example (taken from our test suite):

    defmodule MyTest do
       use ExUnit.Case
       import Zest
       
    -  test "scope fails spectacularly" do
    -    scope [this: %{is: :a}, test: :case] do
    -      scope [error: :this_should_not_show] do
    -      end
    -      scope [the: :order, must: :be_correct] do
    -        scope [to: :pass], assert(true == false)
    -      end
    -    end
    -  end
    -
    -end

    Output:

    Zest Context:
    -* this: %{is: :a}
    +  test "scope fails spectacularly" do
    +    scope [this: %{is: :a}, test: :case] do
    +      scope [error: :this_should_not_show] do
    +      end
    +      scope [the: :order, must: :be_correct] do
    +        scope [to: :pass], assert(true == false)
    +      end
    +    end
    +  end
    +
    +end

    Output:

    Zest Context:
    +* this: %{is: :a}
     * test: :case
     * the: :order
     * must: :be_correct
     * to: :pass
     
     
    -  1) test scope fails spectacularly (ZestTest)
    +  1) test scope fails spectacularly (ZestTest)
          test/zest_test.exs:7
          Assertion with == failed
          code:  assert true == false
          left:  true
          right: false
          stacktrace:
    -       (zest 0.1.0) lib/zest.ex:52: Zest.in_scope/2
    -       (zest 0.1.0) lib/zest.ex:47: anonymous fn/1 in Zest.in_scope/2
    -       (zest 0.1.0) lib/zest.ex:113: Zest.intercept/2
    -       test/zest_test.exs:8: (test)

    + (zest 0.1.0) lib/zest.ex:52: Zest.in_scope/2 + (zest 0.1.0) lib/zest.ex:47: anonymous fn/1 in Zest.in_scope/2 + (zest 0.1.0) lib/zest.ex:113: Zest.intercept/2 + test/zest_test.exs:8: (test)

    diff --git a/graphql.html b/graphql.html index adddf8a4334..76e871bff27 100644 --- a/graphql.html +++ b/graphql.html @@ -13,7 +13,7 @@ - + @@ -150,10 +150,10 @@

    }

    Let's break this apart:

    • query {} is how you retrieve information from GraphQL.
    • greetings is a field within the query.
    • greetings takes a limit argument, a positive integer.
    • greetings has two fields, greeting and to.
    • to has one field, name.

    This query is asking for a list of (up to) 10 greetings and the people they are for. Notice that the result of both greetings and to are map/object structures with their own fields and that if the type has -multiple fields, we can select more than one field.

    Here is some possible data we could get returned

    %{greetings: [
    -    %{greeting: "hello", to: %{ name: "dear reader"}}, # english
    -    %{greeting: "hallo", to: %{ name: "beste lezer"}}, # dutch
    -  ]}

    Where is the magic? Typically an object type will reside in its own +multiple fields, we can select more than one field.

    Here is some possible data we could get returned

    %{greetings: [
    +    %{greeting: "hello", to: %{ name: "dear reader"}}, # english
    +    %{greeting: "hallo", to: %{ name: "beste lezer"}}, # dutch
    +  ]}

    Where is the magic? Typically an object type will reside in its own table in the database, so this query is actually querying two tables in one go. In fact, given a supporting schema, you can nest queries arbitrarily and the backend will figure out how to run them.

    The fact that you can represent arbitrarily complex queries puts quite @@ -165,59 +165,59 @@

    Absinthe Introduction

    Every field is filled by a resolver. Let's take our existing query -and define a schema for it in Absinthe's query DSL:

    defmodule MyApp.Schema do
    +and define a schema for it in Absinthe's query DSL:

    defmodule MyApp.Schema do
       # the schema macro language
       use Absinthe.Schema.Notation
       # where we will actually resolve the fields
       alias MyApp.Resolver
     
       # Our user object is pretty simple, just a name
    -  object :user do
    -    field :name, non_null(:string)
    -  end
    +  object :user do
    +    field :name, non_null(:string)
    +  end
     
       # This one is slightly more complicated, we have that nested `to`
    -  object :greeting do
    +  object :greeting do
         # the easy one
    -    field :greeting, non_null(:string)
    +    field :greeting, non_null(:string)
         # the hard one. `edge` is the term for when we cross an object boundary.
    -    field :to, non_null(:user), do: resolve(&Resolver.to_edge/3)
    -  end
    +    field :to, non_null(:user), do: resolve(&Resolver.to_edge/3)
    +  end
     
       # something to put our top level queries in, because they're just fields too!
    -  object :queries do
    -    field :greetings, non_null(list_of(non_null(:string))) do
    +  object :queries do
    +    field :greetings, non_null(list_of(non_null(:string))) do
           arg :limit, :integer # optional
           resolve &Resolver.greetings/2 # we need to manually process this one
    -    end
    -  end
    +    end
    +  end
     
    -end

    There are a couple of interesting things about this:

    • Sprinklings of not_null to require that values be present (if you +end

    There are a couple of interesting things about this:

    • Sprinklings of not_null to require that values be present (if you don't return them, absinthe will get upset).
    • Only two fields have explicit resolvers. Anything else will default to a map key lookup (which is more often than not what you want).
    • greeting.to_edge has a /3 resolver and queries.greetings a /2 resolver.

    To understand the last one (and partially the middle one), we must understand how resolution works and what a parent is. The best way of -doing that is probably to look at the resolver code:

    defmodule MyApp.Resolver do
    +doing that is probably to look at the resolver code:

    defmodule MyApp.Resolver do
     
       # For purposes of this, we will just fake the data out
    -  defp greetings_data() do
    -    [ %{greeting: "hello", to: %{ name: "dear reader"}}, # english
    -      %{greeting: "hallo", to: %{ name: "beste lezer"}}, # dutch
    -    ]
    -  end
    +  defp greetings_data() do
    +    [ %{greeting: "hello", to: %{ name: "dear reader"}}, # english
    +      %{greeting: "hallo", to: %{ name: "beste lezer"}}, # dutch
    +    ]
    +  end
     
       # the /2 resolver takes only arguments (which in this case is just limit)
       # and an info (which we'll explain later)
    -  def greetings(%{limit: limit}, _info) when is_integer(limit) and limit > 0 do
    -    {:ok, Enum.take(greetings_data(), limit)} # absinthe expects an ok/error tuple
    -  end
    -  def greetings(_args, _info), do: {:ok, greetings_data()} # no limit
    +  def greetings(%{limit: limit}, _info) when is_integer(limit) and limit > 0 do
    +    {:ok, Enum.take(greetings_data(), limit)} # absinthe expects an ok/error tuple
    +  end
    +  def greetings(_args, _info), do: {:ok, greetings_data()} # no limit
     
       # the /3 resolver takes an additional parent argument in first position.
       # `parent` here will be the `greeting` we are resolving `to` for.
    -  def to_edge(parent, args, info), do: Map.get(parent, :to)
    +  def to_edge(parent, args, info), do: Map.get(parent, :to)
     
    -end

    The keen-eyed amongst you may have noticed I said the default resolver +end

    The keen-eyed amongst you may have noticed I said the default resolver is a map lookup and our to_edge/3 is a map lookup too, so technically we didn't need to write it. But then you wouldn't have an example of a /3 resolver! In most of the app, these will be querying diff --git a/hacking.html b/hacking.html index d28026580c4..6cae1229fc8 100644 --- a/hacking.html +++ b/hacking.html @@ -13,7 +13,7 @@ - + @@ -284,7 +284,7 @@

    Example:

    ** (DBConnection.ConnectionError) tcp recv: closed (the connection was closed by the pool, possibly due to a timeout or because the pool has been terminated)

    In this case, the seeds were unable to complete because a query took too long to execute on your machine. You can configure the timeout to be larger in the dev environment:

    1. Open config/dev.exs in your editor.
    2. Find the database configuration (search for Bonfire.Common.Repo).
    3. Add timeout: 60_000 to the list of options:
    config :bonfire, Bonfire.Common.Repo,
       timeout: 60_000,
    -  [...]
    +
    [...]
    diff --git a/haha.html b/haha.html index 92bdd3caf37..09b897c76a3 100644 --- a/haha.html +++ b/haha.html @@ -13,7 +13,7 @@ - + diff --git a/mrf.html b/mrf.html index df06e353450..5a52f4a7441 100644 --- a/mrf.html +++ b/mrf.html @@ -13,7 +13,7 @@ - + @@ -142,7 +142,7 @@

    Using SimplePolicy

    SimplePolicy is capable of handling most common admin tasks.

    To use SimplePolicy, you must enable it. Do so by adding the following to your :instance config object, so that it looks like this:

    config :bonfire, :instance,
    -  [...]
    +  [...]
       rewrite_policy: ActivityPub.MRF.SimplePolicy

    Once SimplePolicy is enabled, you can configure various groups in the :mrf_simple config object. These groups are:

    • media_removal: Servers in this group will have media stripped from incoming messages.
    • media_nsfw: Servers in this group will have the #nsfw tag and sensitive setting injected into incoming messages which contain media.
    • reject: Servers in this group will have their messages rejected.
    • report_removal: Servers in this group will have their reports (flags) rejected.

    Servers should be configured as lists.

    @@ -150,13 +150,13 @@

    Example

    This example will enable SimplePolicy, block media from illegalporn.biz, mark media as NSFW from porn.biz and porn.business, reject messages from spam.com and block reports (flags) from troll.mob:

    config :activity_pub, :instance,
    -  rewrite_policy: [ActivityPub.MRF.SimplePolicy]
    +  rewrite_policy: [ActivityPub.MRF.SimplePolicy]
     
     config :activity_pub, :mrf_simple,
    -  media_removal: ["illegalporn.biz"],
    -  media_nsfw: ["porn.biz", "porn.business"],
    -  reject: ["spam.com"],
    -  report_removal: ["troll.mob"]
    +  media_removal: ["illegalporn.biz"],
    +  media_nsfw: ["porn.biz", "porn.business"],
    +  reject: ["spam.com"],
    +  report_removal: ["troll.mob"]
     

    @@ -171,18 +171,18 @@

    As discussed above, the MRF system is a modular system that supports pluggable policies. This means that an admin may write a custom MRF policy in Elixir or any other language that runs on the Erlang VM, by specifying the module name in the rewrite_policy config setting.

    For example, here is a sample policy module which rewrites all messages to "new message content":

    # This is a sample MRF policy which rewrites all Notes to have "new message
     # content."
    -defmodule Site.RewritePolicy do
    +defmodule Site.RewritePolicy do
       @behavior ActivityPub.MRF
     
       # Catch messages which contain Note objects with actual data to filter.
       # Capture the object as `object`, the message content as `content` and the
       # entire activity itself as `activity`.
       @impl true
    -  def filter(%{"type" => "Create", "object" => %{"type" => "Note", "content" => content} = object} = message)
    -      when is_binary(content) do
    +  def filter(%{"type" => "Create", "object" => %{"type" => "Note", "content" => content} = object} = message)
    +      when is_binary(content) do
         # Subject / CW is stored as summary instead of `name` like other AS2 objects
         # because of Mastodon doing it that way.
    -    summary = object["summary"]
    +    summary = object["summary"]
     
         # edits go here.
         content = "new message content"
    @@ -190,21 +190,21 @@ 

    # Assemble the mutated object. object = object - |> Map.put("content", content) - |> Map.put("summary", summary) + |> Map.put("content", content) + |> Map.put("summary", summary) # Assemble the mutated activity. - {:ok, Map.put(activity, "object", object)} - end + {:ok, Map.put(activity, "object", object)} + end # Let all other messages through without modifying them. @impl true - def filter(message), do: {:ok, message} -end

    If you save this file as lib/site/mrf/rewrite_policy.ex, it will be included when you next rebuild Bonfire. You can enable it in the configuration like so:

    config :activity_pub, :instance,
    -  rewrite_policy: [
    +  def filter(message), do: {:ok, message}
    +end

    If you save this file as lib/site/mrf/rewrite_policy.ex, it will be included when you next rebuild Bonfire. You can enable it in the configuration like so:

    config :activity_pub, :instance,
    +  rewrite_policy: [
         ActivityPub.MRF.SimplePolicy,
         Site.RewritePolicy
    -  ]
    + ]

    diff --git a/readme.html b/readme.html index 10f002e3a85..530d9f470aa 100644 --- a/readme.html +++ b/readme.html @@ -13,7 +13,7 @@ - + diff --git a/reflow.html b/reflow.html index 79417e3a65e..a3ac233411a 100644 --- a/reflow.html +++ b/reflow.html @@ -13,7 +13,7 @@ - + diff --git a/search.html b/search.html index 28a832e99bb..ccc207fc269 100644 --- a/search.html +++ b/search.html @@ -13,7 +13,7 @@ - + @@ -130,7 +130,7 @@

    - +